手把手數(shù)學推導GRPO算法(含代碼實現(xiàn))
GRPO 算法全稱是Group Relative Policy Optimization ,是一種針對無需獎勵的強化學習人類反饋(RLHF)任務的算法。
其核心思想是通過分組相對策略優(yōu)化來改進模型的表現(xiàn)。
想象一下——你是一位野心勃勃的大廚,參加了一場神秘的烹飪大賽。
這場比賽的規(guī)則卻讓你一頭霧水:
? 你不能嘗自己做的菜
? 沒有人給你打分
? 沒有評委點評你是“人間黑暗料理”還是“米其林之光”
你心想:這還怎么玩?瞎做一通全靠運氣?
別急,這時候你靈機一動——
雖然你嘗不到自己的菜,但你可以偷偷觀察其他廚師做了啥、用了啥食材、擺了啥盤子、結果大家更愛看哪一桌。
于是你開始分類總結:
“哎,這幾桌用魚子醬的好像更受歡迎……”
“這一桌全是粉紅配色的,好像更吸睛……”
你把這些組合按“風格”歸類成一組組策略,比如:
??“日料組”
“法餐組”
“川菜組”
然后你不再關心菜有多好吃,而是只比較:同一組里,哪種搭配更受歡迎?
恭喜你,剛剛發(fā)明了 GRPO 算法!GRPO,全稱是 Group Relative Policy Optimization。聽著像是博士論文標題,其實它的精髓很簡單:
- 不靠“打分”這種絕對評價
- 靠“誰比誰強”這種相對排序
- 把策略分組,在組內選最強
組與組之間還能同時探索多種風格,避免大家全扎堆做水煮肉片。
GRPO 就像一個聰明的、不靠嘴巴靠眼神評菜的大廚。它不需要你給個“你這道菜80分”,它只要知道“你這道比那道更討喜”,它就能一步步變得更強。
原來這就是GRPO
如果把大型語言模型比作一群正在參加辯論大賽的聰明小伙伴,以前的做法是請一個嚴厲的裁判(外部評估者)來打分、點評,告訴大家誰表現(xiàn)好誰該回家反思。結果大家說話都小心翼翼,還得時刻看裁判臉色,進步慢得像蝸牛爬。
GRPO 的做法就不一樣了,它直接取消了那個碎碎念的裁判!改成讓小伙伴們自己組團互評。比如,一群人圍坐成圈,一人發(fā)表觀點,剩下的人開始點評:“你這個想法新穎!”、“這個推理有點繞?。 ?、“妙啊,妙不可言!”——大家相互較勁、相互激發(fā)靈感,比誰的思路更清晰、更有說服力。
這種“沒有裁判,自帶競技場”的模式,讓大伙在互相較量中不斷成長。因為不再拘泥于討好裁判,他們能更自由地探索復雜問題,還能鍛煉出一口氣把長難題說清楚的超強推理能力!
所以說,GRPO就像是給大腦開了一場沒有終點的思維馬拉松,跑著跑著,模型的腦瓜子就越來越靈光啦!你說,這種“內卷式進化”,誰能不愛呢?
下圖是 PPO的一個圖示:

而 GRPO 更像是下面這樣:

GRPO 的創(chuàng)新在于它打破了傳統(tǒng)強化學習對獎勵信號的依賴,通過組內相對策略優(yōu)化來實現(xiàn)模型的自我提升。這一創(chuàng)新點使得GRPO在無需明確獎勵信號的場景下仍能進行有效學習,極大地拓展了強化學習的應用范圍。

在 GRPO 算法中,每個小組內的模型策略都會相互比較,通過相對排序來找出當前組內最優(yōu)的策略。這種組內競爭機制促使模型不斷嘗試新的策略組合,以在組內脫穎而出。

下圖是它們兩者的區(qū)別:

GRPO 是不同組之間相互比較:

GRPO算法就像小朋友們分組玩游戲,不看誰得分高,只看誰比誰更厲害。每組小朋友都比著誰更聰明,想出好辦法。這樣,大家玩著玩著就變得更聰明了,就像大腦開了場思維馬拉松!

哪組表現(xiàn)好,哪組就能拿到最高獎。

GRPO 通過對各組得分進行排序,就像小朋友們分組玩游戲,不比誰得分高,只比誰想法好。每組都想出好辦法,玩著玩著大家就更聰明了。這就是GRPO算法,讓模型在玩游戲中變得更厲害!

怎么樣,是不是很簡單呢。
紙上推演: GRPO的數(shù)學推演
和之前一樣,我們可以嘗試嘗試用Excel來解釋GRPO,這年頭誰還不會Excel呢。
首先,我們初始化一個輸入,和之前一樣,6個Token,每個是5維的向量。

接下來先計算一下新的策略與舊的策略的比值,π / π_old,模擬策略偏移程度。

優(yōu)勢:每個Token的獨特優(yōu)勢,源于其在獎勵排名中的位置。

Clipped π/π_old: 限制在[0.8, 1.2]范圍內,以防止策略過度波動

π*A:策略優(yōu)勢乘數(shù),代表學習的方向

Clipped π*A: 應用clip函數(shù)后的更穩(wěn)定優(yōu)化結果,這個乘數(shù)確保了策略更新既不會過于激進也不會過于保守,有助于模型在保持穩(wěn)定性的同時逐步改進。

Final Loss: 每個Token的最終損失等于 min(πA, Clipped πA)。這個損失函數(shù)的設計體現(xiàn)了GRPO算法的核心思想:在保持策略穩(wěn)定性的同時,追求策略的相對優(yōu)勢。通過限制策略更新的幅度(Clipped π/π_old),算法避免了因策略突變而導致的性能不穩(wěn)定。同時,利用策略優(yōu)勢乘數(shù)(π*A)指導學習方向,使得模型能夠逐步向更優(yōu)的策略靠近。

KL Proxy: 每個Token的策略偏移度量等于(π/π_old - 1)^2。這個度量反映了新策略與舊策略之間的差異程度,是衡量策略更新幅度的關鍵指標。在GRPO算法中,KL Proxy不僅用于監(jiān)控策略的穩(wěn)定性,還作為調整學習步長的重要依據(jù)。當KL Proxy值較大時,意味著策略更新幅度較大,可能會引發(fā)性能不穩(wěn)定,此時算法會傾向于減小學習步長,以平穩(wěn)過渡;而當KL Proxy值較小時,表明策略更新較為平緩,算法則可以適當增大學習步長,以加速學習進程。

下面是KL代理計算的公式:

wpsoffice
其中:
π(oi,t)表示在狀態(tài)t下采取動作Oi的新策略概率
π_old((oi,t)表示在狀態(tài)t下采取動作Oi的舊策略概率
Σ表示對所有可能的狀態(tài)和動作進行求和。
這個公式計算了每個狀態(tài)下每個動作的新舊策略概率比值的平方差之和,從而量化了策略更新的幅度。
通過監(jiān)控KL Proxy值的變化,算法能夠動態(tài)調整學習步長,確保策略更新的穩(wěn)定性和有效性。
下面是針對輸入的Token的計算結果:

平均 Loss: 所有為 0.00045977
平均 KL : ≈ (0.0008011 + 0.0002615 + 0.001144 + 0.000688 + 0.000998 + 0.000705) / 6
≈ 0.0007662
最終計算得出:
GRPO = 0.00045977 - 0.1 * 0.0007662 ≈ 0.00038315
嘿,各位,看到這里有何感想?在本節(jié)中,我們運用了名為GRPO的算法對模型進行了一次小規(guī)模的“優(yōu)化”,結果如何呢?確實,平均損失又悄然下降了一些!這可是在缺乏獎勵信號的情況下實現(xiàn)的,必須承認,GRPO算法在強化學習領域確實顯示出了它的獨特優(yōu)勢。
木牛流馬:GRPO的代碼實現(xiàn)
組相對策略優(yōu)化的核心理念在于評價你的表現(xiàn),并非基于絕對的優(yōu)秀程度,而是基于你相較于同組成員的相對優(yōu)勢。
為何這種方法更聰明?
在傳統(tǒng)的 AI 訓練模式中,模型是獨立工作的,它只專注于提升自身的性能。然而,在 GRPO 中,模型被劃分為若干個“專家組”,每個小組都有其獨特的評價標準。
這樣做有什么益處?
? 促進多樣性,認識到并非只有完全一致的表現(xiàn)才是優(yōu)秀;
? 實現(xiàn)更穩(wěn)定的學習過程,避免被少數(shù)表現(xiàn)突出的“尖子生”所左右。
下讓我們用 Python 來模擬一下!接下來將編寫一段簡潔的代碼,通過類比的方式展示 GRPO 的工作原理。
# 導入 PyTorch 庫
import torch
from torch.distributions import Categorical
import torch.nn as nn
import torch.optim as optim
# 定義一個“學生模型”,用于根據(jù)輸入狀態(tài)選擇一個動作(例如選擇題選項)
class StudentModel(nn.Module):
def __init__(self):
super(StudentModel, self).__init__()
self.fc = nn.Linear(4, 3) # 輸入4個知識點熟練度,輸出3個動作的logits
def forward(self, state):
return torch.softmax(self.fc(state), dim=-1)
# 模擬一次考試:讓模型對100道題目做出選擇
def take_exam(model):
records = []
for _ in range(100):
state = torch.rand(4) # 模擬一個4維狀態(tài)(知識點掌握度)
probs = model(state)
dist = Categorical(probs)
action = dist.sample()
score = torch.rand(1).item() # 模擬得分(0~1)
# 記錄狀態(tài)、動作、對數(shù)概率、得分
records.append((state, action, dist.log_prob(action), score))
return records
# 計算相對得分(優(yōu)勢值):每個得分減去平均分
def compute_relative_score(records):
scores = torch.tensor([r[3] for r in records])
baseline = scores.mean()
return scores - baseline
# 使用相對優(yōu)勢優(yōu)化模型參數(shù)(策略梯度 + PPO 風格 clip)
def optimize_model(model, records, relative_scores):
optimizer = optim.Adam(model.parameters(), lr=0.01)
for (state, action, old_log_prob, _), adv in zip(records, relative_scores):
probs = model(state)
dist = Categorical(probs)
new_log_prob = dist.log_prob(action)
ratio = torch.exp(new_log_prob - old_log_prob.detach())
# PPO 中的 clipped surrogate objective
surr1 = ratio * adv
surr2 = torch.clamp(ratio, 0.8, 1.2) * adv
loss = -torch.min(surr1, surr2)
optimizer.zero_grad()
loss.backward()
optimizer.step()
# 模型訓練流程(模擬5輪考試)
def main():
model = StudentModel()
for round_num in range(5):
exam_results = take_exam(model)
rel_scores = compute_relative_score(exam_results)
optimize_model(model, exam_results, rel_scores)
print(f"Round {round_num + 1}: 平均相對進步 = {rel_scores.mean():.3f}")
if __name__ == "__main__":
main()讓我們來解釋一下上面的代碼:
模型與基礎庫導入:
import torch
from torch.distributions import Categorical- torch:深度學習的核心庫,用于張量計算和自動求導。
- Categorical:離散概率分布,用于從一組概率中抽樣 —— 類比“學生在多個選項中選擇答案”。
定義“學生模型”——策略網(wǎng)絡:
class StudentModel(torch.nn.Module):
def __init__(self):
super().__init__()
self.fc = torch.nn.Linear(4, 3) # 輸入4個知識點,輸出3個動作(選項)
def forward(self, state):
return torch.softmax(self.fc(state), dim=-1)這是一個簡單的策略網(wǎng)絡(Policy Network),用來決定“在某個狀態(tài)下選擇哪個動作”。
- ?
?self.fc = torch.nn.Linear(4, 3)??:輸入4個維度(知識點特征),輸出3個維度(選項概率)。 - ?
?softmax??:將輸出轉成合法的概率分布,符合策略概率π(a|s) 的定義。
“考試過程”——生成交互數(shù)據(jù):
def take_exam(model):
records = []
for _ in range(100):
state = torch.rand(4) # 隨機生成一個狀態(tài)(知識點掌握情況)
probs = model(state) # 得到選擇每個選項的概率分布
dist = Categorical(probs) # 定義分類分布
action = dist.sample() # 根據(jù)概率隨機選擇一個選項
score = torch.rand(1).item() # 隨機生成得分(模擬環(huán)境反饋)
records.append((state, action, dist.log_prob(action), score))
return records這就是策略梯度算法的采樣過程,采集狀態(tài)-動作-回報 的三元組,構成經(jīng)驗數(shù)據(jù)。
這里的 score 相當于獎勵(Reward),模擬現(xiàn)實世界的反饋。
dist.sample() 模擬了現(xiàn)實決策中的“試探性嘗試”(探索)。
dist.log_prob(action) 是策略的對數(shù)概率,后面用來計算策略改進比例。
GRPO 核心 —— 計算相對優(yōu)勢(Advantage):
def compute_relative_score(records):
rewards = torch.tensor([r[3] for r in records]) # 提取所有得分
baseline = rewards.mean() # 小組平均水平(基線)
return rewards - baseline # 相對優(yōu)勢 Advantage = Reward - Baseline這里就是GRPO的“組內對比”機制,用的是優(yōu)勢函數(shù) A(s, a)。
高于平均水平的表現(xiàn)會得到正的優(yōu)勢獎勵,低于平均水平的表現(xiàn)產(chǎn)生負反饋。
直觀理解:
“考得比班級平均分高” → 獎勵大;
“考得比平均分低” → 下次要改進。
用 Advantage 更新模型 —— 策略優(yōu)化:
# 使用相對優(yōu)勢優(yōu)化模型參數(shù)(策略梯度 + PPO 風格 clip)
def optimize_model(model, records, relative_scores):
optimizer = optim.Adam(model.parameters(), lr=0.01)
for (state, action, old_log_prob, _), adv in zip(records, relative_scores):
probs = model(state)
dist = Categorical(probs)
new_log_prob = dist.log_prob(action)
ratio = torch.exp(new_log_prob - old_log_prob.detach())
# PPO 中的 clipped surrogate objective
surr1 = ratio * adv
surr2 = torch.clamp(ratio, 0.8, 1.2) * adv
loss = -torch.min(surr1, surr2)
optimizer.zero_grad()
loss.backward()
optimizer.step()采用了 PPO(Proximal Policy Optimization) 的核心思想 —— 剪切目標函數(shù),防止劇烈更新。
- ratio = π_new / π_old:策略改進幅度比值。
- torch.clamp(ratio, 0.8, 1.2):限制每次更新在 ±20% 以內,保證學習穩(wěn)定。
為什么要乘以 adv?
- 正的 Advantage → 鼓勵這個動作(增大概率);
- 負的 Advantage → 懲罰這個動作(減少概率)。
完整的訓練過程如下:
model = StudentModel()
for round in range(5):
exam_results = take_exam(model)
rel_scores = compute_relative_score(exam_results)
optimize_model(model, exam_results, rel_scores)
print(f"Round {round+1}: 平均相對進步 = {rel_scores.mean():.3f}")這是標準的策略優(yōu)化循環(huán):采樣 → 計算優(yōu)勢 → 策略更新,每一輪都打印平均相對進步,觀察模型是否在逐漸改進。
直觀類比:
5輪模擬了5次大考,每次考完互相切磋復盤,不斷提高水平。
GRPO 相當于為 AI 構建了一個“同儕比較”的學習框架——目標不在于超越他人,而在于超越團隊平均水平!這一機制有助于 AI 更加貼近人類的思維模式,例如:
- 多角度分析問題(組內差異性)
- 動態(tài)調整策略(避免死記硬背)
- 培養(yǎng)更智慧、更通用的學習能力
GRPO是DeepSeek的又一創(chuàng)新,通過組內對比,不僅讓 AI 學會了“擇優(yōu)而從”,還學會了“反思與調整”。在每一次的模擬考試中,AI 都能從同伴的表現(xiàn)中汲取經(jīng)驗,不斷優(yōu)化自身的決策策略。這種學習方式,不僅提高了 AI 的學習效率,更使其具備了更強的適應能力和創(chuàng)新能力。
在未來的發(fā)展中,我們可以期待 GRPO 框架在更多領域得到應用。無論是自動駕駛、醫(yī)療診斷,還是金融投資、教育輔導,GRPO 都能為 AI 提供一個更加高效、智能的學習路徑。通過不斷地組內對比和策略優(yōu)化,AI 將能夠更快速地適應復雜多變的環(huán)境,為人類社會的發(fā)展貢獻更多的智慧和力量。
本文轉載自 ???AI大模型世界???,作者:roclv

















