圖解學習指南:LLM 的統計學

LLM 圖解學習指南 統計篇

LLM 的統計學

了解大型語言模型所需的機率與統計概念

謝舒凱 編審*

石虎在溪邊… 模型 喝休散覓游唱 P(下一個詞元) 抽樣 喝水

大型語言模型從統計的角度看,本質上是一台機率機器(自迴歸):讀入一段文字,算出「下一個詞元」的機率分布,再從中抽出一個。本篇分四章介紹背後的統計概念 - 機率、分布與抽樣、從資料學習、評估與不確定性。

閱讀說明

資料、先驗、觀察到的事實
模型內部:參數、估計、抽樣結果
輸出:機率、損失、需要注意之處
概念
定義與基本量
方法
演算法、估計與計算程序
動手試試
可以拖曳滑桿、按按鈕操作的動態圖
LLM 視角
這個概念在大型語言模型中的角色

* 本指南草稿由 Claude 協助撰寫。

圖解學習指南目錄

目錄

圖解學習指南機率
第 1 章

機率

Probability

語言模型說的每一句話,背後都是一張機率表。本章建立描述這張表所需的概念。

1.1隨機變數與機率分布

模型的每一次輸出,都是一個機率分布。

隨機變數(random variable):結果事先不確定的量。例如「下一個詞元」,可能是「喝水」,也可能是「休息」。

機率分布(probability distribution):列出每個可能結果及其機率。每個機率都不小於 0,而且全部加起來等於 1:

類別分布(categorical distribution):結果是有限個類別之一的分布。詞彙表有 個詞元,下一個詞元就服從一個有 個類別的類別分布。

52%
23%
12%
9%
3%
1%
喝水
休息
散步
覓食
游泳
唱歌
「石虎在溪邊__」的下一個詞元分布(示意用,只列出六個候選)

1.2條件機率與連鎖律

把一整句話的機率,拆成一連串「接下來會是什麼」。

條件機率(conditional probability):已知 發生時, 發生的機率:

連鎖律(chain rule):任何聯合機率都能拆成條件機率的乘積。套用在一串詞元上:

動手試試

一步一步算出「石虎在溪邊喝水。」的機率:

這一步的條件機率機率累積乘積累積 log
P( {{ r.tok }} | {{ r.ctx }} ) {{ r.p }} {{ r.cum }} {{ r.lg }}
第 {{ step }} / 5 步

附註:許多小於 1 的數相乘,會迅速逼近 0,電腦容易「溢位」(overflost),就是說當產生的資料或數值大小超過了記憶體、暫存器所能容納的極限。實務上改為加總對數機率 — 乘積的對數等於對數的和,表中藍色那一欄就是這樣算的。

1
圖解學習指南機率

1.3期望值與變異數

用兩個數字概括一個分布:中心在哪裡、散得多開。

期望值(expected value):以機率為權重的平均,記為 :

變異數(variance):偏離期望值的平方的期望;它的平方根 稱為標準差:

樣本平均(sample mean):從分布抽出 個樣本取平均,用來估計期望值。樣本越多越準,誤差隨 縮小:

Python
import numpy as np
rng = np.random.default_rng(0)
x = rng.normal(loc=3.0, scale=2.0, size=10_000)
x.mean(), x.var()        # 約 (3.0, 4.0):樣本估計逼近真值

1.4貝氏定理

看到資料之後,如何更新原本的看法。

先想一個問題:「失望」這個詞常出現在負面評論裡;反過來,一則評論出現「失望」,它有多大機會是負面的?前者是 ,後者是 ——兩者並不相同。貝氏定理就是把條件的方向翻過來。

用 1000 則評論來想。假設過去的評論有 60% 是正面;「失望」出現在 2% 的正面評論、15% 的負面評論裡:

1000 則評論 先驗 60% 先驗 40% 正面 600 負面 400 98% 概似 2% 概似 15% 85% 沒有「失望」588 有「失望」12 有「失望」60 沒有「失望」340 看到「失望」後,只剩黃框裡的 12 + 60 = 72 則 其中正面的比例 = 12 ÷ 72 ≈ 17%(後驗)

重點在於:看到證據之後,只看符合證據的那些情況,再算各類別所占的比例。一個詞,就把判斷從「60% 正面」翻成「約 83% 負面」。

貝氏定理(Bayes' theorem):把上面的算法寫成公式。 是假設(例如「正面」), 是證據(例如「出現失望」):

名稱意思本例樹狀圖
先驗看證據之前的看法600 / 1000
概似假設成立時,看到證據的機率12 / 600
證據的總機率不分類別,看到證據的機率72 / 1000
後驗看完證據之後的看法12 / 72

代入數字:分子是「正面且有失望」這條路徑,分母把所有「有失望」的路徑加總:

分母對每個類別都一樣,所以比較類別時常省略它,寫成 ,最後再把結果正規化成加總為 1。下面的動手試試就是這樣算的。

附註:最常見的錯誤是把兩個方向混為一談。 只有 15%, 卻約 83%;兩者可以差很遠。

動手試試

點選評論中出現的詞,看後驗怎麼一步步更新:

類別先驗× 概似= 未正規化後驗
{{ r.name }} {{ r.prior }} {{ r.lik }} {{ r.joint }} {{ r.post }}
正面
負面

{{ bayesVerdict }}

附註:這裡假設每個詞在給定類別下彼此獨立,所以概似可以直接相乘,這種分類器稱為「單純貝氏」(naive Bayes),是最早的文本分類方法之一。它忽略了「不」「但是」這類改變語意的結構,後來的神經網路與 LLM 才處理得了。

推廣到連續參數。如果要估計的是連續的數值 (例如一個權重),先驗與概似都變成曲線,後驗就是兩條曲線相乘、再正規化後的形狀:

先驗 概似(資料) 後驗 0 2 θ
先驗認為 θ 在 0 附近,資料指向 2;後驗落在兩者之間,而且比兩者都窄——結合兩方資訊,更有把握。
2
圖解學習指南分布與抽樣
第 2 章

分布與抽樣

Distributions and Sampling

本章認識兩個最重要的分布——常態分布與 softmax 產生的類別分布——以及如何從分布中抽出詞元。

2.1常態分布

自然界與神經網路裡最常見的鐘形曲線。

常態分布(normal distribution):由平均 決定位置、標準差 決定寬度。約 68% 的值落在 ,約 95% 落在 。

動手試試 −4−3−2−101234 68%
平均 {{ muTxt }} 標準差 {{ sigmaTxt }}

藍色區域是 =[{{ bandLo }}, {{ bandHi }}],約占 68%。灰色虛線是標準常態 。

標準化(standardization):減去平均、除以標準差,把任何資料轉成平均 0、標準差 1——也就是把藍色曲線移回灰色虛線:

3
圖解學習指南分布與抽樣

2.2Softmax 與溫度

把任意實數分數,變成一個機率分布。

分數(logits):模型最後一層替每個詞元打的實數分數,可正可負,總和也不是 1。

Softmax:先取指數讓每個值變正,再除以總和讓它們加起來等於 1。溫度 控制分布的尖銳程度:

  • :差距被放大,分布變尖,輸出更保守。
  • :差距被縮小,分布變平,輸出更多樣。
  • :等同永遠選分數最高的那一個。
動手試試

「石虎在溪邊__」的六個候選。拖動溫度,看分數相同、分布卻如何改變:

{{ b.pct }}
{{ b.tok }} z={{ b.z }}
溫度 {{ tempTxt }}
熵 = {{ tempH }} nats 等效選項數 ≈ {{ tempEff }} (熵的定義見 3.2)
Python
def softmax(z, T=1.0):
    e = np.exp((z - z.max()) / T)   # 先減去最大值,避免指數溢位
    return e / e.sum()

z = np.array([2.4, 1.6, 0.9, 0.6, -0.3, -1.5])
softmax(z).round(2)     # [0.52 0.23 0.12 0.09 0.03 0.01]
4
圖解學習指南分布與抽樣

2.3抽樣策略

有了分布,還得決定怎麼從中挑出一個詞元。

貪婪解碼(greedy decoding):每一步都選機率最高者。結果固定,但容易重複、單調。

Top-k 抽樣:只保留機率最高的 個詞元,重新正規化後再抽。

Top-p 抽樣(nucleus sampling):由高到低累加機率,保留累計剛好達到 的最小集合。分布越尖,留下的詞元越少。

動手試試
{{ b.tok }} {{ b.thPct }} {{ b.empPct }}
理論機率(重新正規化後) 實際抽中的頻率
已抽 {{ total }} 次 最近一次:{{ last }}

大數法則(law of large numbers):抽樣次數越多,觀察到的頻率越接近真實機率。上圖只抽 10 次時,藍條跳來跳去;抽到 500 次,便幾乎貼齊紅條。

5
圖解學習指南從資料學習
第 3 章

從資料學習

Learning from Data

「訓練模型」在統計上就是「估計參數」。本章說明目標是什麼、用什麼衡量、怎麼一步步逼近。

3.1最大概似估計

選一組參數,讓已經看到的資料「最不意外」。

概似函數(likelihood):把資料固定、參數當變數的機率:

最大概似估計(maximum likelihood estimation,MLE):找出讓 最大的參數。取對數、加負號後,等價於最小化「負對數概似」:

例:語料中「溪邊」後面出現了 10 次,其中 7 次是「喝水」。令 ,則 。

動手試試 7/10 = 0.7 0 0.5 1 θ L(θ)
猜測 {{ thetaTxt }}
= {{ mleL }} = {{ mleNLL }} {{ mleHint }}
6
圖解學習指南從資料學習

3.2熵、交叉熵與 KL 散度

用「意外程度」衡量預測的好壞。

資訊量(surprisal):機率為 的事件發生時的意外程度 。必然發生的事毫不意外,罕見的事非常意外。

熵(entropy):分布本身的平均意外程度,也就是它有多不確定。

交叉熵(cross-entropy):真實分布是 ,卻用模型 去預測時的平均意外程度。

KL 散度(Kullback–Leibler divergence):用 代替 所多付的意外程度,衡量兩個分布差多遠;只有 時為 0。

熵
交叉熵
KL 散度

訓練時,「真實分布」就是實際出現的那個詞元(機率 1),其餘為 0。交叉熵於是簡化成 :模型給正確答案的機率越高,損失越小。

動手試試 0 0.5 1 損失 −log q q(給正確詞元的機率)
模型給「喝水」的機率 {{ qTxt }}
損失 = {{ ceLoss }} 困惑度 = {{ cePPL }}

困惑度(perplexity,PPL):把一整段文字的平均損失,換算成「模型每一步平均在幾個選項之間猶豫」。越低越好。

先從直覺開始。擲一顆公正的骰子,每一面的機率都是 1/6,猜中的機率是 1/6,好比在 6 個選項中盲猜,困惑度就是 6。只要模型每一步都把機率平均分給 個詞元,困惑度就是 :

模型的狀態給正確詞元的機率困惑度
完全確定,而且都對11
在 4 個詞之間猶豫1/44
詞彙表 5 萬個詞,隨便亂猜1/5000050000

實際算一次。模型讀「石虎在溪邊喝水」,每一步給正確詞元的機率各不相同。把每一步的損失 算出來、取平均,再取指數還原:

步驟要預測的詞元(正確詞元)損失
1在0.5000.69
2溪邊0.1252.08
3喝水0.2501.39
平均損失1.39

三步裡模型有時很有把握(1/2),有時不太確定(1/8),平均下來,像是每一步都在 4 個詞之間猶豫。寫成一般式,就是「平均損失的指數」:

附註:為什麼要取指數?損失的單位是 nats,不好想像;取指數後換回「幾個選項」,就能直接比較。例如困惑度從 20 降到 10,代表模型每一步的猶豫範圍大約縮小了一半。不過,不同詞元化方式的模型,困惑度不能直接比較,因為「一步」的長短不一樣。

7
圖解學習指南從資料學習

3.3梯度下降與隨機性

沿著損失下降最快的方向,一小步一小步往下走。

梯度下降(gradient descent):梯度 指向損失上升最快的方向,往反方向走一步;步長由學習率 決定:

隨機梯度下降(stochastic gradient descent,SGD):每一步只用一小批資料估計梯度——這正是 1.3 的樣本平均。估計帶有雜訊,但計算便宜得多。

動手試試 全域極小 局部極小 ℒ(θ)
學習率 {{ lrTxt }}
第 {{ gdN }} 步={{ gdTheta }}={{ gdLoss }}

附註:不開雜訊時,小球從右邊出發會卡在局部極小。打開雜訊多跑幾次,它偶爾會被「推」過山頭,落進更深的谷底。學習率太小走得慢,太大則會來回震盪。

8
圖解學習指南評估與不確定性
第 4 章

評估與不確定性

Evaluation and Uncertainty

模型訓練好了,要怎麼知道它真的好?本章談泛化、分數的誤差範圍,以及模型的信心可不可信。

4.1過擬合與偏差–變異

背得滾瓜爛熟,不代表真的學會。

泛化(generalization):在沒看過的資料上依然表現良好。因此資料要切成訓練集、驗證集與測試集。

過擬合(overfitting):訓練損失持續下降,驗證損失卻開始上升——模型開始記住訓練資料裡的偶然雜訊。

還在學 過擬合 提早停止 訓練損失 驗證損失 訓練時間 → 損失

偏差與變異(bias and variance):偏差是模型太簡單、抓不到規律的系統性誤差;變異是模型對訓練資料的偶然細節過度敏感。預測誤差可以拆成三份:

9
圖解學習指南評估與不確定性

4.2抽樣誤差與信賴區間

準確率 75% 比 72% 好——真的嗎?

標準誤(standard error):基準測驗的 道題,可以看成從「所有可能的題目」中抽出的樣本。換一批題目,分數就會變動;準確率 的標準誤是:

95% 信賴區間(confidence interval):用同樣方法重複很多次,約 95% 的區間會包含真實準確率:

動手試試

模型 A 答對 72%,模型 B 答對 75%。改變題目數,看差距是否超出抽樣誤差:

A B 60% 70% 80% 90%
題目數 {{ nTxt }}
A:{{ ciA.txt }} B:{{ ciB.txt }}

{{ verdict }}

附註:「區間是否重疊」只是保守的粗略判斷。嚴謹的做法是直接對兩者的差做檢定;兩個模型答的是同一組題目時,應使用配對檢定,通常能分辨更小的差距。

10
圖解學習指南評估與不確定性

4.3校準

模型說「我有八成把握」時,它真的對了八成嗎?

校準(calibration):把所有信心約為 的預測放在一起,若其中恰好有比例 答對,模型就是校準良好的。把各組畫成圖,校準良好的模型會貼著對角線。

完美校準 過度 自信 0 0.5 1 模型的信心 0 1 實際正確率
可靠度圖:藍條是各組的實際正確率,紅色虛框是信心超出實際的部分。

期望校準誤差(expected calibration error,ECE):各組「正確率與信心的差距」的加權平均,組 有 筆預測:

11
圖解學習指南速查表

速查表

每個統計概念,在 LLM 的生命週期中出現在哪裡。

概念階段在 LLM 中的角色節
{{ r.c }} {{ r.s }} {{ r.r }} {{ r.n }}
訓練 生成 評估

總結:LLM 用 softmax 產生類別分布(第 2 章),以最大概似/交叉熵從資料學習(第 3 章),用連鎖律一次生成一個詞元(第 1 章),而它的分數與信心,都需要以抽樣誤差和校準的眼光來解讀(第 4 章)。