9.1 OpenAI o1 與 DeepSeek-R1:用 RL 學會「思考」(2024-2025)#
前言:獎勵從「像人」變成「答對」#
2024 年 9 月,OpenAI 發布 o1-preview;2025 年 1 月,DeepSeek 發布 DeepSeek-R1 並同時公開其技術報告與(部分)訓練配方。這一年的核心變化可以用一句話概括:獎勵訊號從「人類偏好」(第 8 章,一個會錯的學習模型)換回「可驗證的正確性」(數學答案對不對、單元測試過不過)——這就是 RLVR(RL with Verifiable Rewards)。效果驚人:模型的「思維鏈」(chain of thought)從 PPO 對齊時代的「整齊的解釋」變成真正的探索性思考——自我質疑、回頭檢查、嘗試多條路徑。DeepSeek-R1-Zero 的報告展示了極具歷史意義的現象:不需要任何 SFT 示範、不需要 PRM、不需要 MCTS,僅憑「正確性獎勵 + 大規模 RL」,推理行為自發湧現(模型在漫長的訓練中「學會了」用更多 token 重新檢查——reflection 行為無人教過)。這是第 6 章 AlphaZero 方法論在語言空間的全面重演:可驗證的稀疏獎勵 + 足夠強的基座 + 大規模採樣 = 能力湧現。本節拆解 o1/R1 的訓練技術(RLVR、GRPO)、湧現現象與測試時算力(test-time compute)範式,並指出與棋類的關鍵差異(語言的「規則」是學出來的,不是給定的)。
歷史背景:三條預備線的匯合#
線一:思維鏈(CoT, 2022)。Wei et al. 證明「在 prompt 中要求模型先寫推理步驟」能大幅提升數學推理——但這只是提示層面的,模型的推理長度與品質不可控。2023-2024 年的過程監督研究(PRM, Lightman et al.)進一步證明「監督每一步的對錯」勝過只監督結果,暗示:推理是一個可以逐段評價的決策過程——MDP 的味道出現了。線二:可驗證獎勵的基礎設施。數學答案可以用符號引擎/規則比對(MATH 資料集的最終答案、GSM8K 的數值)、代碼可以用單元測試判真偽(HumanEval、Codeforces)。這些領域天然提供了無詐欺、無限量的獎勵——第 6.2 節「自我對弈=無限可驗證資料」的語言版。線三:GRPO(2024)。DeepSeek 在 DeepSeekMath 論文中提出 Group Relative Policy Optimization,專為 LLM 修改 PPO:拋棄 critic 網路(省顯存、省訓練),改用同組採樣的相對優勢:
對每個 prompt 採 \(G\) 條回答,一條回答的優勢 = 它的獎勵在組內的標準化。組均值就是 baseline(第 5.1 節 baseline 定理的天然實現——同一 prompt 下其他回答的公共成分被消去),而不需要學一個價值網路。這個簡化使百億級參數模型的 RL 訓練在工程上可行。
o1 的歷史定位:OpenAI 沒有公開技術細節,但對外敘事清楚:o1 是「在回應前思考更長時間的模型」,以大規模 RL 學習產生內部思維鏈,性能隨推理時思考量可擴展——「test-time compute scaling」成為新的 scaling law 維度(繼預訓練算力之後)。DeepSeek-R1 則以開放配方讓整個社群能復現這個範式,其 R1-Zero 實驗(純 RL、無 SFT 冷啟動)是史上最乾淨的「推理湧現」展示。
RLVR 的訓練配方(R1 為例)#
R1-Zero:最純的實驗#
- 基座:DeepSeek-V3-Base(預訓練模型,未對齊)。
- 獎勵:只兩項——準確性獎勵(數學答案比對/代碼測試通過)+ 格式獎勵(要求把思考放在 `` 標籤內)。沒有神經獎勵模型、沒有 PRM、沒有 KL 之外的品質懲罰。
- 演算法:GRPO,採樣組 \(G\) 條、組內標準化優勢、PPO clip(GRPO 保留 clip)。
- 結果:AIME 2024 pass@1 從基座的 ~15% 升到 70%+;湧現現象:訓練中途,回應長度自然增長(模型學會「想更久」)、出現「等等,我重新想一下」式的反思、以及「嘗試 A → 卡住 → 切換方法 B」的探索行為——這些都是沒有被獎勵函數直接指定的,它們之所以被強化,是因為「多想一會」確實提高了答對機率。第 6.1 節「雙倍判斷沒人教卻學會」的語言版重演。
R1:工程補全版#
R1-Zero 的問題:可讀性差(中英混雜)、格式失控。R1 加入多階段冷啟動:(1)少量長 CoT 示範做 SFT 冷啟動;(2)面向推理的 RL(RLVR);(3)拒絕採樣生成高品質 SFT 資料(用 RL 後模型自己生成、過濾,混入寫作等一般任務)再做全量 SFT;(4)涵蓋有用性/無害性獎勵(回到第 8 章 RLHF)+ 推理獎勵的最終 RL。這個「RL → 生成 SFT 資料 → 再 RL」的閉環,正是 AlphaZero「搜尋改進策略 → 網路模仿搜尋」的語言版。
與棋類 RL 的對照表(本書的收束點之一)#
| 維度 | AlphaZero(第 6 章) | o1/R1(第 9 章) |
|---|---|---|
| 動作空間 | 362 個棋位 | 詞表數萬 token |
| 環境模型 | 遊戲規則(免費、完美) | 無顯式模型;「環境」是答案檢查器 |
| 獎勵 | 勝負(回合末) | 正確性(回合末)+格式 |
| 探索 | MCTS 顯式搜尋 | 採樣多條 CoT(組內相對優勢) |
| 湧現 | 開局理論超越人類 | 反思、長思考、多路徑嘗試 |
| 搜尋內化 | 價值網路逐漸取代搜尋 | 短 CoT 模型蒸餾自長 CoT RL |
關鍵差異:AlphaZero 的「規則」是給定的,而 LLM 的「環境」(語言、數學、世界知識)是預訓練學出來的近似——這使得 R1 的 RL 同時也在重塑它所依賴的世界表示,出現了棋類沒有的風險:訓練可能腐蝕語言品質(R1-Zero 的混雜語言)、過度符合可驗證域而損害不可驗證域(第 8.2 節 hacking 的推理版:模型對「能被檢查的題」突飛猛進,對「寫作」可能退化)。R1 的多階段配方正是在管理這些風險。
程式碼:GRPO 的核心迴圈與湧現的觀察#
實驗一:GRPO 更新的最小實作#
# pip install torch numpy
import torch, torch.nn as nn
import numpy as np
torch.manual_seed(0); rng = np.random.default_rng(0)
# 人造「推理」任務: 策略決定思考步數 n(0-9), 正確機率 = 1-(1-p)^n,
# 但長回答有格式懲罰(模仿 R1 的長度失控管理: 無懲罰會無限變長)
P_PER_STEP = 0.12; LEN_PENALTY = 0.04 # 每步的邊際正確率增益, 與每步「格式成本」
def reward(n):
p = 1 - (1 - P_PER_STEP)**n # n 步思考的答對機率
return p - LEN_PENALTY * n # 正確性獎勵 - 長度懲罰
# 策略: π_θ(n) = softmax(θ) (θ 是 10 綬 logits, 參數量僅為示意)
theta = torch.zeros(10, requires_grad=True)
opt = torch.optim.Adam([theta], lr=0.5)
G = 16
for it in range(300):
probs = torch.softmax(theta, -1)
ns = torch.multinomial(probs, G, replacement=True) # 同組採 G 條
rs = torch.tensor([reward(int(n)) for n in ns], dtype=torch.float32)
# GRPO 核心: 組內標準化優勢 (第5.1節 baseline 的組均值版, 免 critic!)
A = (rs - rs.mean()) / (rs.std() + 1e-8)
logp = torch.log_softmax(theta, -1)[ns]
# PPO clip (簡化: 每次迭代後 theta 完全更新, 即 on-policy, ratio=1)
loss = -(logp * A).mean()
opt.zero_grad(); loss.backward(); opt.step()
final = int(torch.softmax(theta,-1).argmax())
print(f"學到的思考步數: {final} 回報={reward(final):.3f}")
print(f"全部策略機率: {np.round(torch.softmax(theta,-1).detach().numpy(),3)}")
print(f"→ 若把 LEN_PENALTY 設為 0, 步數會漲到 10: 「無成本時無限思考」\n"
f" 這正是 o1/R1 長度增長現象的最簡模型。")
實驗二:湧現的「反思」收益#
import numpy as np
rng = np.random.default_rng(2)
# 模擬: 第一遍解題正確率 p1=0.5; 若錯, 「自我反思」能以 q=0.6 機率發現並修正
# → 反思行為的期望增益 = p1·0 + (1-p1)·q·1
for q in [0.0, 0.3, 0.6]:
gain = (1-0.5) * q
print(f"反思修正率 q={q}: 期望總正確率 = {0.5 + gain:.2f} (增益 {gain:+.2f})")
print("→ 只要反思略有效(q>0), RL 就會強化它: 『等待、重新檢查』等行為的湧現\n"
" 不需要被顯式獎勵——只需要它統計上提高答對率。這是 R1-Zero 的核心機制。")
完整工程版請參考 trl/open-r1/verl 等開源框架(DeepSeek 官方技術報告的复現線);它們在真實 LLM 上組合:vLLM 採樣加速、GRPO loss、多 GPU pipeline、格式解析器。
Test-Time Compute:新的 scaling 維度#
o1 範式最商業的含義:性能可以隨「推理時花的算力」擴展——同一個模型,多想 10 倍時間可以解更難的題(如讓模型在內部跑多條 CoT 再選優,或多輪自我修正)。這與三個歷史模組直接對應:
- 多條採樣 + 選優 = 第 6.2 節 MCTS 的樹搜尋思想(語言空間的「多分支嘗試」),pass@k 指標刻畫了它的上限。
- 內化:把「搜尋時的多步嘗試」蒸餾回模型(短 CoT 模型自長 CoT 教師蒸餾,第 6.2 節「內化搜尋」的語言版)。
- 可驗證域的邊界:測試時算力的增益集中在可驗證域(數學/代碼)——無法自動驗證的領域(開放寫作、價值判斷)仍然依賴第 8 章的偏好獎勵,增益有限。RLVR 與 RLHF 不是替代而是分域並存,這是當前(2025-2026)對齊與推理技術的真實版圖。
本節重點#
- RLVR 把獎勵從「學出來的偏好」換回「可驗證的真值」——第 8 章 hacking 的根治路線,也是第 6 章 AlphaZero 方法論(可驗證稀疏獎勵 + 大規模採樣)的語言空間重演。
- GRPO 用同 prompt 組內採樣的標準化獎勵當優勢,免 critic、工程可行;組均值即 baseline(第 5.1 節定理的自然實現)。
- R1-Zero 的湧現:反思、回溯、思考長度增長——沒有被獎勵函數指定,只因「統計上提高答對率」被強化;與 TD-Gammon 的雙倍判斷同構。
- o1/R1 的訓練是「可驗證域 RL + 偏好域 RLHF」的分域混合;語言的「環境規則」是學出來的近似,這是與棋類 RL 的本質差異,也是語言品質退化風險的來源。
- Test-time compute scaling 成為新 scaling 維度:多路徑採樣(MCTS 思想)、內化蒸餾、可驗證域增益——第 6 章的搜尋-內化迴圈在語言空間的重生。
思考問題#
- 實驗一中把
LEN_PENALTY設為 0,思考步數會漲到上限。請對照 R1-Zero 報告中「回應長度失控」的現象,並設計一個更好的長度管理機制(提示:R1 用長度懲罰,o1 用什麼?考慮「答案正確時才獎勵長度」)。 - 「反思」被強化的條件是它統計上提高正確率。請構造一個反例:什麼樣的環境中「假反思」(表面後悔實則無用)會被 RL 強化?這對評估推理模型意味著什麼?
- AlphaZero 的規則是給定的、無誤差的;R1 的「環境」(答案檢查器)無誤差,但其依賴的知識表示是學出來的。請推演這個差異導致 RL 訓練對基座模型的何種新風險(提示:表示被獎勵梯度重塑)。
- Pass@k 隨 k 增大而上升——這說明模型的「能力」與「被正確解法佔據的機率質量」不同。請由此討論:RLVR 訓練後 pass@1 上升但 pass@256 可能下降的現象(模式坍縮)及其利弊。
- 「可驗證域」與「偏好域」的邊界在哪裡?請給三個「看似可驗證實則可被駭」的例子(如代碼測試覆蓋不全),並為每個例子設計一個防禦。