推断扩展赋予了大型语言模型前所未有的推理能力,强化学习作为激发复杂推理的核心技术,清华大学联合字节提出了解耦片段与动态采样策略优化(DAPO)算法,并全面开源了一个最先进的大规模强化学习系统,该系统使用Qwen2.5-32B基础模型在AIME 2024上取得了50分的高分。还开源了我们的训练代码,该代码基于Verl框架构建,并附带了一个精心策划和处理过的数据集。
文章目录
- 预备知识
- DAPO算法
- 核心贡献
- 四个关键技术解析
- 1. **Clip-Higher:探索与利用的平衡**
- 2. **Dynamic Sampling:动态过滤无效样本**
- 3. **Token-Level Policy Loss:长序列梯度优化**
- 4. **Overlong Reward Shaping:长度感知奖励修正**
- 实验验证
- 1. **AIME 2024性能对比**
- 2. **关键指标监控**
作者团队:字节跳动种子团队、清华大学AIR研究院、香港大学等
论文链接:https://dapo-sia.github.io/
代码仓库:https://github.com/volcengine/verl
预备知识
PPO通过限制策略更新在先前策略的近端区域内来稳定训练并提高样本效率。GRPO则消除了值函数,以组相对的方式估计优势。
- 近端策略优化(PPO):通过裁剪代理目标约束策略更新,提升训练稳定性和样本效率,利用广义优势估计(GAE)计算优势值。
- 组相对策略优化(GRPO):以组相对方式估计优势,消除价值函数,采用裁剪目标和直接施加 KL 惩罚项,在样本级计算目标。
- 去除 KL 散度:在长思维链推理模型训练中,模型分布与初始模型差异大,KL 惩罚项限制不必要,故从算法中排除。
- 基于规则的奖励建模:用可验证任务最终准确率作为奖励,避免奖励模型的奖励黑客问题,有效激活基础模型推理能力。
DAPO算法
DAPO算法通过采样一组输出来优化策略,目标函数如下:
核心贡献
- 开源系统:首个完整开源的大规模LLM强化学习系统(代码+数据集+算法),在数学推理任务AIME 2024上以Qwen2.5-32B模型取得50分(超越DeepSeek-R1的47分)。
- DAPO算法:提出四大关键技术解决长链思维(long-CoT)场景下的RL训练难题:
- Clip-Higher:解耦上下剪裁范围,防止熵崩溃(Entropy Collapse)。
- Dynamic Sampling:动态过滤无效样本,提升梯度有效性。
- Token-Level Policy Loss:解决长序列样本的梯度稀释问题。
- Overlong Reward Shaping:长度感知的奖励修正,降低噪声。
- 数据集优化:提出DAPO-Math-17K数据集,将复杂答案格式转化为整数,简化奖励计算。
四个关键技术解析
1. Clip-Higher:探索与利用的平衡
问题:传统PPO/GRPO的固定剪裁范围(如ε=0.2)限制低概率Token的探索,导致策略快速收敛(熵崩溃)。
方案:
- 解耦上下剪裁阈值:
ε_low=0.2
(抑制高概率Token的过度利用),ε_high=0.28
(放宽低概率Token的探索限制)。 - 效果:模型生成多样性提升,熵值稳定。
2. Dynamic Sampling:动态过滤无效样本
问题:当所有样本奖励相同(如全正确或全错误),梯度信号消失(Zero Advantage)。
方案:
- 预采样时过滤掉奖励为0或1的样本,仅保留梯度有效的样本填充批次。
- 效果:训练效率提升,收敛速度加快
。
3. Token-Level Policy Loss:长序列梯度优化
问题:传统GRPO的样本级损失平均导致长序列Token梯度稀释,难以捕捉关键推理步骤。
方案:
- 按Token计算损失,加权求和(而非样本平均),强化长序列中的关键Token学习。
- 效果:训练稳定性提升,生成长度控制更健康
4. Overlong Reward Shaping:长度感知奖励修正
问题:过长响应的截断惩罚引入噪声(正确推理因超长被误判)。
方案:
R length ( y ) = { 0 , ∣ y ∣ ≤ L max − L cache ( L max − L cache ) − ∣ y ∣ L cache , L max − L cache < ∣ y ∣ ≤ L max − 1 , L max < ∣ y ∣ R_{\text{length}}(y) = \begin{cases} 0, & |y| \leq L_{\text{max}} - L_{\text{cache}} \\ \frac{(L_{\text{max}} - L_{\text{cache}}) - |y|}{L_{\text{cache}}}, & L_{\text{max}} - L_{\text{cache}} < |y| \leq L_{\text{max}} \\ -1, & L_{\text{max}} < |y| \end{cases} Rlength(y)=⎩ ⎨ ⎧0,Lcache(Lmax−Lcache)−∣y∣