详细解释
PPO(Proximal Policy Optimization,近端策略优化) 是 OpenAI 2017 年提出、直到今天仍然是 LLM 对齐(RLHF 第三阶段)的主力 RL 算法。它之所以能替代之前的 Policy Gradient / TRPO / A2C,核心卖点只有一个字:稳。普通策略梯度(Vanilla PG)算法一次学太多步,会把策略推到一个全新的分布上,再回头采样经验(On-Policy)的时候,之前的经验已经失效了,训练会上下震荡、直接崩;PPO 给这种”步子迈大”的行为加了一个硬夹子(clip 裁剪):如果新策略比旧策略对某个动作好出大于 (1 + epsilon) 倍,就不再继续加奖励了,强迫每次更新都只在”旧策略附近一小圈”里转悠——也就是论文名字”Proximal 近端”的来历。
LLM 场景下 PPO 的 4 个模块常驻显存
做 RLHF 时,GPU 上通常常驻 4 个模型,这也是 PPO 显存开销巨大、很多团队因此转向 DPO 的根本原因:
| 模型角色 | 是否要梯度 | 作用 | 典型占显存比例 |
|---|---|---|---|
| Policy(当前策略,旧的 SFT 初始化过来) | ✅ 是 | 我们真正要训练的模型,每步生成回答,根据奖励 + KL 做梯度反传 | 约 25% |
| Reference(参考模型 = SFT 冻结快照) | ❌ 否 | 计算 KL 散度:Policy 输出分布与原始 SFT 的距离不能太远,防止 Reward Hacking | 约 25% |
| Reward Model(第二阶段训练好的 RM) | ❌ 否 | 给 Policy 每次生成的完整回答打一个标量奖励分 | 约 25% |
| Critic(价值模型,和 Reward 同结构分开训练) | ✅ 是(部分实现) | PPO 估计 Advantage(优势函数)时需要的 V(s) 基线,减少梯度方差 | 约 25% |
如果是 70B 模型,单份权重就占 ~140G(BF16);4 份就是 560G,至少 8 张 A100-80G 才能开一个 PPO 训练 slot——所以 2025 年小团队几乎都是走 DPO 路线,PPO 只有大厂做。
PPO Loss 三大块(不用背但得懂)
写在代码里的总损失函数长这样(直觉版):
总 Loss = Policy_Loss(带 clip 裁剪) + 0.5 × Value_Loss( Critic MSE) − Entropy_Bonus
- Policy Loss(主角):正常策略梯度是 Advantage × log π_new(a|s);PPO 把它和 ratio 比率(π_new/π_old)相乘后再做 clip(ratio, 1-eps, 1+eps)——eps 通常取 0.1 到 0.2,意思是”每步最多允许 10% 到 20% 的变化”,超过这个幅度就白学,鼓励往回收敛。
- Value Loss(配角):Critic 预测的 V(s) 与”实际回报(Reward + 未来折现)“的 MSE,让 Critic 越来越会估每个状态好坏。
- Entropy Bonus(调味剂):扣 Policy 的熵(减一个负熵相当于鼓励熵增加),鼓励模型别太早陷入”任何时候都只输出一种答案”的坍塌——取
c_0.01级别很小的系数。
与 DPO 的 2025 年选型建议
| 维度 | PPO(RLHF) | DPO |
|---|---|---|
| 需要 RM? | ✅ 是(外加 Critic 可选) | ❌ 否 |
| 显存开销 | 4×模型大小 | 2×模型大小(SFT + Reference) |
| 训练稳定性 | 中低,KL / LR / clip 稍微错一个就崩 | 高,本质监督微调,和 SFT 调参手感一致 |
| 效果上限(同等偏好数据量) | 略高 1 个点(大厂可挖) | 略低 1 个点,但 99% 场景没人感知 |
| 上线成本 | 贵,8×A100 起步 | 便宜,单张 24G 消费卡可做 7B |
如果你是 C 端产品日活过 100 万、有 30 万条以上真实偏好数据,值得上 PPO;其他场景直接上 DPO + 每季度再人工抽标补数据,ROI 最高。唯元智创 控制台把两种对齐方式都做成了一键切换,同一批偏好 JSONL 既能跑 DPO 也能跑 PPO,可跑 A/B 对比再决定主用哪个。