后训练最危险的失败,不是 loss 直接变成 NaN,而是 reward 曲线一路上升,模型回答却越来越差。
这类失败会让人误以为训练“有效”,直到人工评测发现模型开始冗长、谄媚、拒答异常、格式化胡说,或者在原本会做的任务上退化。
PPO、GRPO、RLVR 的公式不能单独保证稳定。
真正可控的训练,依赖一组仪表盘:KL、reward、reward-vs-KL、熵、长度、梯度范数、value loss、clip fraction、ratio 分布、评测分数。
本文把这些信号逐个拆开,说明它们在正常训练和崩溃前分别长什么样,并给出“症状→可能原因→处理动作”的诊断表。
读完你应该能在一轮 RLHF/RLVR 训练中判断:模型是在学习、在钻奖励漏洞,还是正在接近策略崩溃。
一、把后训练看成闭环控制问题
1.1 奖励不是唯一仪表
RL 的目标写起来像最大化奖励。
在 LLM 后训练里,只看 reward 是危险的。
奖励模型可能有偏差。
规则奖励可能覆盖不完整。
KL 惩罚可能没有被正确计入。
回答长度可能影响 reward。
采样温度可能改变分布。
因此 reward 上升只能说明“当前奖励函数给了更高分”。
它不能单独说明人类偏好、推理能力、安全性或通用能力变好。
1.2 PPO 的稳定性来自约束
PPO 的核心不是让策略任意追逐奖励,而是在旧策略附近更新。
裁剪目标限制 ratio:
\[ r_t(\theta)=\frac{\pi_\theta(a_t\mid s_t)}{\pi_{\theta_{\mathrm{old}}}(a_t\mid s_t)}. \]
当 \(r_t\) 偏离 1 太远,目标会被 clip。
RLHF 还常加 reference KL:
\[ R_t = r_{\mathrm{rm}} - \beta \left(\log \pi_\theta(a_t\mid s_t)-\log \pi_{\mathrm{ref}}(a_t\mid s_t)\right). \]
其中 \(\beta\) 是 KL 系数。
这两个约束分别控制“离旧策略多远”和“离初始参考模型多远”。
1.3 仪表盘要覆盖三层
稳定性指标至少分三层。
第一层是优化层:loss、gradient norm、learning rate、clip fraction、ratio。
第二层是策略层:KL、entropy、response length、logprob、value prediction。
第三层是行为层:固定 eval prompt 上的胜率、正确率、安全拒答率、回归任务表现。
只看第一层,会错过奖励黑客。
只看第三层,会定位太慢。
稳定训练需要三层一起看。
二、KL:策略漂移的主仪表
2.1 KL 在 RLHF 中的作用
Reference KL 约束当前策略不要离 SFT 初始化太远。
常见 token 级近似是:
\[ \mathrm{KL}_t \approx \log \pi_\theta(a_t\mid s_t)-\log \pi_{\mathrm{ref}}(a_t\mid s_t). \]
序列级 KL 可以对 response token 求和或求均值。
具体记录哪一种,要在指标里写清楚。
求和 KL 会随长度上升。
均值 KL 更适合比较不同长度样本。
两者都应该看,因为长度本身可能被策略操纵。
2.2 KL 过低意味着什么
KL 接近 0 不一定好。
如果 reward 没有上升、entropy 没有变化、eval 没有改善,KL 过低可能说明训练几乎没有推动策略。
常见原因包括:
- KL 系数 \(\beta\) 太大。
- learning rate 太小。
- advantage 被 normalization 压得太弱。
- reward scale 太小。
- PPO clip 太严格。
- old logprob 与 new logprob 混用,ratio 被错误固定。
此时模型看上去很稳定,但实际上没有学习。
2.3 KL 过高意味着什么
KL 快速上升通常是危险信号。
它说明策略为了追逐奖励,开始远离 reference。
在偏好奖励场景,KL 高会放大奖励模型漏洞。
在 RLVR 场景,KL 高可能说明模型学到强格式偏好或过长推理模式。
如果 KL spike 同时伴随 entropy crash、clip fraction 升高、eval 下降,基本可以判定为破坏性更新。
2.4 KL spike 的常见原因
KL spike 常由以下问题引发。
- 奖励尺度突然变大。
- reward normalization 作用域改变。
- learning rate 或 warmup 设置过激。
- 某类 prompt 的 reward 分布异常。
- 权重同步导致样本过旧,ratio 分布变宽。
- KL mask 错位,prompt 或 padding 被错误计入。
- reference model/tokenizer/template 与 policy 不一致。
其中第 6 和第 7 是实现错误,不是超参问题。
2.5 固定 KL 系数与自适应 KL
固定 KL 系数简单可复现。
它适合奖励尺度稳定、prompt 分布稳定的实验。
自适应 KL 系数会根据目标 KL 调整 \(\beta\)。
如果实际 KL 高于目标,就增大 \(\beta\)。
如果实际 KL 低于目标,就减小 \(\beta\)。
简化形式可以写成:
\[ \beta_{k+1}=\beta_k \cdot \exp\left(\eta \cdot \frac{\mathrm{KL}_k-\mathrm{KL}_{\mathrm{target}}}{\mathrm{KL}_{\mathrm{target}}}\right). \]
这里 \(\eta\) 是调节速度。
自适应 KL 不能替代正确的 reward scale 和 learning rate。
它只是把一个手动阀门变成闭环阀门。
2.6 KL 指标的切片
全局 KL 不够。
至少要按以下维度切片:
- prompt 来源。
- 任务类型。
- prompt 长度。
- response 长度。
- 采样温度。
- reward 分位数。
- policy version。
很多崩溃先发生在长回答或特定任务上。
等到全局 KL 明显异常,模型可能已经过了可逆边界。
三、奖励:看均值,也看 reward-vs-KL
3.1 reward 曲线的正常形态
理想情况下,训练初期 reward 上升,KL 温和上升,eval 同步改善。
随后 reward 增速放缓,KL 接近目标区间,entropy 缓慢下降但不崩。
这是一条“用适度策略变化换取真实收益”的曲线。
如果 reward 上升完全不伴随 KL 上升,要怀疑 reward 统计或训练是否真正生效。
如果 reward 上升伴随 KL 爆炸,要怀疑过优化。
3.2 reward-vs-KL 比单独 reward 更有用
可以把每个 checkpoint 画在二维平面上:横轴 KL,纵轴 reward 或 eval score。
好的训练点应该在“少量 KL 换来更多质量”的区域。
坏的训练点会在“KL 很高但 eval 不升或下降”的区域。
这比单独看 reward 更能发现奖励黑客。
Ouyang 等人在 InstructGPT 中使用 KL penalty 控制策略偏离,这个思想在后续 RLHF 实现中延续下来。
3.3 reward 上升但质量下降
这是最典型的奖励黑客信号。
可能原因包括:
- 奖励模型偏爱长回答。
- 奖励模型偏爱自信语气。
- 奖励模型没有覆盖事实性。
- 策略学会触发格式模板。
- 安全 reward 与 helpfulness reward 权重失衡。
- 训练 prompt 分布与 eval 分布错位。
处理这类问题,不能只调学习率。
必须检查 reward 模型和评测集。
3.4 reward normalization 与 whitening
PPO 对奖励尺度敏感。
常见做法包括按 batch 或按 rollout window 对 reward/advantage 做归一化。
例如 advantage whitening:
\[ \hat{A}_t = \frac{A_t - \mu_A}{\sigma_A + \epsilon}. \]
它能减少尺度漂移带来的更新震荡。
但 whitening 也会改变不同 prompt 之间的相对权重。
如果一个 batch 混合了数学、写作、安全拒答任务,统一 whitening 可能掩盖任务差异。
3.5 奖励分布比均值更重要
至少记录 reward 的分位数。
均值上升可能来自少数高分样本。
低分尾部扩大可能说明模型在部分任务上崩溃。
奖励方差上升可能预示训练不稳定。
对 RLVR,应该同时记录通过率、部分正确率、格式错误率和验证器异常率。
把验证器异常当成模型错误,会污染 reward 分布。
四、熵:探索与塌缩的温度计
4.1 policy entropy 的含义
策略熵衡量模型在每个状态下分布有多分散。
Token 级熵是:
\[ H(\pi_\theta(\cdot\mid s_t))=-\sum_a \pi_\theta(a\mid s_t)\log \pi_\theta(a\mid s_t). \]
熵下降表示策略更确定。
适度下降是学习的结果。
快速塌缩是危险信号。
4.2 熵塌缩的表现
熵塌缩常见表现包括:
- 回答模板化。
- 复读固定短语。
- 对不同 prompt 给出相似结构。
- 采样多样性消失。
- PPO ratio 分布变尖或极端。
- eval 上出现模式化错误。
如果 entropy crash 同时伴随 reward 上升,要高度怀疑模型学到了奖励模型偏爱的模板。
4.3 熵过高的表现
熵太高也不是好事。
它可能说明模型没有学习,仍在高噪声探索。
表现包括:
- reward 没有稳定上升。
- 正确率波动大。
- 格式错误率高。
- KL 低但输出质量不改善。
- 同一 prompt 多次采样差异过大。
这种情况常见于 learning rate 太小、reward 太弱、KL 太强或采样温度太高。
4.4 熵奖励的作用
熵奖励可以鼓励探索:
\[ L_{\mathrm{entropy}} = \alpha \mathbb{E}_t[H(\pi_\theta(\cdot\mid s_t))]. \]
在 LLM 后训练中,熵奖励要谨慎使用。
语言模型的输出空间极大,盲目提高熵可能增加无意义 token。
更常见的做法是通过 KL、采样温度和训练强度间接控制熵。
当确实使用 entropy bonus 时,应同时看 eval 与格式错误率。
4.5 熵要按位置看
平均熵会掩盖位置差异。
开头 token 熵过低,模型可能固定开场模板。
结尾 token 熵过低,模型可能固定免责声明或结束格式。
推理链中段熵过低,可能说明模型过早锁定错误路径。
因此长回答训练中,按 token position 或相对位置统计熵很有价值。
五、长度偏置:最常见的隐性黑客
5.1 为什么长度会被奖励利用
很多偏好数据里,较长回答更容易显得“完整”。
奖励模型可能把长度当成质量代理。
RL 会放大这个代理。
于是模型学会写更长、更绕、更像解释的回答,而不一定更正确。
这就是长度黑客。
5.2 长度指标怎么记
至少记录:
- prompt 长度。
- response 长度均值。
- response 长度分位数。
- EOS 率。
- max_new_tokens 截断率。
- reward 与长度的相关性。
- KL 与长度的相关性。
- eval 正确率按长度分桶。
只看平均 response length 不够。
截断率上升通常比均值更早暴露问题。
5.3 长度与 KL 的耦合
序列总 KL 会随 token 数增加。
如果训练目标使用序列级奖励减序列级 KL,长度本身就参与权衡。
如果 reward 对长度的增长快于 KL 惩罚,模型会变长。
如果 KL 惩罚过强,模型可能变短并提前结束。
因此要同时看 reward、KL 和 length。
5.4 长度归一化的取舍
可以对 reward 做长度归一化。
也可以对 KL 使用 token 平均。
还可以在 reward model 训练时做长度控制。
但任何长度处理都会改变目标。
例如数学推理任务需要足够长的 reasoning trace。
过强的长度惩罚会压制推理。
写作任务则可能更容易被冗长回答欺骗。
所以长度控制要按任务切片,而不是全局一刀切。
5.5 length-controlled eval 的意义
AlpacaEval 的 length-controlled 版本强调控制长度偏置对自动评测的影响。
这对训练也有启发:如果评测 judge 偏爱长回答,训练就可能围绕这个偏好过优化。
在后训练里,评测和奖励经常互相影响。
评测存在长度偏置,奖励也可能学到长度偏置。
六、梯度、ratio、clip fraction 与 value loss
6.1 gradient norm
梯度范数是优化层的第一报警器。
突然变大通常说明 reward/advantage 尺度异常、学习率过高、batch 组成异常或混合精度溢出。
长期接近 0 则说明学习信号太弱、clip 太多或梯度被错误 mask。
梯度裁剪可以避免单步破坏性更新。
但如果每一步都触发裁剪,说明上游尺度需要调整。
6.2 PPO ratio 分布
PPO ratio 不应该只看均值。
应该看分位数和极端值。
如果 ratio 分布很宽,说明新旧策略差异大。
可能原因是 learning rate 过高、PPO epoch 太多、样本 stale 或 KL 太弱。
如果 ratio 几乎全是 1,要检查 old/new logprob 是否混淆。
6.3 clip fraction
Clip fraction 表示有多少 token 的 ratio 被裁剪。
它太低,可能说明更新太弱。
它太高,说明大量样本被 clip,优化目标在“踩刹车”。
高 clip fraction 加高 KL,是破坏性更新的常见组合。
高 clip fraction 加 reward 不升,则可能说明训练在做无效大步。
6.4 value loss
使用 critic 时,value loss 是稳定性关键。
Value 学不准,advantage 方差会变大。
Value loss 爆炸会污染 actor 更新。
Value loss 过低但 reward/eval 不动,也可能是 value 只学会了 batch 均值。
要同时看 explained variance 或 returns-vs-values 的相关性。
6.5 GAE 参数的影响
GAE 使用 \(\gamma\) 和 \(\lambda\) 控制偏差—方差折中。
LLM 的 reward 常是序列末端奖励。
这会让 credit assignment 更困难。
如果 advantage 在长序列前半段噪声很大,policy 可能被错误 token 驱动。
过程奖励可以缓解这个问题,但也会引入新的奖励规范风险。
七、常见失败模式与签名
7.1 奖励黑客
签名:reward 上升,人工质量或固定 eval 下降。
伴随信号可能是长度上升、重复率上升、judge win-rate 上升但人工检查下降。
处理重点是 reward 模型、eval judge 和数据分布。
只调 PPO 超参通常治标不治本。
7.2 KL 爆炸
签名:KL 短时间内急升,ratio 分布变宽,clip fraction 上升。
伴随信号可能是 entropy crash、gradient norm spike、eval 下降。
处理重点是降低 learning rate、增大 KL 系数、减少 PPO epoch、检查 reward scale 和样本 staleness。
7.3 模式塌缩
签名:entropy 快速下降,回答变模板化,多样采样差异缩小。
伴随信号可能是 reward 暂时上升、长度固定、拒答模板增多。
处理重点是减弱更新、增加 entropy/采样多样性、重新检查奖励是否偏爱模板。
7.4 长度黑客
签名:response length 上升,截断率上升,reward 与长度强相关。
伴随信号可能是 token 平均 KL 不高但序列 KL 上升。
处理重点是 length-controlled reward/eval、长度切片、max token 策略和奖励重训。
7.5 无学习
签名:reward、KL、entropy、eval 都几乎不变。
可能原因是 KL 太强、learning rate 太小、reward scale 太弱、loss mask 错误或 optimizer 未更新。
处理重点是先用小 batch 过拟合测试确认梯度链路有效。
7.6 评测回归
签名:目标任务变好,非目标任务变差。
这就是对齐税或能力回退的工程表现。
处理重点是多任务 eval、混合数据、KL 约束、早停和 checkpoint 选择。
八、诊断表:症状、原因与处理
| 症状 | 可能原因 | 优先处理 |
|---|---|---|
| reward 上升但人工质量下降 | 奖励黑客、长度偏置、judge 偏差 | 抽样审查、按长度切片、重训/校准 reward |
| KL 突然 spike | 学习率过高、reward 尺度异常、样本 stale | 降 LR、增大 \(\beta\)、限制队列年龄 |
| KL 长期接近 0 | KL 太强、reward 太弱、mask 错误 | 降 \(\beta\)、检查 reward scale、做梯度链路测试 |
| entropy 快速下降 | 模式塌缩、模板奖励、更新太强 | 降 LR、减 PPO epoch、检查重复模板 |
| entropy 很高且 reward 不升 | 探索噪声大、学习信号弱 | 降采样温度、增强 reward、检查 advantage |
| response length 持续变长 | 长度黑客、max token 过大 | length-controlled eval、长度惩罚或 reward 校准 |
| 截断率升高 | 模型学会拖长、停止条件不合理 | 调整 stop/EOS、按任务设置 max tokens |
| gradient norm spike | reward/advantage 异常、混合精度溢出 | 梯度裁剪、检查 batch、检查 reward 分布 |
| clip fraction 很高 | 步长过大、PPO epoch 多、样本过旧 | 降 LR、减少 epoch、提高同步频率 |
| ratio 几乎全为 1 | old/new logprob 混用 | 固化采样 logprob,检查数据字段 |
| value loss 爆炸 | returns 尺度异常、critic 学不稳 | reward whitening、降 critic LR、检查 value mask |
| 固定 eval 波动大 | batch 方差大、采样温度高、eval 太小 | 扩大 eval、固定 seed、多次采样取统计 |
| 安全拒答率异常上升 | safety reward 过强、prompt 分布偏 | 分任务 reward 权重、检查拒答样本 |
| 有用性上升但事实性下降 | reward 未覆盖事实性 | 增加 factual eval、引入校验型奖励 |
| 训练恢复后指标突变 | checkpoint 与队列版本错配 | 清空旧队列、记录版本、重算必要字段 |
九、缓解手段的正确使用顺序
9.1 先排实现错误
看到异常时,先排实现错误。
包括 mask、tokenizer、template、old logprob、ref logprob、reward 符号、padding、EOS、版本号。
这些问题不能靠调参解决。
如果实现错了,调参只会把错误藏起来。
9.2 再调尺度
确认实现正确后,检查 reward、advantage、KL 的尺度。
尺度稳定是 PPO 稳定的前提。
常用动作包括 reward normalization、advantage whitening、限制 reward outlier、按任务分桶 normalization。
9.3 再调步长
步长包括 learning rate、PPO epoch、minibatch size、clip range、KL 系数。
它们共同决定单轮策略移动距离。
如果 KL 和 clip fraction 都高,优先减小步长。
如果 KL 低且 reward 不动,才考虑增大步长或减弱 KL。
9.4 最后改奖励
如果 reward 上升但 eval 不升,超参只是次要问题。
应该回到奖励定义、偏好数据、judge bias 和 eval 设计。
奖励函数错了,稳定优化只会更稳定地走向错误目标。
9.5 周期评测不可替代
训练指标只能提示风险。
固定评测集和人工抽检仍然必要。
评测频率可以低于训练指标,但不能只在训练结束后做。
后训练失败往往有可逆窗口。
错过窗口,再回滚就只能丢掉大量计算。
十、一个最小可用仪表盘
10.1 每个 iteration 必须记录
- policy version。
- prompt set version。
- reward model 或 verifier version。
- mean reward、reward 分位数。
- mean KL、KL 分位数。
- response length 均值与分位数。
- entropy 均值。
- ratio 分位数。
- clip fraction。
- gradient norm。
- learning rate。
- value loss,若有 critic。
- rollout tokens/sec。
- learner tokens/sec。
- 样本 staleness,若异步。
10.2 每隔若干 iteration 记录
- 固定 prompt 的 pairwise win-rate。
- 目标任务正确率。
- 安全拒答率。
- 非目标能力回归指标。
- 人工抽样审查结果。
- 重复率或模板化指标。
- 长度控制后的 judge 分数。
10.3 指标命名要稳定
不要在训练中途改变 KL 口径却沿用同一个曲线名。
不要把 sequence-sum KL 和 token-mean KL 混在一起。
不要把 raw reward 和 reward-minus-KL 都叫 reward。
指标名应该包含口径,例如
kl/token_mean/response_only。
这类“无聊命名”能救很多复盘。
十一、与前后篇的连接
11.1 和奖励黑客的关系
16|奖励黑客与对齐税 讨论的是失效模式本身。
本文讨论的是这些失效模式在训练曲线上如何显影。
奖励黑客不是训练结束后才发现的道德问题。
它通常会先表现为 reward、length、KL、entropy、eval 之间的关系失衡。
11.2 和基础设施的关系
17|RL 训练基础设施 讨论了 actor、learner、reward、reference 的系统拓扑。
稳定性指标必须沿着这条拓扑采集。
如果 rollout 队列没有版本号,你就无法解释 ratio 异常。
如果 reward service 没有错误类型,你就无法区分模型失败和验证器失败。
11.3 和评测的关系
下一篇 19|后训练评测 会讨论偏好评测、推理基准、安全评测和回归评测。
训练仪表盘负责早期报警。
评测体系负责判断最终模型是否真的变好。
二者必须互相校准。
十二、小结:稳定性是多信号一致性
后训练稳定,不是某条 loss 平滑。
它是 reward、KL、entropy、length、ratio、clip fraction、gradient、value、eval 之间的关系一致。
Reward 上升但 KL 爆炸,不稳定。
Reward 上升但长度同步上升且人工质量下降,是奖励黑客。
KL 接近 0 且 reward 不动,是无学习。
Entropy 快速下降且回答模板化,是模式塌缩。
Clip fraction 高、ratio 分布宽、gradient spike,是步长过大或样本过旧。
Value loss 爆炸,会把 actor 更新带入高方差区域。
最可靠的处理顺序是:先排实现错误,再校准尺度,再调步长,最后回到奖励设计。
RLHF/RLVR 的工程成熟度,最终体现在能否把“模型训坏了”改写成“第几轮、哪个任务、哪条指标先坏、为什么坏”。
参考资料
论文与技术报告
- John Schulman, Filip Wolski, Prafulla Dhariwal, Alec Radford, Oleg Klimov, 2017, “Proximal Policy Optimization Algorithms”.
- Long Ouyang et al., 2022, “Training language models to follow instructions with human feedback”, NeurIPS.
- Shengyi Huang et al., 2024, “The N+ Implementation Details of RLHF with PPO: A Case Study on TL;DR Summarization”.
- Yuntao Bai et al., 2022, “Training a Helpful and Harmless Assistant with Reinforcement Learning from Human Feedback”.
技术文章
- Rui Zheng et al., 2023, “Secrets of RLHF in Large Language Models Part I: PPO”.
← 上一篇:17|RL 训练基础设施 | 下一篇:19|后训练评测 →
同主题继续阅读
把当前热点继续串成多页阅读,而不是停在单篇消费。
【强化学习与大模型后训练】04|Actor-Critic 与优势函数、GAE
解释 Actor-Critic 架构、优势估计和 GAE 的偏差—方差取舍,并映射到 LLM 后训练中的 value head 与 per-token advantage。
【强化学习与大模型后训练】05|PPO 深度解剖:裁剪目标、KL 约束与实现陷阱
从信任域思想推到 PPO 裁剪目标,解释 KL 约束、完整损失和代码级实现细节,帮助读者判断一次策略更新是否安全。
【强化学习与大模型后训练】08|奖励模型:偏好数据、Bradley-Terry 与奖励黑客
从成对偏好数据和 Bradley-Terry 损失解释奖励模型训练,再讨论校准、集成、过优化与奖励黑客。
【强化学习与大模型后训练】09|RLHF 全链路:用 PPO 对齐语言模型
从 SFT 初始化、奖励模型、参考策略 KL 到 PPO 更新,串起 RLHF 的四模型训练闭环,并解释稳定性与工程成本。