(由于最近研究方向从CV转到了RL,得从头学RL的知识。所以这段时间我会整理一些RL中非常经典的论文,在给我自己整理思路的同时,也分享给大家。)

写在前面

今天主要介绍三篇RL中非常重要的论文:DPG (Deterministic Policy Gradient)

为什么要将这三篇放在一起介绍呢?因为DDPG其实是在DPG之上,加入了DQN的idea,而形成的文章(从名字也能看出来,在DPG前面加上DQN的Deep就得到了DDPG)。若要解释清楚DDPG的原理,则必须得介绍DPG和DQN。

1. General Idea

在介绍DPG, DQN和DDPG的具体细节之前,先简单介绍一下它们的演化关系。

DPG是最早的一篇文章,主要从理论的角度提出了一种deterministic、off-policy的policy gradient算法,并给出了policy gradient的计算公式和参数更新方法。

DQN在DPG后一年发表,主要是解决了用神经网络拟合Q函数(也就是action-value函数)导致的训练不稳定的问题。导致训练不稳定的具体原因会在下文中介绍。在DQN出现之前,神经网络被认为是不适合做Q函数的近似的,而DQN则使得这个“不可能”成为了现实。

在这两个work的基础上,DDPG结合了DPG和DQN,也就是将DQN中用来拟合Q函数的神经网络用在了DPG的框架中,并加入了batch normalization的trick,形成了一套真正可用的、基于深度神经网络的(这也是DDPG名字中Deep的来源)的DPG算法。

理解了这个关系,接下来看三个work的具体细节就会轻松很多。

2. DPG (Deterministic Policy Gradient)

2.1 Story

顾名思义,DPG是一种deterministic的policy gradient算法。policy gradient算法的基本思想是,用一个参数化的概率分布

来表示policy,并且由于policy是一个概率分布,那么action

就是随机选取的,也就是所谓的Stochastic Policy Gradient。

DPG做的事情,就是摒弃了用概率分布表示policy的方法,转而用一个确定性的函数

表示policy。也就是说,给定当前的state

,选取的action

就是确定的。

相对于stochastic function,用deterministic function表示policy有其优点和缺点。优点就是,从理论上可以证明,deterministic policy的梯度就是Q函数梯度的期望,这使得deterministic方法在计算上比stochastic方法更高效;

但缺点也很明显,对于每个state,下一步的action是确定的。这就导致只能做exploitation而不能做exploration。这可能也是为什么policy gradient一开始就采用stochastic算法的原因。

为了解决不能做exploration的问题,DPG采用了off-policy的方法。也就是说,采样的policy和待优化的policy是不同的:其中采样的policy是stochastic的,而待优化的policy是deterministic的。采样policy的随机性保证了充分的exploration。

值得一提的是,由于这篇文章是比较偏理论的,作者(至少在method部分)并没有提到怎么去构造这个采样的policy。DDPG将给出一个可以实用的构造方式。

2.2 关键结论

由于这篇paper理论证明部分比较长,我当时跟着他推导也推了挺长时间的,所以这里就不赘述了,大家如果对证明感兴趣可以看原文。这里大家记住最重要的结论就可以了:

看着似乎挺吓人的,其实认真理解起来也不难。先解释一下各个符号的含义:

分别是state和action,常识,不多说;

为Q函数,即action value函数,

为其参数,也是常识,不多说;

表示的是初始状态分布下的期望回报,也就是给定初始状态的概率分布,期望能够获得的总reward(可能要考虑折扣因子

),我们的目标就是使得

越大越好;

表示在

时刻的状态,而

则表示在随机采样policy

之下,每个state被访问的概率分布;

表示待优化的deterministic policy,

是它的参数。

上述公式中第一行用人话来说,可以理解为:

期望回报对待优化的policy

的梯度(

),可以近似为在随机采样policy

的状态访问的概率分布下(

),Q函数对

的梯度(

)的期望(

)。

然后对

使用链式法则,即Q函数对

的梯度,等于Q函数对action

的梯度乘以action

的梯度,就得到了上述公式的第二行。

就是DPG的policy gradient,用这个policy gradient做梯度上升算法,即可优化policy

,使得期望回报最大化。

3. DQN (Deep Q-Network)

3.1 story

如前所述,在DQN之前,用神经网络去拟合Q函数(也就是action-value函数)是不被看好的,因为在训练的时候会非常不稳定。DQN解决了这个问题。

在了解DQN的方法之前,我们先分析一下导致训练不稳定的原因是什么。主要有以下几个方面:在observation sequence里的元素存在相关性,这会违背机器学习训练样本的iid假设。例如,某次observation sequence为

,后面的state, action和reward都会强烈依赖于前面的state, action和reward;

Q函数的一点小改动可能会显著地改变policy,从而改变observation sequence中的数据分布,这也会违背机器学习训练样本的iid假设;

在Q函数(待优化的对象)和

(优化的target)之间也存在强相关,因为都是来自于同一个Q函数。很难想象如果在一般机器学习任务中,data和label都是从一个模型中生成的,模型到底会学到什么。

基于上面的分析,DQN提出了几点改进。我们先来看改进点是什么,再来分析为什么解决了上面的问题:采用了一个名为experience replay的操作,即把observation sequence的序列关系打乱,只储存agent的experiences

将待优化的Q函数与作为target的Q函数分开,待优化的Q函数持续更新参数,每隔一段时间才将前者的参数赋值给后者。

为什么这两个改进能够解决上面的问题呢?experience replay操作只存储四元组

,而四元组与四元组之间是没有相关性的,从而成功地将训练样本(

)之间的相关性转化为训练样本(四元组)之内的相关性;

将待优化的Q函数和作为target的Q函数分离,前者更新快而后者更新慢。这首先解决了第二个问题,虽然policy仍对前者的参数敏感,但是由于训练数据的target是由后者生成的,前者参数的变化不会对训练的target造成非常大的改变;

此外,上述操作还解决了第三个问题。由于两个Q函数分离了,所以data(由待优化的Q函数生成)和target(由作为target的Q函数生成)之间的相关性就消失了。

这样,DQN非常漂亮地解决了神经网络用于Q函数近似时的不稳定问题。但是这个解决方案也不是没有缺陷的,由于作为target的Q函数更新缓慢,所以训练的速度相应地也会减缓。但是作者表示训练的稳定性增益是远远超过训练速度的损失的。

此外说一句题外话,DQN的操作和Kaiming He今年提出的MoCo有非常相似的trick,不知道Kaiming是不是受到了DQN的启发。

3.2 关键结论

这篇paper的理论性不强,大家只需记住上面说的几个问题和解决方案,理解这个思路就好了。

此外训练Q网络的Loss Function表达式如下:

其中

表示四元组的分布,

为第

个iteration时作为target的Q函数的参数,

则是待优化的Q函数在第

个iteration时的参数。

4. DDPG (Deep Deterministic Policy Gradient)

4.1 Story

最后就来到了集DPG和DQN之大成者——DDPG。

首先我们先来分析一下DQN的问题。在DQN的loss function中:

有一个求最大value的action的操作。如果action space非常大,甚至是连续的action space(例如实数空间),那么这个求最大的操作是不可能完成的。即使是将连续的space离散化,也会导致非常低的算法效率。

而DPG的policy gradient则没有上述的寻找最大化的操作,这里搬运一下:

我个人觉得这个问题的根源是,DQN中采用的是随机的policy,导致下一步采取的action是呈概率分布的,所以在更新Q函数的时候就得找到价值最大的action;而DPG中采用的是确定的policy,所以也没啥选择,也就不用寻找最大化的操作了。

于是DDPG干的事情,就是将DQN中将神经网络用于拟合Q函数的两个trick用到了DPG中,也就是将DPG中的Q函数也变成了一个神经网络。弄懂了DPG和DQN后,这个idea就非常容易理解了,这里也不再赘述。

此外,DDPG还有一个另外的优点,就是可以直接从raw data(例如Atari游戏的图片中)学习,也就是所谓的end-to-end。

4.2 一些其他的trick

除了上述将DPG和DQN结合的idea之外,DDPG还用了三个其他的trick。

第一个trick是,不同于DQN,DDPG采用了另一种更新作为target的Q函数参数的方法:

。其中

分别为作为target的Q函数和待优化的Q函数的参数,

为一个常数且

。也就是

均在每一个iteration更新,但是由于

的存在,

更新缓慢得多。事实上,这种方法和DQN中周期性更新

的方法,为常用的两种更新target Q网络的方法。

第二个trick是,由于observation中很多部分的物理单位是不同的,这可能会使得神经网络难以学习,并且使得寻找合适的超参数变得困难。DDPG的解决方法就是采用batch normalization。在现在虽然已经是一个非常常见的trick了,但是在当时batch normalization才刚刚提出来,也算是站在了前沿。

最后一个trick是,DDPG具体化了DPG中用于采样的随机化policy。具体方法如下:

其中

为用于采样的随机化policy,

为待优化的确定性policy,

为随机噪声。这样在优化

的同时,也间接地优化了

最后附上DDPG的伪代码,个人觉得这个伪代码对我们理解DDPG非常有帮助:DDPG伪代码

参考^Silver D, Lever G, Heess N, et al. Deterministic policy gradient algorithms[C]. 2014.

^Mnih V, Kavukcuoglu K, Silver D, et al. Human-level control through deep reinforcement learning[J]. nature, 2015, 518(7540): 529-533.

^Lillicrap T P, Hunt J J, Pritzel A, et al. Continuous control with deep reinforcement learning[J]. arXiv preprint arXiv:1509.02971, 2015.

dpg learning 和q_【强化学习】DPG, DQN与DDPG相关推荐

  1. dpg learning 和q_深度学习和强化学习之间的差别有多大?

    我是做深度强化学习的(Deep Reinforcement Learning)的,这个问题有趣.我对@张馨宇他在此问题下的简洁回答非常认同:"可以用深度学习这个工具来做强化学习这个任务,也可 ...

  2. dqn在训练过程中loss越来越大_深度强化学习——从DQN到DDPG

    想了解更多好玩的人工智能应用,请关注公众号"机器AI学习 数据AI挖掘","智能应用"菜单中包括:颜值检测.植物花卉识别.文字识别.人脸美妆等有趣的智能应用.. ...

  3. 深度强化学习-Double DQN算法原理与代码

    深度强化学习-Double DQN算法原理与代码 引言 1 DDQN算法简介 2 DDQN算法原理 3 DDQN算法伪代码 4 仿真验证 引言 Double Deep Q Network(DDQN)是 ...

  4. 快乐的强化学习2——DQN及其实现方法

    快乐的强化学习2--DQN及其实现方法 学习前言 简介 DQN算法的实现 具体实现代码 学习前言 刚刚从大学毕业,近来闲来无事,开始了机器学习的旅程,深度学习是机器学习的重要一环,其可以使得机器自我尝 ...

  5. 强化学习之DQN超级进化版Rainbow

    阅读本文前可以先了解我前三篇文章<强化学习之DQN><强化学习之DDQN>.<强化学习之 Dueling DQN>. Rainbow结合了DQN算法的6个扩展改进, ...

  6. RL之Q Learning:利用强化学习之Q Learning实现走迷宫—训练智能体走到迷宫(复杂迷宫)的宝藏位置

    RL之Q Learning:利用强化学习之Q Learning实现走迷宫-训练智能体走到迷宫(复杂迷宫)的宝藏位置 目录 输出结果 设计思路 实现代码 测试记录全过程 输出结果 设计思路 实现代码 f ...

  7. RL之Q Learning:利用强化学习之Q Learning实现走迷宫—训练智能体走到迷宫(简单迷宫)的宝藏位置

    RL之Q Learning:利用强化学习之Q Learning实现走迷宫-训练智能体走到迷宫(简单迷宫)的宝藏位置 目录 输出结果 设计思路 实现代码 测试记录全过程 输出结果 设计思路 实现代码 f ...

  8. 【强化学习】DQN 的三种改进在运筹学中的应用

    这篇文章主要介绍 DQN 的三种改进:Nature DQN.Double DQN.Dueling DQN 在运筹学中的应用,并给出三者的对比,同时也会给出不同增量学习下的效果. 这三种具体的改进方式可 ...

  9. 强化学习之SAC和DDPG内容大汇总

    强化学习之SAC和DDPG内容大汇总 一.SAC SAC相关博客汇总: https://blog.csdn.net/qq_38587510/article/details/104970837 最前沿: ...

最新文章

  1. koa连接mysql_CentOS 环境 Node + Koa2 连接 MySQL (ECS系列三)
  2. javascript 防止息屏
  3. 【分享】分享一款不错的网页视频播放器
  4. TREK1000 评估套件的软件技术分析
  5. C# IE浏览器操作类
  6. JDBC操作oracle
  7. 计算机复试上机辅导班,软件工程考研辅导班:考研院校2020年计算机/软件工程复试经验总结...
  8. 为什么部分Android用户不喜欢用iOS系统?
  9. php phar效率,PHP的Phar包原来性能这么强
  10. C++是C语言演变过来的,为何不能代替C语言?
  11. C++ 实现反射机制(转载)
  12. 传输层协议(6):TCP 连接(下-3)
  13. stm32f4 usb 升级程序_51单片机程序下载、ISP及串口基础知识
  14. G.Power教程 | 样本量估计
  15. MATLAB数字图像处理 实验一:图像处理基本操作(平移、放大、缩小、旋转、插值)
  16. PC改变文档显示颜色,保护眼睛,缓解眼疲劳
  17. TSC条码打印机 条形码ActiveXbarcode()方法参数详解
  18. 东芝发布全系列消费级硬盘
  19. 轻松玩转Linux之撩妹神器一一Shell脚本
  20. Java开源工具库使用之Apache commons-lang3

热门文章

  1. Android知乎广告效果
  2. 数据结构实训-运动会分数统计
  3. 搜狗输入法中文状态下,打出来还是英文按住键盘Ctrl+shift+E就可以了
  4. 微信小程序退出按钮退出方式
  5. JupyterLab教程:程序员的笔记本神器v2.0
  6. 如何找到精美联想锁屏壁纸?
  7. ChatGPT 登上了时代杂志封面,意味着什么?
  8. Kafka消息偏移量的演变
  9. 项目落地 - 智慧海绵城市(物联网技术应用)
  10. 基于JAVA springboot + MYSQL +VUE的项目管理系统(含数据库),包括工时统计、原型预览、效果图管理等