作者:Unsloth Team
強化學習(RL)已經成為當今 LLM 不可或缺的技術之一。從大模型對齊到推理模型訓練再到如今的智慧體強化學習(Agentic RL),你幾乎能在當今 AI 領域的每個領域看到強化學習的身影。
近日,Daniel Han 和 Michael Han 兩兄弟組成的團隊 Unsloth(用於微調模型的同名開源專案 GitHub 星數已超過 4 萬)釋出了一個強化學習教程,其中從吃豆人談起,簡單易懂地從 RLHF、PPO 介紹到 GRPO,還分享瞭如何用 GRPO 訓練推理模型的技巧。

-
原文地址:https://docs.unsloth.ai/basics/reinforcement-learning-guide
-
開源專案:https://github.com/unslothai/unsloth
全面瞭解強化學習以及如何使用 GRPO 訓練你自己的推理模型。這是一份從初學者到高階的完整指南。
🦥你將學到什麼
-
什麼是強化學習 (RL)?RLVR?PPO?GRPO?RLHF?RFT?對於強化學習來說,運氣 is All You Need?
-
什麼是環境?agent?動作?獎勵函式?獎勵?
本文涵蓋了你需要了解的關於 GRPO、強化學習 (RL) 和獎勵函式的所有內容 —— 從初學者到高階,還有基於 Unsloth 使用 GRPO 的基礎知識。
如果你正需要學習如何一步步實現 GRPO,這份指南值得一讀。
❓什麼是強化學習 (RL)?
強化學習的目標是:
-
增加獲得「好」結果的機率。
-
降低出現「壞」結果的機率。
就這麼簡單!「好」和「壞」的含義錯綜複雜,「增加」和「降低」也許斟酌,甚至「結果」的含義也各不相同。
舉個例子,在吃豆人(Pacman)遊戲中:

-
環境就是遊戲世界。
-
動作包括向上、向左、向右和向下。
-
如果你吃掉一塊餅乾,獎勵是好的;如果你碰到敵人,獎勵是壞的。
在強化學習中,你無法知道自己可以採取的「最佳動作」,但你可以觀察中間步驟,或者最終的遊戲狀態(勝或負)。
再來個例子,假設你被問到這個問題:「What is 2 + 2?」 (4)
一個未對齊的語言模型會輸出 3、4、C、D、-10 等等各種亂七八糟的答案。

-
數字總比 C 或 D 好,對吧?
-
得到 3 總比得到 8 好,對吧?
-
得到 4 絕對沒錯!
其實,我們剛剛就設計出了一個獎勵函式!
🏃從 RLHF、PPO 到 GRPO 和 RLVR
OpenAI 讓 RLHF(基於人類反饋的強化學習)的概念變得人盡皆知。在該方法中,我們需要訓練一個 agent 來針對某個問題(狀態)生成人類認為更有用的輸出。

例如,ChatGPT 中的👍和👎符號就可以用於 RLHF 過程。
為了實現 RLHF,PPO(近端策略最佳化)被開發了出來。

在這種情況下,agent 就是語言模型。事實上,它由三個系統組成:
-
生成策略(當前被訓練模型)
-
參考策略(原始模型)
-
價值模型(平均獎勵估算器)
我們使用獎勵模型來計算當前環境的獎勵,而我們的目標就是最大化獎勵!
PPO 的公式看起來相當複雜,因為它的設計初衷是保持穩定性。

PPO 公式
DeepSeek 開發了 GRPO(組相對策略最佳化)來訓練他們的推理模型。它與 PPO 的主要區別在於:
-
移除了價值模型,取而代之的是多次呼叫獎勵模型的統計資料。
-
移除了獎勵模型,取而代之的是自定義獎勵函式,RLVR 可以使用該函式。

這意味著 GRPO 非常高效。以前 PPO 需要訓練多個模型 —— 現在移除了獎勵模型和價值模型,便可以節省記憶體並加快速度。
RLVR(可驗證獎勵的強化學習)允許我們根據易於驗證解答的任務來獎勵模型。例如:
-
數學等式可以輕鬆驗證,如 2+2 = 4。
-
程式碼輸出可以驗證是否正確執行。
-
設計可驗證的獎勵函式可能很困難,因此大多數示例都與數學或程式碼相關。
-
GRPO 的用例不僅限於程式碼或數學 —— 它的推理過程可以增強電子郵件自動化、資料庫檢索、法律和醫學等任務,並根據資料集和獎勵函式顯著提高準確性 —— 訣竅在於定義一個規則 —— 即一系列較小的可驗證獎勵,而不是最終的單一獎勵。例如,OpenAI 也在其強化學習微調 (RFT) 中用到了這一點。
為什麼使用「組相對」?
GRPO 完全移除了價值模型,但我們仍然需要根據當前狀態估算「平均獎勵」。
訣竅在於對 LLM 進行取樣!然後,我們透過統計多個不同問題的取樣過程來計算平均獎勵。
例如,對於「What is 2 + 2?」,我們取樣 4 次。我們可能得到 4、3、D、C。然後,我們計算每個答案的獎勵,計算平均獎勵和標準差,最後用 Z 分數進行標準化!

這就產生了優勢 A,我們將用它來替代價值模型。這可以節省大量記憶體!

GRPO 優勢計算
🤞運氣(耐心) Is All You Need
強化學習的訣竅在於你只需要兩樣東西:
-
一個問題或指令,例如「What is 2+2?」 「用 Python 建立一個 Flappy Bird 遊戲」
-
一個獎勵函式和一個驗證器,用於驗證輸出是好是壞。
僅憑這兩個,我們基本上可以無限次呼叫語言模型,直到得到一個好的答案。例如,對於「What is 2+2?」,一個未經訓練的糟糕模型語言模型可能會輸出:
0、cat、-10、1928、3、A、B、122、17、182、172、A、C、BAHS、%$、#、9、-192、12.31,然後突然變為 4。
獎勵訊號為 0、0、0、0、0、0、0、0、0、0、0、0、0、0、0,然後突然變為 1。

因此,RL 憑藉運氣和偶然性,在多次迭代中找到了正確答案。我們的目標是讓好答案(4)出現的次數更多,其餘(壞答案)出現的次數更少。
因此,RL 的目標是耐心 —— 在極限情況下,只要正確答案的機率至少有一點(不為零),那麼就只是一場等待的遊戲 —— 你一定會在極限情況下 100% 找到正確答案。
所以我喜歡稱之為針對強化學習的「運氣 Is All You Need」。
其實,更好的說法是針對強化學習的「耐心 is All You Need」。
本質上,強化學習提供了一種技巧 —— 與其簡單地等待無限,不如在實實在在地收到「壞訊號」(即壞答案)時去「引導」模型嘗試不生成壞答案。這意味著,儘管你可能等待了很長時間才出現一個「好」答案,但模型其實已經在盡力調整,儘量不輸出壞答案。
在「What is 2+2?」這個例子中,先出現了 0、cat、-10、1928、3、A、B、122、17、182、172、A、C、BAHS、%$、#、9、-192、12.31,然後突然出現了 4。
由於我們得到了壞答案,強化學習會影響模型,使其嘗試不輸出壞答案。這意味著隨著時間的推移,我們會仔細地「修剪」或移動模型的輸出分佈,使其遠離錯誤答案。這意味著強化學習並非低效,因為我們並非只是等待無限,而是積極地嘗試「推動」模型儘可能地向「正確答案空間」靠攏。
注:如果機率始終為 0,那麼強化學習就永遠不會奏效。這也是為什麼人們喜歡基於已經過指令微調的模型進行強化學習的原因,因為這樣的模型已經可以相當好地部分執行指令 —— 這很可能將機率提升到 0 以上。
🦥Unsloth 能為強化學習提供什麼?
-
Unsloth 配備 15GB 視訊記憶體,支援將引數最多 17B 的任何模型(例如 Llama 3.1 (8B)、Phi-4 (14B)、Mistral (7B) 或 Qwen2.5 (7B))轉換為推理模型。
-
最低要求:只需 5GB 視訊記憶體即可在本地訓練你自己的推理模型(適用於任何引數不超過 1.5B 的模型)。
這裡給出了一個基於 Unsloth 使用 GRPO 訓練自己的推理模型的詳細教程,感興趣的讀者可以參考實驗:
https://docs.unsloth.ai/basics/reinforcement-learning-guide/tutorial-train-your-own-reasoning-model-with-grpo
GRPO 是如何訓練模型的?
-
對於每個問答對,模型會生成多種可能的答案(比如,8 種變體)。
-
使用獎勵函式對每個答案進行評估。
-
訓練步數:如果有 300 行資料,則需要 300 個訓練步驟(如果訓練 3 個 epoch,則需要 900 個訓練步驟)。也可以增加每個問題生成的答案數量(例如,從 8 個增加到 16 個)。
-
該模型的學習方式是在每一步對權重進行更新。
這裡有一些示例筆記本:
https://docs.unsloth.ai/get-started/unsloth-notebooks#grpo-reasoning-notebooks
基礎知識/技巧
Unsloth 還分享了一些他們積累的心得:
-
等待至少 300 步,獎勵才會真正增加。為了獲得不錯的結果,你可能需要至少等待 12 小時(這是 GRPO 的工作原理),但請記住,這不是強制性的,你可以隨時停止。
-
為獲得最佳效果,至少需要 500 行資料。你甚至可以嘗試 10 行資料,但使用更多資料會更好。
-
每次訓練執行都會有所不同,具體取決於你的模型、資料、獎勵函式 / 驗證器等。因此,雖然前面說最低訓練步數是 300 步,但有時可能需要 1000 步或更多。所以,這取決於各種因素。
-
如果你在本地使用 GRPO 和 Unsloth,如果出現錯誤,可以「pip install diffusers」。請使用最新版本的 vLLM。
-
建議將 GRPO 應用於引數至少為 1.5B 的模型,以便正確生成思考 token,因為較小的模型可能無法做到。
-
對於 QLoRA 4-bit 的 GRPO GPU VRAM 要求,一般規則是模型引數 = 你需要的 VRAM 數量(你可以使用更少的 VRAM,但還是這樣更好)。你設定的上下文長度越長,VRAM 就越多。LoRA 16-bit 至少會使用 4 倍以上的 VRAM。
-
可以持續微調,並且你可以讓 GRPO 在後臺執行。
-
示例筆記本使用的資料集是 GSM8K,這是目前 R1 風格訓練最流行的選擇。
-
如果你使用的是基礎模型,請確保你擁有聊天模板。
-
使用 GRPO 訓練的次數越多越好。GRPO 最大的優點是你甚至不需要那麼多資料。你只需要一個優秀的獎勵函式 / 驗證器,並且訓練時間越長,你的模型就會越好。隨著時間的推移,你的獎勵與步長的比率預計會像這樣增加:

-
Unsloth 現已內建了 GRPO 的訓練損失跟蹤,無需使用 wandb 等外部工具。它現在包含所有獎勵函式的完整日誌詳細資訊,包括總聚合獎勵函式本身。

📋獎勵函式 / 驗證器
在強化學習中,獎勵函式和驗證器在評估模型輸出方面發揮著不同的作用。一般來說,你可以將它們理解為同一件事,但從技術上講,它們並非一回事,但這無關緊要,因為它們通常是配合使用的。
驗證器(Verifier):
-
確定生成的響應是否正確。
-
它不會分配數值分數 —— 只是驗證正確性。
-
例如:如果對於「2 + 2」,模型生成為「5」,則驗證器會檢查並將其標記為「錯誤」(因為正確答案是 4)。
-
驗證器還可以執行程式碼(例如,使用 Python)來驗證邏輯、語法和正確性,而無需手動評估。
獎勵函式(Reward Function):
-
將驗證結果(或其他標準)轉換為數值分數。
-
例如:如果答案錯誤,它可能會分配罰分(-1、-2 等),而正確答案可能會獲得正得分(+1、+2)。
-
它還可以根據正確性以外的標準進行懲罰,例如長度過長或可讀性差。
主要區別:
-
驗證器檢查正確性,但不進行評分。
-
獎勵函式會分配分數,但不一定驗證正確性。
-
獎勵函式可以使用驗證器,但從技術上講,它們並不相同。
理解獎勵函式
GRPO 的主要目標是最大化獎勵並學習答案的得出方式,而不是簡單地記憶並根據訓練資料復現答案。
-
在每個訓練步驟中,GRPO 都會調整模型權重以最大化獎勵。此過程會逐步微調模型。
-
常規微調(不使用 GRPO)僅最大化下一詞的預測機率,而不會針對獎勵進行最佳化。GRPO 針對獎勵函式進行最佳化,而不僅僅是預測下一詞。
-
你可以在多個 epoch 中重複使用資料。
-
你可以預定義預設獎勵函式,以用於各種用例,或者你可以讓 ChatGPT / 本地模型為你生成它們。
-
設計獎勵函式或驗證器沒有唯一正確的方法 —— 這方面可能性無窮無盡。然而,它們必須設計精良且有意義,因為設計不當的獎勵可能會無意中降低模型效能。
🪙獎勵函式示例
參考以下示例。可以將你的生成結果輸入到 ChatGPT 4o 或 Llama 3.1 (8B) 等 LLM 中,並設計一個獎勵函式和驗證器來評估它。例如,將你的生成結果輸入到你選擇的 LLM 中,並設定一條規則:「如果答案聽起來太機械化,則扣 3 分。」這有助於根據質量標準最佳化輸出。
示例 1:簡單算術任務
-
問題:2 + 2
-
答案:4
-
獎勵函式 1:如果檢測到數字 → +1;如果未檢測到數字 → -1
-
獎勵函式 2:如果數字與正確答案匹配 → +3;如果不正確 → -3
-
總獎勵:所有獎勵函式的總和
示例 2:電子郵件自動化任務
-
問題:接收電子郵件
-
答案:傳送電子郵件
-
獎勵函式:
-
如果答案包含必需關鍵詞 → +1
-
如果答案與理想答案完全匹配 → +1
-
如果答案過長 → -1
-
如果包含收件人姓名 → +1
-
如果存在簽名塊(電話、電子郵件、地址)→ +1
Unsloth 基於鄰近度的獎勵函式
在前面的 GRPO Colab 筆記本,可以看到其中建立了一個完全從零開始構建的自定義基於鄰近度的獎勵函式,旨在獎勵那些更接近正確答案的答案。這個靈活的函式可以應用於各種任務。
-
在其中的示例中,是在 Qwen3 (Base) 上啟用了推理功能,並將其引導至特定任務
-
應用預微調策略,以避免 GRPO 預設只學習格式
-
使用基於正則表示式的匹配提升評估準確度
-
建立自定義 GRPO 模板,超越諸如「think」之類的一般提示詞,例如 <start_working_out></end_working_out>
-
應用基於鄰近度的評分 —— 模型會因更接近的答案獲得更多獎勵(例如,預測 9 比預測 10 更好),而異常值則會受到懲罰
GSM8K 獎勵函式
在其他示例中,Unsloth 使用了 @willccbb 提供的現有 GSM8K 獎勵函式,該函式廣受歡迎且已被證明非常有效:
-
Correctness_reward_func – 獎勵完全匹配的標籤。
-
Int_reward_func – 鼓勵僅使用整數的答案。
-
Soft_format_reward_func – 檢查結構,但允許少量換行符不匹配。
-
strict_format_reward_func – 確保響應結構與提示符匹配,包括換行符。
-
xmlcount_reward_func – 確保響應中每個 XML 標籤恰好對應一個。
🎓擴充套件閱讀
-
Nathan Lambert 的 RLHF 書: https://rlhfbook.com/c/11-policy-gradients.html
-
Yannic Kilcher 的 GRPO Youtube 影片: https://www.youtube.com/watch?v=bAWV_yrqx4w
-
Unsloth 在 2025 年 AI 工程師世界博覽會上舉辦了一場 3 小時的研討會,幻燈片等資料請訪問:https://docs.unsloth.ai/ai-engineers-2025
-
透過 Unsloth 構建的高階 GRPO 筆記本。https://docs.unsloth.ai/basics/reinforcement-learning-guide/tutorial-train-your-own-reasoning-model-with-grpo
-
基於基礎模型進行 GRPO 的筆記本:https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/Qwen3_(4B)-GRPO.ipynb
© THE END
轉載請聯絡本公眾號獲得授權
投稿或尋求報道:[email protected]