機率基礎:為什麼 LLM 本質上在預測下一個 token
客戶在會議上問你:「ChatGPT 到底怎麼運作的?」你想了三秒,發現自己只能說「它很厲害」。 其實一句話就能講完——它在算「下一個 token 出現的機率」,然後從那個機率分布裡抽一個出來。 理解這句話,你就能解釋 GPT 為什麼會幻覺、為什麼同個 prompt 兩次回答不一樣、為什麼 RAG 不一定救得了。
核心公式
LLM 的本體 = P(下一個 token | 前文)
「給定目前的句子,每個可能的下一個字,各自的出現機率是多少?」
三種你只需要分清楚的機率
| 名稱 | 寫法 | 白話 |
|---|---|---|
| 聯合機率 | P(A, B) | A 跟 B 同時發生的機率 |
| 條件機率 | P(A | B) | 已知 B 發生的前提下,A 的機率 |
| 邊際機率 | P(A) | 不管 B 是什麼,A 的機率 |
LLM 用的是條件機率。給「我今天去」,模型輸出整個詞表(5 萬個 token)每個的機率, 「上班」可能是 0.18、「買菜」0.05、「健身房」0.03、「火星」0.0001。然後從這個分布抽一個。
從機率到文字:sample 怎麼運作
模型最後一層吐出的是分數(logits),不是機率。softmax 把這串分數強制壓進 0~1、加總為 1,變成合法的機率分布。 接下來怎麼從這個分布抽一個 token,就是 temperature 跟 top-p 的工作。
Temperature:控制「想多瘋」
溫度其實是 softmax 之前對 logits 的縮放:除以 T。T 越高,分數差距被壓平、低機率字也有機會;T 越低,最大值更突出、變得保守。
| Temperature | 分布特徵 | 使用場景 |
|---|---|---|
| 0 | 退化成 argmax,永遠選最高機率 | 程式碼、SQL、JSON |
| 0.3 | 聚焦在前幾名 | 客服、文件問答 |
| 0.7 | 預設值,平衡 | 一般對話、寫作 |
| 1.0 | 原始分布不動 | brainstorming |
| 1.5+ | 分布更平、會出現意外字 | 創意寫作、實驗 |
Top-p(nucleus sampling)
top-p = 0.9 表示「按機率由高到低累加,加到 90% 為止,這群字才會被抽」。 這比固定 top-k 靈活:在「明顯有正確答案」的位置自動收斂、在「開放式創作」的位置自動展開。 Temperature 調分布形狀,top-p 調候選集大小,兩者通常一起用。
商務情境:這些直覺解釋了什麼
- 同個 prompt 兩次答案不同:因為 T > 0 時是隨機 sample,不是查表
- 幻覺不是 bug:模型只負責「機率上合理」,不負責「事實正確」。當訓練資料缺、又被迫產出時,最像的字就會被選
- RAG 不是萬能:把資料塞進 context 提高相關 token 的機率,但低機率仍 > 0,溫度 > 0 還是會出錯
- 結構化輸出要 T = 0:JSON、function call、SQL 任何位置抽錯都壞掉
- 「再生成一次」就會變:所以 A/B 比較模型品質要跑多次取平均
常見誤解
- 「機率高 = 正確」:機率高只代表「在訓練資料裡很常出現」,跟事實對錯無關
- 「T = 0 就不會幻覺」:T = 0 只是穩定,每次答都一樣,但仍可能穩定地答錯
- 「Softmax 是機率」:Softmax 是把任何實數強制變成機率分布的函數,分數本身可以是任何數
- 「LLM 在思考」:它在算 P(next | context)。Chain-of-thought 是把「思考過程」也變成被 sample 的 token,不是真的在內部推理
練習
給定前文「2 + 2 =」,模型大概率輸出「4」(>0.99)。 給定前文「我覺得這部電影」,輸出分布會很平——「很」「真的」「滿」「不」「超」可能各 0.05~0.15。 當你下次看到 LLM 「亂講」,記得:它沒亂,它只是從一個你不知道的機率分布裡抽了一個 token。