候選分數怎麼變成機率?
前一章看到:模型 (Model) 經過多層計算,最後替下一個 token 的候選打分數。但回答前還要把分數換成機率 (Probability)。得到 2 分,怎麼知道它有多少機率?
沿用「歡迎各_」,假設「位」得到 2 分,「自」得到 1 分。這種還沒轉換的候選分數 (Logits),還不是機率。
2 分不是 2%,也不能直接說是兩個分數相加後的 2/3。 分數可能是負數,總和也不必是 100;機率則不能是負數,整組候選加起來要是 100%。中間還需要一個轉換。
先看結果:分數沒變,機率會變嗎?
起始的「位」是 2 分,「自」是 1 分。用接下來要說的轉換方法,得到「位」73.1%、「自」26.9%。
現在只把「自」改成 3 分,「位」仍是 2 分。先猜:「位」的機率會跟著變嗎?
| 候選 | 起始分數 → 調整後 | 起始機率 → 調整後 |
|---|---|---|
| 位 | 2 → 2 | 73.1% → 26.9% |
| 自 | 1 → 3 | 26.9% → 73.1% |
「位」的分數完全沒改,機率卻下降了。因為機率是把整組候選放在一起比較後,各自分到的比例,不是某個分數單獨對應一個固定百分比。
這個轉換做了哪兩件事?
先回到起始的 2 分、1 分。
第一步:各自把分數轉成正數。 使用一條固定的轉換曲線:分數越高,轉出的數值越大;即使分數是負的,轉出來也仍是正數。例如 2 分轉成約 7.389,1 分轉成約 2.718。
第二步:各自除以這組正數的總和。 7.389 加 2.718 約是 10.107;「位」占這個總量的 73.1%,「自」占 26.9%。
這套「先轉成正數,再算占比」的方法叫 Softmax。本章先理解它的工作;轉換曲線的算式可以在練習裡選讀。
現在就能解釋剛才的變化:「自」的分數提高,轉出的正數變大,兩個候選共同使用的總量也變大了。「位」分到的那份沒有變大,除以更大的總量,占比就變小。
固定「位」2 分,只調「自」。先試 2 分,看看同分是否各占一半;再試 −1 分,看負分能不能轉成機率。起始對照會一直保留,計算過程可選擇展開。
用兩個反例檢查這個想法
- 「位/自」都是 2 分時,各占 50%。2 分可以對應 73.1%、50% 或 26.9%,要看另一個候選的分數。
- 「自」是 −1 分時,機率約 4.7%,仍不是負數。分數可以為負,轉換後的機率不會因此為負。
此處的數字顯示到小數一位;計算使用完整精度。
轉成機率,還沒有選出文字
到這裡只得到「下一個 token 各有多少機率」。接下來還要依選擇規則,才會取出一個 token 接到回答裡。 選最高者或依機率抽取的差別,回看〈我傳一句話給 AI,到底發生了什麼?〉。
機率高只代表這次計算給它較大的份額,不是它有多少機率說出真實資訊。把分數轉成機率,也沒有調整模型已學到的內部數值,不是訓練 (Training)。
前面的注意力 (Attention) 也用過把一組數值轉成比例的做法,但兩處在比較不同對象:注意力比較輸入位置,決定各帶入多少資訊;這裡比較候選 token,決定下一個 token 的機率。 別把前文混合份量當成下一個字的機率。
下一章〈上下文視窗為什麼有上限?〉,再看一次提供更多內容,為什麼會增加處理成本。
參考:PyTorch 2.14:Softmax 的定義、Hugging Face:候選分數與注意力權重(2026-10-07 查核)。本章限於一般下一個 token 分數的 Softmax 轉換,不展開選擇規則的額外調整。