圖解推理型 LLMs
作者:Maarten Grootendorst
什麼是推理型 LLMs
與常規 LLMs 相比,推理型 LLMs 在回答問題前,往往會先將問題拆解爲更小的步驟(通常稱爲推理步驟或思考過程)。
那麼,“思考過程”、“推理步驟” 或 “思維鏈”(CoT, Chain-of-Thought)究竟意味着什麼?
雖然我們可以探討 LLMs 是否真的能像人類那樣思考,但這些步驟將整個過程拆解爲更小,且結構化的推理。
LLMs 不僅學習 “回答什麼”,更學習 “如何回答”。
爲了理解推理型 LLMs 的構建過程,我們首先需要探討一個範式轉變:
從關注訓練階段的擴展(訓練時計算)轉向關注推理階段(測試時計算)。
訓練時計算:Train-time compute
在 2024 年上半年之前,爲了提升 LLMs 在預訓練階段的性能,開發者通常會增加以下幾個方面的規模:
-
模型(parameters)
-
數據集(tokens )
-
計算量(FLOPs )
這三者合稱爲訓練時計算(train-time compute),它體現了預訓練數據作爲 “AI 之燃料” 的理念。基本上,預訓練投入越大,最終得到的模型就會越出色。
訓練時計算不僅包括訓練期間所需的計算量,還涵蓋了微調時所需的計算量。
長期以來,這些因素一直是提升 LLMs 性能的關鍵。
規模定律 Scaling Laws
研究人員通過各種 Scaling Law 探討模型規模(包括計算量、數據集大小和模型參數數量)與模型性能之間的關係。
這些定律屬於所謂的 “冪律”: 某一變量(例如計算量)的增加會導致另一變量(例如性能)按比例發生變化。
通常,這些關係會在對數 - 對數座標系下展示(呈現直線),以突出計算量的大幅增加。
最爲知名的規模定律包括 “Kaplan 定律” 和“Chinchilla 定律”。這些定律能大致說明,隨着計算量、token 數量和參數數量的增加,模型性能也會相應提升。
(圖片來自《Scaling laws for neural language models》)展示了模型性能如何隨着不同計算指標(如更長的訓練時間、數據集規模和參數數量)的增長而提高。
這些定律也表明,爲了獲得最佳性能,必須同步擴展這三個因素。
Kaplan 定律指出,在固定計算量的前提下,擴大模型規模通常比增加數據量更爲有效;
而 Chinchilla 定律則認爲,模型規模和數據量同樣重要。
然而,在 2024 年期間,雖然計算量、數據集規模和模型參數數量持續增長,但其帶來的性能提升卻呈現出邊際遞減的趨勢。
正如這些冪律所揭示的那樣,隨着規模的不斷擴大,收益也會逐步遞減。
這就引發了一個問題:
“我們是否已經遇到了瓶頸?”
測試時計算:Test-time Compute
增加訓練時計算的高昂成本促使人們轉而關注另一種方法——即測試時計算(Test-time Compute)。
與不斷增加預訓練成本不同,測試時計算允許模型在推理過程中 “多思考一會兒”。
非推理型模型,通常只輸出答案,省略 “推理” 步驟:
而推理型模型則會使用更多的 tokens,通過系統性的思考過程 推導出答案:
這一思路的核心在於:要 LLM 花費更多計算資源來生成更好的答案。
若所有增加的計算資源都用在生成最終答案上,實際效率不高;但若將新增的計算資源用在提前生成包含額外信息、關係以及新思路的 token 上,則模型最終答案的質量會高得多。
換句話說,與其讓模型直接把所有 “算力” 都投入到“一次性生成最終答案”,不如在生成答案之前先產生一些中間思考或輔助信息(tokens),再在此基礎上輸出答案。
這樣會帶來更高質量、更準確的結果,儘管過程看似生成的文本更多、消耗的算力更大,但實際卻更高效,因爲減少了錯誤或淺層回答的概率,從而節省了後續反覆驗證或修改的成本。
規模定律
與訓練時計算相比,測試時計算的規模定律相對較新。其中有兩個有趣的研究方向,將測試時計算的規模定律與訓練時計算聯繫起來。
首先,OpenAI 的一篇帖子展示了測試時計算可能遵循與訓練時計算相同的擴展趨勢。
圖示中添加了紅色虛線, OpenAI 認爲這一新範式可能屬於測試時計算。
OpenAI 認爲隨着測試時計算領域的不斷髮展,可能會出現一種向測試時計算擴展的範式轉變。
其次,一篇題爲《Scaling Scaling Laws with Board Games》的有趣論文,探索了 AlphaZero,並在不同的計算量下訓練它以玩 Hex 遊戲。
圖示展示了他們如何構造不同程度的訓練時計算和測試時計算。
其研究結果表明,訓練時計算與測試時計算之間存在緊密聯繫。每一條虛線都展示了達到特定 ELO 分數所需的最小計算量。
隨着測試時計算擴展得像訓練時計算一樣,一個新的範式正逐步形成,即利用更多測試時計算來構建 “推理” 模型。
通過這種範式轉變,這些 “推理” 模型不再純粹依賴訓練時計算(預訓練和微調),而是在訓練和推理之間取得平衡。
測試時計算甚至可以在思考時間上實現擴展:
“長度擴展” 也是我們在深入探討 DeepSeek-R1 時將會探討的一個內容。
測試時計算的類別
如 DeepSeek R-1 和 OpenAI-o1 這樣推理模型的巨大成功表明,測試時計算不僅僅是 “多思考一會兒” 這麼簡單。
測試時計算可以涵蓋多種技術,包括思維鏈、修正答案、回溯、採樣等等。
大致而言,這些技術可以分爲兩大類:
-
1. Search against Verifiers:利用驗證器進行搜索(採樣生成多個答案並挑選最佳答案)
-
2. Modifying Proposal Distribution:修改提議分佈(訓練過的 “思考” 過程)
利用驗證器進行搜索側重於輸出,而修改提議分佈則側重於輸入。
我們將探討兩種類型的驗證器:
-
結果獎勵模型(Outcome Reward Models, ORM)
-
過程獎勵模型(Process Reward Models, PRM)
正如其名稱所示,結果獎勵模型 ORM 只對結果進行評判,而不關心背後的過程:
相反,過程獎勵模型 PRM 不僅評判結果,還會考量生成結果的過程(即 “推理” 過程):
爲了使 PRM 的推理步驟更具體,我們將推理展開看:
(注意:步驟 2 是一個壞的推理步驟,被過程獎勵模型打了低分)
現在,你已經對 ORM 與 PRM 有了較爲清晰的認識,接下來讓我們探討它們在各種驗證技術中的應用。
Search against Verifiers
測試時計算的首個主要方法是利用驗證器進行搜索。這個過程通常包括兩個步驟:
-
- 生成多個推理過程及其對應的答案。
-
- 然後,利用驗證器(獎勵模型)對生成的輸出進行評分。
通常,驗證器也是一個經過微調的 LLM,用於評判結果(ORM)或過程(PRM)。
使用驗證器的一個主要優勢在於,無需重新訓練或微調用於回答問題的 LLM。
多數投票(Majority Voting)
最直接的方法其實是不使用任何獎勵模型或驗證器,而是採用多數投票。
具體做法是讓模型生成多個答案,然後選取出現次數最多的那個作爲最終答案。
這種方法也被稱爲 自洽性(self-consistency),以強調需要生成多個答案及其推理步驟。
Best-of-N 樣本
第一種真正使用到驗證器的方法被稱爲 Best-of-N 樣本。它的核心思路是:生成 N 個答案樣本,然後使用驗證器(一般是結果獎勵模型,ORM)來對每個答案進行判斷。
- 1. 生成多個答案
通常由一個 LLM(稱爲 “Proposer”)在較高或多種溫度設定下生成多個答案樣本。
- 2. 評分並選取最佳答案
將每個答案輸入給結果獎勵模型(ORM),爲其打分,並選出分數最高的那個答案。
如果想評估的不只是答案,還包括推理過程,則可以使用 過程獎勵模型(PRM)。它會判斷每個推理步驟的質量,並選取具有最高總權重的候選答案。
基於這兩類驗證器,我們還可以讓獎勵模型(RM)分別對每個答案候選進行加權,然後選出綜合得分最高的那一個,這種方法被稱爲 加權 Best-of-N 樣本(Weighted Best-of-N samples)。
使用過程獎勵模型的 Beam Search
在生成答案和中間推理步驟時,我們可以將上述過程進一步擴展到 Beam Search。
在 Beam Search 中,會對多個推理步驟進行採樣,並由過程獎勵模型(PRM)進行打分(類似於 Tree of Thought 的思路)。在此過程中,我們會追蹤評分最高的若干條 “beam”,例如前三名。
這種方法能讓我們快速終止那些得分低、不太可能帶來理想結果的推理路徑,從而將計算資源集中在更有用的推理路線。
最終產生的答案,結合之前的 Best-of-N 方法進行加權或篩選,獲得最高分答案。
蒙特卡洛樹搜索(Monte Carlo Tree Search)
蒙特卡洛樹搜索(MCTS) 是在搜索樹中高效尋找最優路徑的一種方法,通常包括以下四個步驟:
-
1. Selection:根據特定公式(例如上置信界 UCB)選擇當前樹中的某個葉子節點。
-
2. Expand:在該葉子節點處創建額外的子節點(新的推理步驟)。
-
3. Rollouts:對新生成的節點進行若干次隨機擴展,直到到達最終答案。
-
4. Backprop:將模擬中獲得的分數或獎勵向上更新到父節點。
這四個步驟的目標是不斷擴大最優推理路徑的同時,兼顧對其他潛在路徑的探索,即在 “探索” 與“利用”之間取得平衡。
可參考之前強化學習的文章圖解強化學習
節點的選擇和評分通常可參考下圖所示的公式或方法來執行:
在選擇要進一步探索的推理步驟時,不一定總是選擇當前看起來最佳的路徑,這樣有助於避免過早收斂。
具體實現中,選中一個節點後,可以對其進行擴展(生成新的推理步驟),再使用適當的溫度採樣來生成多個變體。
隨後,我們會對某一分支進行多次模擬(rollout),直到生成完整的答案。
這些 rollouts 可依據推理過程(PRM)、結果質量(ORM),或兩者結合來進行評估並得到分數。
最後,將這些得分回溯更新到父節點,然後繼續進行新的選擇(selection),週而復始,持續改進搜索過程。
修改提議分佈 (Modifying Proposal Distribution)
讓 LLM 進行推理的第二大類方法稱爲 “修改提議分佈”。與利用驗證器(着重輸出)來搜索正確推理步驟不同,這種方法會訓練模型主動生成更優質的推理步驟(着重輸入)。
換句話說,我們會對用於採樣(Completion/Thought/Tokens)的分佈進行修改。
試想,我們有一個問題,以及一個用於從中採樣的 tokens 的分佈。常見的策略是選取得分最高的 token:
但注意在上方示意圖中,有些 tokens 被標記成紅色——這些 tokens 會更傾向於帶來推理過程:
儘管 “貪婪” 地選擇得分最高的 token 並不一定錯誤,但如果某些 token 指向了更詳細的推理步驟,往往可以得到更高質量的答案。
當我們修改提議分佈(即 token 的概率分佈)時,實質上就是對模型的 token 排序進行重新評估,使得 “推理” token 被選中的概率更大:
從概念上說,修改提議分佈的方法可以分成兩類:
-
1. 通過 Prompt Engineering 來更新提示
-
2. 訓練模型更多地關注推理 token 或推理過程
Prompting
在 Prompt Engineering 中,我們通過更新提示來改善輸出,同時也會引導模型顯式或隱式地展示之前提到的 “推理過程”。
要通過 Prompt 來改變提議分佈,我們可以給模型提供示例(即 “上下文學習”),從而誘導它生成更具推理傾向的回答:
如果不想提供完整示例,也可以通過簡單的一句話來指示模型,例如 “Let’s think step-by-step”,從而讓模型在回答之前先做推理拆解:
不過需要注意:模型本身並不一定 “真正學會” 遵循這個過程。此外,這種方法是靜態、線性的,缺少自我修正機制。一旦模型開始的推理過程出現錯誤,它往往會沿着這個錯誤的思路繼續下去,而不進行修正。
STaR
除了提示工程,另一個思路是讓模型通過 “學習” 來進行推理,即讓模型因生成相應的推理步驟而獲得獎勵。此類方法通常需要大量的推理數據和強化學習,以在訓練中鼓勵某些行爲。
一個頗具爭議的方法是 STaR,即 Self-Taught Reasoner。STaR 會讓 LLM 生成自身的推理數據,並將這些推理作爲微調的訓練輸入。
模型先在步驟 (1)中生成推理步驟和答案。
- • 如果答案正確 (2a),則將該推理過程和最終答案一起加入到三元組數據集中 (3a),用於後續的監督微調 (5)。
- • 如果模型給出的答案是錯誤的 (2b),則爲模型提供一個 “提示”(正確答案 3b),讓它去推理爲什麼這個答案纔是正確的 (4b)。模型最終的推理過程同樣會被加入到相同的三元組數據集中,用於監督微調 (5)。
在這一過程中(以及許多其他修改提議分佈的方法中),我們都會顯式地教模型去 “遵循” 我們示範的推理步驟。
換句話說,我們可以通過監督微調來決定模型 “應該怎樣” 進行推理。
STaR 的完整流程相當有趣,因爲它會自動生成合成訓練示例。正如我們會在後續討論 DeepSeek R1 時看到的,使用合成訓練示例是將推理過程蒸餾給其他模型的一種絕佳方式。
DeepSeek-R1
在推理模型領域,一項重大的發佈是 DeepSeek-R1。這是一個開源模型,與 OpenAI 的 o1 推理模型直接競爭,並在業界產生了重大影響。
DeepSeek 團隊通過多種技術手段,成功地將推理能力巧妙融入到其基礎模型(DeepSeek-V3-Base)中。
值得注意的是,在這一過程中並未使用任何驗證器;與使用監督微調來提煉推理能力相比,DeepSeek 更加重視強化學習(RL)。
接下來,讓我們深入探究他們是如何爲模型訓練出推理能力的。
DeepSeek-R1 Zero 的推理機制
在通往 DeepSeek-R1 的道路上,有一個實驗性模型作出了關鍵貢獻,名爲 DeepSeek-R1 Zero。
它基於 DeepSeek-V3-Base 而來,但並沒有採用針對大量推理數據的監督微調,而是僅通過強化學習(RL)來激發模型的推理行爲。
爲此,他們設計了一個非常簡單直觀的提示(Prompt),類似於系統提示,貫穿於整個 Pipeline:
可以看到,雖然提示中明確要求在 <think>
標籤內寫出推理過程,但並未對推理過程的具體形式做任何規定。
在強化學習階段,他們基於規則設計了兩類獎勵:
- 1. 準確度獎勵(Accuracy rewards)
- • 通過測試答案的正確性來給予獎勵。
- 2. 格式獎勵(Format rewards)
- • 對使用
<thinking>
和<answer>
標籤的行爲給予獎勵。
他們所使用的 RL 算法名爲 Group Relative Policy Optimization (GRPO) 。其核心思路是:
對於那些導致答案正確的所有決策——無論是特定的 token 序列還是推理步驟——都會在訓練中獲得使其更有可能被採納的權重調整。
而對於那些導致答案錯誤的所有決策,則會在訓練中獲得使其更不可能被採納的權重調整。
有意思的是,該提示並沒有給出 <think>
過程應當如何呈現的示例,只是要求在 <think>
標籤內進行思考,無需更多細節。
通過向模型提供與思維鏈(Chain-of-Thought)相關的間接獎勵,模型逐漸自主學會:當推理過程更長、更復雜時,答案更可能是正確的。
這張圖非常重要,因爲它進一步印證了從訓練時計算到測試時計算的範式轉變。當這些模型生成更長的思考序列時,實際上就加大了測試時計算的投入。
通過這樣的訓練流程,研究人員發現,模型能夠自發地探索出最優的鏈式推理模式,並展現出如自我反思、自我驗證等高級推理能力。
不過,這種做法仍存在一個顯著缺陷:其輸出的可讀性不佳,而且有時會混用多種語言。爲了解決這個問題,團隊轉而研究另一種思路,也就是 DeepSeek-R1。
讓我們看看他們是如何穩定推理過程的吧!
DeepSeek-R1
DeepSeek-R1 的訓練大體可以概括爲以下五個階段:
-
1. 冷啓動(Cold Start)
-
2. 面向推理的強化學習(Reasoning-oriented Reinforcement Learning)
-
3. 拒絕採樣(Rejection Sampling)
-
4. 監督微調(Supervised Fine-Tuning)
-
5. 適用於所有場景的強化學習(Reinforcement Learning for all Scenarios)
以下是各個階段的具體流程:
- 1. 冷啓動(Cold Start)
在第一步中,研究人員使用一個小型的高質量推理數據集(約 5000 個 tokens)對 DeepSeek-V3-Base 進行微調。這樣做是爲了避免 “冷啓動” 問題導致的可讀性不佳。
- 2. 面向推理的強化學習
在第二步中,得到的模型採用與 DeepSeek-V3-Zero 類似的強化學習過程進行訓練。但在獎勵機制中增加了一項新指標,用來確保目標語言的輸出保持一致性。
- 3. 拒絕採樣(Rejection Sampling)
在第三步,研究人員利用上一步得到的模型合成推理數據,用於後續的監督微調。通過基於規則的獎勵策略(rule-based rewards)、生成式獎勵模型(Generative Reward Model),生成了 600,000 份高質量的推理示例。 此外,還生成了 200,000 份 “非推理” 示例,這些示例來自 DeepSeek-V3 及其部分訓練數據。
- 4. 監督微調(Supervised Fine-Tuning)
第四步,將得到的總計 800,000 條示例數據用於對 DeepSeek-V3-Base 的監督微調。
- 5. 適用於所有場景的強化學習
第五步,他們使用與 DeepSeek-R1-Zero 類似的方法,對微調後得到的模型再次進行 RL 訓練。
但爲了更好地對齊人類偏好(Human Preferences),在獎勵信號中額外加入了 “有益性” 與“無害性”的考量。
同時,爲了避免推理結果的可讀性問題,模型會被要求對推理過程進行適當的總結和精簡。
通過上述五個階段,DeepSeek-R1 最終得以成型。可以說,DeepSeek-R1 是 DeepSeek-V3-Base 通過監督微調和強化學習得到的成果。
其中,大量工作都集中在確保生成出高質量的訓練示例上。
用 DeepSeek-R1 進行推理 “蒸餾”
DeepSeek-R1 規模龐大,擁有 6710 億(671B)參數。這對於普通硬件來說,運行成本極高。
因此,DeepSeek 的研究人員還探索瞭如何將 DeepSeek-R1 的推理能力 “蒸餾” 到其他模型中,例如可以在消費級硬件上運行的 Qwen-32B。
具體做法是,讓 DeepSeek-R1 作爲教師模型(Teacher),而體量較小的模型則作爲學生模型(Student)。兩者在面對相同的提示時,需要分別生成 token 的概率分佈;學生模型會嘗試在訓練中逼近教師模型的分佈:
-
- 使用之前提到的 80 萬高質量數據樣本(其中 60 萬條推理示例 + 20 萬條非推理示例)進行訓練。
-
- 學生模型通過不斷對比自己的輸出分佈和教師模型的輸出分佈,來學習 DeepSeek-R1 的推理方式。
這樣 “蒸餾” 出來的小模型性能依舊出色,因爲它不僅學到了 80 萬條數據中的知識,還學到了 DeepSeek-R1 如何作答的思路。
不太成功的嘗試
還記得我們之前提到的 過程獎勵模型(PRMs) 和 蒙特卡洛樹搜索(MCTS) 嗎?DeepSeek 團隊也曾試圖用這些方法來培養模型的推理能力,但並未取得理想成果。
在 MCTS 中,由於搜索空間極其龐大,研究人員不得不大幅限制節點擴展。此外,訓練一個能夠細化評估推理過程的獎勵模型本身就是一項困難的任務。
在結合 PRMs 的 Best-of-N 技術中,他們遇到的主要問題是計算開銷過高,需要頻繁地對獎勵模型進行再訓練,以防止出現所謂的 “reward-hacking”(對獎勵函數的漏洞進行投機利用)。
這並不代表這些技術就完全不適用,但至少說明了它們在實際應用中面臨着一些挑戰。
結語
以上就是關於推理型 LLM 的概念與 DeepSeek-R1 的完整探索。希望這篇內容能幫助你更好地理解 “測試時計算擴展” 的潛力所在!
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/8DHjWUAIjfuIjqcoJYCotA