强化学习6

1 关键词

  • DDPG(Deep Deterministic Policy Gradient): 在连续控制领域经典的RL算法,是DQN在处理连续动作空间的一个扩充。具体地,从命名就可以看出,Deep是使用了神经网络;Deterministic 表示 DDPG 输出的是一个确定性的动作,可以用于连续动作的一个环境;Policy Gradient 代表的是它用到的是策略网络,并且每个 step 都会更新一次 policy 网络,也就是说它是一个单步更新的 policy 网络。其与DQN都有目标网络和经验回放的技巧,在经验回放部分是一致的,在目标网络的更新有些许不同。

2 思考题

  • 请解释随机性策略和确定性策略。

    答:

    • 对于随机性的策略 π θ ( a t ∣ s t ) \pi_\theta(a_t|s_t) πθ(atst) ,我们输入某一个状态 s,采取某一个 action 的可能性并不是百分之百,而是有一个概率 P 的,就好像抽奖一样,根据概率随机抽取一个动作。
    • 对于确定性的策略 μ θ ( s t ) \mu_{\theta}(s_t) μθ(st) ,其没有概率的影响。当神经网络的参数固定下来了之后,输入同样的state,必然输出同样的 action,这就是确定性的策略。
  • 对于连续动作的控制空间和离散动作的控制空间,如果我们都采取使用Policy网络的话,分别应该如何操作?

    答:首先需要说明的是,对于连续的动作控制空间,Q-learning、DQN等算法是没有办法处理的,所以我们需要使用神经网络进行处理,因为其可以既输出概率值 π θ ( a t ∣ s t ) \pi_\theta(a_t|s_t) πθ(atst) ,也可以输出确定的策略 μ θ ( s t ) \mu_{\theta}(s_t) μθ(st)

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

DDPG

离散动作 vs. 连续动作

强化学习6

离散动作与连续动作是相对的概念,一个是可数的,一个是不可数的。

  • 在 CartPole 环境中,可以有向左推小车、向右推小车两个动作。在 Frozen Lake 环境中,小乌龟可以有上下左右四个动作。在 Atari 的 Pong 游戏中,游戏有 6 个按键的动作可以输出。

  • 但在实际情况中,经常会遇到连续动作空间的情况,也就是输出的动作是不可数的。比如说推小车力的大小、 选择下一时刻方向盘的转动角度或者四轴飞行器的四个螺旋桨给的电压的大小等等。

强化学习6

对于这些连续的动作控制空间,Q-learning、DQN 等算法是没有办法处理的。那我们怎么输出连续的动作呢,这个时候,万能的神经网络又出现了。在上面这个离散动作的场景下,比如说我输出上下或是停止这几个动作。有几个动作,神经网络就输出几个概率值,我们用 π θ ( a t ∣ s t ) \pi_\theta(a_t|s_t) πθ(atst) 来表示这个随机性的策略。在连续的动作场景下,比如说我要输出这个机器人手臂弯曲的角度,这样子的一个动作,我们就输出一个具体的浮点数。我们用 μ θ ( s t ) \mu_{\theta}(s_t) μθ(st) 来代表这个确定性的策略。

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

  • 对随机性的策略来说,输入某一个状态 s,采取某一个 action 的可能性并不是百分之百,而是有一个概率 P 的,就好像抽奖一样,根据概率随机抽取一个动作。

  • 而对于确定性的策略来说,它没有概率的影响。当神经网络的参数固定下来了之后,输入同样的 state,必然输出同样的 action,这就是确定性的策略。
    强化学习6

  • 要输出离散动作的话,我们就是加一层 softmax 层来确保说所有的输出是动作概率,而且所有的动作概率加和为 1。

  • 要输出连续动作的话,一般可以在输出层这里加一层 tanh。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)

强化学习6

Q 网络要优化的是那个 Q 的输出 Q w ( s , a ) Q_w(s,a) Qw(s,a) 和那个 Q_target 之间的一个均方差。但是 Q网络的优化存在一个和 DQN 一模一样的问题就是它后面的这个 Q_target 是不稳定的。这个在之前的 DQN 有讲过。后面的 Q w ˉ ( s ′ , a ′ ) Q_{\bar{w}}\left(s^{\prime}, a^{\prime}\right) Qwˉ(s,a) 也是不稳定的。因为 Q w ˉ ( s ′ , a ′ ) Q_{\bar{w}}\left(s^{\prime}, a^{\prime}\right) Qwˉ(s,a) 也是一个预估的值。为了稳定这个 Q_target。DDPG 分别给 Q 网络和策略网络都搭建了 target network,专门就是为了用来稳定这个 Q_target。

target_Q 网络就为了来计算 Q_target 里面的 Q w ˉ ( s ′ , a ′ ) Q_{\bar{w}}\left(s^{\prime}, a^{\prime}\right) Qwˉ(s,a)。然后 Q w ˉ ( s ′ , a ′ ) Q_{\bar{w}}\left(s^{\prime}, a^{\prime}\right) Qwˉ(s,a) 里面的需要的 next action a ′ a' a 就是通过 target_P 网络来去输出,即 a ′ = μ θ ˉ ( s ′ ) a^{\prime}=\mu_{\bar{\theta}}\left(s^{\prime}\right) a=μθˉ(s)

为了区分前面的 Q 网络和策略网络以及后面的 target_Q 网络和 target_P 策略网络。前面的网络的参数是 w w w,后面的网络的参数是 w ˉ \bar{w} wˉ。这就是为什么我们去看一些 DDPG 的文章,会发现 DDPG 会有四个网络。策略网络的 target 网络 和 Q 网络的 target 网络就是颜色比较深的这两个,它只是为了让计算 Q_target 的时候能够更稳定一点而已。因为这两个网络也是固定一段时间的参数之后再跟评估网络同步一下最新的参数。

这里面训练需要用到的数据就是 s , a , r , s ′ s,a,r,s' s,a,r,s。我们只需要用到这四个数据,我们就用 Replay Memory 把这些数据存起来,然后再 sample 进来训练就好了。这个经验回放的技巧跟 DQN 是一模一样的。注意,因为 DDPG 使用了经验回放这个技巧,所以 DDPG 是一个 off-policy 的算法。