跳轉到

2024 - o1:推理模型與測試時計算#

案件摘要#

2024 年 9 月,OpenAI 發表 o1-preview,宣告一個新典範:提升智慧不再只靠「更大的模型」,還可以靠「更久的思考」。模型在回答前先在內部生成一條長思維鏈(chain of thought),用強化學習學會「怎麼想」。核心主張:

\[ \text{accuracy} \propto \text{compute at inference(測試時計算)} \]

一句話:訓練時計算的時代之後,是測試時計算的時代。o1 在 IMO 資格賽(國際數學奧林匹亞)拿到 83%——GPT-4 只有 13%,這 70 個百分點的差距來自「想得更久」,而非「模型更大」。

前因 -- 為什麼會有這個案子#

  • 2022-ChatGPT與RLHF.md(見 科學與歷史/人工智慧/ 與 科學與歷史/強化學習/):RLHF 已證明 RL 能對齊 LLM,但 RLHF 用的是「人類偏好」這個外部訊號,且只調整「回答風格」,不深挖「推理過程」。
  • 2016-AlphaGo.md(見 科學與歷史/人工智慧/):AlphaGo 的核心是搜尋——MCTS 在測試時展開一棵樹。o1 的靈感正是把「搜尋」內化到語言模型的生成中:語言的 MCTS。
  • 2022 年 Kojima 等人的「zero-shot chain-of-thought」(加一句「讓我們一步一步想」)與 2023 年 self-consistency(採樣多條思維鏈投票)已經暗示:推理時多花算力能換準確率——但這些是提示詞技巧,o1 把它變成 RL 訓練目標。
  • Scaling law 的瓶頸:2020–2024 靠堆資料與參數的報酬遞減,高品質文字資料接近用盡。OpenAI 的動機:找到第二條 scaling 曲線。
  • 2023 年 7 月,OpenAI 開始「Project Q*」傳聞;過程監督論文(Let's Verify Step by Step, 2023)提供了關鍵線索——獎勵應該給在推理的每一步,而不是只給最終答案。

線索與推理 -- 數學式、程式、理論#

第一條線索:兩條 scaling 曲線#

訓練時計算(GPT-4 路線) 測試時計算(o1 路線)
提升手段 更多參數、更多資料 更長的思維鏈、更多樣的探索
成本發生在 一次性的預訓練 每一次推論
對應歷史 2012 AlexNet、2020 GPT-3 2016 AlphaGo 的搜尋
上限 資料用盡、報酬遞減 理論上可無限思考

測試時計算的數學形象:對同一問題採樣 \(k\) 條思維鏈,取多數(self-consistency),準確率隨 \(k\) 上升:

\[ \text{accuracy}(k) \uparrow \quad \text{as} \quad k \uparrow \]

o1 的突破是讓模型自己學會:哪種思考路徑值得展開、哪裡該回頭(backtrack)、哪裡該驗算。

第二條線索:思維鏈強化學習——把「想」變成動作空間#

把 LLM 的推理形式化成一個 RL 問題:狀態是「問題 + 目前為止的思考」,動作是「下一個思考步」或「給出答案」。政策就是語言模型本身:

\[ \max_\theta \; \mathbb{E}_{\tau \sim \pi_\theta}\big[ r(\tau) \big], \quad \tau = (s_1, s_2, \dots, s_T) \]

其中 \(\tau\) 是一條完整的思維鏈軌跡, \(r(\tau)\) 是最終答案的獎勵(可程式化驗證:數學答案對不對、程式碼過不過測試)。o1 用 RL 訓練模型生成高獎勵的 \(\tau\) ——思考本身成為被強化的行為。

獎勵的關鍵在「可驗證性」:數學與程式有客觀對錯(答案核對、單元測試),所以 RL 訊號乾淨。這是為什麼 o1 第一波強在 STEM——不是巧合,是訊號品質的幾何。

第三條線索:過程監督 vs 結果監督#

OpenAI 2023 年的 Let's Verify Step by Step 在 MATH 資料集上比較兩種獎勵:

結果監督(outcome-based) 過程監督(process-based)
獎勵訊號 只給最終答案 每一步推理都評分
MATH 準確率 ~72% ~78%
風險 錯誤推理碰巧得到對答案 需要昂貴的人工步驟標註

o1 據報導結合了兩者:RL 用可程式化的結果獎勵 + 學出的內部過程評估。這與 2016-AlphaGo.md 的價值網路(評估局面)如出一轍——AlphaGo 評估棋盤,o1 評估思維鏈。

第四條線索:隱藏的思考——最後一次「可解釋性」的代價#

o1 的思維鏈是隱藏的:用戶只看到摘要。這帶來一個張量上的張力(比喻意義上的):可解釋性與性能的交換。模型內部可能生成數萬 token 的探索(試錯、回頭、自我懷疑),最後只報告結論。

推理時的算術:

問題難度 o1 思考量(推估) GPT-4 直接回答
簡單 少量思考 即答
競賽數學 數萬 token 探索 一次通過,常錯

準確率隨思考量上升——這正是測試時計算 scaling 的宣言,也是「System 1 vs System 2」(Kahneman)的神經網路版:ChatGPT 是 System 1(直覺快答),o1 是 System 2(慢思考)。

Kahneman 的框架(Thinking, Fast and Slow, 2011)在此成了最好的隱喻:人類的 System 2 昂貴且懶惰,只在必要時啟動;o1 的工程目標正是讓模型學會何時該啟動慢思考——簡單問題少想、難題深想。這個「思考預算的分配」是 2025 年推理模型(見 2025-DeepSeek-R1.md)繼續攻堅的核心問題。

結案 -- 後果與影響#

  • 「推理模型」成為新產品類別:2024 年底至 2025 年,DeepSeek-R1、Gemini thinking、Claude extended thinking 全線跟進——每家旗艦都有一個「會思考」的型號。
  • Scaling law 的敘事改寫:從「訓練時計算」單曲線,變成「訓練 + 測試」雙曲線;資料用盡的焦慮被緩解。
  • 可驗證獎勵(RLVR)成為關鍵詞:數學、程式、邏輯等「能自動驗證」的領域率先被攻克。
  • 為 2025-DeepSeek-R1.md 埋下直接伏筆:o1 證明路線可行但閉源,R1 用開源 RL 複製並民主化它。
  • 為 2025-MCP智慧代理.md 埋下伏筆:會思考的模型 + 工具呼叫 = 能規劃的代理;「先想再動」成為代理迴圈的標準節奏。
  • 回望主線:1890 聯想→1943 神經元→1986 反向傳播→2017 Transformer→2022 ChatGPT(System 1)→2024 o1(System 2 的誕生)——智慧模型的演化從「記住的更多」走向「想得更深」。
  • 未來懸案:思考的報酬會不會也遞減?隱藏思維鏈的可解釋性如何補課?

關鍵人物與文獻#

  • OpenAI:Learning to Reason with LLMs(o1 技術報告), 2024。
  • OpenAI:Let's Verify Step by Step(過程監督), 2023。
  • Noam Brown:OpenAI 研究員,撲克 AI Libratus(2017)與 Diplomacy AI CICERO(2022)作者——「搜尋與談判」傳統進入 o1 團隊。
  • Kojima et al., Large Language Models are Zero-Shot Reasoners, 2022——chain-of-thought 提示的起點。
  • Wei et al., Chain-of-Thought Prompting Elicits Reasoning in LLMs, 2022。
  • Wang et al., Self-Consistency Improves Chain of Thought Reasoning, 2023。
  • 相關案件:2022-ChatGPT與RLHF.md、2016-AlphaGo擊敗李世乭.md、2025-DeepSeek-R1.md、2025-MCP智慧代理.md

補充 -- 程式實作(python + numpy)#

本案測試時計算(best-of-N+驗證器選最優)的最小可執行版本,見 _code/2024-o1TestTime.py(已實測可跑,CPU 秒級;7×7 迷宮):

# 2024 - o1: accuracy ∝ compute at inference; best-of-N + 驗證器
import numpy as np

MAZE = np.array([
    [0, 0, 0, 1, 0, 0, 0],
    [1, 1, 0, 1, 0, 1, 0],
    [0, 0, 0, 1, 0, 1, 0],
    [0, 1, 0, 0, 0, 1, 0],
    [0, 1, 0, 1, 1, 1, 0],
    [0, 1, 0, 0, 0, 0, 0],
    [0, 1, 1, 1, 1, 1, 0],
])
START, GOAL = (0, 0), (6, 6)
DIRS = [(-1, 0), (1, 0), (0, -1), (0, 1)]
SIZE = 7


def rollout(policy_bias, rng):
    p, path = list(START), [tuple(START)]
    for _ in range(50):  # 弱直覺 + 步數上限: 單次成功率僅約三成
        if tuple(p) == GOAL:
            break
        moves = []
        for d in DIRS:
            q = (p[0] + d[0], p[1] + d[1])
            if 0 <= q[0] < SIZE and 0 <= q[1] < SIZE and MAZE[q] == 0:
                dist = abs(q[0] - GOAL[0]) + abs(q[1] - GOAL[1])
                moves.append((policy_bias ** -dist, q))
        w = np.array([m[0] for m in moves])
        p = list(moves[rng.choice(len(moves), p=w / w.sum())][1])
        path.append(tuple(p))
    ok = tuple(p) == GOAL
    return ok, len(path) if ok else 999  # 驗證器: 到終點否 + 步數 (結果監督)


def best_of_n(n, seed=0):  # N 次採樣 + 驗證器選最優
    rng = np.random.default_rng(seed)
    cands = [rollout(1.2, rng) for _ in range(n)]
    oks = [c for c in cands if c[0]]
    return (True, min(c[1] for c in oks)) if oks else (False, 999)


def main():
    print("迷宮 best-of-N (測試時算力換準確率):")
    for n in [1, 4, 16, 64]:
        ok, steps, tot = 0, [], 200
        for i in range(tot):
            s, st = best_of_n(n, seed=i)
            ok += s
            steps.append(st)
        steps = [s for s in steps if s < 999]
        print(f"  N={n:3d}: 成功率={ok / tot:.2f} 平均步數={np.mean(steps):.1f} "
              f"(算力×{n} -- 推理革命的形狀)")


if __name__ == "__main__":
    main()

執行結果(python3 _code/2024-o1TestTime.py,numpy 2.4.5):

迷宮 best-of-N (測試時算力換準確率):
  N=  1: 成功率=0.30 平均步數=38.3 (算力×1 -- 推理革命的形狀)
  N=  4: 成功率=0.72 平均步數=33.1 (算力×4 -- 推理革命的形狀)
  N= 16: 成功率=1.00 平均步數=25.3 (算力×16 -- 推理革命的形狀)
  N= 64: 成功率=1.00 平均步數=18.9 (算力×64 -- 推理革命的形狀)
結論: 不加大模型、只加思考次數+驗證器, 成功率照 log 律爬 -- o1 的第二條曲線

程式解說:rollout 是弱直覺(往目標偏的隨機走,單次成功率 0.30),best_of_n 是驗證器(到終點否+步數最短者勝)。成功率 0.30→0.72→1.00→1.00:模型一個沒換,算力×64,成功率翻三倍——本文第一條線索的第二條 scaling 曲線(測試時計算)在此是可數的數字;平均步數 38.3→18.9 則是附帶紅利:採樣越多,越短的路越可能被撈到。max E[r(τ)] 的 τ 在此即路徑,r 即驗證器——o1 把「想」變成動作空間(第二條線索),此即最小骨架。過程監督 vs 結果監督(第三條線索)在此簡化為結果監督;真 o1 兩者混用。