GRPO 改进谱系:DAPO / Dr.GRPO / GFPO / GSPO

分类: 推理与评估 · 难度: 进阶 · 关联讲座: L08, L19

DAPO(Decoupled Clip and Dynamic Sampling Policy Optimization)是 GRPO 的关键变体,通过非对称裁剪比率解决了标准 PPO/GRPO 中的熵崩塌问题。核心洞察是:允许策略更大幅度地增加好动作的概率(探索),同时限制概率急剧下降(稳定性),从而在长时间 RL 训练中维持可持续的探索能力。


📐 DAPO:非对称裁剪比率的数学机制

GRPO 标准裁剪(对称):

Lclip=min(rA,clip(r,1ϵ,1+ϵ)A)\mathcal{L}_{\text{clip}} = \min\left(r \cdot A, \text{clip}(r, 1-\epsilon, 1+\epsilon) \cdot A\right)

ϵlow=ϵhigh=0.2\epsilon_{\text{low}} = \epsilon_{\text{high}} = 0.2:比率限定在 [0.8,1.2][0.8, 1.2],正负方向同等约束。

DAPO 非对称裁剪ϵlow<ϵhigh\epsilon_{\text{low}} < \epsilon_{\text{high}}):

rclip=clip(r,1ϵlow,1+ϵhigh)r_{\text{clip}} = \text{clip}(r, 1 - \epsilon_{\text{low}}, 1 + \epsilon_{\text{high}})

例如 ϵlow=0.2\epsilon_{\text{low}} = 0.2ϵhigh=0.5\epsilon_{\text{high}} = 0.5:比率限定在 [0.8,1.5][0.8, 1.5]

为什么不对称有效

  • 增大 ϵhigh\epsilon_{\text{high}}:允许当前策略相比旧策略更大幅增加好的动作概率 → 保持探索能力(高熵)
  • 保持 ϵlow\epsilon_{\text{low}}:限制概率急剧下降 → 防止训练不稳定

熵的定义H(π)=aπ(as)logπ(as)H(\pi) = -\sum_a \pi(a|s) \log \pi(a|s)

当策略退化为接近 deterministic(集中在少数动作),熵 H0H \to 0,RL 停止探索。通过增大 ϵhigh\epsilon_{\text{high}},维持 H(πt)>HminH(\pi_t) > H_{\min}(最小熵阈值),确保持续探索。

结果对比(1.5B 模型,8K steps):

方法Pass@1Pass@16最终熵
GRPO(ϵ=0.2\epsilon=0.2+12%+3%0.8(低)
DAPO(ϵhigh=0.5\epsilon_{\text{high}}=0.5+21%+15%1.4(健康)

🔢 ProRL vs. 标准 GRPO 的训练曲线对比

ProRL 关键超参数(Nemotron-Reasoning-1.5B):

参数作用
ϵlow\epsilon_{\text{low}}0.2限制概率大幅下降
ϵhigh\epsilon_{\text{high}}动态(0.2→0.5→0.8)随训练进度增大,维持熵
KL 重置阈值0.5DKL(πtπref)>0.5D_{KL}(\pi_t \| \pi_{\text{ref}}) > 0.5 时重置参考策略
最大响应长度< 8K tokens防止”思维漂移”和计算爆炸
训练步数~50K比标准 GRPO (~5K) 多 10×

最终结果:Nemotron-1.5B 在 AIME 2024 上达到 58.3%(与 DeepSeek-R1-7B 的 60.2% 接近,但参数量仅 1/4.5)。


Dr.GRPO:消除组内归一化的系统性偏差

GRPO 的组内归一化 A^i=(riμG)/σG\hat{A}_i = (r_i - \mu_G)/\sigma_G 存在两类统计偏差:

偏差 1:响应长度偏差

序列长度不同,per-token 梯度权重不均等:

  • 长序列(y=500|y|=500):每 token 梯度 Ai/500\propto A_i/500
  • 短序列(y=50|y|=50):每 token 梯度 Ai/50\propto A_i/50(大 10 倍)

结果:模型系统性偏好短回答,即使短回答在逻辑上更不完整。

偏差 2:问题难度偏差

当某道题 GG 个采样全部正确ri1r_i \equiv 1,此时 σG0\sigma_G \approx 0A^i0/0\hat{A}_i \to 0/0。全部错误时同理。这类 group 贡献不稳定梯度。

Dr.GRPO 修正:跨 prompt 全局归一化

📐 Dr.GRPO 全局优势估计

用批次级全局统计替代组内统计:

A^iDr=R(q,oi)RσR\hat{A}_{i}^{Dr} = \frac{R(q, o_i) - \overline{R}}{\sigma_R}

R=1Nj=1Bk=1GR(qj,oj,k),σR=std ⁣({R(qj,oj,k)}j,k)\overline{R} = \frac{1}{N}\sum_{j=1}^{B}\sum_{k=1}^{G} R(q_j, o_{j,k}), \quad \sigma_R = \text{std}\!\left(\{R(q_j, o_{j,k})\}_{j,k}\right)

jj 遍历批次中所有 BB 个 prompt,kk 遍历每个 prompt 的 GG 个采样,共 N=B×GN = B \times G 个样本。

Dr.GRPO 完整目标:

JDrGRPO(θ)=i=1G1oit=1oimin ⁣(ri,tA^iDr,  clip(ri,t,1 ⁣ ⁣ϵ,1 ⁣+ ⁣ϵ)A^iDr)J_{DrGRPO}(\theta) = \sum_{i=1}^{G}\frac{1}{|o_i|}\sum_{t=1}^{|o_i|} \min\!\left(r_{i,t}\hat{A}_{i}^{Dr},\; \text{clip}(r_{i,t}, 1\!-\!\epsilon, 1\!+\!\epsilon)\hat{A}_{i}^{Dr}\right)

关键差异

维度GRPODr.GRPO
均值计算范围同一 prompt 的 G 个样本整个批次的 B×G 个样本
标准差计算组内 std(可能趋近 0)全局 std(数值稳定)
长度归一化t/G\sum_t / G(序列级)$\sum_t /

直觉:全局归一化相当于”跨题难度曲线打分”——同样”答对”,在全都答错的批次里更有价值(得分高于均值),在全都答对的批次里价值较低。这比只在同一题内部比较更能反映真实的学习信号。


GFPO:拒绝采样精选策略梯度

GFPO(Group-Filtered Policy Optimization)将 GRPO 的组内相对优势排名替换为显式拒绝采样,只用精选高质量样本做策略更新。

算法流程

  1. 对 prompt qq 采样 GG 个回答 {o1,,oG}\{o_1, \ldots, o_G\},计算奖励 {r1,,rG}\{r_1, \ldots, r_G\}
  2. 执行拒绝采样:S=ArgTop-k({(oi,ri)})S = \text{ArgTop-}k(\{(o_i, r_i)\}),选出得分最高的 kk
  3. 仅对精选集合 SS 计算策略梯度:

LGFPO=iSrirSσSlogπθ(oiq)\mathcal{L}_{GFPO} = \sum_{i \in S} \frac{r_i - \overline{r}_S}{\sigma_S}\log \pi_\theta(o_i | q)

与 GRPO 的对比

特性GRPOGFPO
使用的样本全部 GG 个(有正有负)Top-kk 精选(只用最好的)
梯度方向双向(增加好的 + 降低差的)单向(只增加好的)
奖励噪声鲁棒性低(差样本可能因噪声被误用)高(丢弃潜在噪声样本)
样本效率高(充分利用所有采样)较低(丢弃 GkG-k 个样本)

适用场景:奖励函数噪声较大(如 LLM-as-Judge 打分)时,GFPO 更稳健;奖励函数精确(如数学验证器)时,GRPO 样本效率更高。


GSPO:MoE 模型的序列级重要性采样

GSPO(Group Sequence Policy Optimization)专为 MoE(Mixture-of-Experts)模型设计,解决 token 级 IS 比率在长序列中的数值不稳定问题。

问题:Token 级 IS 比率的指数爆炸

标准 GRPO/PPO 的 IS 比率是 token 级连乘积:

rIS=πθ(yx)πold(yx)=t=1yπθ(ytx,y<t)πold(ytx,y<t)r_{IS} = \frac{\pi_\theta(y|x)}{\pi_{old}(y|x)} = \prod_{t=1}^{|y|} \frac{\pi_\theta(y_t|x, y_{<t})}{\pi_{old}(y_t|x, y_{<t})}

y=500|y| = 500,每个 token 比率略偏离 1.0(如均值 1.01),连乘结果 1.01500145\approx 1.01^{500} \approx 145——IS 比率爆炸,梯度剧烈不稳定。

对 MoE 模型,不同专家路由导致不同 token 的比率方差更大,问题更严重。

GSPO 解决:序列级几何平均

📐 GSPO 序列级 IS 比率

将连乘改为 log-sum(几何平均形式):

r~ISseq(y)=exp ⁣(1yt=1ylogπθ(ytx,y<t)πold(ytx,y<t))\tilde{r}_{IS}^{seq}(y) = \exp\!\left(\frac{1}{|y|}\sum_{t=1}^{|y|} \log\frac{\pi_\theta(y_t|x, y_{<t})}{\pi_{old}(y_t|x, y_{<t})}\right)

数学等价性:这是所有 token IS 比率的几何平均(而非算术乘积),数值始终在合理范围内。

GSPO 完整目标

JGSPO(θ)=Ex,{yi} ⁣[1Gi=1Gmin ⁣(r~iseqA^i,  clip ⁣(r~iseq,1 ⁣ ⁣ϵ,1 ⁣+ ⁣ϵ)A^i)]J_{GSPO}(\theta) = \mathbb{E}_{x, \{y_i\}}\!\left[\frac{1}{G}\sum_{i=1}^{G} \min\!\left(\tilde{r}_i^{seq} \hat{A}_i,\; \text{clip}\!\left(\tilde{r}_i^{seq}, 1\!-\!\epsilon, 1\!+\!\epsilon\right)\hat{A}_i\right)\right]

组内归一化优势 A^i\hat{A}_i 与 GRPO 相同,只替换 IS 比率计算方式。

数值对比y=4|y|=4,比率 =[0.9,1.1,0.95,1.05]= [0.9, 1.1, 0.95, 1.05]):

方法计算结果
Token 级连乘0.9×1.1×0.95×1.050.9 \times 1.1 \times 0.95 \times 1.050.98450.9845
序列级几何平均exp((ln0.9+ln1.1+ln0.95+ln1.05)/4)\exp((\ln 0.9 + \ln 1.1 + \ln 0.95 + \ln 1.05)/4)0.98420.9842

短序列两者接近;但长序列(y=500|y|=500)或比率方差大时,连乘会指数级发散,几何平均始终稳定。


五种方法横向对比

方法主要贡献解决的核心问题计算开销变化
GRPO组内归一化,去掉 Value Network推理任务高效 RL 训练PPO 的 ~67%
DAPO解耦裁剪 + 动态采样 + Token-Level Loss熵崩塌 + 无效 group + 梯度稀释≈GRPO
Dr.GRPO全局统计量归一化长度偏差 + 难度偏差≈GRPO
GFPO拒绝采样精选样本奖励噪声鲁棒性略低(丢弃部分样本)
GSPO序列级几何平均 IS 比率MoE 长序列 IS 爆炸≈GRPO

📚 对应课程内容 → L08 Section 7:GRPO 改进谱系