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<∣{oi?∣is_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=1G?∣oi?∣1?∑i=1G?∑t=1∣oi?∣?min(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?(Lmax??Lcache?)?∣y∣?,?1,?∣y∣≤Lmax??Lcache?Lmax??Lcache?<∣y∣≤Lmax?∣y∣>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=1G?∣oi?∣1?i=1∑G?t=1∑∣oi?∣?min(ri,t?(θ)A^i,t?,clip(ri,t?(θ),1?εlow?,1+εhigh?)A^i,t?)]0<∣{oi?∣is_equivalent(a,oi?)}∣<G,ri,t?(θ)=πθold??(oi,t?∣q,oi,<t?)πθ?(oi,t?∣q,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)。
- 在強化學習中,**advantage(優勢函數)**的計算依賴于value的估計:
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 年開始,大模型后訓練出現一條清晰技術路線:
- 冷啟動 SFT →
- 在線 RL(可驗證獎勵) →
- 推理時 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?=G1?i=1∑G?∣oi?∣1?t=1∑∣oi?∣?min(ρi,t?A^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?=G1?i=1∑G??t=1∏∣oi?∣?ρi,t∣oi?∣1???A^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(∣oi?∣1?t=1∑∣oi?∣?logρ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 | 解決痛點 |
---|---|---|---|---|---|---|
GRPO | token | 算術 | token ρ | token | ? | 省 value,但易崩 |
GMPO | token | 幾何 | token ρ | token | ? | 抗離群 |
GSPO | sequence | 算術 | 序列 s | sequence | ? | 抗長序列+MoE |
CISPO | token | 算術 | token ρ | 權重級 | ? | 保關鍵 token |
GFPO | sequence | 算術 | 序列 s | sequence | ? | 組內再過濾 |
7. 怎么選?
- 短回答 / 代碼補全 → GMPO/CISPO(token 級仍有用)
- 長 CoT / MoE 大模型 → GSPO/GFPO(序列級更穩)
- 資源緊張 / 想先跑通 → GRPO(baseline 夠用)
8. 尾巴
從 GRPO 到 GFPO,短短一年,我們看到了 “簡化→穩定→再簡化” 的螺旋上升:
扔掉價值網絡 → 扔掉算術平均 → 扔掉 token 級權重 → 扔掉壞樣本
每一步都在回答同一個問題:
如何在無價值模型的前提下,既省資源又訓得穩?
答案或許還沒寫完,下一篇論文,也許就叫 “XFPO” 😉