從 GRPO 到 DAPO 和 GSPO:是什麼、為什麼、怎麼做
在大型語言模型的強化學習階段,PPO 曾是主流方法。然而,它對價值模型的依賴在處理長文字輸出和複雜任務時顯露出侷限性。GRPO 擺脫了對價值模型的依賴,顯著提升了可擴充套件性,但在效率和穩定性上仍有最佳化空間。這催生了 DAPO,它在取樣、裁剪和梯度計算等細節上進行了最佳化。然而,在動態啟用專家的 MoE 架構中,GRPO 框架下的令牌級最佳化仍然難以穩定收斂。GSPO 更進一步,將最佳化粒度轉移到序列級別,從根本上降低了高方差和結構性噪聲。本文將遵循這一演進路徑:從 GRPO 出發,逐步揭示 DAPO 和 GSPO 背後的設計動機和實現細節。
在接下來的文章中,你將瞭解到
- 為什麼 GRPO 擺脫了 PPO 對價值模型的依賴,但在某些場景下仍然會“崩潰”。
- “更高裁剪”(Clip-Higher)如何修復好令牌過早被限制的隱藏問題。
- 動態取樣如何防止因無效樣本而造成的大量計算浪費。
- 令牌級梯度損失如何確保長響應不再稀釋有價值的梯度訊號。
- 為什麼 GRPO 的逐令牌重要性取樣在 MoE 架構中會產生巨大方差。
- GSPO 如何用序列級最佳化取代令牌級最佳化,從根本上提高穩定性和效率。
GRPO 回顧
GRPO 的訓練目標是:
其中
理解了 GRPO 的目標後,我們首先需要明確**重要性取樣**的作用和侷限性,這不僅是理解 GRPO 的關鍵,也是理解 DAPO 和 GSPO 改進的切入點。
重要性比率的作用是什麼?
重要性取樣的本質是,我們希望計算新分佈下的期望,但我們的資料是從舊分佈中抽取的。因此,我們使用新舊策略下相同動作的機率比作為修正權重。
這使我們能夠使用舊策略的離線資料來評估新策略下的期望值,避免了每次更新後重新取樣(從而降低成本)。然而,如果新舊策略之間的差距太大,權重的方差會變得非常大,導致訓練不穩定。
重要性取樣的目的是在只有行為分佈的樣本時,估計目標分佈下的期望。在 PPO/GRPO 中,我們不直接從新策略中取樣資料;相反,我們首先使用舊策略生成資料(因為取樣成本很高),這個過程稱為**rollout**。在更新時,我們必須糾正分佈不匹配的問題,這就是重要性取樣的用武之地。將取樣後每個令牌的重要性比率定義為:
PPO/GRPO 的目標可以寫成:
在這裡, 是計算出的優勢,而裁剪操作限制了更新幅度,以防止策略偏離舊策略太遠。
有了對重要性取樣的直觀理解,我們可以進一步思考它在 PPO/GRPO 中的實際效果:優勢函式 的符號和比率 共同決定了策略更新的方向和幅度。
和 的符號如何影響訓練?
我們來分析一下各種情況。假設 (動作比預期要好),我們希望增加這個動作的機率。如果我們在裁剪中設定 ,那麼當 時,`min` 和 `clip` 操作會將其限制在 1.2。當 時,由於 `min` 操作,不會發生裁剪,因此正優勢的向上變化是受限的。
反之,當 (該行為差於預期)時,我們應該降低該行為的機率。如果 ,min
操作會進一步限制它,上限為 ;但當 時,min
操作則不施加限制(可以達到 ,帶上負號後變為 )。因此,對於負優勢的向下調整也是有界的。 衡量當前行為/軌跡比平均水平好還是差。如果 為正,我們鼓勵它;如果為負,我們懲罰它,使其在未來出現的可能性降低。重要性比率 反映了新策略選擇該行為的可能性與舊策略相比增加了多少(或減少了多少)。如果 ,新模型更偏好該行為;如果 ,則不那麼偏好。在 和 的四種符號組合中,我們只希望出現兩種:當它們符號相同時,即正的 加上 (強化),或者負的 加上 (糾正錯誤)。
然而,僅僅匹配 和 的符號是不夠的。在 PPO/GRPO 中,**截斷操作 (clipping operation)** 對於穩定的訓練同樣至關重要,因為它決定了哪些詞元 (token) 的梯度真正對更新做出貢獻。
截斷對梯度和詞元效率的影響
對於 的情況,當 ,即增幅達到上限時,我們應用截斷,梯度變為零。這有效地抵消了該詞元對訓練的貢獻。類似地,對於 ,如果 ,即降幅超過上限,截斷也會將梯度置為零。一個常見的誤解是,截斷使用直通估計器 (straight-through estimator) 將截斷值的梯度傳回給未截斷的值;實際上,這並不會發生:截斷前的梯度直接被置為零。
至此,我們對 GRPO 的機制、優勢和侷限性有了較為完整的理解。接下來,我們將看到 DAPO 如何在保留 GRPO 基本框架的同時,引入更精細的改進來解決效率和穩定性方面的挑戰。
從 GRPO 到 DAPO
DAPO 的出發點非常直接:在實際訓練中,GRPO 常常因為不合理的截斷範圍、冗餘取樣以及長序列中的梯度稀釋等問題,浪費了大量的學習訊號。DAPO 透過四項針對性的改進來解決這些問題。
為什麼 DAPO 要提高上界 而保持 不變?
作者觀察到,選擇一個小的 作為截斷上界會導致以下問題:如果舊策略對一個取樣到的詞元分配了非常低的機率,而其優勢值為正(意味著舊模型取樣到了非常好的東西),那麼當前策略增加其機率的空間就很小,即使增加機率正是我們想要的。
例如,如果舊策略的機率是 0.9,且 ,上界為 ,已經超過了最大機率 1.0,所以永遠不會被截斷。但如果舊策略的機率是 0.2,上界則變為 。在這種情況下,即使當前策略將機率提高到 0.4(一個很好的改進),過小的 也會導致它被截斷,從而有效地丟棄了這個詞元。這就是為什麼 DAPO 採用 **Clip-Higher**,提高上界能提升詞元效率的原因。
這本質上就是我們所說的“馬太效應”:富者愈富,窮者難以翻身。如果舊策略好不容易以極低的機率取樣到一個關鍵的詞元,比如 `“等等”`,但當前模型顯著提高了這個機率,它仍然可能被截斷掉,剝奪了模型“翻盤”的機會。
Clip-Higher 解決了“好詞元過早被限制”的問題,但它沒有解決另一個常見的浪費來源:缺乏取樣多樣性。為了解決這個問題,DAPO 引入了**動態取樣 (Dynamic Sampling)**。
DAPO - 動態取樣
DAPO 的第二項創新是**動態取樣 (Dynamic Sampling)**。其動機如下:假設對於給定的一個查詢,我們取樣了 10 個回答,而這 10 個回答要麼都非常好,要麼都非常差,始終獲得最大獎勵或零獎勵。由於 GRPO 的計算方式,這 10 個樣本的優勢值都將為零,因此貢獻的梯度也為零。
這意味著有效貢獻梯度的樣本數量遠低於名義上的樣本數,這導致了高方差、不穩定的訓練和樣本浪費。這種效應在訓練初期(模型較差時)和後期(模型非常好以至於頻繁產生完美回答時)尤其明顯。
為了解決這個問題,DAPO 強制執行一個額外的取樣規則:對於每個查詢,取樣到的回答集合不能全部獎勵為 0 或 1。如果所有樣本都是 0 或所有都是 1,則會抽取額外的樣本,直到這個條件被打破。這在約束條件中表示為
這確保了對於相同的輸入,取樣集合中既包含正確答案,也包含錯誤答案。
除了取樣多樣性之外,GRPO 對長回答還有一個隱藏的缺陷:**隨著回答長度增加,詞元梯度被稀釋**。DAPO 的第三項改進透過**詞元級梯度損失 (Token-Level Gradient Loss)** 來解決這個問題。
DAPO - 詞元級梯度損失
DAPO 的第三項創新修復了 GRPO 中每個詞元的梯度權重隨著取樣回答長度增加而減小的問題。
為什麼會這樣?假設我們取樣了兩次:一個回答有 200 個詞元,另一個有 10 個詞元。在 GRPO 的公式中,我們首先在每個樣本內部平均梯度,然後在整個批次中平均。這使得第一個回答中的每個詞元權重為 ,而第二個回答中的每個詞元權重為 。因此,較短回答的詞元影響力要大得多。
缺點很明顯:對於更難的問題,長回答很常見。如果這類回答質量很高,其寶貴的梯度訊號會被稀釋。如果它們質量差,僅僅因為重複或冗長而變長,那麼糾正訊號也會減弱。
DAPO 的解決方案是:在計算梯度時,對所有樣本生成的總詞元數進行平均。在我們的例子中,長回答和短回答都使每個詞元的權重為 。這使得所有詞元被同等對待,提高了長樣本訓練的效率。
這對應於將損失聚合方式從 GRPO 的
改為 DAPO 的
經驗表明,詞元級損失能帶來更穩定的訓練,防止熵變得過高(導致策略隨機行動),並避免熵過低時的探索崩潰(Clip-Higher 也有助於解決此問題)。透過從樣本級損失轉向詞元級損失,DAPO 確保長回答對最終梯度的貢獻是成比例的:每個詞元直接影響整體梯度,與其所在的樣本長度無關。
最後一項改進也與回答長度有關,但從另一個角度切入:**過長回答對整體獎勵的負面影響**。
DAPO - 過長獎勵調整
DAPO 的第四項改進使用一種**軟懲罰**機制來調整過長回答的獎勵。具體來說,一旦生成的序列超過預定義的第一個長度閾值,它就會對詞元進行懲罰,懲罰力度隨著長度線性增加。如果長度超過第二個閾值,懲罰力度將大到足以抵消正確答案的原始獎勵,有效地模擬了過長回答被視為無效的情景。
透過 Clip-Higher、動態取樣、詞元級梯度損失和過長獎勵調整,DAPO 對 GRPO 進行了精細的最佳化,顯著提高了訓練效率和穩定性。然而,在某些架構中,特別是混合專家模型 (MoE),GRPO 仍然存在 DAPO 無法完全解決的結構性問題,這就引出了 GSPO。
GSPO:解決 MoE 訓練中 GRPO 的不穩定性
如果說 DAPO 是在 GRPO 框架內的“微調和完善”,那麼 GSPO 則邁出了更根本的一步:它將最佳化粒度從詞元級改為序列級。這一轉變的動機源於,在使用 MoE 架構進行訓練時,GRPO 的重要性取樣會引入較大的方差和不穩定性。GSPO 的核心思想是在處理獎勵時減少對逐詞元最佳化的依賴,而更加強調整體序列的結果。下面,我們介紹 GSPO 背後的主要概念。
長話短說: 像 PPO 和 GRPO 這樣的傳統演算法通常會單獨最佳化模型輸出中的每個詞元,給予某些詞元更高的權重,而另一些則更低。雖然這旨在實現精細化最佳化,但在長文字、大模型的場景中,它反而會引入噪聲和獎勵偏差,導致模型迷失方向,甚至突然崩潰。問題的根源在於,我們基於完整的回答來評估模型,卻逐個詞元地訓練它,導致獎勵粒度與最佳化目標不匹配。GSPO 透過從逐詞元評分轉向序列級最佳化,使獎勵和最佳化目標保持一致。這種轉變為帶來兩大好處:
- 穩定性 – GSPO 最佳化整個序列,減少了來自詞元級波動的訓練噪聲。
- 效率 – GSPO 篩選並僅保留高質量樣本進行最佳化,從而加速收斂並改善結果。
在 MoE 架構中,好處更大:由於每次推理只啟用一小部分專家模組,路由路徑是動態且難以控制的。傳統方法通常依賴**路由重放 (Routing Replay)**,即在推理時記錄專家啟用,並在訓練時強制使用相同的路由,以確保一致性。雖然有效,但這極大地增加了工程成本並限制了效能。GSPO 的序列級邏輯自然地避免了對路由重放的需求,使得 MoE 訓練更輕便、更穩定。對於越來越多的大型 MoE 模型來說,這是一個寶貴的突破。例如,Qwen2 系列就採用了 GSPO。從 PPO → GRPO → GSPO,我們看到大語言模型的強化學習最佳化目標應與任務性質緊密對齊,同時保持訓練邏輯簡單、可擴充套件和可部署。進步往往不是由複雜的技巧驅動,而是源於對核心問題的洞察。
PPO 在長文字和複雜任務中表現不佳,主要因為它依賴於價值模型:當策略模型輸出長序列時,價值估計變得不準確,使其難以從簡單任務泛化到複雜任務。GRPO 擺脫了這種依賴,打破了價值模型的瓶頸。然而,GRPO 在 MoE 訓練或長時間訓練中仍然面臨穩定性問題:在某個時刻,模型會突然崩潰,即使恢復訓練或調整引數也常常無法挽救。接下來,我們來分析可能的原因和解決方案。
重要性比率扮演什麼角色,為什麼它在 GRPO 中存在問題?
重要性取樣使我們能夠在我們只有來自行為分佈的樣本時,估計目標分佈下的期望值。我們透過根據目標策略和行為策略之間的機率比率對樣本進行加權來實現這一點。然而,這種校正假設有多個樣本,如果只有一個樣本,它無法有效地調整分佈偏移。
在大模型訓練中的問題在於,重要性取樣是**按詞元 (per-token)** 執行的,單個詞元的比率無法有意義地進行分佈校正。相反,它引入了高方差的噪聲,尤其是在不穩定的 MoE 環境中。這表明 GRPO 的詞元級計算可能在根本上是次優的。
另一個不匹配之處:我們的獎勵是針對**整個回答**(序列級)給出的,但在詞元級重要性取樣中,我們將這個獎勵均勻地分散到各個詞元上(獎勵塑造),並試圖單獨調整它們。這在獎勵訊號和最佳化目標之間造成了粒度不匹配。既然我們已經有了序列級獎勵,為什麼不也讓 GRPO 的最佳化成為序列級的呢?
為什麼 GRPO 在 MoE 架構中難以收斂?
專家啟用的波動性: 新舊策略可能會啟用不同的專家,從而引入結構性偏差和噪聲。當 被更新時,路由器 (router) 可能也會改變,所以即使只經過一個訓練步驟,兩個策略也可能啟用完全不同的專家組。這會導致輸出機率的大幅波動,從而異常頻繁地觸發截斷。被截斷的詞元不貢獻梯度,而剩下的詞元通常包含噪聲。
理論上,重要性比率應反映在**相同**結構下由引數更新引起的機率變化。但專家的改變會導致與最佳化方向無關的、不可預測的高方差波動。這種方差扭曲了策略梯度的估計,使訓練不穩定,甚至導致崩潰。
GSPO 之前的路由重放
路由重放(Routing Replay)在從 取樣期間記錄專家(expert)的啟用情況,並強制 在訓練期間使用相同的路由路徑。其缺點是:工程和基礎設施成本高、效率低下,並且 可能已經找到了更好的路由路徑,卻被迫遵循舊的路徑。
傳統方法使用路由重放來緩解專家啟用不匹配的問題,而 GSPO 則完全繞過了這種依賴,從根本上減少了結構方差。
GSPO 損失函式設計
如果獎勵是序列級別的,那麼重要性比率也應該是序列級別的。
從上文可知,GSPO 將 GRPO 的逐詞元(per-token)比率 替換為序列級別(sequence-level)的比率 ,後者不再與步長索引 繫結。其思想是放棄詞元級別的目標,轉而採用序列級別的縮放。這自然引出了 GSPO 的新最佳化目標:用序列級別的重要性比率替換詞元級別的重要性比率。
序列級別的比率經過長度歸一化(length-normalized),以減少方差並將數值保持在一致的尺度上。若不進行歸一化,不同長度的回答會使比率對長度高度敏感。由於同一序列中的所有詞元共享相同的重要性比率,裁剪(如果觸發)將裁剪整個序列,而不僅僅是某些詞元。歸一化因子 也防止了長序列中少數不穩定的詞元導致比率爆炸。
為什麼要使用指數化,而不是直接使用對數似然差異?
指數化是必要的,因為重要性取樣的核心公式是:
在這裡,權重必須是機率比率(),而不是對數機率的差值。如果我們直接使用 ,它將等價於:
這不再是一個無偏的重要性取樣校正。
GSPO 在對數空間中透過 進行歸一化,然後進行指數化:
這確保了不同序列長度的重要性比率能夠一致地縮放,避免了長序列中少數詞元機率變化導致極端值。如果不進行指數化而停留在對數空間,會使比率對長度敏感,需要調整裁剪範圍,並破壞與 PPO/GRPO 中使用的 KL 正則化的相容性。
理論梯度分析:GSPO 與 GRPO 的對比
根據目標的定義,關鍵區別在於重要性比率在梯度計算中的定義和使用方式。
在不進行裁剪的情況下,區別在於是否對同一回應中的不同詞元賦予不同的權重。GRPO 根據 為每個詞元分配其自身的權重,而 GSPO 則對一個序列中的所有詞元應用相同的 。
GSPO 的梯度
在這裡,一個響應中的所有詞元(token)共享相同的權重 ,確保了序列內部梯度的一致性。
GRPO的梯度
在這裡,權重 因詞元位置和上下文而異,導致方差更高,尤其在長序列或混合專家(MoE)模型中。
另一個區別在於裁剪(clipping)如何與這些比率相互作用。對於正優勢(positive-advantage)樣本,GRPO 的比率範圍大約是 [0, 1.x];對於負優勢(negative-advantage)樣本,其範圍可以是 [0.x, ∞),這是一個更寬的範圍。在長序列中,這種不對稱性產生的噪聲會累積,導致 GRPO 下 MoE 的不穩定性。
獎勵指標在檢測模型漂移方面也存在滯後,當問題出現時,模型可能已經偏離了一段時間。實驗表明,GSPO 用更少的有效詞元(由於更激進的裁剪)進行訓練,卻實現了更高的訓練效率。
總而言之,GSPO 實現了序列內一致的梯度權重,減少了詞元間的方差,特別適用於長序列和 MoE 場景下的穩定訓練。它的引入標誌著從 PPO → GRPO → GSPO 的轉變,從依賴價值模型的詞元級最佳化轉向與任務性質更一致的序列級最佳化。