文章目录
- [一、DAPO 提出背景](#一、DAPO 提出背景)
- [二、DAPO 原理解析](#二、DAPO 原理解析)
-
- [2.1 核心公式](#2.1 核心公式)
-
- [2.1.1 定义 r i , t ( θ ) r_{i,t}(\theta) ri,t(θ) 与 A ^ i , t \hat{A}{i,t} A^i,t](#2.1.1 定义 r i , t ( θ ) r{i,t}(\theta) ri,t(θ) 与 A ^ i , t \hat{A}_{i,t} A^i,t)
- [2.1.2 目标函数对比(GRPO vs DAPO)](#2.1.2 目标函数对比(GRPO vs DAPO))
- [2.2 Clip-Higher](#2.2 Clip-Higher)
-
- [2.2.1 两种类型 token](#2.2.1 两种类型 token)
- [2.2.2 熵崩溃的数学根源](#2.2.2 熵崩溃的数学根源)
- [2.2.3 clip 上下限各自约束什么?*](#2.2.3 clip 上下限各自约束什么?*)
- [2.2.4 解耦 ϵ high \epsilon_{\text{high}} ϵhigh 和 ϵ low \epsilon_{\text{low}} ϵlow](#2.2.4 解耦 ϵ high \epsilon_{\text{high}} ϵhigh 和 ϵ low \epsilon_{\text{low}} ϵlow)
- [2.3 Dynamic Sampling](#2.3 Dynamic Sampling)
-
- [2.3.1 GRPO 采样中的弊端](#2.3.1 GRPO 采样中的弊端)
- [2.3.2 DAPO 的动态采样机制](#2.3.2 DAPO 的动态采样机制)
- [2.4 Token-level Policy Gradient Loss](#2.4 Token-level Policy Gradient Loss)
-
- [2.4.1 从 sample-level 到 token-level](#2.4.1 从 sample-level 到 token-level)
- [2.4.2 计算示例](#2.4.2 计算示例)
- [2.5 Overlong Reward Shaping](#2.5 Overlong Reward Shaping)
- 三、算法伪代码及说明
- 四、小结
一、DAPO 提出背景
随着大规模语言模型(LLM)的发展,强化学习(RL)在提升模型推理能力方面发挥了重要作用,尤其在复杂任务如长链条推理(Long-CoT)中。然而,现有的强化学习方法(如PPO和GRPO)面临以下问题:
- 熵崩溃:模型训练过程中,探索性降低,过度依赖已知模式,导致模型缺乏多样性。
- 训练效率低:长链条推理任务中,梯度减小,导致训练不稳定。
- 样本质量问题:低质量样本干扰训练,导致训练效果差。
- 奖励噪声:长序列的奖励信号不稳定,影响训练稳定性。
为了解决这些问题,ByteDance Seed与清华大学AIR联合团队提出了 DAPO(Decoupled Clip and Dynamic sAmpling Policy Optimization,解耦剪切和动态采样策略优化) 算法,主要包含以下四点创新:
- Clip-Higher:通过调整剪切范围,提高探索性,避免熵崩溃。
- 动态采样:过滤低质量样本,提升训练效率。
- 基于token的策略梯度损失:改进长链条推理中的梯度更新。
- 过长奖励塑形:减少奖励噪声,确保长推理任务中的稳定训练。
DAPO 是在 GRPO(Group Relative Policy Optimization,群组相对策略优化) 的基础上进行创新,优化了现有的策略更新过程。
在阅读以下内容之前,请先学习 GRPO 的相关原理,可参考我的另一篇博客:【强化学习】深度解析 GRPO:从原理到实践的全攻略
二、DAPO 原理解析
2.1 核心公式
2.1.1 定义 r i , t ( θ ) r_{i,t}(\theta) ri,t(θ) 与 A ^ i , t \hat{A}_{i,t} A^i,t
-
重要性采样比 r i , t ( θ ) r_{i,t}(\theta) ri,t(θ)
r i , t ( θ ) = π θ ( o i , t ∣ q , o i , < t ) π θ old ( o i , t ∣ q , o i , < t ) r_{i,t}(\theta) = \frac{\pi_{\theta}(o_{i,t} \mid q, o_{i,<t})}{\pi_{\theta_{\text{old}}}(o_{i,t} \mid q, o_{i,<t})} ri,t(θ)=πθold(oi,t∣q,oi,<t)πθ(oi,t∣q,oi,<t)- 含义 : r i , t ( θ ) r_{i,t}(\theta) ri,t(θ) 是当前策略 π θ \pi_{\theta} πθ 与旧策略 π θ old \pi_{\theta_{\text{old}}} πθold 之间的 概率比值 。对于每个输出 o i , t o_{i,t} oi,t(第 i i i 个输出的第 t t t 个token),它表示在当前策略下,给定前 t t t 步的输入条件 q q q 和前 t − 1 t-1 t−1 步的输出 o i , < t o_{i,<t} oi,<t,该token的生成概率相对于旧策略的变化比例。
-
优势估计 A ^ i , t \hat{A}_{i,t} A^i,t
A ^ i , t = R i − mean ( { R i } i = 1 G ) std ( { R i } i = 1 G ) \hat{A}{i,t} = \frac{R_i - \text{mean}(\{R_i\}{i=1}^G)}{\text{std}(\{R_i\}_{i=1}^G)} A^i,t=std({Ri}i=1G)Ri−mean({Ri}i=1G)- 含义 : A ^ i , t \hat{A}{i,t} A^i,t 是 标准化后的优势估计 。对于第 i i i 个输出的第 t t t 个token, A ^ i , t \hat{A}{i,t} A^i,t 表示该token相对其他token的优势,标准化过程消除了奖励值的尺度差异。 R i R_i Ri 表示与第 i i i 个输出相关的奖励, mean ( { R i } ) \text{mean}(\{R_i\}) mean({Ri}) 和 std ( { R i } ) \text{std}(\{R_i\}) std({Ri}) 是所有输出的奖励的均值和标准差。
2.1.2 目标函数对比(GRPO vs DAPO)
在上述定义下,GRPO目标函数可表示为:
J GRPO ( θ ) = E ( q , a ) ∼ D , { o i } i = 1 G ∼ π θ old ( ⋅ ∣ q ) [ 1 G ∑ i = 1 G 1 ∣ o i ∣ ∑ t = 1 ∣ o i ∣ { min ( r i , t ( θ ) A ^ i , t , clip ( r i , t ( θ ) , 1 − ϵ , 1 + ϵ ) A ^ i , t ) − β D K L [ π θ ∥ π ref ] } ] \mathcal{J}{\text{GRPO}}(\theta) = \mathbb{E}{(q,a) \sim \mathcal{D}, \{o_i\}{i=1}^G \sim \pi{\theta_{\text{old}}}(\cdot | q)}\left[ \textcolor{blue}{\frac{1}{G} \sum_{i=1}^G \frac{1}{|o_i|}} \sum_{t=1}^{|o_i|} \left\{ \min \left(r_{i,t}(\theta) \hat{A}{i,t}, \text{clip} \left(r{i,t}(\theta), 1-\textcolor{blue}{\epsilon}, 1+\textcolor{blue}{\epsilon} \right) \hat{A}{i,t} \right) \textcolor{blue}{- \beta D{KL} \left[ \pi_\theta \| \pi_{\text{ref}} \right]} \right\}\right] JGRPO(θ)=E(q,a)∼D,{oi}i=1G∼πθold(⋅∣q) G1i=1∑G∣oi∣1t=1∑∣oi∣{min(ri,t(θ)A^i,t,clip(ri,t(θ),1−ϵ,1+ϵ)A^i,t)−βDKL[πθ∥πref]}
而DAPO目标函数表示为:
J DAPO ( θ ) = E ( q , a ) ∼ D , { o i } i = 1 G ∼ π θ old ( ⋅ ∣ q ) [ 1 ∑ i = 1 G ∣ o i ∣ ∑ i = 1 G ∑ t = 1 ∣ o i ∣ min ( r i , t ( θ ) A ^ i , t , clip ( r i , t ( θ ) , 1 − ϵ low , 1 + ϵ high ) A ^ i , t ) ] s.t. 0 < ∣ { o i ∣ is_equivalent ( a , o i ) } ∣ < G \mathcal{J}{\text{DAPO}}(\theta) = \mathbb{E}{(q,a) \sim \mathcal{D}, \{o_i\}{i=1}^G \sim \pi{\theta_{\text{old}}}(\cdot | q)} \left[ \textcolor{red}{\frac{1}{\sum_{i=1}^G |o_i|} \sum_{i=1}^G} \sum_{t=1}^{|o_i|} \min \left( r_{i,t}(\theta) \hat{A}{i,t}, \text{clip}\left(r{i,t}(\theta), 1 - \textcolor{red}{\epsilon_{\text{low}}}, 1 + \textcolor{red}{\epsilon_{\text{high}}}\right) \hat{A}_{i,t} \right) \right]\\ \textcolor{red}{\text{s.t. } 0 < \left| \{o_i \mid \text{is\_equivalent}(a, o_i)\} \right| < G} JDAPO(θ)=E(q,a)∼D,{oi}i=1G∼πθold(⋅∣q) ∑i=1G∣oi∣1i=1∑Gt=1∑∣oi∣min(ri,t(θ)A^i,t,clip(ri,t(θ),1−ϵlow,1+ϵhigh)A^i,t) s.t. 0< {oi∣is_equivalent(a,oi)} <G
公式中的不同点已经用特殊颜色标记,通过依次对比可以发现下列四处差异:
- 样本加权
- 在 GRPO 中,目标函数对每个样本的损失进行 均匀加权 ,使用 1 G \frac{1}{G} G1 进行平均。
- 而 DAPO 引入了对样本的加权,基于输出总长度 ∑ i = 1 G ∣ o i ∣ \sum_{i=1}^G |o_i| ∑i=1G∣oi∣,能更公平地处理长输出和短输出对模型训练的不同影响。
- 剪切范围的调整
- GRPO 中使用固定的剪切范围 [ 1 − ϵ , 1 + ϵ ] [1-\epsilon, 1+\epsilon] [1−ϵ,1+ϵ],来控制奖励比值的变化幅度。
- DAPO 则通过 低剪切范围 ϵ low \epsilon_{\text{low}} ϵlow 和 高剪切范围 ϵ high \epsilon_{\text{high}} ϵhigh 的分别调整,使得剪切策略更加灵活,能够更好地平衡探索与开发。
- KL散度的移除
- GRPO 中有一个KL散度项,用于约束策略模型与参考模型的输出分布差异,防止其过度偏离。
- 而 DAPO 认为,在训练长思维链推理模型时,策略模型分布可能与初始模型显著偏离,这种限制是没有必要的,因此移除了它。
- 样本约束
- GRPO 中没有对样本生成的质量进行明确约束。
- 而 DAPO 加入了 样本约束 (即 0 < ∣ o i ∣ is_equivalent ( a , o i ) ∣ < G 0 < \left| {o_i \mid \text{is\_equivalent}(a, o_i)} \right| < G 0< oi∣is_equivalent(a,oi) <G),避免了低质量样本对训练结果的干扰。
接下来,我们将结合公式逐项剖析 DAPO 的四大创新技术的核心原理,并分析其在解决传统强化学习方法瓶颈问题时的实际效用。
2.2 Clip-Higher
2.2.1 两种类型 token
为了更好地理解 Clip-Higher 策略,我们首先需要区分两种类型的 token:
- 利用型 token(Exploitation Token):在旧策略下通常具有较高的概率,代表已验证、主流的推理路径或答案模式。
- 探索型 token(Exploration Token):在旧策略下通常具有较低的概率,表示模型尚未完全学习到的策略。它允许模型探索新的答案和路径,以增加多样性和创新性。
2.2.2 熵崩溃的数学根源
熵崩溃是指在训练过程中,模型的输出变得越来越集中,导致模型不再能够有效探索新的可能性。这种现象通常发生在强化学习的训练后期,当模型已经学习到一定的策略,并过度依赖这些策略时,它会变得缺乏足够的多样性和灵活性。
在 GRPO / PPO 框架下,策略优化并不是直接最大化奖励,而是通过如下剪切后的代理目标 进行更新:
L clip ( θ ) = E t [ min ( r t ( θ ) A ^ t , clip ( r t ( θ ) , 1 − ϵ , 1 + ϵ ) A ^ t ) ] \mathcal{L}^{\text{clip}}(\theta)= \mathbb{E}_t \Big[ \min\big( r_t(\theta)\,\hat A_t,\; \text{clip}(r_t(\theta),\,1-\epsilon,\,1+\epsilon)\,\hat A_t \big) \Big] Lclip(θ)=Et[min(rt(θ)A^t,clip(rt(θ),1−ϵ,1+ϵ)A^t)]
其中:
r t ( θ ) = π θ ( o t ∣ q , o < t ) π θ old ( o t ∣ q , o < t ) r_t(\theta) = \frac{\pi_\theta(o_t \mid q,o_{<t})}{\pi_{\theta_{\text{old}}}(o_t \mid q,o_{<t})} rt(θ)=πθold(ot∣q,o<t)πθ(ot∣q,o<t)
在 GRPO 场景中,奖励是按 group 内相对表现标准化得到的 ,这意味着同一个 query 下,部分 sample 获得正优势( A ^ > 0 \hat A>0 A^>0), 部分sample 获得负优势( A ^ < 0 \hat A<0 A^<0)。
在这种设置下,熵崩溃的原因 并不是"模型过度偏好高概率利用型 token",而是一部分"正优势但低旧概率"的探索型 token,无法通过策略梯度获得足够大的概率提升。
2.2.3 clip 上下限各自约束什么?*
为说明 clip 函数如何影响熵崩溃,我们首先需要明确 clip 何时真正生效。根据上述公式,这由 A ^ \hat A A^ 的符号 和 min 结构 共同决定。
情况一: A ^ t > 0 \hat A_t > 0 A^t>0(token 值得被强化) ,目标是增大 r t r_t rt。
- 当 r t ≤ 1 + ϵ r_t \le 1+\epsilon rt≤1+ϵ 时, r t ≤ clip ( r t , 1 − ϵ , 1 + ϵ ) r_t \le \text{clip}(r_t,\,1-\epsilon,\,1+\epsilon) rt≤clip(rt,1−ϵ,1+ϵ)
min ( r t A ^ t , clip ( r t , 1 − ϵ , 1 + ϵ ) A ^ t ) = r t A ^ t \min(r_t\hat A_t,\;\text{clip}(r_t,\,1-\epsilon,\,1+\epsilon)\hat A_t) = r_t\hat A_t min(rtA^t,clip(rt,1−ϵ,1+ϵ)A^t)=rtA^t
此时 clip 不生效。
- 当 r t > 1 + ϵ r_t > 1+\epsilon rt>1+ϵ 时: r t > clip ( r t , 1 − ϵ , 1 + ϵ ) r_t \gt \text{clip}(r_t,\,1-\epsilon,\,1+\epsilon) rt>clip(rt,1−ϵ,1+ϵ)
min ( r t A ^ t , clip ( r t , 1 − ϵ , 1 + ϵ ) A ^ t ) = clip ( r t , 1 − ϵ , 1 + ϵ ) A ^ t = ( 1 + ϵ ) A ^ t \min(r_t\hat A_t,\;\text{clip}(r_t,\,1-\epsilon,\,1+\epsilon)\hat A_t) = \text{clip}(r_t,\,1-\epsilon,\,1+\epsilon)\hat A_t = (1+\epsilon)\hat A_t min(rtA^t,clip(rt,1−ϵ,1+ϵ)A^t)=clip(rt,1−ϵ,1+ϵ)A^t=(1+ϵ)A^t
此时 clip 上限生效,梯度被截断。
结论一 :clip 的上限 1 + ϵ 1+\epsilon 1+ϵ 仅在 A ^ > 0 \hat A>0 A^>0 且 r t r_t rt 已经很大 时起作用,它限制单次更新中,正优势 token 的最大有效梯度幅度。
情况二: A ^ t < 0 \hat A_t < 0 A^t<0(token 应被抑制) ,目标是减小 r t r_t rt。
- 当 r t ≥ 1 − ϵ r_t \ge 1-\epsilon rt≥1−ϵ 时, r t ≥ clip ( r t , 1 − ϵ , 1 + ϵ ) r_t \ge \text{clip}(r_t,\,1-\epsilon,\,1+\epsilon) rt≥clip(rt,1−ϵ,1+ϵ)
min ( r t A ^ t , clip ( r t , 1 − ϵ , 1 + ϵ ) A ^ t ) = r t A ^ t \min(r_t\hat A_t,\;\text{clip}(r_t,\,1-\epsilon,\,1+\epsilon)\hat A_t) = r_t\hat A_t min(rtA^t,clip(rt,1−ϵ,1+ϵ)A^t)=rtA^t
此时 clip 不生效。
- 当 r t < 1 − ϵ r_t < 1-\epsilon rt<1−ϵ 时, r t < clip ( r t , 1 − ϵ , 1 + ϵ ) r_t \lt \text{clip}(r_t,\,1-\epsilon,\,1+\epsilon) rt<clip(rt,1−ϵ,1+ϵ)
min ( r t A ^ t , clip ( r t , 1 − ϵ , 1 + ϵ ) A ^ t ) = clip ( r t , 1 − ϵ , 1 + ϵ ) A ^ t = ( 1 − ϵ ) A ^ t \min(r_t\hat A_t,\;\text{clip}(r_t,\,1-\epsilon,\,1+\epsilon)\hat A_t) = \text{clip}(r_t,\,1-\epsilon,\,1+\epsilon)\hat A_t = (1-\epsilon)\hat A_t min(rtA^t,clip(rt,1−ϵ,1+ϵ)A^t)=clip(rt,1−ϵ,1+ϵ)A^t=(1−ϵ)A^t
此时 clip 下限生效。
结论二 :clip 的下限 1 − ϵ 1-\epsilon 1−ϵ 仅用于限制 负优势 token 被压低的最大速度,防止策略更新过激。
2.2.4 解耦 ϵ high \epsilon_{\text{high}} ϵhigh 和 ϵ low \epsilon_{\text{low}} ϵlow
根据上述分析可以看到,熵崩溃的根本原因 并不在于 clip 的下限,而在于 clip 上限对正优势 token 的过度约束 。但更关键的是,这种约束尤其限制了旧策略下低概率的探索型 token ,这是由于 π θ old ( o t ) \pi_{\theta_{\text{old}}}(o_t) πθold(ot) 本身极小,因此新策略下的概率 π θ ( o t ) \pi_\theta(o_t) πθ(ot) 只能发生有限幅度的绝对提升。
因此 Clip-Higher 将对称剪切区间:
1 − ϵ , 1 + ϵ \] \[1-\\epsilon,\\;1+\\epsilon\] \[1−ϵ,1+ϵ
解耦为:
1 − ϵ low , 1 + ϵ high \] , 且 ϵ high ≫ ϵ low \[1-\\epsilon_{\\text{low}},\\;1+\\epsilon_{\\text{high}}\], \\quad \\text{且} \\quad \\epsilon_{\\text{high}} \\gg \\epsilon_{\\text{low}} \[1−ϵlow,1+ϵhigh\],且ϵhigh≫ϵlow
其效果是:在不改变负优势 token 的稳定性约束的情况下,放宽了 A \^ \> 0 \\hat A\>0 A\^\>0 时 r t r_t rt 的最大可更新幅度, 从而**允许正优势、低旧概率的探索型 token 获得与其价值相匹配的梯度规模**。
*** ** * ** ***
### 2.3 Dynamic Sampling
#### 2.3.1 GRPO 采样中的弊端
在 GRPO 中,对每一个 query q q q:固定生成 G G G 条 response:
{ o i } i = 1 G ∼ π θ old ( ⋅ ∣ q ) \\{o_i\\}_{i=1}\^G \\sim \\pi_{\\theta_{\\text{old}}}(\\cdot \\mid q) {oi}i=1G∼πθold(⋅∣q)
然后对这些 response 进行组内归一化计算优势 A \^ i , t \\hat{A}_{i,t} A\^i,t:
A \^ i , t = R i − mean ( { R i } i = 1 G ) std ( { R i } i = 1 G ) \\hat{A}_{i,t} = \\frac{R_i - \\text{mean}(\\{R_i\\}_{i=1}\^G)}{\\text{std}(\\{R_i\\}_{i=1}\^G)} A\^i,t=std({Ri}i=1G)Ri−mean({Ri}i=1G)
考虑极端情况:如果所有( o i o_i oi)都正确(准确率=1)或都错误(准确率=0), mean ( { R i } ) = 1 / − 1 \\text{mean}(\\{R_i\\}) = 1/-1 mean({Ri})=1/−1, std ( { R i } ) = 0 \\text{std}(\\{R_i\\}) = 0 std({Ri})=0,这就导致了优势计算出为0,策略的梯度消失。
这种"梯度消失"**降低了样本效率** ,尤其当训练进入中后期时 π θ old \\pi_{\\theta_{\\text{old}}} πθold 已经高度集中,大量概率质量集中在少数"主流解路径"上,这种现象会更加显著。
#### 2.3.2 DAPO 的动态采样机制
针对上述弊端,DAPO提出了 **过采样和过滤** 的策略。其核心约束条件是:
0 \< ∣ { o i ∣ is_equivalent ( a , o i ) } ∣ \< G 0 \< \\left\| \\{o_i \\mid \\text{is\\_equivalent}(a, o_i)\\} \\right\| \< G 0\< {oi∣is_equivalent(a,oi)} \