前言: 思維鏈,在人工智能領域,是一個非常非常新的概念。強大的邏輯推理是大語言模型“智能涌現”出的核心能力之一,好像AI有了人的意識一樣。而推理能力的關鍵在于——思維鏈(Chain of Thought,CoT)。
相關概念:
- 語言智能可以被理解為“使用基于自然語言的概念對經驗事物進行'理解’以及在概念之間進行'推理’的能力”,隨著參數量的飛升,以Transformer 為基礎架構的大規模語言模型以 “Chat”的方式逐漸向人們展現出了它的概念理解與概念推理的能力;
- 推理一般指根據幾個已知的前提推導得出新的結論的過程,區別于理解,推理一般是一個“多步驟”的過程,推理的過程可以形成非常必要的“中間概念”,這些中間概念將輔助復雜問題的求解。
Chain-of-Thought(CoT)是一種改進的Prompt技術,目的在于提升大模型LLMs在復雜推理任務上的表現,對于復雜問題尤其是復雜的數學題大模型很難直接給出正確答案。如算術推理(arithmetic reasoning)、常識推理(commonsense reasoning)、符號推理(symbolic reasoning)。COT通過要求模型在輸出最終答案之前,顯式輸出中間逐步的推理步驟這一方法來增強大模型的算數、常識和推理能力。簡單,但有效。
2022 年,在 Google 發布的論文《Chain-of-Thought Prompting Elicits Reasoning in Large Language Models》中首次提出思維鏈(Chain of Thought),思維鏈就是一系列中間的推理步驟(a series of intermediate reasoning steps)。通過讓大模型逐步參與將一個復雜問題分解為一步一步的子問題并依次進行求解的過程可以顯著提升大模型的性能。
以是否包含示例為區分,可以將 CoT 分為 Zero-Shot-CoT 與 Few-Shot-CoT:
CoT 大幅度提高了 LLM 在復雜推理任務上的表現,并且輸出的中間步驟方便使用者了解模型的思考過程,提高了大模型推理的可解釋性。目前,思維鏈推理已經成為大模型處理復雜任務的一個常用手段。
關于 CoT 為什么會生效,目前尚且沒有一套被大家廣泛接受的普遍理論。但是,有許多論文對 CoT 與大模型的互動進行了一系列實驗,類似物理實驗與物理理論的關系,在實驗中一些有意思的現象或許可以幫助我們理解 CoT 的工作原理:
什么時候使用CoT?
CoT 應當被用于 20B 以上參數規模的模型之中,并且模型的訓練數據應當于任務問題相關且彼此相互有較強的聯結。
首從工程的角度而言,CoT 的適用場景抽象一下可以被歸納為三點,分別是使用大模型(1),任務需要復雜推理(2),參數量的增加無法使得模型性能顯著提升(3)。此外,現有的論文實驗也表明,CoT 更加適合復雜的推理任務,比如計算或編程,不太適用于簡單的單項選擇、序列標記等任務之中,并且 CoT 并不適用于那些參數量較小的模型(20B以下),在小模型中使用 CoT 非常有可能會造成機器幻覺等等問題。
而從理論角度,一篇來自斯坦福的論文《Why think step-by-step? reasoning emerges from the locality of experience》揭示了**當大模型的訓練數據表現出了變量的局部簇結構(Local Clusters of Variables)**時,CoT 將會展現極好的效果。而變量的局部簇主要指訓練數據中變量之間有著強的相互作用,相互影響的關系。
此外,也有研究指出,當給予大模型的示例之間彼此之間互相區分并不相同時,也有助于提升 CoT 的性能。同時,邏輯依據是否與問題相關,邏輯推理步驟的順序也會顯著影響 CoT 的性能。另外一個有趣的發現是,使用代碼數據訓練大模型,或者使用符合 CoT 格式的數據訓練模型也有助于提升 CoT 的性能。總結一下:CoT 應當被用于 20B 以上參數規模的模型之中,并且模型的訓練數據應當于任務問題相關且彼此相互有較強的聯結。
1、人工構造:質量高,但人力成本大,不好優化、不好跨任務遷移,如Few-shot CoT;
2、自動構造:分為 Zero-shot CoT和 Auto CoT等。
但自動的質量一般沒有人工的好,導致大模型幻覺問題嚴重。
案例:Few-shot CoT:一個復雜的推理任務,其可以有多種推理路徑(即解題思路),最終都能夠得到正確的答案。故Self-Consistency在解碼過程中,拋棄了greedy decoding的策略,而是使用采樣的方式,選擇生成不同的推理路徑,每個路徑對應一個最終答案。
案例1:Zero-shot CoT
前者通過特定的提示文本激發模型在沒有示例的情況下生成推理鏈條;
從技術上講,完整的零樣本思維鏈(Zero-shot-CoT)過程涉及兩個單獨的提示/補全結果。在下圖中,左側生成一個思維鏈,而右側接收來自第一個提示(包括第一個提示本身)的輸出,并從思維鏈中提取答案。這個第二個提示是一個自我增強的提示。
案例2:Auto-CoT
CoT 的能力已經被無數工作所驗證,歸納為以下四點:
思維鏈提示適用于哪些領域?思維鏈提示主要適用于需要復雜推理的領域,例如數學、常識和符號推理等。思維鏈提示可以幫助大語言模型生成一系列推理步驟,從而解決多步驟的問題,提高準確率和可解釋性。思維鏈提示也可以與其他技術結合,例如行動指令、檢索、組裝等,讓大語言模型具備更強的執行能力和知識生成能力。
具有很大的應用前景,在 CoT 中,多模態可以分為兩類:輸入多模態與輸出多模態。
除了多模態 CoT 以外,CoT 目前也已經用于如文本摘要(SumCoT),開放域問答(Self-Prompting LLMs),機器翻譯(MAPS),化學(ChemCrow)、醫學(Med-PaLM)等等領域
我們期望通過各種AI 技術構建的 Agent 事實上是一類擁有“自主智能的實體”,可以自主的發現問題、確定目標、構想方案、選擇方案、執行方案、檢查更新?;诖竽P徒鉀Q問題的“通用性”與預訓練得到的“先天知識”,構建的大模型智能體可以被認為具有如下圖的結構:
相比于短期記憶的“動態性”,長期記憶更多的提供歷史事件中的靜態信息的記錄,是對歷史知識更加宏觀與抽象的理解,長期記憶可以依賴于大模型中的可訓練參數進行構建,也可以通過外部維護的記憶庫進行構建。
推理 CoT
除了感知與記憶,借鑒 CoT 的思路讓智能體分解任務逐步進行計劃與決策以增強智能體解決問題的可靠性。在 Agent 中,CoT 主要的功能在于將計劃、行動與觀察相互結合,彌合推理與行動之間的差距,顯然,推理可以幫助模型制定行動計劃處理異常情況,而行動則允許大模型在與外部環境進行交互的同時,收集附加信息支持模型的推理。
譬如,AgentBench 強迫大模型智能體通過“思考”+“行動”步驟完成任務,而行動鏈技術通過一系列行動歷史與未來行動計劃幫助智能體進行決策,從而將決策問題轉化為 CoT 推理問題。
CoT 從最簡單的“Let’s think step by step”慢慢進化,其發展方向有三條主要的路徑,分別是 “Prompt 模式”,“推理結構”以及“應用場景”。
Prompt 模式主要研究“向大模型輸入怎樣的 Prompt 可以使得大模型獲得更好的推理能力”,關于 Prompt 模式的研究也可以分為兩類,分別是指令生成與范例生成。
對于指令生成問題,又可以分為手動指令生成與自動指令生成,
范例生成也可以分為手動范例生成與自動范例生成;
除了研究“什么樣的 Prompt 會誘導出更好的 CoT 能力以外”,還有很大一部分研究者關注于 CoT 本身的結構問題,主要的研究思路包含 “CoT 構造”、“推理聚合”以及 “CoT 驗證”。
CoT 構造主要將傳統線形,鏈式的 CoT 轉化為如表格、樹狀、圖狀格式,代表工作有非常出名的 PoT,Tab-CoT,ToT 以及 GoT-Rationale,下面這張圖非常清晰的展示了這四種方法的異同:
Tab-CoT,其中 Tab 指 Tabular 表格,在 ToT 中,研究者迫使大模型在每一步的推理中記錄一個“∣步數∣子問題∣過程∣結果∣”的推理表格,并讓大模型在推理時從生成的表格中提取答案,從而增強大模型的推理能力。
ToT,其中 T 指 Tree 即思維樹,簡單理解就是將 CoT 的鏈式結構擴展為樹形結構。ToT 讓大模型在解決子問題時生成多個不同的答案選擇,通過此建立的樹形結構讓大模型可以展望未來確定下一步的決策并且通過追溯來糾正歷史決策。
GoT,GoT 系統的核心在于一個“控制器”,控制器處理對圖的操作(GoO)以及圖狀態推理(GRS),其中 GoO 用于將一個給定的任務進行圖分解,將一個任務分解為相互連接的節點-邊關系,而 GRS 則負責維護大模型在 GoO 生成的圖上的推理過程,記錄當前步的狀態,決策歷史等等信息。
除了各種 XoT 以外,對于推理過程的“解碼”問題,也有一些工作進行了研究。其中,推理聚合的代表性工作是 Self-consistency CoT。Self-consistency CoT 使用手動設計的 Prompt 生成采樣一組不同的推理路徑,再通過“多數投票”找到推理步驟中“最一致”的路徑,使用這條解碼路徑驅動原始的貪心解碼方式來提示 CoT 性能。
最后,在針對推理結構的研究,還有一類是 CoT 驗證,CoT 驗證開始側重于通過多輪提問,讓大模型進行“自我驗證”,在前向后向的反復問答中讓大模型可以驗證自己的回答,而伴隨著 CoT 驗證的發展,也有工作開始引入“外部工具”對 CoT 中的信息進行驗證,例如信息檢索、計算器、計算機程序等等。
CoT 驗證最經典的工作即是自我驗證(Self-Verification),自我驗證有兩個步驟,分別是(1)對多個候選的推理路徑進行采樣;(2)給定問題結論讓大模型驗證條件是否滿足結論,并根據驗證分數對候選結論進行排序。
谷歌大腦的研究人員認為,策略問題需要大量的世界知識,而小型模型沒有足夠的參數來記憶這些世界知識,所以也不太可能產生正確的推理步驟。
但問題是,能落地到產業的模型,規模必然不會太大,思維鏈拆解了更多的步驟、用到更多的計算資源,相當于更加耗費腦力,很多研究機構和企業是負擔不起 175B 參數以上的大模型。
所以思維鏈必須要探索,如何在較小的模型中進行推理,降低實際應用的成本。
2. 思維鏈的應用領域是有限的
目前,思維鏈只是在一些有限的領域,比如數學問題,五個常識推理基準(CommonsenseQA,StrategyQA,Date Understanding 和 Sports Understanding 以及 SayCan)上顯現出作用,其他類型的任務,像是機器翻譯,性能提升效果還有待評估。
而且,相關研究用到的模型(GPT-3 API)或數據集,都是半公開或不公開的,這就使其難以被復現和驗證。嚴謹來看,思維鏈的效果還需要被進一步探索,才能下定論。
沒有思維鏈,數學推理是指定不行。但有了思維鏈,大語言模型也可能出現錯誤推理,尤其是非常簡單的計算錯誤。Jason Wei 等的論文中,曾展示過在 GSM8K 的一個子集中,大語言模型出現了 8% 的計算錯誤,比如6 * 13 = 68(正確答案是78)。
這說明,即使有了思維鏈,大語言模型還是沒有真正理解數學邏輯,不知道加減乘除的真實意義,只是通過更精細的疊加來“照葫蘆畫瓢”,所以,對于有精確要求的任務,還要進一步探索新的技術。
思維鏈確實增強了大語言模型的能力,但邏輯推理仍然是大語言模型的弱項,等待著更多突破。