DDPG算法python实现 ddpg算法是什么_DDPG算法python实现

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

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

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

DDPG算法python实现 ddpg算法是什么_强化学习_02

提出 DDPG 是为了让 DQN 可以扩展到连续的动作空间,就是我们刚才提到的小车速度、角度和电压的电流量这样的连续值。所以 DDPG 直接在 DQN 基础上加了一个策略网络(如上图蓝色矩形所示),用来直接输出动作值。所以 DDPG 需要一边学习 Q 网络,一边学习策略网络。Q 网络的参数用 ww 来表示。策略网络的参数用 \thetaθ 来表示。我们称这样的结构为 Actor-Critic 的结构。

通俗地解释一下 Actor-Critic 的结构

  • 策略网络扮演的就是 actor 的角色,它负责对外展示输出,输出舞蹈动作。Q 网络就是评论家(critic),它会在每一个 step 都对 actor 输出的动作做一个评估,打一个分,估计一下它做一次的 action 未来能有多少收益,也就是去估计这个 actor 输出的这个 action 的 Q 值大概是多少,即 Q_w(s,a)Qw(s,a)。 Actor 就需要根据舞台目前的状态来做出一个 action。
  • 评论家就是评委,它需要根据舞台现在的状态和演员输出的 action 这两个值对 actor 刚刚的表现去打一个分数 Q_w(s,a)Qw(s,a)。所以 actor 就是要根据评委的打分来调整自己的策略。也就是更新 actor 的神经网络参数 \thetaθ, 争取下次可以做得更好。而 critic 就是要根据观众的反馈,也就是环境的反馈 reward 来调整自己的打分策略,也就是要更新 critic 的神经网络的参数 ww ,它的目标是要让每一场表演都获得观众尽可能多的欢呼声跟掌声,也就是要最大化未来的总收益。
  • 最开始训练的时候,这两个神经网络参数是随机的。所以 critic 最开始是随机打分的,然后 actor 也跟着乱来,就随机表演,随机输出动作。但是由于我们有环境反馈的 reward 存在,所以 critic 的评分会越来越准确,也会评判的那个 actor 的表现会越来越好。既然 actor 是一个神经网络,是我们希望训练好的这个策略网络,那我们就需要计算梯度来去更新优化它里面的参数 \thetaθ 。简单的说,我们希望调整 actor 的网络参数,使得评委打分尽可能得高。注意,这里的 actor 是不管观众的,它只关注评委,它就是迎合评委的打分,打的这个 Q_w(s,a)Qw(s,a) 而已。