当前位置: 首页 > news >正文

大模型对齐算法(四): DAPO,VAPO,GMPO,GSPO, CISPO,GFPO

DAPO

DAPO 在 GRPO 的基础上做了 4 处关键升级,既保持 GRPO 的“无价值函数 + 组内归一化”思想,又通过 剪枝、采样、Token 级梯度、长度惩罚 解决长 Chain-of-Thought RL 的四大痛点。


1 剪枝范围解耦:Clip-Higher

GRPO:单一对称剪枝

min⁡⁣(rt(θ)A^t,clip(rt(θ),1−ε,1+ε)A^t)\min\!\Bigl(r_t(\theta)\hat A_t,\; \mathrm{clip}(r_t(\theta),\,1-\varepsilon,\,1+\varepsilon)\,\hat A_t\Bigr)min(rt(θ)A^t,clip(rt(θ),1ε,1+ε)A^t)

DAPO:将上下界拆成 ε_low, ε_high

min⁡⁣(rt(θ)A^t,clip(rt(θ),1−εlow,1+εhigh)A^t)\min\!\Bigl(r_t(\theta)\hat A_t,\; \mathrm{clip}(r_t(\theta),\,1-\varepsilon_{\text{low}},\,1+\varepsilon_{\text{high}})\,\hat A_t\Bigr)min(rt(θ)A^t,clip(rt(θ),1εlow,1+εhigh)A^t)

其中

εhigh>εlow\varepsilon_{\text{high}}>\varepsilon_{\text{low}}εhigh>εlow

→ 给低概率 “探索 token” 更大的上升空间,防止 熵崩溃


2 动态采样:Dynamic Sampling

GRPO:固定 batch,遇到全对 / 全错 prompt → 梯度为零。
DAPO:在采样阶段 过滤掉 reward=±1 的 prompt,直到 batch 内所有 prompt 均有 有效梯度
约束加入目标:

0<∣{oi∣is_equivalent(a,oi)}∣<G0<|\{o_i \mid \text{is\_equivalent}(a,o_i)\}|<G0<{oiis_equivalent(a,oi)}<G


3 Token-Level Policy Gradient

GRPO:先对 样本内 token 求平均,再跨样本平均。
DAPO:直接对 token 级 loss 求和,避免长回答权重稀释:

JDAPO(θ)=E(q,a)∼D,{oi}i=1G∼πθold[1∑i=1G∣oi∣∑i=1G∑t=1∣oi∣min⁡⁣(ri,t(θ)A^i,t,clip(ri,t(θ),1−εlow,1+εhigh)A^i,t)]J_{\text{DAPO}}(\theta)= \mathbb{E}_{(q,a)\sim\mathcal D,\{o_i\}_{i=1}^{G}\sim\pi_{\theta_{\text{old}}}} \left[ \frac{1}{\sum_{i=1}^{G}|o_i|}\sum_{i=1}^{G} \sum_{t=1}^{|o_i|} \min\!\Bigl( r_{i,t}(\theta)\hat A_{i,t},\, \mathrm{clip}(r_{i,t}(\theta),\,1-\varepsilon_{\text{low}},\,1+\varepsilon_{\text{high}})\,\hat A_{i,t} \Bigr) \right]JDAPO(θ)=E(q,a)D,{oi}i=1Gπθold[i=1Goi1i=1Gt=1oimin(ri,t(θ)A^i,t,clip(ri,t(θ),1εlow,1+εhigh)A^i,t)]


4 长度惩罚:Overlong Reward Shaping

GRPO:截断回答直接给惩罚 −1。
DAPO:引入 Soft Overlong Punishment(长度感知)

Rlength(y)={0,∣y∣≤Lmax⁡−Lcache(Lmax⁡−Lcache)−∣y∣Lcache,Lmax⁡−Lcache<∣y∣≤Lmax⁡−1,∣y∣>Lmax⁡R_{\text{length}}(y)= \begin{cases} 0, & |y|\le L_{\max}-L_{\text{cache}}\\[4pt] \frac{(L_{\max}-L_{\text{cache}})-|y|}{L_{\text{cache}}}, & L_{\max}-L_{\text{cache}}<|y|\le L_{\max}\\[4pt] -1, & |y|>L_{\max} \end{cases}Rlength(y)=0,Lcache(LmaxLcache)y,1,yLmaxLcacheLmaxLcache<yLmaxy>Lmax

最终奖励

Rtotal(y)=Rrule(y)+Rlength(y)R_{\text{total}}(y)=R_{\text{rule}}(y)+R_{\text{length}}(y)Rtotal(y)=Rrule(y)+Rlength(y)


5 总结公式(DAPO 完整目标)

JDAPO(θ)=E(q,a)∼D,{oi}i=1G∼πθold[1∑i=1G∣oi∣∑i=1G∑t=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,ri,t(θ)=πθ(oi,t∣q,oi,<t)πθold(oi,t∣q,oi,<t)A^i,t=Ri−μσ,Ri=Rrule(oi)+Rlength(oi)\boxed{ \begin{aligned} J_{\text{DAPO}}(\theta)= \mathbb{E}_{(q,a)\sim\mathcal D,\{o_i\}_{i=1}^{G}\sim\pi_{\theta_{\text{old}}}} \Bigg[ &\frac{1}{\sum_{i=1}^G|o_i|}\sum_{i=1}^{G} \sum_{t=1}^{|o_i|} \min\!\Bigl( r_{i,t}(\theta)\hat A_{i,t},\, \mathrm{clip}\bigl(r_{i,t}(\theta),\,1-\varepsilon_{\text{low}},\,1+\varepsilon_{\text{high}}\bigr)\hat A_{i,t} \Bigr) \Bigg]\\[2pt] \text{s.t.}\quad &0<|\{o_i \mid \text{is\_equivalent}(a,o_i)\}|<G,\quad 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})}\\[2pt] &\hat A_{i,t}=\frac{R_i-\mu}{\sigma},\quad R_i=R_{\text{rule}}(o_i)+R_{\text{length}}(o_i) \end{aligned} }JDAPO(θ)=E(q,a)D,{oi}i=1Gπθold[s.t.i=1Goi1i=1Gt=1oimin(ri,t(θ)A^i,t,clip(ri,t(θ),1εlow,1+εhigh)A^i,t)]0<{oiis_equivalent(a,oi)}<G,ri,t(θ)=πθold(oi,tq,oi,<t)πθ(oi,tq,oi,<t)A^i,t=σRiμ,Ri=Rrule(oi)+Rlength(oi)


6 一句话总结

DAPO = GRPO

  • Clip-Higher(解决熵塌陷)
  • Dynamic Sampling(解决零梯度)
  • Token-Level Loss(解决长回答稀释)
  • Soft Length Penalty(解决截断噪声)
    AIME 50 分,仅用 50% 训练步数

VAPO

VC-PPO + DAPO

VC-PPO

value pretraining

1. 背景知识
  • Reward模型:在强化学习中,reward模型通常只在**最后一个token(即EOS token)**处给出评分,前面的token是没有奖励信号的。
  • Value模型:Value模型的作用是估计每个token位置的期望回报(即未来能获得的奖励总和)。
  • 热启(warm start):通常会用reward模型的参数来初始化value模型,因为两者都是输出一个标量值。
2. 问题分析
  • Reward模型的训练目标:reward模型只在EOS token处训练,因此它学会的是:
    • EOS token处的值是合理的(接近真实奖励)。
    • EOS token之前的token的值是未训练的,通常会被模型默认赋予较小的值(因为训练时这些位置的值没有约束,模型倾向于输出较小的值)。
  • Value模型的初始化:如果用reward模型的参数来初始化value模型,那么:
    • EOS token处的value初始值是合理的(因为reward模型在此处训练过)。
    • EOS token之前的token的value初始值会偏小(因为reward模型在这些位置的输出是未训练的,倾向于小值)。
3. 后果
  • Value偏小导致的问题
    • 在强化学习中,**advantage(优势函数)**的计算依赖于value的估计:
      [
      A_t = r_t + V(s_{t+1}) - V(s_t)
      ]
    • 如果靠前的token的value初始值偏小,那么( V(s_t) )会偏小,导致advantage ( A_t )偏大(因为减去的( V(s_t) )偏小)。
    • 这会让模型误以为靠前的token“很好”,从而倾向于生成更短的序列(因为靠前的token被高估了,模型会提前结束序列以获得更高的advantage)。
4. 直观理解
  • 比喻:想象你在玩一个游戏,游戏结束时才给你奖励。但你的“价值预测器”一开始被初始化得很奇怪:
    • 游戏结束时,它能准确预测奖励(比如100分)。
    • 游戏开始时,它却预测价值很低(比如0分)。
  • 后果:你会觉得“游戏开始时的价值很低,但下一步突然变高了”,于是你会倾向于“提前结束游戏”来获得这个“突然变高”的优势。这就是模型倾向于生成短序列的原因。
5. 总结
  • 核心原因:reward模型只在EOS token处训练,导致EOS之前的token的value初始值偏小。
  • 后果:靠前的token的advantage被高估,模型倾向于提前结束序列,导致生成短序列(无法生成长CoT)。

这就是为什么论文中提出value pretraining(提前用离线数据训练value模型),来避免这种初始化偏差。

一些思考:

论文其实没有真正从细节说明为啥value和advantage在eos附近断崖式drop的现象消失了

1. 价值预训练的目标值

论文原文(§3.2 第 4–5 段):

“Continuously generate responses by sampling from a fixed policy … update the value model using GAE with λ = 1.0, also known as the Monte-Carlo return.”

“Train the value model until key training metrics, including value loss and explained variance, attain sufficiently low values.”

也就是说,作者只说了“用 λ=1.0 的 MC return 当目标”,没有解释网络怎么保证前缀 token 不塌缩到同一个常数。


2. 训练曲线

论文图 6 给了 value-loss 的两段式下降,但没有给出 value 随 token 位置变化的曲线


decouple GAE
论文中提出的 Decoupled-GAE(解耦广义优势估计) 指的是:

在强化学习训练过程中,将价值模型(critic)和策略模型(actor)在计算广义优势估计(GAE)时使用的λ参数进行解耦,分别独立设置,以解决长链式思考(long-CoT)任务中价值估计的偏差和策略更新的方差问题。

具体而言:

  • 价值模型(critic)
    使用较大的λ值(论文中设为 λ=1.0),以保证奖励信号在长序列中无衰减地传播,从而避免价值估计的偏差(bias),实现更准确的价值估计。

  • 策略模型(actor)
    使用较小的λ值(论文中设为 λ=0.95),以降低策略梯度估计的方差(variance),加速策略收敛,提升训练稳定性。

通过这种方式,Decoupled-GAE 实现了:

  • 价值模型的无偏更新
    通过λ=1.0的蒙特卡洛回报(Monte-Carlo return),确保价值估计准确,避免奖励信号衰减。

  • 策略模型的稳定高效更新
    通过λ=0.95降低方差,避免策略更新过程中的震荡或不稳定,提升训练效率和稳定性。

简而言之,Decoupled-GAE 就是一种在强化学习训练过程中,分别为价值模型和策略模型设置不同λ参数的策略,以兼顾价值估计的准确性和策略更新的稳定性,特别适用于长链式思考(long-CoT)任务

GMPO

https://zhuanlan.zhihu.com/p/1934575387687490603

GSPO

https://blog.csdn.net/weixin_36378508/article/details/150395944

CISPO

https://blog.csdn.net/weixin_36378508/article/details/150395944

GFPO

https://zhuanlan.zhihu.com/p/1939843423994610732

把大象放进冰箱需要三步,把 LLM 训练成奥数冠军却需要五步:GRPO → GMPO → GSPO → CISPO → GFPO。
本文一次讲清每个字母背后的动机、公式差异与实战效果,并给出一张“对照速查表”,让你 5 分钟就能选对自己任务的算法。


0. 开场白:为什么大家集体“卷”GRPO?

2024 年开始,大模型后训练出现一条清晰技术路线:

  1. 冷启动 SFT →
  2. 在线 RL(可验证奖励) →
  3. 推理时 scaling(长 CoT)。

在线 RL 的核心矛盾是:不要价值模型,还要稳定训练
于是 DeepSeek 提出 GRPO(Group Relative Policy Optimization):

  • 把价值网络扔掉,省 50 % 显存;
  • 用“同 prompt 多条回答”做组内相对奖励,简单有效。

但很快,社区发现 GRPO 有三宗罪

罪名现象根因
长度偏差正确答案越来越短,错误答案越来越长算术平均 + token 归一化
离群值爆炸几个 token 的权重把策略拉飞算术平均对极端值敏感
MoE 不稳定专家路由一变,token 级权重全乱token 级重要性采样

接下来的一年,就是“打补丁”的一年——GMPO、GSPO、CISPO、GFPO 接连登场。


1. GRPO:把“价值网络”扔进历史的垃圾桶

  • 核心公式
    LGRPO=1G∑i=1G1∣oi∣∑t=1∣oi∣min⁡⁣(ρi,tA^i,clip(ρi,t,1⁣−⁣ϵ,1⁣+⁣ϵ)A^i)\mathcal L_{\text{GRPO}}=\frac{1}{G}\sum_{i=1}^{G}\frac{1}{|o_i|}\sum_{t=1}^{|o_i|} \min\!\Bigl(\rho_{i,t}\hat A_i,\ \text{clip}(\rho_{i,t},1\!-\!\epsilon,1\!+\!\epsilon)\hat A_i\Bigr)LGRPO=G1i=1Goi1t=1oimin(ρi,tA^i, clip(ρi,t,1ϵ,1+ϵ)A^i)
    其中

    • (G):组内样本数
    • (ρi,t\rho_{i,t}ρi,t=πθ/πold\pi_\theta/\pi_{\text{old}}πθ/πold):token 级概率比
    • (A^i\hat A_iA^i):序列级相对优势(组内标准化)
  • 一句话总结
    “token 级裁剪 + 算术平均” → 省价值模型,但易震荡。


2. GMPO:把“算术平均”换成“几何平均”

  • 痛点
    GRPO 的算术平均对离群 token 太敏感,训练曲线像过山车。

  • 补丁
    几何平均天然把极端值压到地板。
    核心改动只是把公式里的“平均”换成“几何平均”:

    LGMPO=1G∑i=1G(∏t=1∣oi∣ρi,t1∣oi∣)A^i\mathcal L_{\text{GMPO}}=\frac{1}{G}\sum_{i=1}^{G} \left(\prod_{t=1}^{|o_i|}\rho_{i,t}^{\frac{1}{|o_i|}}\right)\hat A_i LGMPO=G1i=1Gt=1oiρi,toi1A^i

  • 效果
    同资源下 +4.1 % AIME24(DeepSeek-R1-Distill-7B),
    还能把裁剪范围从 (0.8,1.2) 扩到 (e{-0.4},e{0.4}),探索更野。


3. GSPO:干脆把“token”扔掉,改成“序列”

  • 痛点
    token 级权重在长序列里累积方差 → 训练崩溃;
    MoE 里路由一变,权重直接“量子隧穿”。

  • 补丁
    整句采样权重代替逐 token 权重:
    si(θ)=exp⁡⁣(1∣oi∣∑t=1∣oi∣log⁡ρi,t)s_i(\theta)=\exp\!\Bigl(\frac{1}{|o_i|}\sum_{t=1}^{|o_i|}\log\rho_{i,t}\Bigr) si(θ)=exp(oi1t=1oilogρi,t)
    整条序列共享同一个 (s_i) 进行裁剪,梯度一次性广播到所有 token

  • 效果

    • 训练全程无崩溃,不再需要“routing replay”(MoE 稳定器)。
    • 在 Qwen3-30B-A3B 上,同等计算量 AIME24↑2.3 %

4. CISPO:别剪 token,剪“权重”

  • 痛点
    token 级裁剪把关键反思词(“Wait”、“Recheck”)直接剪没,长 CoT 断流。

  • 补丁
    保留所有 token,只裁剪重要性权重 IW:
    IWclip=clip⁣(IW,1−ϵ,1+ϵ)\text{IW}_{\text{clip}}=\text{clip}\!\bigl(\text{IW},\ 1-\epsilon,\ 1+\epsilon\bigr) IWclip=clip(IW, 1ϵ, 1+ϵ)

  • 效果

    • 关键 token 不再被误伤;
    • 50 % 训练步数即可追平 DAPO 性能。

5. GFPO:给“组”再做个过滤

  • 痛点(推测)
    组内样本质量参差不齐,坏样本拖累梯度。

  • 补丁(推测)
    在 GSPO 基础上加一层 Group Filter
    用轻量 reward model 先给每条回答打分,
    只保留 top-k 样本进入最终优化,
    相当于“先筛后炼”。

  • 效果(待官方报告)


6. 一张对照速查表

算法优化粒度平均方式重要性权重裁剪级别是否用 value解决痛点
GRPOtoken算术token ρtoken省 value,但易崩
GMPOtoken几何token ρtoken抗离群
GSPOsequence算术序列 ssequence抗长序列+MoE
CISPOtoken算术token ρ权重级保关键 token
GFPOsequence算术序列 ssequence组内再过滤

7. 怎么选?

  • 短回答 / 代码补全GMPO/CISPO(token 级仍有用)
  • 长 CoT / MoE 大模型GSPO/GFPO(序列级更稳)
  • 资源紧张 / 想先跑通GRPO(baseline 够用)

8. 尾巴

从 GRPO 到 GFPO,短短一年,我们看到了 “简化→稳定→再简化” 的螺旋上升:

扔掉价值网络 → 扔掉算术平均 → 扔掉 token 级权重 → 扔掉坏样本
每一步都在回答同一个问题:
如何在无价值模型的前提下,既省资源又训得稳?

答案或许还没写完,下一篇论文,也许就叫 “XFPO” 😉

http://www.dtcms.com/a/338095.html

相关文章:

  • 如何平衡电竞酒店和高校宿舍对AI云电竞游戏盒子的不同需求?
  • 【Python】Python 多进程与多线程:从原理到实践
  • NVIDIA CWE 2025 上海直击:从 GPU 集群到 NeMo 2.0,企业 AI 智能化的加速引擎
  • 软件定义汽车---创新与差异化之路
  • C/C++ 中 str、str、*str 在指针语境下的具体含义(以 char* str 为例):
  • 深化中东战略承诺,联想集团宣布在利雅得设区域总部
  • wait / notify、单例模式
  • 【深度学习基础】PyTorch Tensor生成方式及复制方法详解
  • 【每日一题】Day 7
  • Linux——进程间、线程间的通信
  • 【C++】 using声明 与 using指示
  • 《彩色终端》诗解——ANSI 艺术解码(DeepSeek)
  • C++设计模式:建造者模式
  • 《若依》权限控制
  • ESP32小智-语音活动(VAD)检测流程
  • Pytorch GPU版本安装保姆级教程
  • 【Python面试题】描述一次解决内存泄漏的过程。如何用tracemalloc或者objgraph定位问题?什么情况下会用__slots__?
  • 【领码课堂】AI写码不再“盲跑”,方案先行,自动化高效落地
  • BOSS直聘招聘端AI辅助自动化技术研究
  • 某储备土地前期开发项目控制保护区桥梁自动化监测
  • 8.19 note
  • HashMap:源码
  • OpenLayers 入门指南【七】:加载自定义控件
  • 部署耐达讯自动化Profibus转光纤方案,变频器通信从此告别‘掉线焦虑’!“
  • Next.js数据获取
  • 飞算JavaAI智慧文旅场景实践:从景区管理到游客服务的全链路系统搭建
  • 无人机激光测距技术应用与挑战
  • 【前端进阶】UI渲染优化 - 骨架屏技术详解与多框架实现方案
  • Maven(一)
  • 做一个答题pk小程序多少钱?