偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

手把手數(shù)學推導GRPO算法(含代碼實現(xiàn))

發(fā)布于 2025-7-30 06:56
瀏覽
0收藏

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的一個圖示:

手把手數(shù)學推導GRPO算法(含代碼實現(xiàn))-AI.x社區(qū)

而 GRPO 更像是下面這樣:

手把手數(shù)學推導GRPO算法(含代碼實現(xiàn))-AI.x社區(qū)

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

手把手數(shù)學推導GRPO算法(含代碼實現(xiàn))-AI.x社區(qū)

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

手把手數(shù)學推導GRPO算法(含代碼實現(xiàn))-AI.x社區(qū)

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

手把手數(shù)學推導GRPO算法(含代碼實現(xiàn))-AI.x社區(qū)

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

手把手數(shù)學推導GRPO算法(含代碼實現(xiàn))-AI.x社區(qū)

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

手把手數(shù)學推導GRPO算法(含代碼實現(xiàn))-AI.x社區(qū)

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

手把手數(shù)學推導GRPO算法(含代碼實現(xiàn))-AI.x社區(qū)

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

手把手數(shù)學推導GRPO算法(含代碼實現(xiàn))-AI.x社區(qū)

怎么樣,是不是很簡單呢。

紙上推演: GRPO的數(shù)學推演

和之前一樣,我們可以嘗試嘗試用Excel來解釋GRPO,這年頭誰還不會Excel呢。

首先,我們初始化一個輸入,和之前一樣,6個Token,每個是5維的向量。

手把手數(shù)學推導GRPO算法(含代碼實現(xiàn))-AI.x社區(qū)

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

手把手數(shù)學推導GRPO算法(含代碼實現(xiàn))-AI.x社區(qū)

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

手把手數(shù)學推導GRPO算法(含代碼實現(xiàn))-AI.x社區(qū)

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

手把手數(shù)學推導GRPO算法(含代碼實現(xiàn))-AI.x社區(qū)

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

手把手數(shù)學推導GRPO算法(含代碼實現(xiàn))-AI.x社區(qū)

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

手把手數(shù)學推導GRPO算法(含代碼實現(xiàn))-AI.x社區(qū)

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)的策略靠近。

手把手數(shù)學推導GRPO算法(含代碼實現(xiàn))-AI.x社區(qū)

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

手把手數(shù)學推導GRPO算法(含代碼實現(xiàn))-AI.x社區(qū)

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

手把手數(shù)學推導GRPO算法(含代碼實現(xiàn))-AI.x社區(qū)

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的計算結果:

手把手數(shù)學推導GRPO算法(含代碼實現(xiàn))-AI.x社區(qū)

平均 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

收藏
回復
舉報
回復
相關推薦