本文中我们来探讨一下深度强化学习(以DQN为主)的基本原理。这里假设读者对强化学习的基本原理与神经网络的基本知识已经有了一定的了解。
这里介绍的 DQN 就是 DeepMind 发表在 Nature 上的一篇论文:
Mnih V, Kavukuuoglu K, Silver D, et al. Human-level Control through Deep Reinforcement Learning. Nature, 2015, 518(7540):529.
DQN 技术是 Q-Learning 算法的一种变体,具体改变的是以下三个方面:
由于训练神经网络时,存在的假设是训练数据是独立同分布的,而通过强化学习采集的数据之间总是存在着关联性,易造成神经网络不稳定。经验回放技术可以打破数据间的关联。独立的目标网络使用 θ¯ θ ¯ 而不是 θ θ 来计算 TD T D 偏差,这样做也为了打破关联性。DQN的算法伪代码如下:
其中第5行通过预处理得到状态对应的特征输入。DQN 已经实现了很大的飞跃,但是还不够,下面的内容将陆续介绍 DQN 的各种改进方法。
DQN无法克服 Q-Learning 本身固有的过估计问题,原因是其中的最大化操作。Double Q-Learning 将动作的选择和动作的评估分别用不同的值函数来实现,可以缓解此问题。
这里介绍的Double DQN 方法来自论文:
Van Hasselt H, Guez A, Silver D. Deep Reinforcement Learning with Double Q-Learning. Computer Science,2015.
DQN 中采用两个结构相同的网络:Behavior Network 和 Target Network。虽然这个方法提升了模型的稳定性,但是 Q-Learning 对价值的过高估计的问题未能解决。Q-Learning 在计算时利用下一个时刻的最优价值,所以它通常会给出一个状态行动的估计上限。由于训练过程中模型并不够稳定,因此对上限的估计也会存在偏差。如果偏差不一致,那么这个偏差会造成模型对行动优劣的判断偏差,这样会影响模型效果。
在 Q-Learning 中,我们已经知道 Target Network 求解价值目标值得公式:
这里仅讨论优先回放思想,不给出具体算法。这里介绍的PRB来自论文:
Schaul T, Quan J, Antonoglou I, et al. Prioritized Experience Replay. Computer Science, 2015.
在DQN中,选取训练集合的方法是均匀采样,然而并非所有数据集的效率一致。某些状态的学习效率远比其他状态高。如果平等地看待每一个样本,就会在那些简单的样本上话费比较多的时间,而学习潜力没有被重复挖掘出来。优先回放的接班思想就是赋予学习效率高的状态以更大的采样权重。交互时表现越差,对应的权重就越高,这样可以更高效地利用样本。
那么如何选择采样权重呢?一个选择是 TD T D 偏差 δ δ 。例如:我们设样本 i i 处的 TD T D 偏差为 δ δ , 则该处的采样概率为
采用优先回放的概率分布采样时,动作值的估计是一个有偏估计。因为采样分布于动作值函数分布完全不同,为了矫正这个偏差,我们需要乘以一个重要性采样系数 ωi=(1N⋅1Pi)β ω i = ( 1 N ⋅ 1 P i ) β 。这里当 β=1 β = 1 时,更新效果实际上等同于 Replay Buffer,当 β<1 β < 1 时,Priority Replay Buffer 就能够发挥作用了。我们使用 RRB 的目的正式让更新变得有偏,加入这个纠正是为了说明我们可以通过一些设定让它变回RB那样的更新方式。这样虽无好处,但也没有坏处。我们可以根据实际问题调整权重,即调整 β β ,让它在两种更新效果之间做一个权衡。
从另一个角度讲,我们使用PRB的收敛性并不确定,所以我们还是希望PRB最终变回RB,所以可以让 β β 在训练开始时复制为一个小于1的数,然后随着训练迭代数的增加,让 β β 不断变大,并最终达到 1。
总结一下PRB的原理:
Dueling DQN 从网络结构上改进了 DQN。它利用模型结构将值函数表示成更细致的形式,这使得模型能够拥有更高的表现。这里的Dueling DQN来自论文:
Wang Z, Schaul T, Hessel M, et al. Dueling Network Architectures for Deep Reinforcement Learning. 2015.
值函数 Q Q 被分解为状态值函数和优势函数(Advantage Function),即:
这样做到底有什么好处呢?首先,如果在某些场景下序号使用 V 的值,我们不用再训练一个网络。同时,通过显式地给出 V函数的输出值,每一次更新时,我们都会显式地更新 V函数。这样V函数的更新频率会得到确定性的增加,对于单一输出的Q网络来说,它的更新就显得有些晦涩。从网络训练角度看,这样做使得网络训练更友好且容易。
对于以值函数为核心的Q-Learning算法来说,前期的算法迭代很难让模型快速进入一个相对理想的环境。更何况前期的值函数估计存在较大偏差,与环境交互得到的采样与最优策略存在一定的差别,这更增加了学习的难度。论文:
Hester T, Vecerik M, Pietquin O, et al. Deep Q-Learning from Demonstration. 2018.
给出了一种强化学习和监督学习结合的方案。作者的主要思路是利用预先准备好的优质采样轨迹加快模型前期的训练速度。模型的目标函数变成多个学习目标结合的形式:
一般来说,事先准备好的数据比较有限,很难支撑一个完整的模型训练,因此它必然只能影响很小一部分的状态行动值。如果它不能尽可能地覆盖更多的状态,那么这些数据反而有可能对模型造成不好的影响。同时,准备好的数据也可能存在噪声,其中的行动并不是真正的行动。因此监督学习的目标函数被定义为如下形式:
Distributional DQN 以类似直方图的形式表示了价值的分布。这个算法同Dueling DQN类似,都是要对价值模型的结构进行改进。它来自论文:
Bellemare M G, Dabney W, Munos R. A Distributional Perspective on Reinforcement Learning. 2017.
Distributional DQN 模型希望通过建立更复杂细致的值函数,让估计结果更细致可信。此处对其具体原理暂不做细致讨论。
探索问题是强化学习中经常遇到的问题,常见的 ϵ−greedy ϵ − g r e e d y 方法相当于在执行策略环节增加了一定的噪声,使得模型具有一定的探索能力。Noisy DQN 通过增加参数的随机性增强模型的探索性能,相比较 ϵ−greedy ϵ − g r e e d y 方法,它使用了一种更平滑的手段增加探索能力。本方法来自论文:
Fortunato M, Azar M G, Piot B, et al. Noisy Networks for Exploration. 2017.
此处对其具体原理暂不做细致讨论。
Rainbow 模型将前面的改进融合在了一起。它来自论文:
Hessel M, Modayil J, Van Hasselt H, et al. Rainbow: Combining Improvements in Deep Reinforcement Learning. 2017.
在Baselines中关于DQN的实现,对应的代码在Baselines/deepq文件夹中。这个子项目实现了一个类似于Rainbow的算法。此处暂不做详细讨论。
感谢冯超——《强化学习精要:核心算法与Tensorflow实现》电子工业出版社
感谢郭宪 等——《深入浅出强化学习:原理入门》电子工业出版社