GRPO 改进谱系:DAPO / Dr.GRPO / GFPO / GSPO
分类: 推理与评估 · 难度: 进阶 · 关联讲座: L08, L19
DAPO(Decoupled Clip and Dynamic Sampling Policy Optimization)是 GRPO 的关键变体,通过非对称裁剪比率解决了标准 PPO/GRPO 中的熵崩塌问题。核心洞察是:允许策略更大幅度地增加好动作的概率(探索),同时限制概率急剧下降(稳定性),从而在长时间 RL 训练中维持可持续的探索能力。
📐 DAPO:非对称裁剪比率的数学机制
GRPO 标准裁剪(对称):
Lclip=min(r⋅A,clip(r,1−ϵ,1+ϵ)⋅A)
当 ϵlow=ϵhigh=0.2:比率限定在 [0.8,1.2],正负方向同等约束。
DAPO 非对称裁剪(ϵlow<ϵhigh):
rclip=clip(r,1−ϵlow,1+ϵhigh)
例如 ϵlow=0.2,ϵhigh=0.5:比率限定在 [0.8,1.5]。
为什么不对称有效:
- 增大 ϵhigh:允许当前策略相比旧策略更大幅增加好的动作概率 → 保持探索能力(高熵)
- 保持 ϵlow:限制概率急剧下降 → 防止训练不稳定
熵的定义:H(π)=−∑aπ(a∣s)logπ(a∣s)
当策略退化为接近 deterministic(集中在少数动作),熵 H→0,RL 停止探索。通过增大 ϵhigh,维持 H(πt)>Hmin(最小熵阈值),确保持续探索。
结果对比(1.5B 模型,8K steps):
| 方法 | Pass@1 | Pass@16 | 最终熵 |
|---|
| GRPO(ϵ=0.2) | +12% | +3% | 0.8(低) |
| DAPO(ϵhigh=0.5) | +21% | +15% | 1.4(健康) |
🔢 ProRL vs. 标准 GRPO 的训练曲线对比
ProRL 关键超参数(Nemotron-Reasoning-1.5B):
| 参数 | 值 | 作用 |
|---|
| ϵlow | 0.2 | 限制概率大幅下降 |
| ϵhigh | 动态(0.2→0.5→0.8) | 随训练进度增大,维持熵 |
| KL 重置阈值 | 0.5 | 当 DKL(πt∥π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 存在两类统计偏差:
偏差 1:响应长度偏差
序列长度不同,per-token 梯度权重不均等:
- 长序列(∣y∣=500):每 token 梯度 ∝Ai/500
- 短序列(∣y∣=50):每 token 梯度 ∝Ai/50(大 10 倍)
结果:模型系统性偏好短回答,即使短回答在逻辑上更不完整。
偏差 2:问题难度偏差
当某道题 G 个采样全部正确时 ri≡1,此时 σG≈0,A^i→0/0。全部错误时同理。这类 group 贡献不稳定梯度。
Dr.GRPO 修正:跨 prompt 全局归一化
📐 Dr.GRPO 全局优势估计
用批次级全局统计替代组内统计:
A^iDr=σRR(q,oi)−R
R=N1∑j=1B∑k=1GR(qj,oj,k),σR=std({R(qj,oj,k)}j,k)
j 遍历批次中所有 B 个 prompt,k 遍历每个 prompt 的 G 个采样,共 N=B×G 个样本。
Dr.GRPO 完整目标:
JDrGRPO(θ)=∑i=1G∣oi∣1∑t=1∣oi∣min(ri,tA^iDr,clip(ri,t,1−ϵ,1+ϵ)A^iDr)
关键差异:
| 维度 | GRPO | Dr.GRPO |
|---|
| 均值计算范围 | 同一 prompt 的 G 个样本 | 整个批次的 B×G 个样本 |
| 标准差计算 | 组内 std(可能趋近 0) | 全局 std(数值稳定) |
| 长度归一化 | ∑t/G(序列级) | $\sum_t / |
直觉:全局归一化相当于”跨题难度曲线打分”——同样”答对”,在全都答错的批次里更有价值(得分高于均值),在全都答对的批次里价值较低。这比只在同一题内部比较更能反映真实的学习信号。
GFPO:拒绝采样精选策略梯度
GFPO(Group-Filtered Policy Optimization)将 GRPO 的组内相对优势排名替换为显式拒绝采样,只用精选高质量样本做策略更新。
算法流程
- 对 prompt q 采样 G 个回答 {o1,…,oG},计算奖励 {r1,…,rG}
- 执行拒绝采样:S=ArgTop-k({(oi,ri)}),选出得分最高的 k 个
- 仅对精选集合 S 计算策略梯度:
LGFPO=∑i∈SσSri−rSlogπθ(oi∣q)
与 GRPO 的对比
| 特性 | GRPO | GFPO |
|---|
| 使用的样本 | 全部 G 个(有正有负) | Top-k 精选(只用最好的) |
| 梯度方向 | 双向(增加好的 + 降低差的) | 单向(只增加好的) |
| 奖励噪声鲁棒性 | 低(差样本可能因噪声被误用) | 高(丢弃潜在噪声样本) |
| 样本效率 | 高(充分利用所有采样) | 较低(丢弃 G−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=πold(y∣x)πθ(y∣x)=∏t=1∣y∣πold(yt∣x,y<t)πθ(yt∣x,y<t)
当 ∣y∣=500,每个 token 比率略偏离 1.0(如均值 1.01),连乘结果 ≈1.01500≈145——IS 比率爆炸,梯度剧烈不稳定。
对 MoE 模型,不同专家路由导致不同 token 的比率方差更大,问题更严重。
GSPO 解决:序列级几何平均
📐 GSPO 序列级 IS 比率
将连乘改为 log-sum(几何平均形式):
r~ISseq(y)=exp(∣y∣1∑t=1∣y∣logπold(yt∣x,y<t)πθ(yt∣x,y<t))
数学等价性:这是所有 token IS 比率的几何平均(而非算术乘积),数值始终在合理范围内。
GSPO 完整目标:
JGSPO(θ)=Ex,{yi}[G1∑i=1Gmin(r~iseqA^i,clip(r~iseq,1−ϵ,1+ϵ)A^i)]
组内归一化优势 A^i 与 GRPO 相同,只替换 IS 比率计算方式。
数值对比(∣y∣=4,比率 =[0.9,1.1,0.95,1.05]):
| 方法 | 计算 | 结果 |
|---|
| Token 级连乘 | 0.9×1.1×0.95×1.05 | 0.9845 |
| 序列级几何平均 | exp((ln0.9+ln1.1+ln0.95+ln1.05)/4) | 0.9842 |
短序列两者接近;但长序列(∣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 改进谱系