JOVANA
Explore Library Glossary Getting Started Three Levels Fields How it works Mission
Join the mission
All guides

把思路說出來:思維鏈與自我一致性

讓模型一步步推理以得到更好的推論,再用多次取樣讓結果更可靠。

為什麼模型會在「簡單的」多步驟問題上失手

要求模型直接給出一道多步驟應用題的最終答案,它可能會滿懷自信地脫口說出一個錯的數字。原因要追溯到 next-token prediction:當你要求它立刻給答案,模型就得把好幾個推理步驟壓縮成一次跳躍。它生成的每個詞元同時也是一個「思考」的位置,而一個只有單一詞元的答案,等於沒留任何工作空間給它。

P(x_{1:T}) = \prod_{t=1}^{T} P(x_t \mid x_{<t})

下一个词元预测将整个回答从左到右分解,每个词元(包括最终答案)的好坏都取决于它之前的上下文。

解法簡單得令人愉快:讓它在答案之前先把步驟寫出來。

思維鏈:請它把步驟寫出來

思維鏈提示(chain-of-thought,CoT)要求模型在決定答案之前先一步步推理。這些中間步驟會成為額外的脈絡,讓最終答案得以建立其上。你常常只要加一句「讓我們一步步思考」就能觸發它——光是這個小小的推動,就能提升算術與邏輯任務的準確率。

自回归生成把每个生成的词元作为上下文反馈回去——因此写出的推理步骤就成了最终答案所依据的上下文。

自回归下一词元生成循环示意图,将输出反馈为输入。

Q: A shop sells pens at 3 for $5. How much for 12 pens?
Let's think step by step.
A:
零樣本思維鏈:光是「一步步思考」這一行,就能在答案前引出可見的推理。

你也可以用範例來教推理的風格——一個少樣本思維鏈提示,每個示範都展示完整的計算步驟,而不只是答案。這是把情境學習套用到推理上:模型模仿的是你的範例「怎麼想」,而不只是它們「得出什麼結論」。

拆解問題:由少至多提示

對於大到一條思維鏈裝不下的問題,由少至多提示(least-to-most prompting)會先請模型把問題拆成幾個較簡單的子問題,再依序求解,並把每個解好的片段餵進下一步。一般思維鏈是「推理穿過一個問題」,由少至多則是「把一個難題分解成一道由易到難的階梯」。

  1. 第一階段:提示模型列出回答主問題所需的子問題。
  2. 第二階段:先單獨解出第一個子問題。
  3. 第三階段:把該答案附上,再解下一個子問題,如此重複直到抵達最後一個。

由於每個階段都保持精簡、根基扎實,這種做法能延伸到「單一長思維鏈會跟丟」的問題——也是你第一次嚐到「組合」提示、而非只寫一個提示的滋味。

自我一致性:在多次嘗試之間投票

單一條思維鏈可能在早期就轉錯彎,然後一路滑向錯誤答案。自我一致性(self-consistency)就是對此的避險:用一點隨機性把同一個思維鏈提示跑好幾次,得到幾條獨立的推理路徑,再採用多數一致的那個答案。

隨機性來自取樣——你把溫度(temperature)調高,好讓各路徑彼此不同、而非重複。不同路線卻匯聚到同一個答案,是「它正確」的有力證據;如果它們散開了,你就知道模型其實沒把握。代價是實打實的:每個問題你都要付好幾次生成的費用,所以把它留給高價值的答案。

p_i = \frac{\exp(z_i / T)}{\sum_j \exp(z_j / T)}

提高采样温度 T 会使下一词元分布变平坦,因此多次运行会探索不同的推理路径以供投票。

把推理提示組合起來

這三者很自然地疊加在一起。用思維鏈讓模型展示推算過程、用由少至多去分解一條思維鏈裝不下的問題、用自我一致性投票剔除運氣不好的單次結果。每一招都是用額外的詞元和時間去換可靠度,所以把它們用在「正確性值得這個代價」的地方。