PPO算法

321 阅读2分钟

PPO算法是一种强化学习算法,主要思想是控制智能体每次更新策略的变化幅度,确保它不会偏离当前的策略太远,从而保持稳定性。
在说PPO算法之前,我们先说一下Actor-Critic算法和A2C算法。

Actor-Critic算法

Actor-Critic算法如其名,由两个模型构成,一个是演员模型,另外一个是评论家模型。演员负责选择动作,它的内部有一个概率分布p(AtSt)p(A_t|S_t),这个概率分布又被称为“策略”。评论家模型是一个辅助模型,负责预估动作的收益,也就是从状态StS_t开始,选择动作AtA_t后,直到整个动作结束,所积累的奖励之和的期望Q(St,At)Q(S_t,A_t)。这种收益又被称为"状态动作价值"
下面介绍一下这个算法的过程步骤:

  1. Actor接收环境StS_t产生动作AtA_t
  2. Critic根据状态和动作得出状态动作价值Q(St,At)Q(S_t,A_t)。Actor用loss=logP((AtSt)Q(St,At)loss=-logP((A_t|S_t)Q(S_t,A_t)来更新参数
  3. 环境接收到AtA_t后,更新状态St+1S_{t+1},演员再通过St+1S_{t+1}生成At+1A_{t+1}
  4. 环境给出奖励RtR_t,Critic用loss=[Q(St+1,At+1)+RtQ(St,At)]2loss=[Q(S_{t+1},A_{t+1})+R_t-Q(S_t,A_t)]^2来更新参数

演员的loss:状态StS_t对动作AtA_t价值越大,演员就越要强化AtA_t,否则就要弱化AtA_t 评论家的loss:评论家在得到新的信息后,需要改进自己预估的能力。

A2C算法

A2C算法是在Actor-Critic算法上的改进。在其中,演员不参考评论家预测的收益大小来更新参数,而是根据实际收益超出评论家预期收益的程度来更新参数。这种“超出预期的程度”被称为优势(advantage)。下面用Adv来表示。
下面介绍一下这个算法的步骤:

  1. Actor接收环境StS_t产生动作AtA_t,环境受到AtA_t后产生新的状态St+1S_{t+1}和奖励RtR_t
  2. Critic根据状态估计状态价值V(St)V(S_t)V(St+1)V(S_{t+1})并计算优势Adv(St,At)=V(St+1)+RtV(St)Adv(S_t,A_t)=V(S_{t+1})+R_t-V(S_t)
  3. Actor用loss=logP(AtSt)Adv(St,At)loss=-logP(A_t|S_t)Adv(St,At)更新参数
  4. Critic用loss=[Adv(St,At)]2loss=[Adv(S_t,A_t)]^2更新参数

PPO算法

PPO算法可以看成A2C算法的特殊形式。
PPO的思路是想维持训练的稳定性,让策略p(AtSt)p(A_t|S_t)的更新幅度不要太大。
在PPO中,Actor的loss是loss=p(AtSt)p(AtSt)Adv(St,At)loss=-\frac{p(A_t|S_t)}{p'(A_t|S_t)}Adv(S_t,A_t),其中p是我们本次参数更新前的策略,p'是上一次参数更新前的策略,这个p'就是我们用来限制p的东西。
Adv>0Adv>0p(AtSt)p'(At|St)很大时,这个学习率会变得很小。
现在,我们已经限制了策略的更新幅度,但是还缺少一个熔断机制,即如果策略的更新幅度还是太大,我们要停止策略的参数更新。

image.png

综上,我们总结PPO算法为一种能限制策略变化幅度,且具有熔断机制的强化学习优化算法。

本篇博客改编于:【强化学习】直通PPO算法 - TRiddle的文章 - 知乎 zhuanlan.zhihu.com/p/643751150