復雜推理:大語言模型的北極星能力
最近,很多關于較小模型的研究取得了令人振奮的對話能力,這讓人們想象,是否較小的模型能具有與像 GPT-3.5 這樣的大型模型相當的性能。一般來說,語言模型具有多維能力,所以模型之間的相互對比較為困難。找到正確的衡量標準對于開發強大的語言模型至關重要。在目前階段,研究者們急切想知道什么是度量大語言模型潛力的關鍵因素。
在 GPT-4 發布博客中,作者寫道:“在一次隨意的談話中,GPT-3.5 和 GPT-4 之間的區別可能是微妙的。當任務的復雜程度達到足夠的閾值時,差異就會顯現出來。” 這意味著復雜任務很可能是大型和小型語言模型的關鍵差異因素。
更重要的是,復雜推理為基于語言模型構建大量應用程序提供了機會,從而使語言模型有機會成為下一代計算平臺 / 操作系統。這有可能從根本上改變人類與機器的交互方式,重塑整個計算生態系統。
在這篇文章中,我們將仔細分析討論如何讓大語言模型擁有強大的復雜推理能力。
在天體攝影中,當使用長曝光拍攝星軌時,北極星位于星軌的中心,始終指向真正的北方。在古代,它為旅行者指引方向。
目錄
1 - 動機:大語言模型作為新一代計算平臺
我們研究復雜推理的原因有兩個:
- 正如上文提到的,復雜推理是標志著小模型與大模型差異的關鍵因素,這一點在 GPT-4 發布文章中已經討論過。
- 復雜推理是使模型成為下一代操作系統的核心能力。
將語言模型視為下一代操作系統的愿景尤為有趣,因為它為構建新應用程序和創建基于語言模型的計算生態系統(可能比超級應用程序如 ChatGPT 提供更大的機會)開辟了無數可能性。復雜推理能力是基礎,因為如果我們希望模型成為新的操作系統,它需要能夠通過與工具、用戶和外部環境的所有元素互動來完成復雜的指令。
本文研究了如何訓練具有強大復雜推理能力的模型,如何進行提示工程以充分發揮模型的推理能力,以及如何評估模型的推理性能。本文的內容分為以下幾部分:
- 在第 2 部分,我們討論了構建具有強大復雜推理能力的語言模型的現有方法。復雜推理的方案與通用大型語言模型(LLM)開發的方案相似,包括三個階段:持續訓練 (continue training)、指令微調 (instruction finetuning) 和強化學習 (reinforcement learning)。我們還會進一步討論代碼與推理之間令人驚訝的耦合關系。
- 在第 3 部分,我們討論了復雜推理的提示工程 (prompt engineering) 技術。當語言模型成為新一代操作系統內核時,提示工程 / 場景學習將成為新一代腳本編程 (shell script)。
- 在第 4 部分,我們討論了如何評估大型語言模型的推理能力。我們介紹 Chain-of-thought Hub,這是一個包含 100 多個推理任務的數據集合,清楚地標示了大型與小型模型的差異。我們重點介紹了 LLaMA 65B 的出色表現。我們認為它具有非常強大的潛力,可作為再現 ChatGPT-3.5 的基座模型。
2 - 增加大語言模型推理能力的方案
推理的方案與構建通用大型語言模型和聊天機器人的方案密切相關。總共有三個階段:
- 預訓練 / 持續訓練:在這個階段,我們通常在大型數據集(如科學文獻或代碼數據)上訓練大型模型。
- 有監督微調:在這個階段,我們對模型進行微調,以便完成復雜任務的指令。
- 強化學習:在這個階段,我們使用諸如任務是否已全部 / 部分完成的信號作為獎勵。
我們進一步回顧了在代碼上進行訓練也可以提高模型推理能力的假設。因此,在我們的文獻分析中,我們同時考慮推理和編碼。我們將看到,就學習方法而言,這兩者之間存在驚人的相關性。
2.1 - 預訓練與持續訓練
我們分析以下幾項研究:
- Lewkowycz et. al. 2022. Minerva: Solving Quantitative Reasoning Problems with Language Models
- 在來自 Arxiv 論文的 38.5B 的 token 上繼續訓練 PaLM 540B。
- 在 MATH (一個需要使用 LaTeX 格式回答問題的困難數據集),上的得分為 33.6(GPT-4 的得分是 42.5)
- Taylor et. al. 2022. Galactica: A Large Language Model for Science
在包含論文、代碼、參考資料、知識庫和其他內容的 106B token 上預訓練一個120B語言模型。
在MATH上的表現為 20.4(Minerva 33.6,GPT-4 42.5)
Chen et. al. 2021. Codex: Evaluating Large Language Models Trained on Code
在159GB代碼數據上繼續訓練 12B GPT-3 模型,提高了 HumanEval 數據集上的代碼性能。
這些研究發現,在大量科學文獻 / 代碼上進行訓練可以顯著提高基礎模型的推理/編碼能力。
2.2 - 監督微調
我們分析:
- Chung et. al. 2022. Scaling Instruction-Finetuned Language Models
- 使用多樣化的指令顯著提高了模型零樣本泛化的能力
- 在指令集合中混合思維鏈數據(the flan collection 文章中進一步討論了這個問題)明顯提高了模型的思維鏈能力
- 注意:盡管 the flan collection 數據集從多個維度激發了基礎模型的能力,但這些指令并非來自真實的聊天機器人用戶互動,因此可能無法直接轉化為更好的聊天性能。
- Fu et. al. 2023. Specializing Smaller Language Models towards Multi-Step Reasoning
- 將思維鏈推理能力提煉到較小規模(小于或等于 10B)的模型。通常,10B 規模的模型非常適合部署(更大的模型太貴了,更小的模型太弱了)。
- 本文討論了很多工程細節,如數據工程、能力平衡以及小型和大型模型之間的差異
- Li et. al. 2022. Competition-Level Code Generation with AlphaCode
- 在 715GB 的 GitHub 代碼上預訓練一個 41B 模型,然后在包含 13k 問題的 CodeContest 數據集上進行微調
- 在測試期間,使用采樣并根據是否通過示例測試來過濾解決方案。從某種意義上說,這種做法類似于推理問題中的 self-consistency 方法。
目前關于指令微調的理解是:
- 通過使用對話格式的數據,將基本模型調優為聊天機器人相對容易(參見像 Alpaca 和 MOSS 這樣的優秀示例)。然而,閑聊的能力并不能轉化為執行復雜任務的能力。從這個角度來看,模型就像人類一樣:說得多不如干得好,代碼見真章。
- 實際上,指令調優問題是一個數據混合問題:如何最好地混合來自不同來源的指令數據,以便從所有角度均勻地提高模型性能(而不是像在 CoT specialization 和 the flan collection 中討論的那樣,增加一個維度但降低另一個維度)。
- 數據混合的簡單起點是:使用 10-20 個非思維鏈的數據點(以平衡不同維度的能力),但盡可能多地使用鏈式思維數據(以最大化推理能力)。
2.3 - 強化學習
我們分析:
- Uesato. et. al. 2022. Solving math word problems with process- and outcome-based feedback
- 基于中間推理和最終推理結果構建獎勵模型。
- Le et. al. 2022. CodeRL: Mastering Code Generation through Pretrained Models and Deep Reinforcement Learning
根據諸如編譯錯誤、運行時錯誤或是否通過測試等信號訓練獎勵模型。
這兩項工作都使用中間信號(對于推理,看中間步驟是否正確;對于編碼,看代碼是否編譯)和最終信號(對于推理,最終答案是否正確;對于編碼,代碼是否通過測試)作為獎勵。需要注意的是,這種類型的強化學習與基于人類反饋的強化學習(RLHF)有所不同,因為它不需要人類反饋。
2.4 - 推理能力和代碼能力的耦合
在我們之前的討論中,我們提出了一個假設,即在代碼上進行訓練可能會提高推理能力,原因如下:
- 代碼注釋是自然存在的鏈式思維數據
- 面向過程編程類似于逐步解決任務。這適用于簡單和中等復雜度的任務
- 面向對象編程類似于將任務分解為較小的任務,然后分別解決它們。這適用于較高復雜度的任務。
從這個顯著的一致性中,我們看到提高推理能力與提高編程能力非常相似。在此,我們通過強調訓練大型語言模型進行推理或編碼的配方相似性,深化了這個假設:
我們看到推理和代碼都經歷了:
- 在連續訓練階段,可以在基礎模型上增加代碼和科學文獻數據。
- 在有監督的微調階段,可以根據要求完成復雜任務的指令或編寫代碼對模型進行微調
- 在強化學習階段,將中間推理步驟 / 編譯率和最終推理結果 / 代碼通過率作為獎勵
- 在解碼過程中,推理和編碼都會采樣多個解決方案,然后從解碼空間中選擇最佳方案。
這些相似性使得代碼和推理之間的聯系非常有趣。
3 - 復雜推理的提示工程
在討論了如何構建具有強大推理能力的模型之后。在本節中,我們將討論如何有效地提示模型以充分釋放模型的潛力。
3.1 - 基礎思維鏈提示工程
以下論文推薦給初學者:
- Wei et. al. 2022. Chain-of-Thought Prompting Elicits Reasoning in Large Language Models.
- 本文是第一篇發現當使用鏈式思維進行提示時,存在一個相變現象,表明大型模型在很大程度上優于較小的模型,這進一步導致了涌現能力的發現。
- Wang et. al. 2022. Self-Consistency Improves Chain of Thought Reasoning in Language Models
對采樣的 CoT 推理路徑進行多數投票,顯著提高了推理性能。
Suzgun et. al. 2022. Challenging BIG-Bench Tasks and Whether Chain-of-Thought Can Solve Them
使用 CoT 處理 big-bench 中困難的任務。這篇論文的一個有意義的副產品是 BigBench Hard 數據集,它在測試模型推理能力方面非常有效。
3.2 - 進階技巧及分析
以下論文討論了高級 CoT 提示實踐:
- Fu et. al. 2023. Complexity-Based Prompting for Multi-Step Reasoning
- 使用復雜鏈代替簡單鏈作為上下文示例
- Khot et. al. 2023. Decomposed Prompting: A Modular Approach for Solving Complex Tasks
將復雜任務分解為更簡單的任務,然后逐個解決
通常,對于復雜任務,首先將其分解為更簡單的任務,然后逐步解決更簡單的任務。
以下論文討論了上下文學習為什么起作用:
- Xie et. al. 2021. An Explanation of In-context Learning as Implicit Bayesian Inference
- 語言模型在提示中的示例之間推斷出一個潛在概念,并進入相應的任務模式
- Wei et. al. 2023. Larger language models do in-context learning differently
當出現與先驗知識相矛盾的上下文示例時,盡管大型模型可能具有更強的語義先驗,大型模型可以根據提示詞來覆蓋語義先驗。
簡而言之,上下文學習的要點是提示中的示例使模型進入相應的任務模式,然后執行任務。
以下論文討論了模型在進行思維鏈推理時的行為:
- Min et. al. 2022. Rethinking the Role of Demonstrations: What Makes In-Context Learning Work?
- 當某些標簽錯誤時,模型仍然可以做出正確的預測。這表明模型更受提示的 [格式] 影響,而不是提示的 [意義] 。
- Wang et. al. 2022. Towards Understanding Chain-of-Thought Prompting: An Empirical Study of What Matters
即使提示中的推理錯誤,模型仍然可以正確推理,但提示的相關性和推理步驟的順序更為重要 —— 這再次表明,模型更受提示的 [格式] 影響,而不是提示的[意義]。
Madaan and Yazdanbakhsh. 2022. Text and Patterns: For Effective Chain of Thought, It Takes Two to Tango.
詳細分析顯示,提示的格式可以改善 CoT 推理(雖然內容的正確性可能不起到強烈作用)
簡而言之,模型只關注提示的格式,但可能不會受到提示正確性的顯著影響。然而,模型在多大程度上會受到提示正確性的影響,或者提示可以在多大程度上覆蓋模型的先驗信念,還是一個尚待研究的問題。
以下論文討論了如何通過改進和反饋來提高模型性能:
- Madaan. et. al. 2023. Self-refine: Iterative refinement with self-feedback
- 模型可以在多個場景中(包括代碼優化、數學推理、對話響應生成等)對自身的推理進行優化和改進。
- Madaan et. al. 2023. Learning Performance-Improving Code Edits
在程序軌跡上進行訓練可以改善編碼。
簡而言之,以自然語言形式(而非強化學習中的獎勵形式)對模型進行改進和反饋非常有效,可以進一步提高語言模型的性能(無論是通過上下文學習還是微調)。
4 - 評價大語言模型的推理能力
在討論了訓練強大模型的方法和提示技巧之后,現在我們討論對語言模型推理能力的評估。
4.1 - 評價方法的基礎知識
在談論評估時,有三個重要因素需要考慮:數據格式、能力類型和模型類型。首先,提示時有四種數據格式:
其中:
- In-context 指的是在測試問題之前附加一系列上下文示例。
- Zero-shot 是指在沒有上下文示例的情況下直接將測試問題輸入給模型。
- Chain-of-thought 是指在回答之前生成推理。
- Answer-only 是指沒有鏈式思維,直接給答案。
對于模型能力,有兩種大致正交的能力類型:
- 知識 knowledge:模型是否了解世界
- 推理 reasoning:模型是否可以根據其知識進行推理。
這兩個方面并不是嚴格正交的,因為一些推理規則也可以被視為某種形式的知識。然而,在評估時,這兩種能力有明顯的差異:
- 一些數據集更注重對知識的評估,如 MMLU,它測試模型是否具有高達大學水平的知識。
- 一些數據集更注重對推理的評估,如 BBH,它測試模型是否具有逐步解決問題的能力。
- 對于知識,鏈式思維與僅回答的表現相似(參見 FlanPaLM 論文)
- 對于推理,鏈式思維比僅回答表現得更好(參見原始 CoT 論文,然后參見 FlanPaLM 論文)
在實踐中,因為 CoT 在達到或優于 Answer-only 的表現,而且 CoT 更加用戶友好(因為它告訴用戶思考過程),現代聊天機器人總是部署 CoT(無論你問 ChatGPT 什么,它都會告訴你一堆它的想法)。
最后,在評估方面,我們區分了兩種類型的模型:預訓練之后的 checkpoint 和指令微調之后的 checkpoint。
- 預訓練 checkpoint 具有 in-context learning 的能力。大多數預訓練模型可以進行 in-context answer-only,一些更好的模型可以進行 in-context chain-of-thought(但目前尚不清楚為什么某些預訓練模型可以進行 CoT 而其他模型卻不能)。然而,預訓練 checkpoint 可能無法進行 zero-shot,因為它們沒有經過這方面的訓練(但某些預訓練檢查點仍然可以進行 zero-shot CoT,請參閱 “讓我們逐步思考” 的論文)。
- 指令微調過后的 checkpoint 既具有 zero-shot 又有 in-context 的能力。這里需要注意的是,如果沒調好,指令微調之后 in-context 性能可能會稍有下降。
綜上所述,我們建議使用 in-context chain-of-thought 進行評估: - In-context 是評估 pretrained checkpoint 的更好方法,因為它更好地揭示了模型潛力。Zero-shot 可能低估模型性能,尤其是對于不支持 Zero-shot chain-of-thought 的(“讓我們逐步思考”)的模型。
- Chain-of-thought prompting 是評估推理能力的更好方法,因為它比 answer-only prompting 更充分地發揮了模型的推理性能。
4.2 - Chain-of-thought Hub 簡介
項目鏈接:https://github.com/FranxYao/chain-of-thought-hub
在討論了所有評估基礎知識之后,我們介紹 Chain-of-thought Hub,這是一個正在進行的工作,希望成為評估語言模型推理能力的統一平臺。我們匯編了一個包括數學(GSM8K)、科學(MATH)、符號(BBH)、知識(MMLU)等復雜推理任務的列表,以衡量哪些模型確實更好。下面是當前的排行榜。盡管許多數字還沒跑出來,但當前的內容仍然能給一個大概的模型排名:
總的來說:
- 我們根據 GSM8K 對模型性能進行排名,這是一個經典的基準測試,用于衡量鏈式思維數學推理性能。這不是唯一的度量標準,但一個很好的解釋是 “在保持其他通用能力的同時,模型在數學方面的表現如何” —— 這也非常困難。
- GPT-4 在 GSM8K 和 MMLU 上明顯優于所有其他模型。
- 65B LLaMA 與 text/code-davinci-002 非常接近,這意味著基于它,如果 SFT 和 RLHF 操作正確,我們很有可能基于 65B LLaMA 復現 ChatGPT。
- Claude 是唯一可以與 GPT 系列相媲美的模型家族。
- 較小的模型,如 FlanT5 11B 和 LLaMA 7B,明顯落后于排行榜,這意味著復雜推理可能只是大型模型的能力。
進一步地,在 github 倉庫中,我們包括了:
- 詳細的實驗設置和結果分析
- 用于重現 GPT 和 Claude 所有結果的腳本
試一下吧 :)
5 - 結論
在這篇文章中,我們討論了大型語言模型的推理能力。復雜推理不僅僅是因為它是更強模型與更弱模型之間的核心區分點,而且它還是模型成為下一代計算平臺 / 操作系統的基礎能力,從而有可能在大模型上建立一個新的生態系統。
我們討論了構建具有強大推理能力的模型的方法:預訓練、有監督的微調和強化學習。我們發現提高推理能力的方法與提高代碼能力的方法密切相關,這加深了我們先前關于推理與代碼之間密切關系的假設。我們進一步討論了高級提示工程技巧和在執行復雜推理時模型行為的分析。最后,我們討論了如何評估模型的推理能力,并介紹了 chain-of-thought hub,這是一個正在進行的項目,旨在統一評估語言模型的推理性能。
我們希望這篇文章能成為構建具有強大推理能力的開源模型的路線圖。
人世間數百萬個閑暇的小時流逝過去,方始出現一個真正的歷史性時刻,人類星光閃耀的時刻 —— 《人類群星閃耀時》斯蒂芬·茨威格
附錄:更多大語言模型推理的相關資源
- Lil’Log 2023. Prompt Engineering
- Microsoft Semantic Kernel
- Prompt Engineering Guide
- Huang and Chang 2022. Towards Reasoning in Large Language Models: A Survey
注:文中所提論文可以在原文頁面找到相應網址。
原文鏈接:https://yaofu.notion.site/6dafe3f8d11445ca9dcf8a2ca1c5b199