Research6 MIN READ
PPO
PPO 阅读笔记:重要性采样、KL 惩罚与截断目标。
Alan Zeng/更新于 2026.10.27 本文目录 CONTENTS
https://arxiv.org/abs/1707.06347
PPO与TRPO旨在解决相同的问题:在策略梯度定理的步长α的选取中,如何选取合适的步长,使得更新的参数尽可能对应最好的策略,但也不至于走得太远,以至于导致性能崩溃。
PPO也继承了TRPO的核心思想:引入重要性采样,提高样本效率;同时,通过某种方式来约束新旧策略间的差异不要太大。
不同的是,TRPO 试图用复杂的二阶方法解决这个问题(对目标函数采取一阶近似,约束条件采取二阶近似),然而PPO采用了一系列的一阶方法(Clip),它们使用一些其他技巧来使新策略接近旧策略。PPO在算法上更加简单,且效果不输于TRPO算法的效果。
回顾一下,TRPO算法对以下目标函数进行优化问题的求解:
这里,θold是更新之前的策略参数向量,At是在时刻t的优势函数估计,期望E^t是在采样和优化之间交替的算法中,有限批次样本的经验平均值。求解的过程采用到了共轭梯度和线性搜索的方式。
TRPO在目标函数中,另外增加了一个约束条件。在推导该式的过程中, 涉及到了一个将KL散度****作为惩罚项的极值问题,转化为KL散度作为约束条件的优化问题的过程。将KL散度作为惩罚项的问题,公式如下:
然而,因为权重难以选择和调整的问题,因此TRPO并没有采取这样的方式进行目标函数的设定。
01PPO-惩罚(PPO1)
PPO-惩罚(PPO1)用拉格朗日乘数法直接将KL散度的限制放入了目标函数,因此变成了一个无约束的优化问题,在迭代的过程中不断更新KL散度前的系数。这里,使用几个阶段的小批量SGD,优化KL惩罚目标,其更新方式即为公式(2)
为了对β进行动态调整,作者提出了自适应KL散度(adaptive KL divergence)的思想。具体做法是,在每个epoch对KL惩罚目标进行优化后,计算d=E^t[KL[πθold (⋅∣st),πθ(⋅∣st)]]:
- 如果d<1.5δ,则β←2β。
- 如果d>1.5δ,则β←2β
- 否则,β保持不变。 在这里,更新的β用于下一次迭代时的参数更新。
PPO这里使用了GAE进行计算
02PPO-截断(PPO2)
PPO2在限制新的策略参数与旧的策略参数的距离上,相比于PPO1更加直接。区别于PPO1使用KL散度的方式进行限制,PPO2直接在目标函数上进行限制:
其中,
- rt(θ)=πθold (at∣st)πθ(at∣st) 称为概率比,易得rt(θold)=1
- clip(rt(θ),1−ϵ,1+ϵ)指的是将rt(θ)限制在[1−ϵ,1+ϵ]的范围内。
- clip(x,l,r):=max(min(x,r),l)即把x限制在[l,r]内
- ϵ为超参数,表示进行截断操作的范围,一般取ϵ=0.2。
这样,就始终保证了新旧策略的比值在[1−ϵ,1+ϵ]的范围内,保证了两个策略的差距不会太大。
PPO2中,较为精妙的一点是在clip操作后乘了A^i(以下用A表示),而优势函数A是有正负的。
如下面两张图所示
- πθold(at∣st)πθ(at∣st) 是绿色的线;
- clip(πθold(at∣st)πθ(at∣st),1−ε,1+ε)=max[min(rt(θ),1+ϵ),1−ϵ]] 是红色的线;
在绿色的线与红色的线中间,我们要取一个最小的结果。
文章配图如图所示,假设前面乘上的项 A>0 ,取最小的结果,就是黑色色的这条线。如右图所示,如果 A<0 0,取最小结果的以后,就得到红色的这条线。
下面来做一个详细的讨论。
- 如果 A>0,也就是某一个状态-动作二元组相比于状态价值函数V更好,我们就希望增大这个状态-动作二元组的概率。也就是,我们想让 πθ(at∣st) 越大越好,但它与 πθold (at∣st) 的比值不可以超过 1+ϵ 。如果超过 1+ϵ,新策略与旧策略之间的差距就会过大而产生问题。所以在训练的时候,当 πθ(at∣st) 被训练到πθold(at∣st)πθ(at∣st)>1+ϵ时,训练就会停止。
- 如果 A<0,也就是某一个状态-动作二元组相比于状态价值函数V更差,那么我们希望把 πθ(at∣st) 减小。如果 πθ(at∣st) 比 πθold(at∣st) 还大,那我们就尽量把它减小,减到 πθold(at∣st)πθ(at∣st) 是 1−ϵ 的时候停止, 此时不用再减得更小,即新旧策略之间的差距不会过大。
原文 · 原始标签:RL、AI、Paper-Reading
NEXT IN WRITING
Deploy frp on mac and linux
↗