RLVR 熵坍缩分析与 STEER 方法
概述
本技能源自 ACL 2026 杰出论文 Rethinking Entropy Interventions in RLVR: An Entropy Change Perspective(浙大&腾讯)。核心发现:
> RLVR 训练中,策略熵的快速下降(熵坍缩)使模型输出同质化、采样路径变窄、训练过早停滞。问题根源在 token-level 熵变,而非全局熵。STEER 通过对剧烈熵变的 token 降权,让熵变化可控,推理能力稳定提升。
你的工作方式
| 用户意图 | 操作 |
|---|---|
| 想了解什么是熵坍缩 | → 熵坍缩原理 用推理树模型讲解 |
| RL训练效果越来越差 | → 诊断与排查 按症状定位问题 |
| 想用STEER改善训练 | → STEER实践指南 指导接入训练循环 |
| 想理解论文方法 | → 方法深度解析 token-level熵变四象限分析 |
| 想对比现有方法 | → 方法对比 DAPO / Positive-Reweighting / STEER |
| 提升GRPO训练效果 | → GRPO专项优化 Group-based算法的熵管理 |
熵坍缩原理
推理树模型
把 RLVR 训练想象成对一棵推理树的动态调整:
[问题]
/ | \
分支1 分支2 分支3
/ \ / \
... ... ... ...
- 节点 = 每一步的 token 选择
- 分支 = 不同推理路径
- token 熵 = 某节点处的"有效分叉数"(高熵≈多分支,低熵≈单一路径)
两种对立力量
| 力量 | 作用 | 对熵的影响 |
|---|---|---|
| 🌱 增枝 | 保留更多可能性,探索新路径 | 推高熵 |
| ✂️ 剪枝 | 概率质量集中在有效分支 | 推低熵 |
健康训练 = 增枝 ≈ 剪枝(动态平衡)
熵坍缩 = 剪枝 >> 增枝(探索空间过早收缩)
熵坍缩的连锁反应
策略熵快速下降
↓
模型输出同质化(同一问题相同回答)
↓
GRPO等group-based算法:组内采样越来越相似
↓
advantage信号失去区分度(大家都差不多)
↓
训练信号失效 → 训练停滞
Token-level 熵变分析
核心洞察
全局熵由每个 token 的局部熵变累积而成。理解熵坍缩必须回到 token 更新粒度。
决定熵变的四因素
| 因素 | 含义 | 影响方式 |
|---|---|---|
| ① 裁剪机制 | 更新是否被重要性采样比率 clipping 截断 | 截断则更新受限 |
| ② 优势信号 | 正样本还是负样本 | 正→推高;负→压低 |
| ③ token概率 | 高概率还是低概率的 token | 高→分布集中;低→保留罕见路径 |
| ④ 条件熵 | 当前上下文下模型整体不确定性 | 大幅→熵变幅度大 |
熵变四象限
方向由 优势信号 × token 概率 共同决定:
正样本(优势>0) 负样本(优势<0)
高概率token → 分布集中,熵↓ → 释放概率空间,熵↑
低概率token → 保留罕见路径,熵↑ → 剪枝,熵↓
关键发现:不是所有 token 的熵变方向都一致。正样本中高概率 token 的熵降(分布集中)和低概率 token 的熵升(保留探索)在同时发生。健康训练需要这四类 token 的合理混合。
现有方法剖析
DAPO / Clip-Higher
| 项目 | 内容 |
|---|---|
| 做法 | 提高 clip-high 阈值,让低概率正确 token 参与更新 |
| 本质 | 放开"稀有但正确"分支的剪枝约束 |
| 局限 | 只改阈值,不直接判断熵变贡献,调节粗粒度 |
Positive-Reweighting
| 项目 | 内容 |
|---|---|
| 做法 | 削弱高概率正样本权重,强化低概率正样本 |
| 本质 | 抑制分布集中(高概率正样本压熵),鼓励探索(低概率正样本拉熵) |
| 局限 | 只围绕正样本,忽略负样本及条件熵影响 |
Entropy-Aware Advantage
| 项目 | 内容 |
|---|---|
| 做法 | 给高熵 token 更大的 advantage,促探索 |
| 局限 | 高熵 token 只意味熵变幅度大,不保方向——若处降熵方向反而加速坍缩 |
共同局限
> 所有现有方法都是启发式的——间接改变部分 token 的更新强度,缺乏对每个 token 熵变方向和幅度的直接刻画。
STEER 方法实践指南
STEER = Stabilizing Token-level Entropy-changE via Reweighting
核心思想
> 不做全局熵拉升,而是给"熵变过于剧烈"的 token 踩刹车。
三步实现
# Step 1: 估计每个 token 的熵变
# 基于论文推导的 Ω(s) 近似公式
delta_entropy = estimate_token_entropy_change(
log_probs_old, # 旧策略下token概率
log_probs_current, # 当前策略下token概率
advantages, # 优势信号
clip_mask, # 裁剪掩码
conditional_entropy # 条件熵
)
# Step 2: 计算重加权系数
# 熵变过大 → 降权;熵变较小 → 保留原信号
weight = torch.where(
delta_entropy.abs() > threshold,
(threshold / delta_entropy.abs()).clamp(max=1.0),
torch.ones_like(delta_entropy)
)
# Step 3: 集成进训练循环
# 大多数 token 权重≈1,仅剧烈熵变 token 被明显降权
loss = (policy_loss * weight).mean()
接入 GRPO 训练
# 在 GRPO 的 loss 计算中集成 STEER
def grpo_loss_with_steer(
model_output,
advantages, # 组内相对优势
old_log_probs,
ref_log_probs,
beta_kl, # KL散度系数
steer_lambda=1.0 # STEER强度系数(默认1.0)
):
# 标准 GRPO loss
ratio = torch.exp(log_probs - old_log_probs)
pg_loss = -advantages * ratio.clamp(1-eps, 1+eps)
# STEER 重加权
delta_h = estimate_entropy_change(ratio, advantages)
steer_weight = compute_steer_weight(delta_h, threshold=0.1)
# 加权后的 loss
loss = (pg_loss * steer_weight).mean()
return loss
效果验证
| 基准 | Qwen2.5-Math-7B | Qwen2.5-Coder-14B |
|---|---|---|
| GRPO | 44.2 | 42.6 |
| OPO | 46.4 | — |
| STEER | 48.6 | 45.1 |
跨模型(Qwen/Llama/Mistral)、跨算法(GRPO/RLOO/OPO)均稳定提升。
诊断与排查
症状 → 原因 → 对策
| 训练症状 | 可能原因 | STEER对策 |
|---|---|---|
| 策略熵断崖式下降 | 剪枝严重压过增枝 | 接入STEER限速 |
| 同批采样结果越来越像 | group advantage失效 | 降低steer阈值,加大限制 |
| 模型输出单一重复 | 高概率正样本过度推高 | 配合Positive-Reweighting |
| 训练后期停滞不前 | 熵已坍缩到极限 | 调高steer_lambda给更多空间 |
| 正样本极少 | DAPO类场景 | 先放开clip-high,再上STEER |
四象限诊断
当训练效果不佳时,按此诊断当前四类 token 的分布:
正样本 负样本
高概率token ← 检查是否过度集中 → 检查是否释放充分
低概率token ← 检查是否保留足够 → 检查是否剪枝过度
工作流示例
示例 1:RLVR训练效果衰减排查
用户:「我的 GRPO 训练跑了一天后,模型总在输出同样的答案。」
1. 确认症状:输出同质化 = 熵坍缩典型表现
2. 查看训练日志中的策略熵曲线
→ 如果熵快速下降 → 熵坍缩确诊
3. 如果已用熵奖励但不奏效 → 全局熵调控粗粒度,建议换STEER
4. 诊断四象限:
→ 高概率正样本过度推高(概率集中)
→ 低概率正样本被忽略(探索死掉)
5. 方案:接入STEER,结合Positive-Reweighting
示例 2:数学推理能力提升
用户:「我想让 7B 模型在 AIME 上跑得更好。」
1. 数学任务需要多步推理 → 多跳推理树是关键
2. 推理树健康 = 平衡增枝与剪枝
3. 推荐STEER + GRPO:
- STEER控制熵变剧烈度
- 七基准平均48.6(超GRPO的44.2)
4. 参考论文配置:
- threshold=0.1(默认)
- steer_lambda从1.0开始调
- 结合Qwen2.5-Math系列效果最佳
关键公式
Token-level 熵变近似式
ΔH(s) ∝ η · L · I_clip · (π_θ / π_old) · A · [H(s) - log π_θ]
其中:
- η = 学习率
- L = 序列长度
- I_clip = 裁剪指示(是否被截断)
- π_θ / π_old = 策略比率
- A = 优势信号
- H(s) = 条件熵
实际含义
公式告诉我们:不是所有 token 都需要同等的更新力度。一个处于高熵上下文中的正样本 token,其熵变幅度天然就大——如果这个熵变方向是降熵,则需要限制;如果是升熵,则可以保留。
参考资源
- 论文:https://arxiv.org/abs/2510.10150
- 代码:https://github.com/zz-haooo/STEER
- 会议:ACL 2026 Outstanding Paper Award
- 作者:浙大 (郝哲正、陈佳伟) + 腾讯 (王泓、董汉德)