强化学习组队学习task06——DDPG 算法

时间:2024-04-01 10:37:33

一、离散动作和连续动作

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

  • 离散动作比如推小车的方向有前后左右四个方向
  • 连续动作比如说推小车力的大小、 选择下一时刻方向盘的转动角度或者四轴飞行器的
    四个螺旋桨给的电压的大小等等。

对于这些连续的动作控制空间,Q-learning、DQN 等算法是没有办法处理的。这个时候,万能的神经网络又出现了。
强化学习组队学习task06——DDPG 算法

  • 在离散动作的场景下,输出有几个动作,神经网络就输出几个动作的概率值,这里使用一层sofemax来实现,所有的动作概率之和为1。
  • 在连续的动作场景下,比如要输出机器人手臂弯曲的角度,就输出一个具体的浮点数,具体实现时通过一个tanh层,他的作用是将输出限制到1和-1之间,之后按照比例进行放大或缩小得到最终结果。

二、DDPG(Deep Deterministic Policy Gradient)

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 有点不一样。

DDPG 直接在 DQN 基础上加了一个策略网络,用来直接输出动作值。所以 DDPG 需要一边学习 Q 网络,一边学习策略网络。这样的结构为之前介绍的 Actor-Critic 的结构。

Actor-Critic结构

强化学习组队学习task06——DDPG 算法

策略网络扮演的是 actor 的角色,它负责对外展示输出。Q 网络就是评论家(critic),它会在每一个 step 都对 actor 输出的动作做一个评估,估计一下它做一次的 action 未来能有多少收益,即Q 值。 Actor 就需要根据舞台目前的状态来做出一个 action,也就是更新 actor 的神经网络参数;而 critic 就是要根据环境的反馈 reward 来调整自己的打分策略,也就是要更新 critic 的神经网络的参数 ,它的目标就是要最大化未来的总收益。

最开始训练的时候,这两个神经网络参数是随机的。所以 critic 最开始是随机打分的,然后 actor 也跟着随机输出动作。但是由于我们有环境反馈的 reward 存在,所以 critic 的评分会越来越准确。我们就需要计算梯度来去更新优化actor网络的参数 。
强化学习组队学习task06——DDPG 算法

类似 DQN,DDPG 的目的也是为了求解让 Q 值最大的那个 action。Actor 只是为了迎合评委的打分而已,所以用来优化策略网络的梯度就是要最大化这个 Q 值,所以构造的 loss 函数就是让 Q 取一个负号

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

强化学习组队学习task06——DDPG 算法
那我们把两个网络的损失函数就可以构造出来。我们可以看到策略网络的损失函数是一个复合函数。我们把 action 代进去,最终策略网络要优化的是策略网络的参数 θ 。

Q 网络要优化的是输出 Q 和 Q_target 之间的均方差。但是 Q网络的优化存在一个和 DQN 一模一样的问题就是它后面的这个 Q_target 是不稳定的。为了稳定 Q_target。DDPG 分别给 Q 网络和策略网络都搭建了 target network,专门就是为了用来稳定这个 Q_target。

所以 DDPG 一共有四个网络: Q 网络和策略网络以及后面的 target_Q 网络和 target_P 策略网络。这两个 target 网络是固定一段时间的参数之后再跟评估网络同步一下最新的参数。

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