PPO:重要性比率与裁剪策略目标#
TL;DR#
本页内容7 个部分
1. 旧数据复用与过大更新#
假设一个正优势动作在采样时的概率为 。重复训练同一批数据后,current 对它的概率从 增至 ,概率比相应从 增至 。怎样复用这批数据,同时限制该任务项继续提高概率的激励?
Importance ratio 允许复用 old 策略的数据,但它不会阻止 current 继续远离 old。正优势任务项鼓励提高所采动作的概率,负优势项鼓励降低该概率。这里的“有利方向”指提高正优势动作的概率或降低负优势动作的概率。PPO 通过裁剪目标限制同批数据沿这些方向继续更新的激励。
2. 从动作概率计算裁剪目标#
PPO(Proximal Policy Optimization)比较当前策略与采样策略对同一个动作的概率。先用概率比计算未裁剪任务项,再限制该项沿优势所指方向继续增大的激励。
2.1 概率比与未裁剪任务项#
负责采样,在本批优化期间固定; 是正在更新的 Actor。将保存的状态和动作记为 、,计算:
在同步采样且 current 尚未更新时,;此后 表示该动作的概率提高, 表示降低。Ratio 也可以由 current 与 old 的 log-prob 差取指数得到;其中 old log-prob 固定,current log-prob 每次重算并保留梯度。
本批估计出的 表示动作相对价值参照的更新权重,优化期间固定; 表示本批有效位置的平均。先考虑最大化 。当 时,提高 能增大目标;当 时,降低 能增大目标。在未裁剪目标中,沿有利方向改变概率比会继续增大该任务项的目标值。
这是在旧 rollout 状态上定义的局部替代目标(surrogate)。其中的 importance ratio 校正同一状态下的动作分布。
沿用采样概率 的动作,假设它的固定优势为 。当前概率为 时,,未裁剪任务项为 ;增至 时,,任务项增至 。单纯最大化这一项,仍有继续提高该动作概率的激励。
2.2 正优势动作的上界裁剪#
取裁剪宽度 。对正优势动作,PPO 将概率比超过 后的任务项保持为常数。仍取 :
- 时,概率比未超过上界,任务项仍为 。
- 时,原始项是 ,裁剪后,,所以 。
因此, 以后再提高这个动作的概率,该样本的目标值仍是 ,不再继续增加。
2.3 负优势动作的下界裁剪#
对负优势动作,降低概率比会提高未裁剪目标。PPO 因此限制低于 后的任务项。取 ,从 降到 时,目标从 提高到 ,所以该任务项提供降低这个动作概率的梯度激励。
如果继续降到 ,原始项是 ,裁剪后,。因此 ,继续降低概率也不再改善目标。
概率比沿不利方向越过另一侧阈值时,PPO 仍使用较低的原始项目标值。例如 却降到 ,目标取原始项 ,而非裁剪项 ; 却升到 ,目标取原始项 ,而非裁剪项 。
2.4 一般裁剪目标与分支推导#
把正、负优势的规则合并起来。令 为裁剪宽度,同时计算原始项 和裁剪项,取较小值,再对本批有效位置平均:
例如 时,clip 把第二项中的 ratio 截到 。第一项仍保留原始 ratio;外层的 决定当前样本由哪个分支起作用。[1]
当 时,该位置的目标可化为 ,上界限制该样本在有利方向上可增加的目标值。
当 时,乘负数会翻转大小关系,该位置的目标可化为 。
这些分支说明:优势为正且概率比超过上界,或优势为负且概率比低于下界时,对应任务项为常数,任务梯度为零;其他分支仍通过原始概率比提供梯度。这里不讨论恰在裁剪边界处的导数。
3. 从 LLM 奖励计算到裁剪更新#
3.1 逐 token 奖励与参考 KL#
对 LLM,状态是 prompt 与已生成前缀 ,动作是当前 token 。每个有效生成位置分别计算 ratio 和 clipped objective。
Actor 是生成回答的策略,Critic 预测状态的平均回报。下面采用 KL 奖励塑形:先修改逐 token 奖励,再计算 return 和 advantage。InstructGPT 使用了相对 SFT 模型的逐 token KL 惩罚。[2]
保留一个冻结的 reference 模型,例如 SFT 模型的副本。每轮在 Actor 更新前:
- 用 old 生成回答,保存各 token 在 old 下的 log-prob。
- 将同一份 prompt 和回答输入 reference,在同一前缀上计算同一个 token 的 log-prob:先将 logits 转成对数概率,再取出实际生成 token 对应的值。
- 评分器给完整回答打分;保存 Critic 对各 token 生成前状态的价值估计。
令 为任务奖励, 为 KL 系数,计算:
如果只有整条回答的分数,就把它加到最后一个有效生成位置,其余位置只包含 KL 奖励。采样时 current 等于 old;这批奖励在更新前计算一次,然后固定,所以这里写 old。 下一轮采样时才刷新 old、重算奖励。
单个 token 的 log-prob 差可以为负;对相应动作分布取期望才得到 KL。TRL 的 PPO 实现同样根据 old 与 reference 的 log 概率差计算 KL 奖励。[3]
3.2 三个 token 的回报与优势计算#
假设回答有三个有效生成 token,最后一个是终止 token,任务评分为 ,。以下是手算示例:
| 位置 | Old 的 log-prob | Reference 的 log-prob | 任务奖励 | 加入 KL 后的奖励 |
|---|---|---|---|---|
| 1 | −1.0 | −1.2 | 0 | −0.02 |
| 2 | −1.5 | −1.4 | 0 | +0.01 |
| 3 | −0.7 | −1.0 | 1 | 0.97 |
例如位置 3 的奖励为 。
为便于手算,取折扣因子 ,完整生成到终止,使用 Monte Carlo return ,得到 。
若本轮 Critic 的价值估计为 ,则 为 。这里没有做 advantage 归一化。
若改用广义优势估计(Generalized Advantage Estimation,GAE),同样以含 KL 的奖励计算优势。
Actor 用这些固定优势更新,Critic 回归含 KL 的 return。这里从概率得到的 KL 奖励已在准备阶段缓存;Actor 更新时不会沿奖励或 Critic 预测的计算图反传,而是由固定优势给 current 的 log 概率梯度加权。KL 因而沿“奖励 → return → advantage”影响 Actor,同时改变 Critic 的学习目标;无需再重复加入同一份 KL loss。实际计算用 mask 标明有效生成位置。
奖励停止梯度后,正则作用怎样保留,见 KL Regularization。
3.3 用三个优势计算裁剪目标与梯度#
继续使用这条回答,三个位置的固定优势为 ,裁剪宽度为 。假设更新过程中的 current/old 概率比分别为 。这些比值是用于手算的设定;current 尚未更新时,三个比值都为 。
| 位置 | 固定优势 | 概率比 | 原始项 | 裁剪项 | 取较小值 |
|---|---|---|---|---|---|
| 1 | 0.46 | 1.1 | 0.506 | 0.506 | 0.506 |
| 2 | 0.38 | 1.3 | 0.494 | 0.456 | 0.456 |
| 3 | 0.57 | 0.9 | 0.513 | 0.513 | 0.513 |
位置 2 的优势为正,概率比超过上界,所以 。位置 3 虽然概率下降,但仍使用原始项;它继续提供提高所采 token 概率的梯度激励。
对三个有效位置平均,得到 。只计策略任务项时,Actor loss 是它的相反数。KL 已经通过奖励进入这些优势,不在这个目标外重复扣除。
目标值还不等于梯度。固定 old 概率和优势,未进入裁剪常数分支的位置满足:
因此,本例各位置的 log 概率梯度系数为:、 和 。位置 2 的任务梯度为零,但共享参数和其他训练项仍可能改变它的概率;这些系数不保证更新后各 token 的实际概率变化。
本文按本批所有有效生成位置平均,排除 prompt 和 padding。只有一条回答时,分母就是 ;多条回答时,分母是它们的有效生成 token 总数。这与每条回答先各除自己的长度再平均不同,具体对照见 Loss 平均。
4. Actor–Critic 更新流程#
将本例的计算推广到一批回答,使用完整 Monte Carlo return ,即从当前位置起累加含 KL 的奖励。使用 GAE 时需相应替换优势估计与价值回归目标。[4]
- 采样并保存:把当前 Actor 作为本轮 ,采一批 rollout,保存状态、动作和 old log-prob,计算任务评分与冻结 reference 的 log-prob。
- 准备学习目标:先构造含 KL 的奖励 ,再计算 ,用更新前的 Critic 预测计算 ,随后固定这些值。
- 重复更新 Actor:每个 minibatch 重算 current log-prob,得到 ,再最大化 clipped objective。
- 更新 Critic:用本批 return 回归价值,例如最小化 。
- 重新采样:本批更新结束后刷新 old,采下一批数据。
在步骤 3–4 中,old log-prob、奖励、return 和 advantage 固定;current log-prob 与 Critic 的预测重算。 Actor 的梯度通过 current log-prob 传播,不通过 advantage 反向传播。
本文用 表示要最大化的策略目标,用 表示要最小化的 loss。若联合优化,常写成 ; 是动作分布的熵, 控制价值损失和可选 entropy bonus 的权重。本页的 LLM 配置先用 reference KL 修改奖励,再执行这套循环。
5. 局限性与参考约束#
5.1 裁剪目标不提供硬约束#
Clipping 改的是样本对目标的贡献,没有强制模型输出满足 。其他样本的梯度、共享参数和一次优化步都可能让这个位置的 ratio 越界,例如出现 。
Clipping 用简单的一阶优化追求保守更新,但不给 ratio、KL 或单调改进提供硬保证。训练中可监控 current/old KL 和进入裁剪分支的比例,按需提前停止本批更新。[1]
5.2 与 reference KL 的分工#
| 机制 | 参照 | 作用 |
|---|---|---|
| PPO clipping | 本轮采样策略 old | 削弱单轮过大更新的激励 |
| Reference KL | 冻结的 reference | 惩罚相对固定参考模型的偏离 |
每轮将 current 保存为新的 old 快照后,初始 ratio 回到 ,reference KL 却不会因此归零。新一轮要为新回答重算 old/reference log-prob、奖励和 advantage,reference 参数继续冻结。
PPO 还有自适应 KL penalty 形式,比较的是 old 与 current;判断 KL 项的作用时,需要明确其比较的两个策略。[1]