chapter-14-强化学习

深度Q学习



chapter-14-强化学习_第1张图片
以上是一个强化学习的标准模型,其逻辑为环境(Environment)给出状态(State),智能体(agent)按照状态做出动作(Action),环境根据动作给予反馈(Reward),并更新状态。持续这一流程,直到外界干预或达到目标。

我们可以用马尔可夫决策(Markov property)来描述这个模型:
chapter-14-强化学习_第2张图片
chapter-14-强化学习_第3张图片
在正式开始前,为了能更好地解决问提,我们先定义以下几个函数:
chapter-14-强化学习_第4张图片
chapter-14-强化学习_第5张图片
有了bellman方程后,我们就可以递归地使用Q*函数。

Q学习算法的思路就是,建立一个Q-table,用i行j列的值保存Q*(si,aj)的值。我们用0初始化这张表,然后一次次地执行动作,并用bellman方程更新Q表:
chapter-14-强化学习_第6张图片
chapter-14-强化学习_第7张图片
但这种做法是有问题的:每一步都要计算全局的最优策略,这对算力的要求太大了。

遇到这种问题,就又到了神经网络出场的时候了:我们可以用一个神经网络来近似地估计Q*函数。而如果我们用深度神经网络来近似,那就是深度Q学习。
chapter-14-强化学习_第8张图片
(上图最下面的函数少了一个"(",应该是添加到r的左边)

以下是一个深度Q学习的例子:
chapter-14-强化学习_第9张图片
但这种做法也有一些问题:样本存在相关性(在上图的例子里,由于样本选择的是当前状态的前四帧游戏画面,所以会相关。但为何其它情况也会相关,视频没有说明。);以及当前的参数决定了下一刻的样本,这可能会引起负反馈循环(视频没有解释原因,我的理解是,也许是因为算法可能会误入一种囧境:当算法迭代到某一状态时,后续的行动a序列不再变化,算法只是重复地执行几个步骤,但这些步骤实际上并不是实际的理想值。或许可以称之为局部最优行动序列?或者按照后面的策略概念,称为局部最优策略?)

为了解决这两个问题,我们增加了一个回放记忆表(replay memory table),这个表记录每次的状态、行动、回馈以及行动导致的下一状态,每次训练时则随机从该表中抽取一小部分作为训练数据。
chapter-14-强化学习_第10张图片
下面是深度Q学习的伪代码:
chapter-14-强化学习_第11张图片
在这里插入图片描述
注意这里引入了随机变量ϵ,这是为了增大探索的空间。从人的成长角度上很容易理解这种思路:有时候尝试新鲜事物或以前未曾尝试过的处理方法,可能会打开一片新天地。但ϵ不能太大,否则算法就失去了意义。

视频接下来举了一个谷歌的DeepMind实验室的用于打砖块游戏的一个深度Q学习算法:
chapter-14-强化学习_第12张图片
一开始的算法表现得很差,就像一个新手。但在经过两小时的训练后,它就开始表现得很好了,看上去像个娴熟的玩家。但更神奇的是,在四小时的训练后,算法甚至学会了更高效得分的策略:优先打出一个通道,然后就可以收割分数了(可能是程序员在设计奖励函数时将移动的步数或击打次数作为惩罚,或者将单位时间的得分作为奖励):
chapter-14-强化学习_第13张图片
学习算法不仅做到了我们期望它做到的:成为一名娴熟的玩家,它甚至还学会了一种游戏策略!虽然之前的视频里也介绍了很多神经网络的应用,但在这里我才第一次感受到了智能的存在。或许是因为之前的应用都是静态结果,或许是因为之前的结果都有预期,或许是因为我知道,这个算法所蕴含的思想,在后来导致了阿尔法狗这样能够在代表人类理性智力极限的游戏——围棋上以碾压的姿态击溃人类的算法的出现(不过看到后来阿尔法狗在dota),在看到这个结果的时候,我被深深地震撼到了。

策略梯度


深度Q学习是个很好的算法,但它有个缺陷,那就是它的Q函数太复杂了,这就导致在计算梯度时会花费过多的时间。

为了解决这个问题,我们提出了策略的思想:假设我们现在在设计机器人手臂的运行算法,那么在每一刻我们都要计算Q值,考虑到机器人手臂的动作的多样性,这会要求天文数字的算力。为了简化计算,我们可以给它设计数个动作策略,比如:到达A点,抓住B位置的物体,比出一个ok手势…我们不再计算动作的Q,转而计算这些策略的Q。我们可以把它理解为,将机器人手臂的连续的动作固化为几个可理解的离散的策略(这个离散策略由数个连续的动作组成)。不过在我看来,这样做虽然会大幅节省算力,但也固定了机器人手臂的学习可能性:相当于把它从现实世界带入到了游戏世界。虽然是个不错的思路,但应该是得不偿失的。

其数学表达为:
chapter-14-强化学习_第14张图片
其中J(θ)为策略的期望。接下来就是求它的梯度,这里使用了一个技巧:
chapter-14-强化学习_第15张图片
这里我们最终将期望的梯度转化为梯度的期望,而期望是可以估计的,我们这里使用轨迹作为数据,蒙特卡罗抽样法来估计:
chapter-14-强化学习_第16张图片
蒙特卡罗抽样法简单来说,就是对随机采样进行计算可以得到近似的结果,采样越多,近似结果是正确结果的可能性就越大。这当然比不上全体采样进而估计来得准确,但这种算法可以大大地节省算力,著名的阿尔法狗就是用的这种思想。

所以上图里最后期望没写不是失误,而是因为应用了蒙特卡罗抽样法,采样给定的任意轨迹得到了期望,进而用来估计J(θ)的梯度。注意这里只是单轨迹的估算,若对多策略进行估算时应该要进行比较并取舍(视频没讲,我猜的)。

强化学习思想的另一个应用是循环注意模型(Recurrent Attention Model,RAM)。视频以手写数字识别为例,开始时随机给出一个小区域作为RNN的输入,然后经过学习后计算出下个观察区域,作为输入,就这样一次次地迭代,直到最终得出分类结果(但是原理介绍的很简略,我这里没看懂,后面如果要用的话再看原始文献吧)。

视频最后介绍了阿尔法狗的思路:
chapter-14-强化学习_第17张图片

你可能感兴趣的:(chapter-14-强化学习)