PPO,Proximal Policy Optimization,是一种 policy gradient 强化学习算法。它的核心目标是:在提高 reward 的同时,限制新 policy 相对旧 policy 的单次更新幅度。在大模型后训练中,PPO 最典型的用途是 RLHF:语言模型作为 policy 生成回答,Reward Model 或 verifier 提供 reward,PPO 根据 reward 更新 policy,并通过 clipping、KL penalty、value baseline 等机制控制训练稳定性。

PPO 的直觉可以先压缩成一句话:

如果某个 token/action 比 baseline 更好,就提高它的概率;
如果更差,就降低它的概率;
但每次更新都不能离 rollout 时的旧策略太远。

这对语言模型很重要。LLM 的 action space 是整个 vocabulary,trajectory 是一串 tokens,reward 往往稀疏、延迟且带噪声。如果直接用普通 policy gradient 大幅更新,模型可能迅速出现重复、乱码、长度投机、reward hacking、KL runaway 或语言能力退化。PPO 的 clipping 机制就是为了让 policy update 更保守。

基本问题

强化学习希望最大化 policy 的期望回报:

其中 是 trajectory, 是整条轨迹的回报。policy gradient 的基本形式是:

这里的 是 advantage,表示在状态 下采取动作 比当前平均水平好多少。

如果 ,应该提高 的概率;如果 ,应该降低 的概率。问题在于,普通 policy gradient 没有天然限制更新幅度。一次训练 step 可能把某些 token 概率推得过高或过低,导致 policy 跳出原本可控的语言分布。

PPO 解决的问题不是“如何定义 reward”,而是:给定一批由旧 policy 采样出来的数据,如何比较稳定地更新当前 policy。

LLM 中的 RL 对象映射

在语言模型后训练里,RL 对象可以这样对应:

RL 概念LLM 后训练中的对应物
state prompt + 已生成前缀 tokens
action 下一个 token
policy 当前训练中的语言模型
old policy rollout 时用于生成 response 的冻结 policy
reference policy SFT model 或 base reference model
rewardRM score、verifier score、规则 reward、人类偏好代理
trajectoryprompt 后生成的一整段 response 或 multi-turn action sequence
return 从 token 之后累计得到的回报
value 当前状态未来期望回报的估计
advantage 当前 token/action 相对 baseline 的优势

这里有两个容易混淆的 policy:

  • old policy 用于 PPO ratio,控制当前 policy 相对 rollout policy 的单次更新幅度;
  • reference policy 用于 KL penalty,控制当前 policy 相对 SFT/base reference 的总体偏移。

二者解决的问题不同。old policy 是“这批数据由谁生成”;reference policy 是“模型整体不要偏离谁太远”。

Rollout 与 Update

PPO 训练天然分成两个阶段:

rollout phase:
  用当前 policy 生成 response
  保存 tokens、attention mask、old logprobs、value estimates 等
  用 reward model / verifier 计算 reward
 
update phase:
  固定 rollout 数据
  用当前 policy 重新计算 token logprobs
  计算 ratio、advantage、policy loss、value loss
  对同一批 rollout 做一个或多个 PPO epochs

这就是为什么 PPO 需要 old logprobs。rollout 时模型生成 token 的概率是 ;更新时当前模型给同一个 token 的概率是 。两者的比值衡量当前 policy 相对旧 policy 改了多少。

如果没有 old logprobs,就无法计算 PPO ratio,也就失去了 PPO clipping 的基础。

Probability Ratio

PPO 的核心变量是新旧策略概率比:

在 LLM 中通常用 logprob 计算:

如果 ,说明当前 policy 对这个 token 的概率和 rollout 时一样;如果 ,说明当前 policy 提高了该 token 的概率;如果 ,说明降低了概率。

PPO 不希望 偏离 1 太多。因为 rollout 数据是旧 policy 生成的,一旦当前 policy 距离旧 policy 太远,用旧数据估计当前 policy 的梯度就会变得不可靠。

Clipped Surrogate Objective

PPO 的 clipped objective 是:

其中 是 clip range,常见值如 0.1 或 0.2。

直观解释要分 advantage 正负来看。

时,这个 token/action 比 baseline 好,训练希望提高它的概率,即让 变大。但如果 已经超过 ,继续增大不再增加目标函数收益。这样可以防止模型对正 reward token 过度追涨。

时,这个 token/action 比 baseline 差,训练希望降低它的概率,即让 变小。但如果 已经低于 ,继续降低不再带来更多收益。这样可以防止模型对负 reward token 过度打压。

所以 PPO clipping 不是简单把梯度裁掉,而是在 objective 层面限制“从这批 rollout 中获得的收益”。它鼓励 policy 朝 advantage 指向的方向移动,但只允许移动到一个 trust region 附近。

Reward 与 KL Penalty

在 RLHF 中,reward 通常不是单纯的 reward model 分数。常见形式是:

第一项 是 reward model 或 verifier 给整段 response 的分数。第二项是 token-level KL penalty,惩罚当前 policy 偏离 reference policy。

KL penalty 的作用是约束模型不要为了 reward 走到奇怪分布里。例如 reward model 偏爱长回答,policy 可能学会无限变长;reward model 对某种模板打高分,policy 可能过度套模板。KL penalty 会让这种偏移付出代价。

PPO clipping 和 KL penalty 不是一回事:

  • PPO clipping 约束当前 policy 相对 old rollout policy 的单次更新;
  • KL penalty 约束当前 policy 相对 reference policy 的总体偏移。

实践中二者经常同时存在。

Value Model、Return 与 Advantage

PPO 需要 advantage 。Advantage 的作用是告诉 policy:当前 token/action 相对于当前状态的平均预期表现是好还是坏。

最简单的形式是:

其中 是从当前 token 开始的 return, 是 value model 对该状态未来回报的估计。

value model 的作用是 baseline。它不改变 reward 本身,但能降低 policy gradient 方差。没有 baseline 时,同一个 reward 会把整条 response 的所有 tokens 都往同一个方向推,噪声很大;有 value baseline 后,只有“比预期更好”的 token/状态才得到正 advantage。

在 LLM 后训练中,value model 常见实现是:

  • 在 policy model 上加一个 value head;
  • 单独训练一个 critic model;
  • actor 和 critic 共享部分 backbone;
  • 对每个 token 位置输出 scalar value。

value model 本身也要训练,通常用 value loss 拟合 return:

GAE

GAE,Generalized Advantage Estimation,是 PPO 中常见的 advantage 估计方法。它用 temporal difference residual 的加权和来平衡 bias 和 variance。

单步 TD residual 是:

GAE advantage 为:

其中:

  • 控制未来 reward 折扣;
  • 控制使用多少步未来 TD residual;
  • 越接近 1,越接近 Monte Carlo return,variance 更高但 bias 更低;
  • 越接近 0,越依赖一步 TD,variance 更低但 bias 更高。

在语言模型 RL 中,GAE 的难点是 reward 经常是 sequence-level 的。很多 token 本身没有即时 reward,最终 RM score 或 verifier score 才在 response 末端出现。因此实现里常把 KL penalty 作为 token-level reward,把最终任务 reward 加到最后一个有效 token 上,再从后往前计算 return 和 advantage。

LLM PPO 的 Loss 组成

一个典型 PPO 训练目标包含三部分:

policy loss:
  clipped surrogate objective
 
value loss:
  value model 拟合 returns
 
entropy bonus:
  可选,用于保持探索和分布多样性

若以最小化 loss 表示,常见形式是:

其中 是 value loss coefficient, 是 entropy coefficient。

语言模型实现中还要处理 loss mask:通常只对 assistant response tokens 或 model-generated action tokens 计算 policy loss,不对 prompt、system message、用户输入、工具返回等非模型输出 tokens 计算 policy gradient。

训练流程

典型 PPO-RLHF 流程如下:

  1. 从 prompt dataset 采样 prompts;
  2. 使用当前 policy 生成 responses;
  3. 保存 generated tokens、attention mask、old logprobs、values;
  4. 用 reward model、verifier 或规则函数对 response 打分;
  5. 计算 reference model logprobs,并构造 KL penalty;
  6. 组合 token-level KL reward 与最终 sequence reward;
  7. 计算 returns 和 advantages;
  8. 用当前 policy 重新计算 logprobs;
  9. 计算 ratio、clipped policy loss、value loss;
  10. 对同一批 rollout 做若干 PPO epochs / minibatches;
  11. 更新 policy 和 value model;
  12. 监控 reward、KL、clip fraction、entropy、value loss、response length 和评测指标。

这里最容易误解的是:PPO 不是在静态数据上做普通 supervised fine-tuning。它的训练样本来自当前或近当前 policy 的 rollout,policy 更新后,rollout 分布也会变化。因此 PPO 是 online 或 near-on-policy 的训练过程。

关键张量与数据字段

LLM PPO 的 batch 通常至少包含:

  • input_ids:prompt + generated response;
  • attention_mask:有效 token mask;
  • response_maskaction_mask:哪些 token 是 policy 生成并参与 loss;
  • old_logprobs:rollout policy 生成每个 response token 时的 logprob;
  • ref_logprobs:reference policy 对同一 token 的 logprob;
  • values:value model 在 rollout 或 update 时的 value estimate;
  • rewards:token-level reward 或最终 sequence reward;
  • advantages:每个 action token 的 advantage;
  • returns:value model 训练目标;
  • scores:reward model / verifier 的原始分数。

这些字段决定了 PPO 能不能正确工作。尤其是 old_logprobs 和 action mask:前者用于 ratio,后者决定哪些 tokens 真正被当作 actions 更新。

关键超参

  • clip range :越小越保守,越大更新越激进。
  • KL coefficient :越大越接近 reference,越小越容易 reward hacking。
  • learning rate:过大容易 collapse,过小 reward 改进慢。
  • rollout batch size:影响 advantage 估计方差和吞吐效率。
  • PPO epochs:同一批 rollout 重复优化次数;过多会过拟合旧样本。
  • minibatch size:影响梯度噪声和显存占用。
  • value loss coefficient:平衡 policy 与 value 学习。
  • entropy coefficient:鼓励探索,但过强会损害输出质量。
  • GAE :控制 return / advantage 的时间尺度。
  • generation temperature / top-p:影响 rollout 多样性。
  • max response length:影响 reward、KL、显存和训练稳定性。

监控指标

PPO-RLHF 需要同时看优化指标、分布指标和任务指标:

  • mean reward / verifier pass rate;
  • KL to reference;
  • policy entropy;
  • response length;
  • clip fraction;
  • approx KL between old and new policy;
  • ratio 分布;
  • value loss;
  • explained variance;
  • advantage mean / std;
  • invalid format rate;
  • reward hacking 样例;
  • benchmark regression;
  • safety / refusal / hallucination 指标。

只看 reward 上升是不够的。reward 上升同时 KL 暴涨、长度变长、人工偏好下降,通常意味着 reward hacking 或 distribution drift。

适用场景

PPO 适合这些情况:

  • reward 需要通过当前 policy rollout 在线获得;
  • reward 不只是静态 chosen/rejected preference;
  • 需要 value model 来降低方差;
  • 任务有复杂、多目标或稀疏反馈;
  • 希望在训练中持续探索新的 response 分布;
  • 可以承担 rollout、reward、value、reference、分布式训练的工程成本。

PPO 不一定适合这些情况:

  • 只有静态偏好对,且不需要在线探索;
  • reward model 不可靠,容易被 hacking;
  • rollout 成本过高;
  • value model 很难训练稳定;
  • 目标只是让模型模仿高质量回答格式。

与 DPO / GRPO 的关系

PPO、DPO、GRPO 不是简单的先后替代关系,而是不同约束下的选择。

DPO 用静态 preference pairs 直接优化 policy,不需要在线 rollout、reward model inference 和 value model,工程更简单,但探索能力弱,受限于离线数据覆盖。

GRPO 保留 rollout 和 policy optimization,但用同一 prompt 的 group reward 估计 baseline,减少 value model 依赖。它适合多候选、可验证 reward 的 reasoning 任务。

PPO 保留 value model 和 online policy optimization,工程最重,但表达能力也更通用。只要 reward 可以定义,PPO 可以处理更一般的 RLHF / RLVR / agent reward 设置。

失败模式

  • Policy collapse:更新过大导致语言质量退化、重复或模板化。
  • Reward hacking:模型利用 RM 或 verifier 漏洞获得高分。
  • KL runaway:policy 快速偏离 reference。
  • Value overfitting:value model 对 rollout 数据过拟合,advantage 失真。
  • Poor explained variance:value model 无法解释 returns,policy gradient 方差变大。
  • Length exploitation:模型通过变长提高 reward。
  • Mode collapse:模型收敛到单一输出模式,探索下降。
  • Old-policy overfitting:PPO epochs 太多,当前 policy 过度拟合同一批旧 rollout。
  • Mask 错误:把 prompt 或 observation tokens 当作 action tokens 更新。
  • Infrastructure complexity:rollout、reward、reference logprobs、value、训练同步都很重。

常见误解

PPO clipping 不等于 KL penalty。 Clipping 约束的是 current policy 相对 old rollout policy 的 ratio;KL penalty 约束的是 current policy 相对 reference policy 的偏移。

Value model 不负责给最终答案打分。 Reward model / verifier 给 reward,value model 估计未来 expected return,用来降低 policy gradient 方差。

PPO 不是普通 SFT。 SFT 模仿数据中的 target tokens;PPO 根据 reward 调整当前 policy 对自己生成 tokens 的概率。

Reward 高不代表模型真的更好。 如果 reward 上升但 KL、长度、失败样例和人工偏好变差,通常是 reward hacking。

Token-level action 不意味着每个 token 都有真实语义动作。 它是语言模型 RL 的建模方式。对于工具调用或 agent trajectory,还需要额外区分模型生成 tokens 与环境 observation tokens。

经典论文与资料

相关概念