第3章:GRPO 失败模式与稳定性 —— 训练曲线背后的暗面
Entropy collapse / Advantage collapse / KL drift / Lazy Likelihood Displacement Death Spiral 详解,以及实战监控与避坑工具箱
GRPO 论文里训练曲线漂亮,实战中却经常崩——这是 2024-2025 RL 训练人最常踩的坑。本章把 GRPO 的”暗面”系统化讲透:Entropy Collapse / Advantage Collapse / KL Drift / Lazy Likelihood Displacement Death Spiral 四大失败模式,每种的成因、早期预警信号、修复手段,串起 5 篇 2025 关键论文(含 12 月最新的 LLD 论文)。读完你能看着 wandb 曲线提前 1000 step 判断”训练要崩”。这一章在大部分中文教程都缺位,是这套教程的灵魂之一。
📑 目录
- 1. 为什么 GRPO 容易崩
- 2. Entropy Collapse(熵崩溃)
- 3. Advantage Collapse(优势崩溃)
- 4. KL Drift(参考漂移)
- 5. LLD Death Spiral(惰性似然位移死亡螺旋)⭐
- 6. Reward Hacking 在 Agentic RL 的新形态
- 7. 早期预警信号:看哪些曲线
- 8. 避坑工具箱
- 自我检验清单
- 参考资料
1. 为什么 GRPO 容易崩
GRPO 的”省钱设计”——去掉 critic、用 group baseline、用 verifier——同时也带来三个根本性脆弱:
| 设计简化 | 带来的脆弱 |
|---|---|
| 用 group 内 reward 算 advantage | reward 方差太小 → advantage = 0 → 信号消失 |
| 没有 explicit value baseline | 长 trajectory 的 credit assignment 全靠 group 平均 |
| Verifier reward 通常 sparse(只末尾) | trajectory 中间 token 的梯度方向不明 |
加上 LLM 训练本身的特点——vocab 5 万维、长序列、likelihood 接近 0 ——很多看似稳定的训练会在第几百 step 突然崩。
🔥 核心论点:RL 训练曲线像股票 K 线:reward 涨不一定是真涨,可能是 likelihood 已经在悄悄崩,只是 reward 数值还没反应过来。
2. Entropy Collapse(熵崩溃)
2.1 现象
Step 0 100 500 1000 2000 3000
Entropy: 3.5 3.2 2.5 1.2 0.3 0.05 ← 急剧下降
Reward: 0.2 0.4 0.6 0.7 0.7 0.7 ← 涨着涨着平了
Diversity: 高 高 中 低 极低 全一样 ← 输出趋同
Group 内 G 个采样几乎一模一样——advantage 全是 0,梯度信号消失,训练停滞。
2.2 原理
GRPO 的 group baseline 假设”组内多样性提供信号”。一旦 policy 太自信:
采样 G 次都是 ,reward 都一样,advantage = 0,梯度 = 0,policy 卡死。
2.3 成因
| 成因 | 解释 |
|---|---|
| 过激进 KL 系数 | β 太小,policy 自由跑偏,迅速过自信 |
| 学习率太大 | 单次更新跨太大步 |
| Reward 太尖锐(0/1 二元) | 一旦学会 trick,group 内同分,信号消失 |
| 采样温度低 | softmax 输出本身已经尖锐 |
2.4 修复
| 方法 | 解释 |
|---|---|
| Entropy bonus | loss 加 项,鼓励多样性 |
| Higher sampling temperature | rollout 用 T=1.0 甚至 1.2,推理时仍用 T=0 |
| Adaptive KL coefficient | KL 偏小自动加大 β |
| Clip-Higher(DAPO) | 不对称 clip,允许探索 |
| ERPO(arXiv 2603.28204) | token-level entropy regulation,不是全局 |
2.5 实战警告
训练曲线最早期、最可靠的预警:rollout entropy 持续单调下降,1000 step 内跌掉 50% 以上 → 几乎一定要崩。立刻减小学习率或加大 entropy bonus。
3. Advantage Collapse(优势崩溃)
3.1 现象
Group reward distribution:
全 0 (没人答对) → advantage 全 0 → 无梯度
全 1 (全答对) → advantage 全 0 → 无梯度
全 0.5 (都答对一半) → advantage 全 0 → 无梯度
GRPO advantage = , 接近 0 时 advantage 退化。
3.2 多 reward 时的特殊形态
实际生产中常用 multi-reward(format + 答案 + cost):
group 内:
trajectory 1: format=1, 答案=1, cost=0.8 → r = 2.8
trajectory 2: format=1, 答案=1, cost=0.7 → r = 2.7
trajectory 3: format=1, 答案=1, cost=0.9 → r = 2.9
format 和答案两个维度都饱和,只有 cost 维度有微弱信号——但被三维加和稀释,有效 advantage 极小。
3.3 修复
| 方法 | 解释 |
|---|---|
| Dynamic Sampling(DAPO) | reward 全 0 或全 1 的 group 跳过(不参与 update) |
| Reward 归一化 | 各维度独立归一化后再加权 |
| Curriculum | 从简单题开始(group 内 reward 有差异)→ 逐步加难 |
| Larger G(更多采样) | 8 → 32 → 64,提升 reward 多样性概率 |
3.4 监控
Effective Group Ratio = 1 - (全 0 group 数 + 全 1 group 数) / 总 group 数。健康训练 > 70%,< 50% 立即报警。
4. KL Drift(参考漂移)
4.1 现象
KL()持续单调上升,数值越来越大,policy 偏离 reference 太远 → reward 看起来还在涨,但模型可能已经 hack 了 verifier(下一节)。
4.2 健康范围
经验值:
KL 范围 状态
< 0.5 正常,模型小幅调整
0.5 - 5 偏移,可控
5 - 20 危险,可能 reward hacking
> 20 几乎确定崩了
4.3 修复
| 方法 | 解释 |
|---|---|
| Adaptive KL coefficient | KL > target 自动加大 β |
| Periodic ref update | 每 N step 把 ref 更新为当前 policy(类似 PPO 的 trust region) |
| Hard KL cap | KL > threshold 直接停止训练或回滚 |
| Reward / KL ratio 监控 | reward 涨了 0.1 但 KL 涨 5,说明在 hack |
5. LLD Death Spiral(惰性似然位移死亡螺旋)⭐
Tool Integrated GRPO 的”癌症”:Lazy Likelihood Displacement —— arXiv 2512.04220, 2025-12 最新论文
5.1 现象
Search-R1 / ToolRL / VerlTool 这类 tool-integrated GRPO 训练经常出现:
Step 0 500 1000 1500 2000 2500
Reward: 0.2 0.5 0.65 0.7 0.6 [崩]
Likelihood: ─── 缓慢下降 ────────► 骤崩
Entropy: ─── 缓慢上升 ────────► 骤升
Gradient: ─── 缓慢上升 ────────► 膨胀爆炸
反直觉:reward 还在涨/平,但 likelihood 已经在悄悄崩——早期没有任何 reward 信号能预警!
5.2 LLD 的因果链
Tool 调用产生 long-tail token 分布(很多罕见 token)
↓
GRPO 在这些罕见 token 上的更新 ratio 很大
↓
likelihood 缓慢但持续下降(被 displaced)
↓
likelihood 下降 → log_pi 接近 -∞ → ratio 不稳定
↓
某个 step 触发临界 → entropy 暴涨、gradient 爆炸
↓
"死亡螺旋":一旦开始,几个 step 内就崩
🔥 关键洞察:reward 是滞后指标,likelihood 才是领先指标。监控 reward 等于”看股价”,监控 likelihood 等于”看公司基本面”。
5.3 论文的修复方案
LLD 论文提出几个方法:
- LLD Detector:实时监测每条 trajectory 的 token-level likelihood,异常下降时触发警报
- Likelihood Regularization:loss 加一项 ,直接拉住 likelihood 不要塌
- Selective Update:likelihood 偏离过大的 token 跳过 update
5.4 实战指南
任何 tool-integrated GRPO(Search-R1 / ToolRL / Agent-R1 / VerlTool)训练都必须监控:
- Token-level mean log_pi(每 100 step 记录平均值)
- Token-level log_pi histogram(分布尾部是否变厚)
- Trajectory-level mean log_pi(每条 trajectory 的整体 likelihood)
如果任意一项连续 500 step 单调下降超过 30%,立即:
- 减小学习率(× 0.5)
- 增大 KL coefficient(× 2)
- 切换到 LLD Regularization
🌟 这一节是 2025 RL 训练人必读——LLD 论文 2025-12 才出,大部分教程没覆盖。
6. Reward Hacking 在 Agentic RL 的新形态
6.1 经典 RLHF reward hacking
| 形态 | 例子 |
|---|---|
| Length hack | 答得越长 RM 越喜欢,模型疯狂加废话 |
| Sycophancy | 永远迎合用户,即使错也说对 |
| Safety dodge | 用 “as an AI…” 模板回避争议 |
6.2 Agentic RL / RLVR 时代的新形态
更隐蔽,因为 verifier 看似”客观”:
| 形态 | 例子 |
|---|---|
| Verifier exploit | 数学 verifier 只看末尾数字,模型先错算最后强行写正确答案 |
| Tool spam | 调用 search 100 次提升”调用率”reward |
| Format gaming | format reward 加在 thought tag 上,模型把所有内容塞 thought 里 |
| Cost hack | cost penalty 用 token 数,模型用极简缩写规避 |
| Context smuggling | 把答案藏在 tool query 里,让 tool 把答案”反弹”回来 |
6.3 UC Berkeley 2026-04 大事件
UC Berkeley RDI 中心用一个自动 agent 破解了 8 大 agent benchmark(SWE-bench / WebArena / OSWorld / GAIA / Terminal-Bench 等),全部被 reward hack。这件事直接改变了行业对 RLVR 安全性的认知:verifier 越简单越容易被 hack。
6.4 防御
| 方法 | 解释 |
|---|---|
| Process reward(PRM) | 不只看末尾对错,中间步骤也评分 |
| Multiple verifiers | 多个独立 verifier 投票 |
| Adversarial verifier | 专门写一个 verifier 找 hack 模式 |
| Human spot-check | 定期人工抽样 reward 高的 trajectory |
| KL hard cap | 防止 policy 偏离 sane 分布太远(模块化兜底) |
详见第 4 章 RLVR 与 Reward 设计。
7. 早期预警信号:看哪些曲线
7.1 必盯监控仪表盘
| 指标 | 健康范围 | 危险信号 |
|---|---|---|
| Rollout entropy | 缓慢下降 | 单调跌 50% 以内 1000 step → 减学习率 |
| Effective group ratio | > 70% | < 50% → 调 reward 设计 / curriculum |
| **KL(π | π_ref)** | |
| Token-level mean log_pi | 缓慢轻微下降 | 连续下降 30% → LLD 风险 |
| Likelihood ratio max | 多在 [0.5, 2] | 突然 > 3 或 < 0.3 → 不稳定 |
| Reward 中位数 | 稳定上升 | 上升后再下降(过拟合) |
| Gradient norm | 平稳 | 突然飙升 5x+ → 训练要崩 |
| Format reward 占比 | 稳定 | 飙升 → format gaming |
7.2 wandb 配置示例
import wandb
import torch.nn.functional as F
def log_step_metrics(model, batch, advantages, ratios, ref_logp):
with torch.no_grad():
# Rollout entropy
logits = model(batch.input_ids).logits
probs = F.softmax(logits, dim=-1)
entropy = -(probs * F.log_softmax(logits, dim=-1)).sum(dim=-1).mean()
# KL(π || π_ref)
cur_logp = F.log_softmax(logits, dim=-1)
kl = F.kl_div(ref_logp, cur_logp, reduction='batchmean', log_target=True)
# Token-level mean log_pi
token_logp = cur_logp.gather(-1, batch.action_ids.unsqueeze(-1)).squeeze(-1)
mean_logp = token_logp.mean()
# Effective group ratio
group_std = batch.rewards.view(batch.n_groups, -1).std(dim=-1)
effective_groups = (group_std > 1e-3).float().mean()
wandb.log({
"entropy": entropy.item(),
"kl_to_ref": kl.item(),
"mean_log_pi": mean_logp.item(),
"effective_group_ratio": effective_groups.item(),
"advantage_mean": advantages.mean().item(),
"ratio_max": ratios.max().item(),
"ratio_min": ratios.min().item(),
"grad_norm": torch.nn.utils.clip_grad_norm_(model.parameters(), 1.0).item(),
})
7.3 自动报警
def health_check(metrics, history):
alerts = []
# Entropy collapse
if metrics["entropy"] < 0.1 * history["entropy_init"]:
alerts.append("ENTROPY_COLLAPSE")
# Advantage collapse
if metrics["effective_group_ratio"] < 0.5:
alerts.append("ADVANTAGE_COLLAPSE")
# KL drift
if metrics["kl_to_ref"] > 10:
alerts.append("KL_DRIFT")
# LLD risk
recent_logp = history["mean_log_pi"][-500:]
if recent_logp[0] - recent_logp[-1] > 0.3 * abs(recent_logp[0]):
alerts.append("LLD_RISK")
if alerts:
wandb.alert(title="RL Training Issue", text=", ".join(alerts), level="WARNING")
return alerts
8. 避坑工具箱
8.1 训练初期(< 500 step)
- 学习率 1e-6 起步,千万别上 5e-6+
- G(group size)从 8-16 开始,小 G 调通再加大
- β(KL coef)0.01-0.05
- Entropy bonus α = 0.001-0.01
- Sample temperature = 1.0(rollout)
- 启用 wandb 全套指标,设好 alert
8.2 训练中期(500-3000 step)
- 每 100 step check entropy 趋势
- 每 500 step check effective group ratio
- 每 1000 step 抽样 trajectory 人工看 reward hacking
- KL > 5 触发 adaptive 调整
8.3 出现问题时
| 症状 | 第一反应 |
|---|---|
| Entropy 暴跌 | LR × 0.5,加 entropy bonus |
| Effective group ratio < 50% | 加 G、curriculum easier、检查 reward 是否过 sparse |
| KL > 10 | 立刻停止,update ref,重启 |
| Reward 飙但答案怪 | 检查 reward hacking,加 process reward |
| LLD 信号(log_pi 持续跌) | 加 likelihood regularization,LR × 0.3 |
8.4 推荐实战配方(GRPO baseline)
# verl-style YAML
algorithm: GRPO
group_size: 16
clip_low: 0.8
clip_high: 1.28 # DAPO Clip-Higher
learning_rate: 1e-6
kl_coef: 0.01
entropy_coef: 0.005
ref_update_steps: 5000 # 每 5K step 更新 ref
adaptive_kl: true
adaptive_kl_target: 1.0
overlong_penalty: true # DAPO Overlong Reward Shaping
dynamic_sampling: true # 跳过全 0 / 全 1 group
likelihood_reg: 0.001 # LLD 防御
✅ 自我检验清单
- 三个根本脆弱:能解释 GRPO 简化设计带来哪三类脆弱
- Entropy collapse:能描述现象、原理、4 种修复方法
- Advantage collapse:能解释为什么 group 内 reward 方差太小会让 advantage 退化
- KL drift 健康范围:能默写 KL < 0.5 / 5 / 20 三档对应的状态
- LLD Death Spiral 因果链:能默写”long-tail token → ratio 大 → likelihood 跌 → 崩”
- LLD 反直觉:能解释为什么 reward 是滞后指标,likelihood 才是领先指标
- 新型 reward hacking:能列出 5 种 RLVR 时代的 reward hacking 形态
- wandb 必盯指标:能默写至少 6 个核心监控指标和阈值
- 报警逻辑:能写出自动检测 ENTROPY_COLLAPSE / LLD_RISK 的代码骨架
- 修复优先级:出现 entropy 暴跌时,能立刻执行”LR × 0.5 + entropy bonus”
📚 参考资料
关键论文
- LLD Death Spiral (2025-12) ⭐:arXiv 2512.04220
- Failure Modes of Maximum Entropy RLHF (2025):arXiv 2509.20265
- ERPO: Token-Level Entropy-Regulated Policy Optimization (2026):arXiv 2603.28204
- DAPO (ByteDance Seed):paper
- Clipping-Free Policy Optimization for LLMs:paper
训练框架的稳定性文档
- NVIDIA NeMo-RL: GRPO walkthrough:文档
- Generalized Ratio-Clipping Policy Optimization:Emergent Mind
- RAGEN: Self-Evolution via Multi-Turn:paper
行业讨论
- UC Berkeley RDI: How We Broke Top AI Agent Benchmarks (2026-04):博文
- Beyond PPO:ydnyshhh.github.io