CoT
提示工程(Prompt Engineering)深入解析:從思維鏈(CoT)到未來
前言:當語言模型學會「思考」
歡迎來到提示工程(Prompt Engineering)的進階世界!在大型語言模型(LLM)如 ChatGPT 剛問世時,我們驚嘆於它強大的語言「接龍」和文本生成能力。然而,使用者很快就發現,一旦遇到需要邏G輯、多步驟推理或數學運算的問題,它的表現就差強人意。
這背後的根本原因是:LLM 本質上是語言模型,而非推理模型。它們擅長預測下一個最可能的詞,而不是執行嚴謹的邏G輯推導。
為了解決這個問題,研究人員開發出了一種強大的提示技法——思維鏈(Chain-of-Thought, CoT)。CoT 的核心概念非常直觀:與其要求模型立即給出答案,不如引導它先展示一連串的思考過程,最後再給出結論。
這種模仿人類思路的推理步驟,極大地提高了 LLM 解決複雜問題的能力。本文將深入探討 CoT 的核心概念、兩大主要技法,以及從 CoT 演化而來的更先進技術。
什麼是思維鏈(Chain-of-Thought, CoT)?
思維鏈(CoT)的概念在 2022 年被 Google 的研究論文《Chain-of-Thought Prompting Elicits Reasoning in Large Language Models》中正式提出。
研究發現,透過在提示(Prompt)中提供一些包含「中間推理步驟」的範例,可以顯著啟發大型語言模型的複雜推理能力。模型會學習這種「逐步思考」的模式,並在回答新問題時加以應用。
實驗結果令人震驚:
- 顯著提升表現: 在算術、常識和符號推理等任務上,CoT 技法讓模型的準確率大幅提高。
- 超越微調模型: 論文中的圖表顯示,使用 CoT 的 PaLM 540B 模型,其表現在某些任務上甚至超越了經過專門微調(Finetuned)的 GPT-3 模型。
- 湧現能力(Emergent Ability): CoT 並不是在所有模型上都有效。研究證實,這是一種隨著模型規模增大而湧現的能力。對於較小的模型,CoT 的效果不彰,甚至可能產生反效果;但對於大型模型(如 100B+ 參數),CoT 帶來的提升非常明顯。
(圖片來源:Wei et al., 2022 論文)
CoT 的主要技法
CoT 的運用主要分為兩種形式:少樣本(Few-Shot)和零樣本(Zero-Shot)。
少樣本思維鏈 (Few-Shot CoT)
這是 CoT 最早被提出的形式。它的重點在於「給予包含思路的範例」。
與傳統的 Few-Shot Prompting 只給「問題」和「答案」不同,Few-Shot CoT 會在範例中把解題的思路過程完整表達出來,藉此「教會」模型如何思考。
範例對比:
傳統 Standard Prompting (效果不佳)
Q: Roger has 5 tennis balls. He buys 2 more cans of tennis balls. Each can has 3 tennis balls. How many tennis balls does he have now?
A: 11.
Q: The cafeteria had 23 apples. If they used 20 to make lunch and bought 6 more, how many apples do they have?
A:
模型可能只會猜一個數字,例如:29。
Few-Shot CoT (效果顯著)
Q: Roger has 5 tennis balls. He buys 2 more cans of tennis balls. Each can has 3 tennis balls. How many tennis balls does he have now?
A: Roger started with 5 balls. 2 cans of 3 tennis balls each is 2 * 3 = 6 balls. 5 + 6 = 11. The answer is 11.
Q: The cafeteria had 23 apples. If they used 20 to make lunch and bought 6 more, how many apples do they have?
A:
這時,模型會學習範例中的思路,並生成類似的回答:
A: The cafeteria started with 23 apples. They used 20, so 23 - 20 = 3. They bought 6 more, so 3 + 6 = 9. The answer is 9.
(範例改編自 Wei et al., 2022)
零樣本思維鏈 (Zero-Shot CoT)
提供完整的範例雖然有效,但有時顯得繁瑣。研究人員很快發現了一個更簡單、更神奇的方法,即 Zero-Shot CoT。
在另一篇關鍵論文《Large Language Models are Zero-Shot Reasoners》中,作者發現,我們甚至不需要提供任何範例,只需要在問題的結尾加上一句「神奇咒語」,就能觸發模型的 CoT 能力。
這句咒語就是:
“Let’s think step by step” (中文可對應為:「讓我們一步一步地思考」)
運作原理: 當模型看到這句話時,它會理解這個語意,並自動觸發內部的推理機制。模型會自己生成原本需要我們在 Few-Shot 中提供的「思路 prompt」,然後再依據這個自生成的思路,給出最終答案。
實驗結果同樣驚人:在 GPT-3 上,Zero-Shot CoT 將算術推理任務(MultiArith)的準確率從 17.7% 飆升至 78.7%。
(圖片來源:Kojima et al., 2022 論文)
超越 CoT:更進階的推理技法
CoT 打開了 LLM 推理能力的大門,而基於其「逐步思考」的核心理念,社群和研究界又發展出了更強大的變體。
1. 自洽性 (Self-Consistency)
- 核心理念: 條條大路通羅馬,取「多數決」。
- 運作方式: 與其只讓模型思考一次(產生一條 CoT),不如讓它用多種不同的思路去思考同一個問題(例如,產生 5-10 條 CoTs)。最後,統計所有思路得出的最終答案,選擇最常出現的那個作為最終結果(Majority Vote)。
- 比喻: 就像你請了 10 位專家來解題,即使他們的解題過程各不相同,但如果有 8 位都得出「答案 A」,你就有很高的信心相信 A 是正確的。
- 優勢: 大幅提高在複雜數學和G logic 任務上的可靠性與準確性。
2. 思維樹 (Tree of Thoughts, ToT)
- 核心理念: 從「鏈狀」思考,進化到「樹狀」探索。
- 運作方式: CoT 是一條線性的思考路徑。而 ToT 則允許模型在每一步都探索多個平行的分支。模型會評估每個分支的可能性,並決定要深入哪一個,或者回溯(backtrack)到上一步。
- 比喻: 就像在下棋,CoT 是你預想好的一套固定走法;而 ToT 則是你在每一步都考慮對手所有可能的應對,並為每種應對都想好下一步。
- 優勢: 更適合需要探索、規劃和複雜決策的任務。
3. 思維程序 (Program of Thoughts, PoT)
- 核心理念: 分工合作,讓 LLM 專注 Glogic,讓程式碼專注計算。
- 運作方式: PoT 將 CoT 中的自然語言推理,與程式碼(如 Python)的執行相結合。當遇到需要精確計算的步驟時,LLM 不會自己去「算」,而是會生成一段程式碼,然後交給一個真正的代碼解釋器(Interpreter)去執行。
- 範例:
- 問題: 5 個蘋果,每個 1.2 元;3 瓶牛奶,每瓶 2.5 元。總共多少錢?
- CoT 可能會算錯:
5 * 1.2 = 6,3 * 2.5 = 7.5,6 + 7.5 = 13.5。(LLM 在浮點數運算時很容易出錯) - PoT 的思路:
- (LLM 推理)「我需要計算蘋果的總價和牛奶的總價,然後相加。」
- (LLM 生成程式碼)
apples_cost = 5 * 1.2 - (LLM 生成程式碼)
milk_cost = 3 * 2.5 - (LLM 生成程式碼)
total_cost = apples_cost + milk_cost - (LLM 生成程式碼)
print(total_cost) - (解釋器執行)
13.5
- 優勢: 完美解決了 LLM 在精確計算上的弱點,在數學和符號運算任務上準確率極高。
CoT 的局限性與注意事項
雖然 CoT 及其變體非常強大,但在使用時仍有幾個關鍵點需要注意:
- 模型規模至關重要: 如前所述,CoT 是一種大型模型的湧現能力。如果 你在較小的模型上使用 CoT,效果可能不佳,甚至會讓模型的表現倒退。
- 任務類型: CoT 在需要邏輯、算術、符號推理的任務上效果最顯著。但在某些「常識推理」任務上,Zero-Shot CoT 的提升並不明顯。
- 「模仿」而非「真正」推理: 有研究指出,CoT 產生的思路,可能只是模型基於訓練數據所學到的「看起來最合理的敘述模式」(Plausible-sounding patterns),而非真正抽象的邏輯推導。儘管如此,它在實務上依然極為有效。
總結
思維鏈(CoT)是提示工程發展史上的一個里程碑。它標誌著我們與 AI 互動的轉變——從單純地「索取答案」,進化到「引導其推理過程」。
從基礎的 Few-Shot CoT、神奇的 Zero-Shot CoT 咒語,再到更強大的自洽性(Self-Consistency)、思維樹(ToT)和思維程序(PoT),我們正在一步步地解鎖 LLM 更深層的潛能。
往後,當你遇到 LLM 難以解決的複雜問題時,不妨停下來,不要急著要答案。試著對它說:
「讓我們一步一步地思考。」