提示:阅读本系列文章需要有神经网络基础,了解反向传播和梯度下降原理
发现很多博客文章对DQN的描述不是很好理解。本篇尽量用浅显易懂的描述,解释2013版和2015版DQN的原理,欢迎补充指正。
上一篇我们介绍了Q-learning,但是Q-learning的局限在于,处理不了state很复杂的情况,表格过大也会带来各种储存,查询,等等问题。
于是DeepMind在2013年提出了DQN算法,用神经网络来替代表格,并在2015年提出了优化,使用两个神经网络提高训练速度和收敛性。这是强化学习与深度学习的结合。
DQN2013
上图有一个隐藏的细节:
最后一步:perform a gradient descent step on () according to equation3。翻译过来就是根据方程式3对这个方差进行梯度下降更新。
但问题是在原论文中,这个equation3中的,与上图的是不同的:
差异,为了梯度下降更新参数的时候,这项不参与求导,当做常数计算,据说效果更好。这叫做semi-gradient method
参考链接:强化学习论文复现
上图为Deep Q-learning 2013算法流程,解释如下:
- 首先初始化Memory D,它的容量为N;
- 初始化Q网络,随机生成权重ω;
- 循环遍历episode =1, 2, …, M:
- 初始化initial state S1;
- 循环遍历step =1,2,…, T:
1, 用ϵ−greedy策略生成action
2, 执行action ,接收reward 及新的state ;
3, 将transition样本 存入D中;
4, 从D中随机抽取一个minibatch的transitions ;
5, 令,如果 j+1步是terminal的话,否则,令
6, 对关于ω使用梯度下降法进行更新,根据方程式3;
与Q-learning对比,关键点在于创建了记忆库Memory D。
实际项目中,我们会先让记忆库积累到一定的数量,才会开始抽取样本,训练神经网络,梯度下降去优化。
Replay Buffer使用过程:
- 收集样本:按照时间先后顺序存入结构中,如果Replay Buffer经存满样本,那么新的样本会将时间上最久远的样本覆盖。
- 采样样本:如果每次都取最新的样本,那么算法就和在线习相差不多;一般来说,Replay Buffer会从缓存中均匀地随机采样一批样本进行学习。(下面有针对采样的优化算法DQN with Prioritized Replay的介绍)
DQN2013版流程图也可如下表示:
(样本中只有(),时序差分公式必要的maxQ(s', a')怎么得来??抽取训练样本后,用神经网络处理样本,得到maxQ(s', a'))
DQN2015
上图为Deep Q-learning 2015算法流程,解释如下:
- 首先初始化Memory D,它的容量为N;
- 初始化Q网络,随机生成权重ω;
- 初始化target Q网络,权重为;
- 循环遍历episode =1, 2, …, M:
- 初始化initial state S1;
- 循环遍历step =1,2,…, T:
1, 用ϵ−greedy策略生成action
2, 执行action ,接收reward 及新的state ;
3, 将transition样本 存入D中;
4, 从D中随机抽取一个minibatch的transitions ;
5, 令,如果 j+1步是terminal的话,否则,令
6, 对关于ω使用梯度下降法进行更新;
7, 每隔C steps更新target Q网络,。
它通过使用两个相同的神经网络,以解决数据样本和网络训练之前的相关性。
与DQN2013对比,关键点在于使用两个相同结构的神经网络。其中网络A作为实际Q的计算网络,输出预估的Q值,此为Q估计;使用网络B输出的Q值,以时序差分方程计算Q现实,节课得到loss,然后每一步都对A进行梯度下降更新,每隔C步(一般是几百步),同步A,B网络的权重参数。这就是fix q-target原理。
DQN2015版流程图也可如下表示:
既然有了优化版的DQN(2015),以下我们所说的普通DQN指的都是2015版的
下面介绍一些可以提升DQN学习效率的改进算法。
Double DQN
传统DQN使用target-Q network得到target-Q值(现实值),如下,由于预测具有误差,而且去Qmax值来计算,可能导致误差更大
于是,Double DQN方法将这个公式优化了一下,不再是取target-Q network中的Qmax而是取eval-Q network(Q估计)中max(,a),然后用这个动作a取Q现实中的Q值来替代。
更新后的公式为:
DQN with Prioritized Replay
这一套算法重点就在我们 batch 抽样的时候并不是随机抽样, 而是按照 Memory 中的样本优先级来抽. 所以这能更有效地找到我们需要学习的样本.
优先级定义方式:采用SumTree 有效抽样,本质上是使误差更大的样本有更大的被选中的概率。
原理:
- 我们设定 TD-error = Q现实 - Q估计 来规定优先学习的程度. 如果 TD-error 越大, 就代表我们的预测精度还有很多上升空间, 那么这个样本就越需要被学习, 也就是优先级 p 越高。
- 如果使用排序等方式对样本集进行处理,耗时耗力
- SumTree 是一种树形结构, 每片树叶存储每个样本的优先级
p
, 每个树枝节点只有两个分叉, 节点的值是两个分叉的合, 所以 SumTree 的顶端就是所有p
的合. 正如下面图片, 最下面一层树叶存储样本的p
, 叶子上一层最左边的 13 = 3 + 10, 按这个规律相加, 顶层的 root 就是全部p
的合了
Dueling DQN
用一句话来概括 Dueling DQN 就是. 它将每个动作的 Q 拆分成了 state 的 Value 加上 每个动作的 Advantage.
其他文章推荐:
DQN原理详解l
莫烦大佬的强化学习系列