4.3 GRPO 改进与测试时计算
DAPO、Dr. GRPO、REINFORCE++ 等改进方法,以及测试时计算扩展的概念和与 o1/o3/R1 的连接
GRPO 的已知问题
尽管 GRPO 相比 PPO 大幅简化了推理 RL 的训练流程,但在大规模实践中仍存在一些问题:
- 长度偏差:序列级归一化导致更长的回复被隐式惩罚
- 采样效率:当组内所有回复都正确或都错误时,优势为零,该批次的训练信号为零
- 稳定性:大规模训练中仍有崩溃风险
- 熵坍缩:策略快速收敛到低熵状态,丧失探索能力
2025年上半年,多个团队提出了针对这些问题的改进方案。
DAPO:大规模 RL 的系统性改进
DAPO(Decoupled Alignment Policy Optimization)(Yu 等,字节跳动,2025)是对 GRPO 最全面的改进方案,包含四个核心技术:
技术1:Clip-Higher
问题:标准 PPO 的截断范围 是对称的,但在 RLHF 场景中,抑制坏回复(比值下降)和强化好回复(比值上升)的需求不对称。
解决方案:使用不对称截断:
其中 ,例如 ,。
效果:给好回复更大的"上升空间",防止策略过早收敛到低熵状态。
技术2:动态采样(Dynamic Sampling)
问题:当组内 个回复全部正确或全部错误时:
通常设为 0,但这意味着浪费了该批次的计算。
解决方案:当组内方差为零时,重新采样或过滤掉该组,只保留有信息量的训练样本:
def dynamic_sampling(rewards):
"""过滤掉无信息量的组"""
valid_groups = []
for group in rewards:
if group.std() > 0: # 至少有正确和错误的回复
valid_groups.append(group)
return valid_groups技术3:Token 级损失归一化
问题:标准 GRPO 对每个回复的损失除以回复长度 ,这会导致长回复和短回复被等权处理。但实际上,长回复包含更多 token 级决策,应该有更大的贡献。
解决方案:改为 token 级归一化——对整个 mini-batch 内的所有 token 的损失总和除以 token 总数,而非按序列归一化。
技术4:过长回复惩罚
对超过最大长度的截断回复施加额外惩罚,鼓励模型学习更简洁的推理:
DAPO 的实验结果
| 方法 | AIME 2024 | MATH-500 |
|---|---|---|
| GRPO (基线) | 31.4% | 90.2% |
| + Clip-Higher | 33.8% | 91.0% |
| + Dynamic Sampling | 35.2% | 91.8% |
| + Token-Level Loss | 38.6% | 93.0% |
| DAPO (全部) | 41.0% | 93.4% |
DAPO 的价值:它不是一个全新的算法,而是对 GRPO 的一组工程级改进。每个改进单独来看都很直观,但组合在一起效果显著。DAPO 是完全开源的,包含代码和训练配置。
Dr. GRPO:去除长度偏差
Dr. GRPO(Length-Desensitized GRPO)(MIT,2025)专门解决 GRPO 中的长度偏差问题。
长度偏差的来源
在标准 GRPO 中,损失按序列长度归一化:
这意味着每个 token 的损失被等权对待。但问题在于:
- 长回复:更多 token,每个 token 的梯度更新更小
- 短回复:更少 token,每个 token 的梯度更新更大
如果奖励信号与长度相关(长回复更容易包含正确答案),模型可能学到"写得更长"的虚假策略。
Dr. GRPO 的解决方案
Dr. GRPO 通过以下方式消除长度偏差:
- 去均值化(De-meaning):从奖励中减去组均值(这与标准 GRPO 相同)
- 去相关化(De-correlation):进一步从优势中去除与长度相关的分量
其中 是优势在长度方向上的投影。直觉上,这确保了模型只学习"质量信号",而非"长度信号"。
效果
Dr. GRPO 训练的模型在保持推理准确率的同时,生成的推理链更加简洁高效——不会为了"写得更长"而添加冗余的推理步骤。
REINFORCE++:简化 PPO
回到 REINFORCE 基础
REINFORCE++ 可以理解为 REINFORCE(经典策略梯度算法)加上一些现代改进,但不使用 Critic(价值网络):
其中基线 使用简单的移动平均,而非学习到的价值函数。
REINFORCE++ 的关键改进
相比原始 REINFORCE,REINFORCE++ 加入了:
- PPO 式截断:限制更新幅度
- KL 惩罚:防止策略偏离参考模型
- 梯度裁剪:稳定训练
- 分组采样:类似 GRPO 的组内归一化
与 GRPO 的关系
REINFORCE++ 和 GRPO 的核心思想非常接近——都是去掉 Critic、用简单基线替代。主要区别在于:
| 方面 | GRPO | REINFORCE++ |
|---|---|---|
| 基线计算 | 组内均值/标准差归一化 | 移动平均 |
| 来源 | DeepSeek (2024) | 经典 RL + 现代改进 |
| TRL 支持 | GRPOTrainer | RLOOTrainer |
在 TRL 框架中,REINFORCE++ 通过 RLOOTrainer(Reinforcement Learning with Online Optimization)实现。
三种方法对比
| 方法 | Critic | 基线 | 复杂度 | 效果 |
|---|---|---|---|---|
| PPO | 需要 | 价值网络 | 高 | 基准 |
| GRPO | 不需要 | 组内均值归一化 | 中 | 约等于 PPO |
| REINFORCE++ | 不需要 | 移动平均 | 低 | 略低于 GRPO |
测试时计算扩展
核心发现
Snell 等(2024) 的研究提出了一个重要发现:
对于中等难度的问题,在推理时分配更多计算资源(让模型"思考更长时间"),可以超越14倍大的模型。
这意味着:在某些场景下,增加推理计算比增加模型参数更有性价比。
测试时计算的方式
| 策略 | 描述 | 计算成本 | 适用场景 |
|---|---|---|---|
| 多次采样(Best-of-N) | 生成 N 个回复,选最优 | 有验证器时 | |
| 延长推理链 | 让模型生成更长的推理过程 | 有思考模式时 | |
| 自我改进(Self-Refinement) | 让模型反复修改回复 | 通用 | |
| 树搜索(Tree-of-Thought) | 在推理空间中搜索 | 复杂推理 | |
| 过程奖励引导 | 用 PRM 引导推理路径 | 有 PRM 时 |
与问题难度的关系
Snell 等的关键发现是测试时计算的效益高度依赖于问题难度:
| 问题难度 | 测试时计算效益 | 原因 |
|---|---|---|
| 简单 | 低 | 模型已经能做对,更多计算无意义 |
| 中等 | 高 | 模型"差一点"就能做对,额外计算帮助突破 |
| 极难 | 低 | 模型能力根本不够,更多计算也无法弥补 |
与 o1/o3 和 R1 的连接
OpenAI 的 o1/o3 和 DeepSeek 的 R1 都体现了测试时计算扩展的思想:
o1/o3 模型(OpenAI):在回复前先进行长时间的"内部推理",推理过程对用户不可见。推理时间和 token 消耗显著增加,但推理质量大幅提升。
DeepSeek-R1:类似地在 <think> 标签内进行长推理,推理链可以长达数千 token。
Qwen3 思考模式:通过 /think 指令启用,模型在回复前先进行推理,推理过程对用户可见。
共同点:都是通过增加推理时的计算量来提升推理质量,而非增加模型参数。这代表了一种从"参数扩展"(parameter scaling)到"推理扩展"(inference scaling)的范式转变。
训练时 vs 推理时计算
| 维度 | 训练时计算 | 推理时计算 |
|---|---|---|
| 目的 | 提升模型能力上限 | 在能力范围内找到更好的解 |
| 方式 | 更多数据、更多步数 | 更长推理链、多次采样 |
| 成本模式 | 一次性 | 每次推理都需要 |
| 代表 | GRPO 训练 | o1/R1 推理 |
| 扩展规律 | 预训练 Scaling Laws | Inference Scaling Laws |
本节小结
GRPO 改进方法和测试时计算扩展共同构成了推理 AI 的最新技术前沿:
- DAPO 通过工程级改进(clip-higher、动态采样、token 级损失)全面提升 GRPO 效果
- Dr. GRPO 专门解决长度偏差问题,让模型生成更简洁的推理
- REINFORCE++ 提供了更简单的无 Critic RL 替代方案
- 测试时计算扩展 开辟了提升模型能力的新维度——不依赖更大的模型,而是让模型"想更多"
- 这些技术共同推动了 o1、o3、R1 和 Qwen3 等推理模型的发展