PPO

https://arxiv.org/abs/1707.06347

PPO与TRPO旨在解决相同的问题:在策略梯度定理的步长α的选取中,如何选取合适的步长,使得更新的参数尽可能对应最好的策略,但也不至于走得太远,以至于导致性能崩溃。

PPO也继承了TRPO的核心思想:引入重要性采样,提高样本效率;同时,通过某种方式来约束新旧策略间的差异不要太大。

不同的是,TRPO 试图用复杂的二阶方法解决这个问题(对目标函数采取一阶近似,约束条件采取二阶近似),然而PPO采用了一系列的一阶方法(Clip),它们使用一些其他技巧来使新策略接近旧策略。PPO在算法上更加简单,且效果不输于TRPO算法的效果。

回顾一下,TRPO算法对以下目标函数进行优化问题的求解:

(1)maximizeθE^_t[πθ(a_t∣s_t)π_θ_old(a_t∣s_t)A_t] subject to E^_t[KL(π_θ_old (⋅∣s)∥π_θ(⋅∣s))]≤δ

这里,θ_old是更新之前的策略参数向量,A_t是在时刻t的优势函数估计,期望E^_t是在采样和优化之间交替的算法中,有限批次样本的经验平均值。求解的过程采用到了共轭梯度和线性搜索的方式。

TRPO在目标函数中,另外增加了一个约束条件。在推导该式的过程中, 涉及到了一个将KL散度****作为惩罚项的极值问题,转化为KL散度作为约束条件的优化问题的过程。将KL散度作为惩罚项的问题,公式如下:

(TRPO-12)θ_new=arg⁡max_θ[L_θ_old (θ)−CD_KLmax(θ_old ,θ)]

然而,因为权重难以选择和调整的问题,因此TRPO并没有采取这样的方式进行目标函数的设定。

PPO-惩罚(PPO1)

PPO-惩罚(PPO1)用拉格朗日乘数法直接将KL散度的限制放入了目标函数,因此变成了一个无约束的优化问题,在迭代的过程中不断更新KL散度前的系数。这里,使用几个阶段的小批量SGD,优化KL惩罚目标,其更新方式即为公式(2)

(2)maximizeθE^_t[π_θ(a_t∣s_t)π_θ_old (a_t∣s_t)A^_t−βKL[π_θ_old (⋅∣s_t),π_θ(⋅∣s_t)]]

为了对β进行动态调整,作者提出了自适应KL散度(adaptive KL divergence)的思想。具体做法是,在每个epoch对KL惩罚目标进行优化后,计算d=E^_t[KL[π_θ_old (⋅∣s_t),π_θ(⋅∣s_t)]]:

PPO这里使用了GAE进行计算

PPO-截断(PPO2)

PPO2在限制新的策略参数与旧的策略参数的距离上,相比于PPO1更加直接。区别于PPO1使用KL散度的方式进行限制,PPO2直接在目标函数上进行限制:

(3)LCLIP(θ)=E^_t[min(r_t(θ)A^_t,clip(r_t(θ),1−ϵ,1+ϵ)A^_t)]

其中,

这样,就始终保证了新旧策略的比值在[1−ϵ,1+ϵ]的范围内,保证了两个策略的差距不会太大。

PPO2中,较为精妙的一点是在clip操作后乘了A^_i(以下用A表示),而优势函数A是有正负的。

如下面两张图所示

在绿色的线与红色的线中间,我们要取一个最小的结果。

如图所示,假设前面乘上的项 A>0 ,取最小的结果,就是黑色色的这条线。如右图所示,如果 A<0 0,取最小结果的以后,就得到红色的这条线。

下面来做一个详细的讨论。