AI進入推理模型時代,一文帶你讀懂思維鏈

選自 Towards Data Science

作者:Ida Silfverskiöld

機器之心編譯

近段時間,推理模型 DeepSeek R1 可說是 AI 領域的頭號話題。用過的都知道,該模型在輸出最終回答之前,會先輸出一段思維鏈內容。這樣做可以提升最終答案的準確性。

今天這篇文章將帶你瞭解思維鏈(CoT)的相關研究和技術。

(圖注)某些形式的推理技巧。

(圖注)某些形式的推理技巧。

思維鏈(CoT)已經存在了相當長的一段時間。從技術上講,它是一種高級提示工程。各種形式的 CoT 通常都是強迫大型語言模型進行推理。

今年 9 月,OpenAI 發佈了其模型 o1 的預覽版後,我們看到圍繞 CoT 的炒作愈演愈烈。

除了 OpenAI,沒有人完全知道 o1 是如何工作的,它是否是一個組合系統,用什麼樣的數據進行了微調,是否使用了強化學習,或者是否有幾個模型在一起工作。

也許一個模型負責計劃,另一個模型負責思考,第三個模型負責評分。但我們知道,它們都採用了某種逐步推理的方式。

關於這一點,已經有很多公開的研究。這篇文章將介紹現有的研究成果,讓你知道自己可以使用什麼。我也會對不同的技術進行測試,看看我們能否實現真正的改進。

研究者們在過去兩年中發表了很多論文。你可以在下圖中看到他們所談到的推理技術。

過去兩年討論較多的 CoT 技術。

過去兩年討論較多的 CoT 技術。

大部分工作直接來自 DeepMind 或普林斯頓大學。為他們的開源工作點讚。

CoT 這個詞是 DeepMind 在 2022 年提出的,只在提示中使用。最新的論文探索了結合蒙地卡羅搜索(Monte Carlo Search)和無需提示的 CoT 的「思維樹」(ToT)。

接下來將介紹簡單的思維鏈 (CoT)、CoT 鏈、貪婪解碼、CoT-SC、解碼 CoT 以及結合蒙地卡羅樹搜索的「思維樹」。

LLM 的基線分數

要瞭解如何改進 LLM 的結果,我們首先需要建立某種基線分數。

在引入模型時,通常會附帶評估指標。目前有幾種流行的評估指標,如 MMLU(語言理解)、BigBench(推理)、HellaSwag(常識推理)等。

有趣的數據集。

有趣的數據集。

不過,其中一些數據集已經過時,可能受到了一些汙染。

Hugging Face 在 12 月份推出了新的 LLM 排行榜,基於較新的數據集進行評估。你可以清楚地看到,大多數模型的得分都比它們在原始數據集上的得分低得多。

這裏值得做一些研究,以瞭解在模型評估方面應該如何思考,以及你和你的組織應該根據什麼進行評估。使用內部私有數據集進行測試並不是最糟糕的想法。

我從不同的數據集中抽取了大約 350 個問題,再加上我在網上找到的一些流行問題,然後對 11 種不同的模型進行了評估。

我需要知道這些數據集以及 LLM 生成的答案是什麼樣的。

因此,我構建了自己的腳本來遍曆問題,然後對每個問題用 0 或 1 來評估 LLM。

下面是我發現的結果。

你可以在這個Google表格中找到整個數據集和結果:https://docs.google.com/spreadsheets/d/1awPb5klHx-v1oafgZrV_-hdFHnibxla1BGHZ8vCY2CE/edit

我們可以從裡面讀出來的信息並不多。

我使用了來自 Big Bench、MMLU 和 Putnam 的問題,以及諸如「How many r’s are in Strawberry」之類的流行問題,但我們無法知道它們是否受到了這些問題的汙染。此外,這也是一個相當小的數據集。

不過,我們可以清楚地看到,更大的模型表現更好。

我們感興趣的是,能否通過讓模型在回答之前進行推理和思考,來提高這些分數。

思維鏈(CoT)

思維鏈(CoT)提示是由 DeepMind 在 2022 年發表的論文《Chain-of-Thought Prompting Elicits Reasoning in Large Language Models》中提出的。因此,CoT 的概念已經存在了很長時間。

不過,這第一篇論文研究的是如何通過使用提示策略激活模型固有的推理能力,從而迫使模型對問題進行推理。

當時,人們只是以正確的方式進行提示,要求模型「一步步地思考」,要麼通過零樣本(不提供例子),要麼通過少樣本(提供幾個例子)的方法。

零樣本 vs 少樣本。

零樣本 vs 少樣本。

對於 Claude、ChatGPT 或其他各種模型,只需在提示語末尾添加「讓我們一步步思考」即可。如果你想嘗試少樣本學習,你可以在提示中給它一些例子。

DeepMind 報告說,他們可以證實,通過正確的提示,使用 CoT 技術有了顯著提高。

從那時起,許多論文都在這些技術的基礎上進行了深入研究,並開闢了越來越先進的道路。

構建推理鏈

在提示詞工程社區中,有許多人嘗試使用 CoT 風格的技術。我在這裏收集了大部分我找到的庫,以便讀者查找。

CoT 風格技術的一些實現,詳見 https://github.com/ilsilfverskiold/Awesome-LLM-Resources-List

Benjamin Klieger 使用 Groq 和 Llama 3.1 70b 構建了一個提示詞風格的應用,通過進一步分解思考過程來引發思維鏈。可訪問這裏:https://github.com/bklieger-groq/g1

其想法是要求 LLM 將其思維分解為鏈,並繼續思考,直到對答案有信心為止。

然後,系統將繼續為該鏈的每個部分生成 LLM 調用,而不是將整個思考過程放在一個響應中。

下面這個例子展示了在 Grok-Beta 上應用該技術的示例,問題為「How many R’s are in Strawberry?」

在 Grok 上使用 CoT 鏈來回答 How many R’s are in Strawberry?

在 Grok 上使用 CoT 鏈來回答 How many R’s are in Strawberry?

每個部分都由該模型本身設置,為其賦予標題,並決定是否需要繼續使用另一個「思維」,還是是否已經得出最終答案。

這仍然是一種 CoT 風格的技術,因為它是線性的,但它比簡單地要求模型「一步步思考」稍微高級一些。

我使用了他的部分代碼構建了一個腳本,循環遍曆我測試的一些針對 LLM 的基本問題,以查看使用這樣的系統實際上會帶來多少改進。我改編了 Claude 和 Grok 的腳本,以評估這種策略對它們的影響。下面是提升情況:

對於前三個類別,Llama 3.1 70B 的進步最大。Grok 在熱門問題上表現較差(Haiku 也是如此)。

Putnam 數據集是高等數學,很少有 LLM 能在其上表現出色,所以當 Claude Sonnet 3.5 憑藉這些 CoT 鏈得到了 68.75%,而 o1-preview 只有 63% 時,我深感驚訝。

總的來說,Sonnet 在使用 CoT 後,高等數學成績提高了 81%。

請記住,我在這裏使用了一個非常小的數據集,這隻是為了瞭解它們在哪些方面表現好以及我們是否可以提高分數。需要在更大規模的數據上測試後才能獲得更具體的信息。

不過,我還觀察到,如果較小的模型開始對簡單問題進行過度分析,會產生更糟的結果。Grok-Beta 和 Haiku 在常見的「較簡單」問題上的表現就體現了這一點。

更簡單的非數學問題可能無法從 CoT 獲得同樣的好處。

我們還必須記住,我們可以讓模型在自己的能力範圍內表現更好,但很少能超越它。如果它不知道答案,它就是無法知道。

用於推理的微調

這裏需要提一下微調。AI 領域有一個非常有趣的研究方向:在 CoT 數據集上微調較小的模型,以將其準確度提高到比其大 1-2 倍的大模型的水平。

我已經找到了多個資源,但不幸的是,我們沒能找到相較於基礎模型有顯著改進的案例。下面列出了我找到的開源模型:

下面是開源的 CoT 數據集。

這並不是說微調對 CoT 沒用,只是需要構建更好的模型並進行充分的記錄。

如果你喜歡自己嘗試微調,請查看這些資源。我相信還有更多資源。

其它生成技術

我們討論的是思維鏈技術,但還有其他方法可以在沒有提示的情況下優化語言模型的輸出準確性。

這涉及到我們在調用 LLM 時大多忽略的那些采樣器設置 —— 如 temperature、top_p 和 do_sample 等參數 —— 它們可以在控制輸出行為方面發揮作用。

現在,我們並不總是可以訪問商業 API 的所有這些設置,但我們可以訪問 temperature。從技術術語上講,temperature 的意思是:當我們將其設置為高時,我們可以縮放 logit,從而增加低概率 token 被選中的機會。如下所示:

temperature 如何使 logit 上升和下降?

temperature 如何使 logit 上升和下降?

假設 token「mat」在開始時具有最高的初始 logit,但隨著溫度的升高,我們發現它開始下降,從而降低了概率。對於具有較低數字的初始 logit,情況正好相反。

這是什麼意思?這意味著如果溫度高,模型更有可能選擇一個感覺不太「安全」的詞。

大多數人稱之為隨機性創造力

對於並非所有商業 API 都可以訪問的 top_p,你可以限制或根據你設置的數字擴展 token 池。低分將限制池中具有高概率分數的 token,反之亦然 —— 低分意味著只有高概率 token 才會出現在候選池中。

高 top_p 與高溫度相結合將產生更具創新性和創造性的輸出,因為更多的 token 將成為候選者。

do_sample 參數決定模型是否使用采樣來生成下一個 token。設置為 True 時,模型會從候選池中采樣並具有更大的自由度。設置為 False 時,它僅選擇概率最高的 token(並完全忽略 temperature 或 top_p)。

我們可以使用此設置強製模型產生更確定的輸出,即每個階段概率最高的 token。

這被稱為貪婪解碼(Greedy Decoding)

這是一種策略:模型在每一步都選擇概率最高的 token,這可能會產生更準確的答案(如果它具有所需的固有知識)。

我也確實使用 do_sample 將貪婪解碼應用於模型 Llama 3 8B,以檢驗能否在基礎問題上獲得提升。結果如下:

可以看到,在 MMLU 和 Big-Bench 上有所提升,但在高等數學上進步很小。

現在,商業 API 多半不提供 do_sample,因此要在無法訪問模型的情況下應用類似的東西,你可以將溫度設置為 0 以嘗試模仿這種行為,但這並不能保證。

所以,你現在可能有一個問題:如果我們確實看到了小的改進,為什麼不總是使用貪婪解碼?

如果我們忽略輸出中對創造力的需求,你還會發現能力較差的 LLM 可能會陷入重覆的循環中,例如「The color is blue blue blue blue」,其中「blue」似乎是最高概率的 token,因此會重覆。

高級 CoT

之前談到都是線性技術,即模型在一個線程或鏈中產生輸出。

但在第一篇 CoT 論文發表後不久,DeepMind 就提出了另一種更先進的技術,稱為具有自我一致性的思維鏈(CoT-SC)。

該技術會創建多條推理路徑,並使用某種方法在最後選擇最一致的答案(或路徑)。

CoT-SC 演示

CoT-SC 演示

他們報告說,使用這種方法讓算術推理能力提高了 1-8%。

另一種方法的想法也頗為類似,是使用多條路徑但不使用任何提示。

還記得我在上一節中談到的貪婪解碼嗎?

這種方法類似,只是它不僅要強製選擇最可能的 token,還要查看整個響應的置信度分數。

評估內部置信度分數

評估內部置信度分數

為此,系統首先會啟動一定數量 k 的初始頂部 token,然後從每個 token 生成路徑。生成答案後,它會通過分析不同路徑中每個 token 的概率(logit)來計算置信度分數。

返回的結果是具有最高概率的答案(或路徑)。

這種方法稱為 Decoding CoT,由 DeepMind 提出。這種方法的思想是查看模型對返回答案的內部置信度。

但是如果它沒有回答問題的固有知識會發生什麼?與 CoT-SC 一樣,這種方法在很大程度上取決於模型首先是否具有正確的答案。

不過,這並不意味著我們不應該測試它。

對於所有這些技術,都有人開源了不同的實現,這個也不例外。

因此,我很容易就建立了一個系統來測試這些方法,並比較哪種方法在較小的開源模型 Llama 3 8B 上表現更好。

感謝 Codelion 開源他的實現,讓我可以輕鬆複現:https://github.com/codelion/optillm

從上面的結果可以看到,與其他方法(例如 Entropy)或僅使用貪婪解碼來處理此特定模型相比,使用 Decoding CoT 顯然產生了最佳結果。

更新的技術

現在的研究進展很快,很難完全跟進。這裏不會過多論述,但我確實想提一下 Tree of Thoughts (ToT),特別是與蒙地卡羅搜索的結合時。

ToT 於 2023 年底由普林斯頓大學和 DeepMind 提出,但通常建立在以前的基於樹的推理方法之上。

ToT 不同於具有自我一致性的思維鏈(CoT-SC)。ToT 不會生成多條路徑,而是在生成後才對其進行評估,而是在思維推進過程中對其進行動態評估。

簡單演示 ToT 

簡單演示 ToT 

我們可以將 ToT 想像為 4 個不同的人聚在一起解決問題。每一步,他們都會提出自己的想法,並共同評估哪些想法看起來最有希望。如果一個人的推理似乎有缺陷,他就會離開,其他人會繼續推進他們的解決方案。

最後,推理正確的人將能夠為你提供答案。

這使得模型可以動態修剪看起來乏善可陳的路徑,專注於更有希望的線程,從而節省資源。

但是,有人可能會問,系統如何決定哪個線程是對的,哪個線程是錯的?這是由模型本身決定的。

這也是為什麼像蒙地卡羅樹搜索(MCTS)這樣的擴展可以提供更多無偏見的評估機制。MCTS 允許反向傳播,這意味著它可以根據新信息重新審視和改進早期步驟,而簡單的 ToT 只會向前移動。

在 4 個人解決問題的案例中,MCTS 會允許人們有不太理想的思維,但仍會在遊戲中停留更長時間。這種情況的評估方法會有所不同。

MCTS 可以模擬多種未來路徑,評估其潛力,並回溯以改進早期決策。它引入了外部指標(獎勵),而不是完全依賴模型。

像 UCB(置信上限)這樣的統計數據使用這些獎勵來決定進一步探索或重新審視哪些想法。

MCTS 比簡單的 ToT 稍微複雜一些,值得單獨寫一篇文章。

CoT 的經濟學

所以,到目前為止,你可能會想:好吧,我們已經有一些改進,為什麼不總是使用更高級的思維鏈形式呢?

首先,成本(以及思考時間)。

對於應用於不同模型的鏈,這裏計算的是平均推理步數。

從這個角度來看,你平均要為每個問題支付高達 8 倍的費用。對於在高級數學問題上表現最好的 Sonnet,你每 500 個問題最多要支付 15 美元。

這看起來可能不多,但是一旦你每天使用這個系統為客戶服務或你的團隊生成答案,那每月的消耗可達數百乃至數千。

在某些情況下,使用高級推理方法是有意義的,但並非總是如此。

現在可能存在對 CoT 進行微調的情況,可從根本上消除了多次調用的需要。

這裏有一點需要權衡考慮:我們希望增加思考時間,讓模型有足夠的時間進行有效推理,但這樣做也會增加用戶的失望情緒和成本。

構建智能系統

去年 9 月,一篇題為「To CoT or not to CoT?」的論文發表,該論文認為應用 CoT 帶來的大多數改進主要在數學和複雜推理方面。

我們在這裏也看到了這一點,在簡單的問題上,CoT 帶來的提升有限。

當我們應用這些鏈時,我們必須等待更長時間才能得到答覆。這值得嗎?應該注意的是,對於簡單的任務來說,所有這些策略都可能有點過頭了。

但是,如果你正在構建一個需要確保答案正確的系統,那麼採用某種形式的 CoT 或解碼可能會大有助益。

或許,一種值得考慮的做法是:先用一個模型根據任務難度來設置前面幾步,然後分析它是否有信心一開始就解答這個問題。然後讓模型推理(通過鏈),最後用另一個模型對其響應進行評分。

原文鏈接:https://towardsdatascience.com/advanced-prompt-engineering-chain-of-thought-cot-8d8b090bf699