L5.0 要怎麼替「這個模型有多符合資料」打一個分數?
沒有真實分布,怎麼比較機率模型?
前面五個 class 都在做同一件事:給一個 ,猜一個 ,然後用某個損失檢查那個猜測有多準。台北的房仲去台中:風險與經驗風險 把「準」定義成風險,老師用考古題教學又出題:為什麼要切資料 說明那個數字要在哪份資料上讀,同一個實驗跑三次結果都不同,該報哪一個? 說明它自己也會抖。
現在換一個目標。想像要預測明天會收到哪一類訂單,我們不只報出最可能的類別,還想給每一類一個機率。模型給出的就是一個分布 。
這個換法會立刻遇到一個問題。猜 的時候,「猜得準不準」有現成的意思: 就在那裡,比一下就知道。但一個分布要怎麼跟資料比?資料只是一堆點,它沒有附上一條密度曲線讓你對照。
一個模型說「這件事的機率是 」,另一個說 ,
而這件事發生了——後者一定比較好嗎?
如果有一個模型說機率是 ,它該被扣多少分?
課堂提問Q1
先用模型給這整份資料的 likelihood 比較模型。如果還希望把乘積轉成可加、且不改變大小排序的分數,取對數為什麼是自然的做法?
先想一想,再展開看整理後的答案
從可加性開始。 如果 獨立,模型給這整份資料的機率是乘積:
這個量叫似然(likelihood)。它已經是一個合理的分數了——模型給實際發生的事越高的機率,這個乘積越大。但它有兩個毛病。
第一個毛病是數值。 一千筆資料、每筆機率 ,乘起來是 ,浮點數直接變成 。任何比較都做不下去。
第二個毛病是形狀。 我們想要的是可加的分數,這樣它才能跟 台北的房仲去台中:風險與經驗風險 的經驗風險長得一樣、才能用 民調只問一千人:小批次與噪聲 的小批次無偏估計、才能丟給 霧中下山,一步該走多大:梯度下降的一頁。
兩個毛病同一個解法:取對數。乘積變加總, 變成 :
更具體地說,如果對 likelihood 的連續轉換 要滿足 ,它就是 ;要保持大小排序,再取 。這是對「likelihood 如何轉換」的限制,不代表所有逐筆相加的評分方式都只能是 log loss。
最後加一個負號與除以 ,把它變成一個要最小化的、和樣本數無關的量——平均負對數似然(average negative log-likelihood,NLL):
回到 Ask 的第三問。 對離散事件,模型若給觀測到的類別零機率,那一項就是 。Log loss 對這種「把會發生的事判成不可能」的預測給出無限懲罰。
補充連續情況代入的是 density,不是某一點的機率
若 連續, 並不代表模型出錯;likelihood 代入的是 density 。它描述附近小區間的機率約為 ,可以大於 ,所以連續資料的 NLL 也可以是負的。比較時要使用相同的變數與單位。
那個數字其實是兩個數字
平均 NLL 有一個分解,而那個分解把「模型好不好」拆成兩件可以分開讀的事。
先看離散資料。把資料寫成經驗分布 ,也就是各類別出現的比例。加上再減掉 ,得到
左邊是你能算的、會拿去最小化的數字。右邊拆成兩項:
- 完全不含 。 它是資料本身的不確定性,你動不了它。
- 是唯一可以動的部分,而它 ,等號只在 時成立(用錯的機率表下注一年會多輸多少:KL Divergence 與 Cross-Entropy)。
實測。六個符號、真實機率 ,抽 筆之後算三個數字:
n= 30 MLE 的平均 NLL 1.4752 = 經驗分布的熵 1.4752
均勻模型的平均 NLL 1.7918 = 熵 1.4752 + KL(經驗‖均勻) 0.3165 = 1.7918
n= 300 MLE 的平均 NLL 1.6942 = 經驗分布的熵 1.6942
均勻模型的平均 NLL 1.7918 = 熵 1.6942 + KL(經驗‖均勻) 0.0975 = 1.7918
n=3000 MLE 的平均 NLL 1.6782 = 經驗分布的熵 1.6782
均勻模型的平均 NLL 1.7918 = 熵 1.6782 + KL(經驗‖均勻) 0.1136 = 1.7918
MLE 那一列的 KL 恰好是零。 因為六個符號的模型族包含所有分布,所以「模型族裡 KL 最近的成員」就是經驗分布本身,NLL 就等於經驗熵,一位小數都不差。
均勻模型的 NLL 永遠是 ,和 完全無關。 它不看資料,所以資料再多也不會變。
這三次抽樣的經驗熵逐漸接近真實熵 ,但單次抽樣的數值不必隨 單調上升。有限樣本的 plug-in entropy 在期望下偏低:它把機率估計的波動也算成了資料的集中程度。
最大似然不是在找「對的分布」,而是在模型族裡找一個離經驗分布 KL 最近的成員。
這句話在上面的離散模型中成立,也提醒我們兩個限制:模型族能表達什麼,以及這批資料能代表真實分布到什麼程度。兩者分別對應模型限制與抽樣誤差,但不等於直接完成了一個 bias–variance decomposition。
補充連續資料要分清 population 與 empirical objective
對有共同基準測度、且各項有限的真實 density ,仍有
樣本平均 NLL 是左邊的估計。但連續資料的 empirical distribution 是點質量,而 通常有連續 density;兩者之間的 KL 是無限大。因此不能把有限的 sample NLL 直接寫成「連續 empirical entropy 加 empirical KL」。
圖說: 均勻模型的 NLL 總高固定;MLE 把 KL 壓成零,也會完整吸收有限樣本造成的經驗熵誤差。
Gaussian 假設就是最小平方
差一度與差十度:損失函數是一種宣告 說過:選一個損失就是在宣告你在乎什麼。那一篇把這句話停在直覺的層次。似然把它講完整了——那個宣告有一個具體的身分:你假設噪聲長什麼樣。
回到監督式的設定。假設
那麼 ,把負對數似然寫開(兩台體重計:Gaussian 的線性組合):
若 固定,第二項不含 ,所以最小化這個 NLL 和最小化平方誤差是同一件事。這給 MSE 一個 likelihood 解釋,但不是使用 MSE 的必要前提:只要二次動差有限,即使噪聲不是 Gaussian,L2 的理想最佳解仍是 conditional mean。
換一個噪聲假設就換一個損失。拉普拉斯分布 給出
也就是最小絕對值誤差。而最小平方的解是平均數、最小絕對值的解是中位數——兩個大家都知道、看起來只是「不同的統計量」的東西,在這裡變成同一個框架下的兩個不同宣告。
實測。這次要估的是未受污染那群資料的中心 ;觀測資料則是 的 加上 位於 的離群點。取 ,重複 2000 次:
95% N(0,1) + 5% 離群點 :
Gaussian 假設 → 最小平方 → 平均數 : 估計 +0.9965 ± 0.3165 均方誤差 1.0932
拉普拉斯假設 → 最小絕對值 → 中位數 : 估計 +0.0661 ± 0.0965 均方誤差 0.0137
純 N(0,1),沒有離群點 :
平均數 均方誤差 0.005007
中位數 均方誤差 0.007799 (比值 1.5578,理論 π/2 = 1.5708)
上半的平均數接近 ,因為污染後的分布平均就是 。它沒有算錯,而是在估另一個量。若目標是原來那群人的中心 ,中位數受少數離群點的影響較小。
下半是「假設對了」的回報:沒有離群點時,反而是最小平方比較好,比值 幾乎正中理論值 。那 的額外均方誤差是你為了防範離群點而付的保險費。
選 loss 時,要先決定想估哪個量;likelihood 則讓我們看見這個選擇對應的機率模型。
補充這也解釋了為什麼分類用交叉熵而不是 MSE
分類的輸出是一個類別分布。把「模型給正確類別的機率」取負對數,就是大家熟知的交叉熵損失——它就是本篇的平均 NLL,只是換了一個名字。
MSE 配 one-hot 也可以用:對機率向量而言,它就是 Brier score,理想最佳解同樣是真實類別機率,不必把標籤解讀成 Gaussian。差別之一在最佳化:softmax 配交叉熵對 logit 的梯度是 ;配 MSE 則多乘 softmax Jacobian。模型信心很高卻答錯時,後者的梯度可能很小,前者仍保留明顯的修正訊號。
展開細節softmax + 交叉熵對 logit 的梯度
設 logit 為 ,,標籤是類別 。損失 。
也就是 ( 是 one-hot)。這個式子沒有任何會飽和的因子:預測錯得越多,梯度越大。生產線出了瑕疵,怎麼知道是哪一站的責任? 提到的「把 softmax 和交叉熵合成一個節點」指的就是直接實作這一行,而不是分兩層各自微分——後者在數值上會經過 和除法,容易溢位。
沒看過,不代表不會發生
想像只問過五位顧客,沒有人選某一道餐點。我們能因此說,下一位顧客也絕對不會選嗎?把觀測比例直接當成機率,就可能遇到這個問題。
第一個實驗:一枚真實機率 的硬幣。 MLE 就是樣本比例。丟 次,重複很多次:
n= 5 MLE 說「這枚硬幣永遠不會出正面」的比例 16.61% MLE 的標準差 0.2043
n= 10 MLE 說「這枚硬幣永遠不會出正面」的比例 2.79% MLE 的標準差 0.1445
n= 50 MLE 說「這枚硬幣永遠不會出正面」的比例 0.00% MLE 的標準差 0.0652
n= 500 MLE 說「這枚硬幣永遠不會出正面」的比例 0.00% MLE 的標準差 0.0205
五次都沒有正面的機率是 ;表中的 是模擬比例。這時 MLE 給出 ,下一次若看到正面,log loss 就是無限大。
這不是 MLE 沒算好。 確實是那五次資料的最大似然解——如果五次都是反面,「正面機率為零」給那份資料的似然是 ,任何其他值都更低。問題在於「最符合手上的資料」和「最接近真相」是兩件不同的事,而這正是 背考古題的學生:過擬合與欠擬合 的主題換一個場景出現。
第二個實驗:模型離真相有多遠。 同一枚硬幣,量 的中位數:
n= 10 KL 中位數 0.08015
n= 100 KL 中位數 0.00732
n= 1000 KL 中位數 0.00070
n=10000 KL 中位數 0.00007
表中量的是 KL 的中位數。在內部真值 附近,,而
因此典型 KL 的尺度是 。但這不是期望 KL 的結論:任何有限 都有正機率抽到全反面或全正面,令這個 KL 無限大,所以未平滑 MLE 的期望 KL 仍是無限大。
第三個實驗:系統性的偏誤。 估計 的變異數,MLE 是 :
n= 3 E[σ²_MLE] = 0.6646 理論 (n-1)/n = 0.6667
n= 5 E[σ²_MLE] = 0.8014 理論 (n-1)/n = 0.8000
n= 10 E[σ²_MLE] = 0.9042 理論 (n-1)/n = 0.9000
n=100 E[σ²_MLE] = 0.9915 理論 (n-1)/n = 0.9900
當均值也由資料估計時,MLE 會系統性低估變異數。用
取期望,右邊是 ,因此 。少掉的部分來自先用資料估計均值;這和拿 validation 反覆選模型並不是同一個程序。
注意偏誤與抖動是兩件事,而且縮得不一樣快
把上面三個實驗的縮放整理成一張表,會看到三個不同的速度:
| 量 | 速度 | ||
|---|---|---|---|
| MLE 的標準差 | |||
| 變異數估計的偏誤 | |||
| 的中位數 | 典型尺度 |
在這些固定維度、正則的例子裡,偏誤可比標準差縮得更快;這不是所有 MLE 的通則。是否修正偏誤、限制模型或加入先驗,仍要依目標、樣本數與評估 loss 決定。
(把 換成 的那個「無偏變異數估計」確實存在,但它不是 MLE,而且它無偏的只有 —— 之後的 仍然有偏。無偏性不是在函數變換下保持的性質。)
似然曲面、樣本數,與零機率的懸崖
互動 demo:母體交叉熵與 KL 永遠平行、最小值同一個 μ;你手上只有抖動的那條經驗 NLL。
零機率在訓練裡長什麼樣
第一節那個「」看起來像一個理論上的邊角,但它是實務上最常見的幾個 NaN 來源之一。
零機率可能來自計數模型把未出現的類別設為零,或浮點運算把極小的 softmax 機率壓成零。有限 logit 的 softmax 在數學上仍給每個類別正機率;「token 沒出現過」不會自動令它的機率為零。另一種方向相反的問題,是過度靈活的連續模型讓 density 無限集中,例如 Gaussian mixture 的一個 component 縮在單一觀測點上,sample NLL 就可能往 跑。
三個標準對策,各自在宣告什麼。
- 平滑(Laplace / add-):在 個類別的計數各加 ,得到 。它是對稱 Dirichlet prior 下的 posterior predictive probability,不是一般的 MAP 公式;即使某一類沒出現,預測機率仍是正的。
- 在 log 空間算:不要先算出機率再取對數,直接用
log_softmax、logsumexp這一類函式。這不改變數學,只是不讓浮點數在中途把一個很小的數變成零。 - 限制模型族:不給模型表達「機率為零」的能力(例如輸出層加一個下界,或用一個尾巴夠厚的分布族)。這是三個裡最強的宣告,也最容易在別的地方付出代價。
上面的乘積用到了 iid 假設;相依資料也能做 MLE,但應使用正確的 joint likelihood,不能直接當成 iid。MLE 的一致性還需要可識別性、適當正則條件與可求得的最佳解;若模型設定錯誤,在相應條件下可能收斂到 population KL 最近的成員,而不是真實分布。
Likelihood 衡量模型如何解釋資料;要從有限樣本推到真實分布,還需要模型與統計上的條件。
檢查理解
參考文獻
- Cover, T. & Thomas, J. Elements of Information Theory, 2nd ed. Wiley 2006, Ch. 2, 11.(熵、交叉熵與 KL 的標準處理,以及「NLL = 熵 + KL」這個分解的資訊論讀法。)
- Bishop, C. Pattern Recognition and Machine Learning. Springer 2006, Ch. 1.2, 2.3.(把最小平方還原成 Gaussian 似然,以及變異數 MLE 的偏誤來源。)
- Murphy, K. Probabilistic Machine Learning: An Introduction. MIT Press 2022, Ch. 4.(MLE 的一致性與漸近性質,以及平滑/先驗在小樣本的作用。)