PPO:给「策略更新」装一个不会摔倒的护栏
🎯 为什么重要:在「稳」和「快」之间找到了第一个工程上能用的折中
2017 年前后,深度 RL 的策略优化有三大主流,每一个都有明显短板(论文 §1):
① vanilla policy gradient(A3C 等):每个 batch 只能做一次梯度更新——复用样本就破坏 i.i.d. 假设、训练崩坏。样本效率低。
② TRPO:用 KL 硬约束保证单调改进——但需要共轭梯度 + Fisher 矩阵,实现复杂、与 dropout / 参数共享不兼容。
③ DQN:离散动作好用,但连续控制基本不工作。
要的是:一个能像 vanilla PG 一样用一阶 SGD 多轮复用样本(数据效率高),又能像 TRPO 一样保证每步不把策略改得太狠(稳定)的方法。PPO 的回答就是「把约束从硬变软」——不求解 KL,而是直接把概率比 clip 掉。
💡 核心思想:Clipped Surrogate Objective
策略梯度的目标可以写成「概率比 × 优势」的形式(TRPO 称之为 surrogate objective):
$$L^{\text{CPI}}(\theta)=\mathbb{\hat E}_t\!\left[r_t(\theta)\,\hat A_t\right],\qquad r_t(\theta)=\frac{\pi_\theta(a_t\mid s_t)}{\pi_{\theta_{\text{old}}}(a_t\mid s_t)}$$
无约束最大化 $L^{\text{CPI}}$ 会让 $r_t$ 跑得离 1 太远(策略骤变)。PPO 加了一个 clip,只允许它在 $[1-\varepsilon, 1+\varepsilon]$ 内获益:
$$\boxed{\;L^{\text{CLIP}}(\theta)=\mathbb{\hat E}_t\!\Big[\min\!\big(r_t(\theta)\hat A_t,\ \text{clip}(r_t(\theta),1\!-\!\varepsilon,1\!+\!\varepsilon)\hat A_t\big)\Big]\;}$$
关键是取 min:它让目标成为 unclipped 版本的下界(pessimistic bound)。「有利可图时不再加分,吃亏时照实记」——这就是 trust region 思想的廉价一阶替代。
🛠️ PPO 完整流程:在 vanilla PG 上改 3 行
| 组件 | 怎么做 | 为什么必要(论文依据) |
|---|---|---|
| ① Clipped 目标 | 把 $L^{PG}=\log\pi\cdot A$ 换成 $L^{CLIP}$ | §3:允许在同一 batch 上做多轮 minibatch SGD 而不破坏策略 |
| ② 多 epoch 复用 | 每条轨迹采 $T$ 步,$K$ 个 epoch、minibatch $M$ 重复训练 | §5 算法:这是与 vanilla PG 「一次更新」最根本的区别 |
| ③ 联合损失 | $L^{CLIP+VF+S}=L^{CLIP}-c_1 L^{VF}+c_2 S[\pi]$ | §5 Eq.(9):policy + value function 误差 + 熵 bonus(防过早收敛、保探索) |
| ④ GAE 优势估计 | $\hat A_t=\delta_t+(\gamma\lambda)\delta_{t+1}+\cdots$,$\delta_t=r_t+\gamma V(s_{t+1})-V(s_t)$ | §5 Eq.(11):用 truncated GAE 降低优势估计方差 |
| (备选)自适应 KL 惩罚 | 若 $d | §4:作为 clip 的备选方案,论文 §6.1 实测它不如 clip |
TRPO 每步要解「目标线性 + 约束二次」的小优化,得算 Fisher 矩阵向量积 + 共轭梯度 + line search——工程又重又难与参数共享 / dropout 兼容。PPO 的洞察是:直接把概率比 clip 死就能近似达到 trust region 效果,复杂度只剩一阶 SGD。论文 §7 原话:「只需对 vanilla PG 改几行代码」。
📊 关键结果:clip ε=0.2 是甜点,Atari 胜 30/49
消融:clip vs KL penalty(论文 Table 1,7 个 MuJoCo 任务 × 3 seeds)
| 算法变体 | 平均归一化得分 |
|---|---|
| 无 clip 无 penalty | -0.39(half-cheetah 上灾难性发散) |
| Clip $\varepsilon=0.1$ | 0.76 |
| Clip $\varepsilon=0.2$ | 0.82(最佳) |
| Clip $\varepsilon=0.3$ | 0.70 |
| Adaptive KL $d_{\text{targ}}=0.01$ | 0.74 |
| Fixed KL $\beta=1$ | 0.71 |
与同期方法对比(论文 Table 2,49 个 Atari 游戏,3 个 seed 平均后比较胜数)
| 评分口径 | A2C | ACER | PPO | Tie |
|---|---|---|---|---|
| 全程训练平均奖励 | 1 | 18 | 30 | 0 |
| 最后 100 episode 平均奖励 | 1 | 28 | 19 | 1 |
常用超参(论文 Table 3,MuJoCo 1M 步基准)
| 超参 | 值 |
|---|---|
| Horizon $T$ | 2048 |
| Adam stepsize | $3\times10^{-4}$ |
| Num. epochs $K$ | 10 |
| Minibatch size $M$ | 64 |
| Discount $\gamma$ | 0.99 |
| GAE $\lambda$ | 0.95 |
🌐 在领域中的位置
PPO 是过去近十年机器人 / 游戏 / 物理动画 RL 的事实默认算法:OpenAI Five、Dota、DeepMimic、AMP、humanoid locomotion 几乎清一色用 PPO 训练策略。它的地位直到 2024 年 GRPO(PPO 去掉 value network 用于 LLM)出现才有形态上的继任者——但目标函数的「clip 思想」原封不动保留。
❓ 常见误区
PPO 是 on-policy 还是 off-policy?
On-policy。每条轨迹采自当前 $\pi_{\theta_{\text{old}}}$,做完 $K$ 个 epoch 的更新就丢弃。clip 之所以必要,正是因为多次更新会让 $\pi_\theta$ 偏离 $\pi_{\theta_{\text{old}}}$,必须限制这个偏离。
ε=0.2 是怎么选的?
论文 §6.1 Table 1 实测:$\varepsilon\in\{0.1, 0.2, 0.3\}$ 中 $\varepsilon=0.2$ 在 MuJoCo 7 任务平均上最佳(0.82 vs 0.76 vs 0.70)。这是经验值,论文并未给理论证明。
有了 clip 还需要 entropy bonus 吗?
需要。clip 只管「别更新太大」,不保证探索。论文 §5 Eq.(9) 加 $c_2 S[\pi]$ 项就是为了防止策略过早塌缩到确定性动作(参考 Williams 1992 / Mnih 2016)。
PPO 一定单调改进吗?
理论上 $L^{CLIP}$ 是 $L^{CPI}$ 的下界,但只是经验上稳定,不提供 TRPO 那种「真实回报单调不退化」的硬保证。所以仍需早停、check-point、roll back 等工程兜底。
PPO 和 SAC / TD3 比哪个好?
论文未涉及(SAC/TD3 在 PPO 之后才成熟)。经验上:sample-efficient 选 SAC(off-policy),wall-clock / 大规模并行选 PPO(on-policy 但易并行)。