深度学习与强化学习的两大联姻:DQN与DDPG的对比分析

作者:肖申克的舅舅
来源:行者AI(xingzhe_ai)

Q学习(Q-Learning)算法是提出时间很早的一种异策略的时序差分学习方法;DQN 则是利用神经网络对 Q-Learning 中的值函数进行近似,并针对实际问题作出改进的方法;而 DDPG 则可以视为 DQN 对连续型动作预测的一个扩展;本文将从定义对比分析 DQN 和 DDPG ,更好地理解二者的算法区别与联系。

本文首先通过简介 DQN 和 DDPG 涉及的常见概念,接着从 DQN 开始分析理解其算法流程,然后进一步地分析 DDPG ,最后总结二者的区别与联系。本文主要分为以下三个部分:
(1)相关概念简介
(2)DQN 的算法分析
(3)DDPG 的算法分析

1. 相关概念简介

DQN 和 DDPG 处理的问题不同,DQN 用于处理离散动作问题,而 DDPG 则是在其基础上扩展用于处理连续动作问题;所以首先我们需要明白连续型动作和离散型动作的区别,以及二者在工程上是如何实现的。

1.1 离散动作

简单的理解,离散动作是可以被分类的动作,比如向上、向下、开火、停火等动作;在实际工程中,我们使用分类类型的激活函数去表示它们,比如 softmax :


如上图所示,输入 x 经过任意神经网络后,最后一层网络层使用 softmax 激活函数,将网络输出分为 n 个动作类;这样就可以输出离散的动作了。

1.2 连续动作

离散动作是可被分类的动作,那么连续动作就是一个连续的值,比如距离、角度、力度等表示确切的值。连续动作不可分类,因此在实际工程中,我们使用返回值类型的激活函数去表示它们,比如 tanh :


如上图所示,输入 x 经过任意神经网络后,最后一层网络层使用 tanh 激活函数,将网络输出为一个区间化的值 value ;这样就可以输出连续的动作了。

2. DQN

2.1 DQN面临的问题

DQN 是利用神经网络对 Q-Learning 中的值函数进行近似,并针对实际问题作出改进的方法。但是我们并不能进行简单的替代,比如定义一个分类神经网络:


然后在定义一个类似 Q-learning 的 loss 函数,比如:Q(s,a)←Q(s,a)+α(r+γmaxa′ Q(s′ ,a′)−Q(s,a)),然后再直接进行优化。这样的方式是行不通的。

在实际的工程中,DQN 的实现会遇到许多困难,其中最显著的就是:
(1)样本利用率低
(2)训练得到的 value 值不稳定

其中问题(1)是序列决策的通病,由于序列决策具有严密的上下文联系,因此一段很长的样本只能算一个样本,从而导致了样本利用率低。

问题(2)是由于网络输出的 Q 值会参与动作 action 的选择,而选择的动作与环境交互后产生新的状态继续送入 Q 网络训练;这造成了网络参数的输出目标会继续参与网络参数的训练。这导致了 Q 网络输出不稳定。

2.2 解决方式

面对以上两个问题,DQN 分别采用了以下两种方式解决:

(1)经验回放( Experience Replay ),即构建一个经验池( Replay Buffer )来去除数据相关性;经验池是由智能体最近的经历组成的数据集。

(2)目标网络冻结( Freezing Target Networks ),即在一个时间段内(或者说固定步数内)固定目标中的参数,来稳定学习目标。

整个 DQN 的功能结构可以用下图表示:


首先向 Q 网络中输入由动作、状态、奖励和结束标志组成的数据,网络输出一个预测值 Q_predict ,接着根据该值选择动作 action 传入环境中进行交互,然后得到新的状态值 s’ ,继续送入训练。

同时,每次与环境交互的结果也会存入固定长度的经验池中;每隔 C 步再从 Q 网络复制一个结构和参数相同的 Target_Q 网络,用来稳定输出目标,Target_Q网络从经验池中采样数据,输出一个稳定的目标值 Q_target = r+\gamma Q_{target}\left(\boldsymbol{s}, \boldsymbol{s}^{\prime}, \boldsymbol{a}, \boldsymbol{r}\right),其中r为奖励函数值,γ是奖励的折扣率,Q_{target}\left(\boldsymbol{s}, \boldsymbol{s}^{\prime}, \boldsymbol{a}, \boldsymbol{r}\right)是 Target_Q 网络的输出值。

整个 DQN 的 loss 函数直接取两个预测值 Q_predict 和 Q_target 的均方误差。

详细的算法流程如下[1]:


3. DDPG

在已知了 DQN 算法的基础上,再来看 DDPG 就很简单了。本质上 DDPG 思路没变,但是应用变化了;DDPG 相比于 DQN 主要是解决连续型动作的预测问题。通过上面的简介,我们可以知道,动作是连续还是离散,在实现上的区别仅在于最后激活函数的选择上。因此,DDPG 在继承了 DQN 的算法上,作出了一些改进。

直接上算法结构:


对比 DQN 的算法结构图,不难发现:DDPG 在 DQN 的基础上增加了一个 Policy 网络及其 Policy_target 网络,用来输出一个连续值;这个连续值其实就是连续动作 action 。剩下的思路和 DQN 几乎一样。

不同之处在于,最后的 loss 函数虽然仍是求两个预测值 Q_predict 和 Q_target 的均方误差,但是由于 Q_predict 和 Q_target 的值是需要 Policy 网络及其 Policy_target 网络的输出分别求得的。所以需要在 Q_predict 和 Q_target 中内嵌入两个策略网络的 loss 函数,如上图所示。

对比 DQN ,将其算法稍作更改就可以得到一个较为详细的 DDPG 算法流程:


说完了 DDPG 相较于 DQN 的扩展,再说说继承。显然的,DDPG 继承了经验回放( Experience Replay ) 和 目标网络冻结( Freezing Target Networks ) 两种方式用来解决相同的问题。

4. 总结

本文以对比的视角分别分析了 DQN 和 DDPG 两种算法,可以看出:

(1)二者都采用了经验回放( Experience Replay ) 和 目标网络冻结( Freezing Target Networks )两种方式去解决样本、目标值不稳定的问题。

(2)二者的算法结构十分相似,都是相同的流程,只是 DDPG 在 DQN 的基础上多了一些 Policy 系列网络的操作。

(3)二者的 loss 函数本质上是相同的,只是 DDPG 加入了 Policy 网络用来输出连续动作值,因此需要再向原 MSE 中嵌入 Policy 网络的 loss 函数。

综上,本文得出了 DDPG 实质上是 DQN 的一种在连续动作上的扩展算法这一结论。通过对比也可以看出,DDPG 与 DQN 有着极高的算法相似性,并不只如 DDPG 论文中所说的脱胎于 DPG 算法。

本文关于 DQN 和 DDPG 两种算法的对比理解就到这里,下一篇中我们会从代码入手,对着两种算法进行实现,敬请期待!

5. 参考

[1] 邱锡鹏《NNDL》
[2] Continuous control with deep reinforcement learning
[3] Playing Atari with Deep Reinforcement Learning

本文转自:行者AI,转载此文目的在于传递更多信息,版权归原作者所有。

最新文章