session://14:29:33
~/ / posts / 2017-07-ppo.md

PPO:把策略优化做成“人人能跑”的默认选项

2017-07-20· 1 min read · [论文解读]
// 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”,命中率应该不低。

强化学习论文解读工程实践
cat newsletter.txt

每周一封,<5 分钟读完

把这一周我读过、想过、动手做过的东西,压缩成一封信。订阅者目前 5210+ 人,0 干扰。