dpg learning 和q_【强化学习】DPG, DQN与DDPG
(由于最近研究方向从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相关推荐
- dpg learning 和q_深度学习和强化学习之间的差别有多大?
我是做深度强化学习的(Deep Reinforcement Learning)的,这个问题有趣.我对@张馨宇他在此问题下的简洁回答非常认同:"可以用深度学习这个工具来做强化学习这个任务,也可 ...
- dqn在训练过程中loss越来越大_深度强化学习——从DQN到DDPG
想了解更多好玩的人工智能应用,请关注公众号"机器AI学习 数据AI挖掘","智能应用"菜单中包括:颜值检测.植物花卉识别.文字识别.人脸美妆等有趣的智能应用.. ...
- 深度强化学习-Double DQN算法原理与代码
深度强化学习-Double DQN算法原理与代码 引言 1 DDQN算法简介 2 DDQN算法原理 3 DDQN算法伪代码 4 仿真验证 引言 Double Deep Q Network(DDQN)是 ...
- 快乐的强化学习2——DQN及其实现方法
快乐的强化学习2--DQN及其实现方法 学习前言 简介 DQN算法的实现 具体实现代码 学习前言 刚刚从大学毕业,近来闲来无事,开始了机器学习的旅程,深度学习是机器学习的重要一环,其可以使得机器自我尝 ...
- 强化学习之DQN超级进化版Rainbow
阅读本文前可以先了解我前三篇文章<强化学习之DQN><强化学习之DDQN>.<强化学习之 Dueling DQN>. Rainbow结合了DQN算法的6个扩展改进, ...
- RL之Q Learning:利用强化学习之Q Learning实现走迷宫—训练智能体走到迷宫(复杂迷宫)的宝藏位置
RL之Q Learning:利用强化学习之Q Learning实现走迷宫-训练智能体走到迷宫(复杂迷宫)的宝藏位置 目录 输出结果 设计思路 实现代码 测试记录全过程 输出结果 设计思路 实现代码 f ...
- RL之Q Learning:利用强化学习之Q Learning实现走迷宫—训练智能体走到迷宫(简单迷宫)的宝藏位置
RL之Q Learning:利用强化学习之Q Learning实现走迷宫-训练智能体走到迷宫(简单迷宫)的宝藏位置 目录 输出结果 设计思路 实现代码 测试记录全过程 输出结果 设计思路 实现代码 f ...
- 【强化学习】DQN 的三种改进在运筹学中的应用
这篇文章主要介绍 DQN 的三种改进:Nature DQN.Double DQN.Dueling DQN 在运筹学中的应用,并给出三者的对比,同时也会给出不同增量学习下的效果. 这三种具体的改进方式可 ...
- 强化学习之SAC和DDPG内容大汇总
强化学习之SAC和DDPG内容大汇总 一.SAC SAC相关博客汇总: https://blog.csdn.net/qq_38587510/article/details/104970837 最前沿: ...
最新文章
- koa连接mysql_CentOS 环境 Node + Koa2 连接 MySQL (ECS系列三)
- javascript 防止息屏
- 【分享】分享一款不错的网页视频播放器
- TREK1000 评估套件的软件技术分析
- C# IE浏览器操作类
- JDBC操作oracle
- 计算机复试上机辅导班,软件工程考研辅导班:考研院校2020年计算机/软件工程复试经验总结...
- 为什么部分Android用户不喜欢用iOS系统?
- php phar效率,PHP的Phar包原来性能这么强
- C++是C语言演变过来的,为何不能代替C语言?
- C++ 实现反射机制(转载)
- 传输层协议(6):TCP 连接(下-3)
- stm32f4 usb 升级程序_51单片机程序下载、ISP及串口基础知识
- G.Power教程 | 样本量估计
- MATLAB数字图像处理 实验一:图像处理基本操作(平移、放大、缩小、旋转、插值)
- PC改变文档显示颜色,保护眼睛,缓解眼疲劳
- TSC条码打印机 条形码ActiveXbarcode()方法参数详解
- 东芝发布全系列消费级硬盘
- 轻松玩转Linux之撩妹神器一一Shell脚本
- Java开源工具库使用之Apache commons-lang3