PPO:把策略优化做成“人人能跑”的默认选项
// TL;DR
- 策略梯度的老大难:步子大了崩,步子小了慢。
- TRPO 用 KL 约束解决但实现复杂;PPO 用目标函数裁剪达到类似效果,一阶优化就够。
- 简单 + 鲁棒 + 通用,工程性碾压,注定成为默认选项。
问题背景
策略梯度方法有个老毛病:更新步长极难拿捏。新策略一旦偏离旧策略太远,采样数据就“过期”了,训练直接崩盘;步子太小又慢得让人怀疑人生。2015 年的 TRPO 用信任域约束(KL 散度不许超标)解决了稳定性,但代价是要算二阶导数和共轭梯度,实现起来劝退大多数人。
PPO 的暴力美学
PPO 的思路简单到近乎狡猾:不做显式约束,直接把目标函数裁剪了——新旧策略的概率比超出 [1−ε, 1+ε] 区间后,收益不再增长,于是优化器自己就没有动力跑太远。
# PPO-Clip 核心目标
ratio = pi_new(a|s) / pi_old(a|s)
loss = -min(ratio * advantage,
clip(ratio, 1 - eps, 1 + eps) * advantage)
就这几行,效果逼近 TRPO,而且对超参数明显更宽容。Atari、MuJoCo 连续控制一套基准跑下来,PPO 不一定每项最强,但每项都不差——这种“全能良品”属性在工程上比单项冠军值钱。
我的看法
算法圈有个朴素规律:最后被广泛使用的,往往不是最精巧的,而是最难用坏的。SGD 如此,Adam 如此,PPO 看着也是这个命相。OpenAI 自家的 Dota 项目据说就在用它。以后再看到 RL 落地的新闻,不妨默认猜一句“底下八成是 PPO”,命中率应该不低。