作者:贾恩东本文约3000字,建议阅读8分钟本文介绍了强化学习DQN的算法。
本文是入门强化学习系列的第二篇,上一篇是入门篇《一文读懂强化学习》。
上一篇中讲过强化学习的核心问题是找到最优的策略函数,而评价策略函数好坏的指标之一则是状态价值函数。这里快速回顾一下状态价值函数的定义。
在某时刻,在每种可能发生的状态 s 下,agent 都可以有动作 a (a∈A,A为所有可能动作的集合)可以选择,而每次执行动作,系统就会跳转到下一时刻,而状态就会发生转移,状态的转移不是唯一确定的,其概率分布由系统的状态转移概率矩阵决定;状态价值函数的含义就是从当前状态s 开始到最终状态时agent所能获得的累加回报的期望:
当考虑Reward(回报)具有时间价值的折现率
时,
状态价值函数V 理应只和两个变量有关,一个是当前的状态s,一个是根据状态如何采取动作,即策略
(s)。
进一步可以表示为递归的形式,这里
代表状态 s→s′ 的转移概率。
上式这种基于迭代的方程就是大名鼎鼎的Bellman-Equation(贝尔曼方程)。
我们重新强调一次,状态价值函数就是在给定某一个状态 s的时候,如果接下来agent的行动策略是
,我们将会得到多少累积奖励的期望值。因为就算是同样的状态,接下来的行动策略
不一样,得到的未来累积奖励也是不一样的。所以状态价值函数的值取决于状态和策略,更本质一点来说,状态价值函数是在衡量一个策略的好坏,而不是衡量一个状态的好坏。
如果我们不在拘泥于衡量整个策略,而着眼于衡量策略中针对某状态的某个行动,那我们如何衡量一个动作的好坏呢?这就是评价策略函数好坏的另一个指标动作价值函数。
和状态价值函数有一个约定俗成的记号 V 类似,动作价值函数一般记作 Q 。状态价值函数V的输入是一个状态,在使用策略
进行后续的动作时,当前直到结束时期望的累积奖励是多少。而动作价值函数 Q的输入是一个状态-动作对,其指在某一个状态强制采取某一个动作,在使用策略
进行后续的动作时,当前直到结束时期望的累积奖励是多少。
这里我用了“强制”这个词来强调一件事:策略
在看到状态 s 的时候,它采取的动作不一定是
,而 Q 函数假设在状态 s 强制采取动作 a,而不管我们现在考虑的策略
会不会采取动作 a,这并不重要。在状态 s 强制采取动作 a。接下来都用策略
继续玩下去,就只有在状态 s,我们才强制一定要采取动作 a,接下来就进入自动模式,让策略
继续玩下去,得到的期望奖励才是
(s,a) 。
实践中, Q 函数有两种表示方法:
1.输入是状态与动作,输出是一个标量,即直到结束的累积奖励期望。这种Q函数既适用于连续动作(动作是无法穷举的),又适用于离散动作。
2.输入是一个状态,输出是向量,向量的每个分量对应相应动作下直到结束的累积奖励期望。这种 Q函数的表示方法只适用于离散动作。举个例子,在超级玛丽游戏中,玩家动作空间是离散的,假设动作就只有 3 个可能:上跳、往右或是往左。Q 函数输出的向量就有3个分量, 3个分量就分别代表 a 是往上跳时的 Q 值,a 是往右时的 Q 值,还有 a是往左时的 Q 值。
综合以上,我们知道了状态价值函数和动作价值函数的含义。相信读者已经有所感觉:状态价值函数似乎更适合评价不同策略的好坏,而动作价值函数似乎只能评价某动作的好坏。虽然我们上文中的Q函数只能用来评估在某一个策略
中不同 动作a 的好坏,但只要有了 Q函数,我们就可以进行强化学习,就可以决定要强制采取哪一个动作,就可以进行策略改进。
假设我们有一个初始的策略,也许一开始很差,甚至动作全部是随机决策的也没有关系。初始的策略记作
,agent使用策略
与环境交互,我们会收集数据想方设法获得 Q 函数(至于如何获得,我们一会儿再详细来说)。即最终我们获得了当前策略
的Q值,去衡量一下
在某一个状态 s 强制采取某一个动作,接下来会得到的期望奖励。那我们就可以选择最大 Q 对应的那个动作强制选择,即改进当前策略为新的策略
′ ,策略
′ 会比原来的策略
要好。我们用
′ 取代
,再去学习它的 Q 函数,得到新的 Q 函数以后,再去寻找一个更好的策略。这样一直循环下去,策略就会越来越好。迭代过程可以如下式。
那么我们要如何获得价值函数呢?有两种不同的方法,我们展开来说。
1.基于蒙特卡洛的方法。简单来说,就是让agent与环境交互,我们从上帝视角做好记录与统计工作,从agent看到状态
进行行动开始直到结束,接下来的累积奖励有多大;如果agent看到状态
进行行动开始直到结束,接下来的累积奖励有多大。但是实际上,我们也不可能看到所有的状态,因为agent不可能穷举经历所有环境的可能,不过这并不是很严重的问题,只要agent和环境交互足够多,我们就能看到绝大多数的状态。更进一步的,我们将价值函数当成是一个连续函数,用一个神经网络Deep Network来近似。那么对一个连续函数,或者神经网络来说,就算输入状态是从来都没有看过的,我们也可以想办法估测一个值,这其实就是一个回归问题(regression)。如果在状态s,接下来的累积奖励期望是 G ,也就是这个价值函数的标签真值,那么我们在拟合该模型的时候,就希望在输入
的时候,输出的值与
越接近越好;输入
的时候,输出的值与
越接近越好,可以使用MSE Loss进行梯度下降。
2.基于时序差分的方法。即Temporal Difference,TD算法。在基于蒙特卡洛的方法中,每次我们都要计算累积奖励,也就是从某一个状态
一直到互动结束的时候,得到的所有奖励的总和。如果我们要使用基于蒙特卡洛的方法,我们必须至少玩到流程结束。但有些互动流程时间非常长,我们要记录到流程结束才能够更新网络,这花的时间太多了,因此我们会采用基于时序差分的方法。基于时序差分的方法不需要等到流程结束,只需要在其中的某一个状态
的时候,采取动作
得到奖励
,接下来进入状态
,就可以使用时序差分的方法。具体来说,我们可以通过贝尔曼方程来使用时序差分的方法。假设我们现在用的是某一个策略
,在状态
时,它会采取动作
,得到奖励
,接下来进入
。状态
的 Q 值与状态
的 Q 值,它们的中间差了一项
,这是因为我们把
的 Q 值加上得到的奖励
就可以得到
的 Q 值,如下式表达。在训练的时候,我们把
输入网络会得到
(
),把
输入网络会得到
(
),
(
) 减
(
)的值应该是
。我们希望它们相减的损失与
接近,训练下去,更新
的参数,我们就可以把
函数学习出来,同样的,可以使用MSE Loss进行梯度下降。
到这里我们就把DQN的入门知识讲解完毕了,当然DQN还有一些进阶的技巧,比如延迟更新,经验回放,探索-利用均衡等技巧,留待感兴趣的同学自己查阅学习论文即可。DQN算法从一开始NIPS 2013的版本到在这之后DeepMind不断对其进行改进,在Nature等期刊上的不断发文,留下了很多不错的学习DQN进阶技巧的一手资料,这里我就不再赘述了。
编辑:王菁
校对:林亦霖
数据派研究部介绍
数据派研究部成立于2017年初,以兴趣为核心划分多个组别,各组既遵循研究部整体的知识分享和实践项目规划,又各具特色:
算法模型组:积极组队参加kaggle等比赛,原创手把手教系列文章;
调研分析组:通过专访等方式调研大数据的应用,探索数据产品之美;
系统平台组:追踪大数据&人工智能系统平台技术前沿,对话专家;
自然语言处理组:重于实践,积极参加比赛及策划各类文本分析项目;
制造业大数据组:秉工业强国之梦,产学研政结合,挖掘数据价值;
数据可视化组:将信息与艺术融合,探索数据之美,学用可视化讲故事;
网络爬虫组:爬取网络信息,配合其他各组开发创意项目。
点击文末“阅读原文”,报名数据派研究部志愿者,总有一组适合你~
转载须知
如需转载,请在开篇显著位置注明作者和出处(转自:数据派THUID:DatapiTHU),并在文章结尾放置数据派醒目二维码。有原创标识文章,请发送【文章名称-待授权公众号名称及ID】至联系邮箱,申请白名单授权并按要求编辑。
未经许可的转载以及改编者,我们将依法追究其法律责任。
点击“阅读原文”加入组织~