PPO(近端策略优化)
**PPO(Proximal Policy Optimization)**是 OpenAI 2017 年提出的强化学习算法, 是当前 RLHF 第二阶段的主流选择。
为什么是 RLHF 默认算法
- 稳定:限制每次更新的步长(clip ratio),避免训崩。
- 实现简单:相对 TRPO 等老算法,PPO 只需一阶优化。
- 样本效率高:on-policy 但支持 mini-batch 多轮更新。
- 通用:在 Atari、机器人、围棋、LLM 都验证过。
核心思想
PPO 把策略更新限制在"trust region"内:当前策略 π_old 和新策略 π_θ 的 KL 散度不能 超过阈值。两种实现:
PPO-Clip(最常用)
L_clip(θ) = E[min(r_t(θ) A_t, clip(r_t(θ), 1-ε, 1+ε) A_t)]
r_t(θ) = π_θ(a|s) / π_old(a|s) 是新/旧策略概率比。
- 如果优势 A_t > 0(好动作):鼓励,但裁剪到 1+ε。
- 如果优势 A_t < 0(坏动作):抑制,但裁剪到 1-ε。
- ε 通常 0.1-0.2。
PPO-Penalty
加 KL 散度作为惩罚项,类似 TRPO。PPO-Clip 更常用。
在 RLHF 中的位置
1. SFT(监督微调) → 基础模型
2. 训练 Reward Model(RM) ← 用人类偏好数据
3. PPO:用 RM 作为奖励信号训练 LLM
↓ 同时加 KL 散度约束,防止 LLM 偏离 SFT 模型太远(保持生成质量)
痛点
- 超参敏感:learning rate、clip ratio、KL coefficient 都要调。
- 训练不稳定:reward hacking(学会骗 RM)、KL 崩坏(生成乱码)。
- 显存吃紧:要同时维护 policy、ref_policy、value、RM 四个模型。
- 慢:每个样本要 4 次 forward pass。
替代方案
- DPO(dpo):跳过 RM 和 PPO,直接用偏好对训练。稳定、便宜、效果接近。
- GRPO(DeepSeek):去 critic,用组内相对奖励,更省显存。
- REINFORCE / RLOO:更简单的 policy gradient,没 clip 但 variance 大。
- Online DPO / Iterative DPO:在线采样 + DPO 训练,介于 DPO 和 RLHF 之间。
实战经验
- 如果只是对齐,离线 dpo 就够,跑 PPO 是给自己找麻烦。
- 必须 PPO 时:先小数据集跑通 → 调 reward shaping → 上 KL 约束 → 看生成质量。
- 显存吃紧:开 gradient checkpointing + 混合精度,把 minibatch 调小。