强化学习笔记【12】DDPG

该系列主要是听李宏毅老师的《深度强化学习》过程中记下的一些听课心得,除了李宏毅老师的强化学习课程之外,为保证内容的完整性,我还参考了一些其他的课程,包括周博磊老师的《强化学习纲要》、李科浇老师的《百度强化学习》以及多个强化学习的经典资料作为补充。

 使用说明

笔记【4】到笔记【11】为李宏毅《深度强化学习》的部分;
笔记 【1】和笔记 【2】根据《强化学习纲要》整理而来;
笔记 【3】 和笔记 【12】根据《百度强化学习》 整理而来。

一、离散动作vs连续动作

强化学习笔记【12】DDPG_第1张图片

 图1. 离散动作vs连续动作

在很多情景中,我们要输出的动作是连续的,而不是离散的,这个时候Q-learning、DQN 等算法是没有办法处理的。那这时我们怎么输出连续的动作呢?这个时候,万能的神经网络又出现了。

  1. 在离散动作的场景下,比如说我输出上、下或是停止这几个动作。有几个动作,神经网络就输出几个概率值,我们用πθ​(at​∣st​)来表示这个随机性的策略。
  2. 在连续的动作场景下,比如说我要输出这个机器人手臂弯曲的角度,这样子的一个动作,我们就输出一个具体的浮点数。我们μθ​(st​)来代表这个确定性的策略。

我们再解释一下随机性策略跟确定性策略。

  1. 对随机性的策略来说,输入某一个状态s,采取某一个action的可能性并不是百分之百,而是有一个概率P的,就好像抽奖一样,根据概率随机抽取一个动作。
  2. 而对于确定性的策略来说,它没有概率的影响。当神经网络的参数固定下来了之后,输入同样的state,必然输出同样的 action,这就是确定性的策略。

那么,具体怎么用神经网络来处理呢?

强化学习笔记【12】DDPG_第2张图片

图2.神经网络处理过程

首先需要说明的是,我们需要使用神经网络进行处理,是因为其可以既输出概率值πθ​(at​∣st​),也可以输出确定的策略μθ​(st​)。

  1. 要输出离散动作的话,最后的output的激活函数使用softmax 就可以实现。其可以保证输出是的动作概率,而且所有的动作概率加和为 1。
  2. 要输出连续的动作的话,可以在输出层加一层tanh激活函数。其作用可以把输出限制到 [-1,1] 之间。我们拿到这个输出后,就可以根据实际动作的一个范围再做一下缩放,然后再输出给环境。比如神经网络输出一个浮点数是 2.8,然后经过 tanh 之后,它就可以被限制在 [-1,1] 之间,它输出 0.99。然后假设说小车的一个速度的那个动作范围是 [-2,2] 之间,那我们就按比例从 [-1,1] 扩放到 [-2,2],0.99 乘 2,最终输出的就是1.98,作为小车的速度或者说推小车的力输出给环境。

二、DDPG(Deep Deterministic Policy Gradient)

在连续控制领域,比较经典的强化学习算法就是深度确定性策略梯度(Deep Deterministic Policy Gradient,简称 DDPG)。DDPG 的特点可以从它的名字当中拆解出来,分成 Deep、Deterministic 和 Policy Gradient。

  1. Deep 是因为用了神经网络;
  2. Deterministic 表示 DDPG 输出的是一个确定性的动作,可以用于连续动作的一个环境;
  3. Policy Gradient 代表的是它用到的是策略网络。REINFORCE 算法每隔一个 episode 就更新一次,但 DDPG 网络是每个 step 都会更新一次 policy 网络,也就是说它是一个单步更新的 policy 网络。

DDPG 是 DQN 在连续动作空间的一个扩展版本。

  • 在 DDPG 的训练中,它借鉴了 DQN 的技巧:目标网络和经验回放。
  • 经验回放这一块跟 DQN 是一样的,但 target network 这一块的更新跟 DQN 有些不同。

强化学习笔记【12】DDPG_第3张图片

图3.DQN与DDPG过程

  • 策略网络优化

DQN的最佳策略是想要学出一个很好的Q网络,学好这个网络之后,我们希望选取的那个动作使你的Q值最大;DDPG 的目的也是为了求解让Q值最大的那个 action。

Actor只是为了迎合评委的打分而已,所以用来优化策略网络的梯度就是要最大化这个Q值,所以构造的loss函数就是让Q取一个负号。我们写代码的时候就是把这个loss函数扔到优化器里面,它就会自动最小化loss,也就是最大化Q。

  • Q网络优化

这里要注意,除了策略网络要做优化,DDPG还有一个Q网络也要优化。评委一开始也不知道怎么评分,它也是在一步一步的学习当中,慢慢地去给出准确的打分。

我们优化Q网络的方法其实跟DQN优化Q网络的方法是一样的,我们用真实的reward和下一步的Q即Q'来去拟合未来的收益Q_target。然后让Q网络的输出去逼近这个Q_target。所以构造的loss function就是直接求这两个值的均方差。构造好loss后,我们就扔进去那个优化器,让它自动去最小化loss就好了。

三、Twin Delayed DDPG(TD3)

虽然DDPG有时表现很好,但它在超参数和其他类型的调整方面经常很敏感。DDPG常见的问题是已经学习好的Q函数开始显著地高估Q值,然后导致策略被破坏了,因为它利用了Q函数中的误差。

双延迟深度确定性策略梯度(Twin Delayed DDPG,简称 TD3)通过引入三个关键技巧来解决这个问题:

  • 截断的双Q学习(Clipped Dobule Q-learning)。TD3学习两个 Q-function(因此名字中有“twin”)。TD3 通过最小化均方差来同时学习两个 Q-function: Qϕ1​​和Qϕ2​​。两个 Q-function 都使用一个目标,两个 Q-function 中给出较小的值会被作为如下的 Q-target: 

  •  延迟的策略更新(“Delayed” Policy Updates)。相关实验结果表明,同步训练动作网络和评价网络,却不使用目标网络,会导致训练过程不稳定;但是仅固定动作网络时,评价网络往往能够收敛到正确的结果。因此TD3算法以较低的频率更新动作网络,较高频率更新评价网络,通常每更新两次评价网络再更新一次策略。
  • 目标策略平滑(Target Policy smoothing)。TD3引入了smoothing的思想。TD3在目标动作中加入噪音,通过平滑Q沿动作的变化,使策略更难利用Q函数的误差。

这三个技巧加在一起,使得性能相比基线 DDPG 有了大幅的提升。

TD3 的作者给出了对应的实现:TD3 Pytorch implementation,代码写得很棒,我们可以将其作为一个强化学习的标准库来学习。

你可能感兴趣的:(强化学习,李宏毅,学习笔记)