TRPO 与 PPO
策略更新过大会导致性能崩溃。TRPO 用 KL 约束的二阶方法保证单调改进;PPO 用裁剪的目标函数以一阶方法近似之。本章推导替代目标、解释裁剪的作用,并讨论 PPO 实际效果高度依赖实现细节这一事实。
问题:一步走太远
Section titled “问题:一步走太远”on-policy 方法用当前数据更新策略,数据的有效性以"策略没怎么变"为前提。学习率一大、更新一远,新策略就偏离了产生数据的分布,优势估计失效,性能瞬间崩溃且难以恢复(策略可能掉进很差的区域,再也采不出好数据)。监督学习没有这个问题(数据固定),RL 特有。
TRPO:KL 约束的单调改进
Section titled “TRPO:KL 约束的单调改进”TRPO(Schulman et al., 2015)的思路:优化一个替代目标(surrogate objective)——用旧策略 的数据估计新策略的表现:
其中比值 是重要性权重。数学上可证明(Kakade & Langford 的保守策略迭代):在旧策略附近,替代目标的改进近似真实改进;且存在 使 的 KL 邻域内单调改进。TRPO 把"附近"写成硬约束:
这是一个带约束的二阶优化(KL 的二阶近似 = Fisher 信息矩阵,用共轭梯度求解)。理论上优雅,实现复杂。
PPO:裁剪的一阶近似
Section titled “PPO:裁剪的一阶近似”PPO(Schulman et al., 2017)观察到:限制更新幅度不必用约束优化,直接把目标函数在超过阈值的地方压平即可。PPO-clip 的目标:
其中 。裁剪的作用分两个方向:
- 正优势、 过大(新策略把好动作概率提得太高):目标被截断,梯度消失,不再鼓励继续提高——防止一步走太远;
- 负优势、 过小:同样截断,不再鼓励继续压低坏动作的概率。
min 保证截断后的目标不高于未截断版本,即只截"过度自信"的方向。PPO 是一阶方法(Adam 即可),实现简单,效果与 TRPO 相当,迅速成为默认算法。
ratio = exp(log_pi_new - log_pi_old) # 重要性权重 ρ_tsurr1 = ratio * advantagesurr2 = clamp(ratio, 1 - eps, 1 + eps) * advantageloss = -mean(min(surr1, surr2)) # 再加价值损失与熵奖励实现细节:PPO 的隐藏工程
Section titled “实现细节:PPO 的隐藏工程”PPO 的性能高度依赖实现细节——同一伪代码在不同代码库中的表现差异可以超过算法之间的差异(→ 评估协议与可复现性)。Huang 等人整理的 "37 Implementation Details" 中影响最大的:
- 优势归一化:每个 minibatch 把 标准化(减均值除标准差)——几乎必需;
- 价值裁剪:价值损失也做类似 clip 的截断;
- 学习率退火与线性衰减;
- 多次 epoch 重用数据(通常 3–10 个 epoch,clip 限制每次的偏移量);
- 正交初始化、梯度裁剪、熵奖励系数。
定位:RLHF 的默认算法
Section titled “定位:RLHF 的默认算法”PPO 在游戏中是竞争者之一,在 RLHF 中是默认算法(InstructGPT 之后):token 级 MDP、四个模型并存的基础设施(→ PPO for LLM)、以及裁剪目标对小批量高噪声梯度的稳健性,都让它适合大模型后训练。KL 约束思想(信任域)在这里以逐 token KL 惩罚的形式延续(→ KL 惩罚 / 信任域)。
- PPO-clip 的目标:
- 优势归一化、价值裁剪、学习率退火等细节影响巨大
- PPO 是 RLHF 的默认算法