Maximum Likelihood Learning:讓模型和資料的 KL 最小
前 30 分鐘把第 3 講沒講完的 attention、PixelCNN 補完。之後進入第二個大問題:模型家族定好了,參數要怎麼學?答案是一條很短的推導鏈:最小化 \(D_{\mathrm{KL}}(P_{\text{data}}\Vert P_\theta)\) ⟺ 最大化期望 log-likelihood ⟺(用 Monte Carlo 近似)最大化訓練集的 log-likelihood ⟺ 讓每個條件分類器的 cross-entropy 最小。
讀完這頁你應該能夠
- 說明 attention 怎麼解決 RNN 的瓶頸,以及遮罩如何讓 Transformer 在訓練時平行計算。
- 寫出 KL divergence 的定義、證明它非負,並用「壓縮多花的 bit 數」解釋它。
- 區分 \(D(P_{\text{data}}\Vert P_\theta)\) 和 \(D(P_\theta\Vert P_{\text{data}})\):前者 mode-covering,後者 mode-seeking。
- 推導「最小化 KL ⟺ 最大化 log-likelihood」,並說明為什麼我們只能比較模型、不知道離最佳有多遠。
- 說明 Monte Carlo 估計量的三個性質:不偏、收斂、變異數 \(\propto 1/T\)。
- 手算硬幣例子的 MLE,並說明 autoregressive model 的 MLE 等於訓練一串分類器。
- 解釋 SGD 是另一層 Monte Carlo,以及 bias-variance 取捨與防止 overfitting 的方法。
前置知識檢查
- 期望值 \(\mathbb E_{x\sim p}[g(x)] = \sum_x p(x)g(x)\)、變異數(B4 會複習)
- 對數的性質:\(\log(ab) = \log a + \log b\)、\(\log(a/b) = \log a - \log b\)、log 是遞增函數
- 凹函數與 Jensen 不等式(B2 補充)
- 微分求極值(B5 補充)、梯度下降和 backpropagation 的概念
- 第 3 講:autoregressive model、MADE 的遮罩、PixelCNN 的名字
投影片轉成圖片後逐頁看過,文中的「投影片 N 的圖」描述圖片內容。標「出處」的補充來自 Lai et al. (2026)《The Principles of Diffusion Models》§1.1(arXiv 2510.21890v3),以及投影片引用的原始論文。前半段(Part A)用到的第 3 講投影片 25–36,圖的描述在第 3 講筆記第 8 節。
第 3 講投影片 25–36 的內容。第 3 講筆記第 8 節有投影片版的整理,這裡依照課堂實際的講法補充細節。
A1Attention 與 Transformer
RNN 的三個問題(回顧)
以「My friend opened the」為例,RNN 要用最後一個隱藏向量 \(\mathbf h_4\) 預測下一個字(door、window…)。01:05
- 瓶頸:單一向量要總結前面全部的意思。
- 慢:算 loss 要沿時間依序展開,訓練很慢。02:09
- 難訓練:早期資訊要經過很多步才傳到現在,梯度會爆炸或消失。
Attention 的四個步驟
現代語言模型更像 NADE、MADE:預測時直接使用到時間 t 為止的整個序列,而不只最後一個隱藏向量。03:09
- 比較:用當前的隱藏向量當 query,和過去每個隱藏向量(key)算相似度,最簡單是內積。就像在資料庫用 query 檢索 key。04:18
- 正規化:把這些分數過 softmax,得到 attention 分佈,表示哪些位置重要。
- 彙整:用 attention 分佈對過去的隱藏向量加權平均。06:23
- 預測:把彙整結果和當前向量一起用來預測下一個 token。
課堂例子:「A robot must obey the orders given it …」要預測下一個字,必須先知道 it 指的是誰。attention 可以讓 it 這個位置把注意力放在「a robot」上。06:53
從 RNN + attention 到 Transformer
- 遮罩:不能注意未來的位置,所以和 MADE 一樣要加遮罩。07:25
- 拿掉遞迴:實際系統完全不用 RNN,只把多層 attention 疊起來(feed-forward)。07:56
- 平行訓練:於是回到 MADE 的情境,一次 forward 就能平行算出每個位置的預測。
Transformer 的 query、key、value 和這裡的簡化版有什麼不同?
課堂的簡化版直接拿隱藏向量 \(\mathbf h\) 當 query 和 key,也拿它來加權平均。Transformer 先用三個學出來的矩陣把每個位置的表示投影成三個不同的向量:
分開投影讓「拿來比對的特徵」和「拿來傳遞的內容」可以不同。Multi-head 則是同時做好幾組不同的投影,讓模型同時關注不同種類的關係(語法、指代等)。另外要加上位置編碼,因為加權平均本身不知道順序。
A2影像上的 autoregressive model
PixelRNN:補完下半張圖
把圖片看成像素序列,每個像素的 R、G、B 也依序生成,用 RNN 加上 MADE 式的遮罩:預測紅色時不能偷看綠色和藍色,預測綠色時可以看紅色。11:02
在 downsampled ImageNet 上的示範:把真實圖片的下半部拿掉,當作 prompt,讓模型逐像素補完。補出來的結果有合理的結構和對稱性;同一個 prompt 每次取樣都不同。這和第 3 講 Demo A 的「補完下半部」是同一件事。缺點是算機率要依序展開,非常慢。12:37
PixelCNN:遮罩卷積
影像分類上效果最好的是卷積網路,自然想拿來做生成模型。條件是必須和 autoregressive 順序一致:預測一個像素時,只能用已經生成的區域(上方各列和同列左邊)。做法仍然是遮罩:把卷積核中「未來」位置的權重設為 0。14:42
Blind spot(盲點)
只用一種遮罩卷積疊很多層時,感受野會出現盲點:目標像素右上方的一塊區域,即使在順序上屬於「過去」,也永遠不會被看到。需要在架構上組合不同遮罩的卷積來修正(後續的 Gated PixelCNN 用垂直和水平兩個 stack)。22:38換成 CNN 後,樣本明顯更好,速度也快很多。
為什麼會有盲點?
3×3 遮罩卷積在 \((r, c)\) 位置可以看到 \((r-1, c-1), (r-1, c), (r-1, c+1), (r, c-1)\)。疊第二層時,\((r-1,c+1)\) 這一格本身又能看到 \((r-2, c+2)\) 等,所以感受野往右上延伸。但 \((r, c-1)\) 這一格(同列左邊)只能往左上延伸。
結果在目標像素右上方、而且離它比較遠的某些位置,永遠沒有任何一條連線能傳過來。疊越多層,這個三角形盲區越大。這些像素在 raster 順序中明明已經生成了,模型卻看不到,浪費了資訊。
課堂問答整理
- 影像能用 attention 嗎?可以,用遮罩 attention 的影像 autoregressive model 效果很好,但多在業界、沒有公開,訓練也比較貴。實務上 diffusion model(第 16 講)表現更好。15:46
- 影像的順序要怎麼選?沒有好答案,常用左上到右下。有研究試圖學出最佳順序,成效普通。順帶一提,語言從右到左建模也行得通,所以順序可能沒有想像中重要。17:22
- CNN 也能做語言模型:用因果(只看過去)的一維卷積,表現可以接近 Transformer,同樣能平行計算。18:56
- 用 inpainting 訓練(遮住一部分、預測其餘)能得到生成模型嗎?一般不能直接得到可以由左而右取樣的模型,要用更昂貴的取樣程序。19:28
- Transformer 比 RNN 更有表達力嗎?很難這樣說,RNN 理論上已經是 Turing complete。差別比較在訓練效率和歸納偏誤。20:30
A3PixelDefend:用 likelihood 偵測 adversarial example
在一張狗的圖片上加一點人眼看不出的雜訊,最先進的分類器就會非常有信心地判錯。能不能偵測這種被動過手腳的輸入?23:42
做法:把輸入送進一個在乾淨影像上預訓練的 PixelCNN,用 chain rule 算 \(p(\mathbf x)\)。結果的直方圖顯示,訓練集和測試集的 likelihood 落在同一區,多數攻擊(RAND、FGSM、BIM)產生的 adversarial example 明顯偏低,設一個門檻就能擋下來;擾動較小的 DeepFool、CW 只稍微偏低,和乾淨影像重疊較多。25:19
直方圖橫軸的「bits per dimension」是什麼?
直接比 \(p(\mathbf x)\) 數字太小也太難讀。常用的正規化是
\(D\) 是維度數(例如 32×32×3 = 3072)。意思是「用這個模型壓縮,平均每個像素值需要幾個 bit」。越低代表模型認為越可能。8-bit 像素完全不壓縮是 8 bits/dim,好的影像模型在 CIFAR-10 約 3 bits/dim 左右,例如 PixelSNAIL 2.85、Sparse Transformer 2.80(數字見第 14 講投影片的表)。課堂直方圖中正常影像大約在 1 到 4.5 之間、峰值約 3。28:57
這個單位和 B2 節「KL = 多花的 bit 數」直接相關:log-likelihood 本來就是壓縮長度。
總結(同第 3 講):autoregressive model 容易取樣、容易算機率、容易擴充到連續變數,但沒有自然的方式取得特徵或分群。這要等到潛在變數模型。29:59
本講投影片 1–25。模型家族已經會定義了,現在要決定「距離」並最佳化。
B1問題設定:什麼叫「學得好」
- 資料由某個未知分佈 \(P_{\text{data}}\) 產生;我們有 \(m\) 筆 i.i.d. 樣本組成的資料集 \(\mathcal D\)。每筆樣本是所有變數的一組取值(像素值,或 \(X_{\text{bank}}=1, X_{\text{dollar}}=0,\dots,Y=1\))。31:30
- 模型家族 \(\mathcal M\):例如「某個固定結構的 Bayes net 加上所有可能的 CPT」,或「FVSBN 的所有 logistic 係數」。\(\theta\) 就是把所有係數串起來的向量。
- 目標:在 \(\mathcal M\) 裡挑一個好的 \(P_\theta\)。只能看樣本,不能查詢 \(P_{\text{data}}(\mathbf x)\) 的值。32:32
為什麼不可能完美
784 個二元像素有 \(2^{784}\approx10^{236}\) 種圖。就算有一千萬或十億個訓練樣本,相對於所有可能性,覆蓋率仍然極為稀疏。再加上計算資源有限,只能接受近似。33:36
「最好」取決於用途
- 密度估計:要完整的分佈,之後才能回答任何條件機率查詢。目標最高也最難。35:40
- 特定預測任務:只要用分佈做某個預測(垃圾信分類、影片下一格、看圖說話)。那只需要學條件分佈,例如 \(p(y\mid x)\)。36:10
- 結構 / 知識發現:在乎模型本身(基因怎麼互動、什麼導致癌症)。這是 CS228 的範圍,本課不談。
本講先處理 1,最後一節處理 2。
投影片 3–6 的圖:純文字為主。投影片 6「Learning as density estimation」重畫了第 2 講那張大圖:狗的照片 \(x_i\sim P_{\text{data}}\),綠色的 Model family,以及兩者之間的 \(d(P_{\text{data}}, P_\theta)\),最後一行問「How do we evaluate “closeness”?」。
B2KL divergence:衡量兩個分佈的距離
怎麼比較兩個分佈?不同的比較方式會得到不同的生成模型。本講用資訊理論的方式(壓縮),之後 GAN 會用「能不能分辨兩邊的樣本」。39:18
直覺:看每個可能的 \(\mathbf x\),比較兩個分佈給它的機率比值,再用 \(p\) 的機率加權平均。如果處處相等,比值是 1,\(\log1=0\),KL 就是 0。47:05
投影片 7 的圖:KL 的定義 \(D(p\Vert q) = \sum_xp(x)\log\frac{p(x)}{q(x)}\),以及一行的非負性證明 \(\mathbb E_{x\sim p}[-\log\frac{q(x)}{p(x)}]\ge-\log(\mathbb E_{x\sim p}[\frac{q(x)}{p(x)}]) = -\log(\sum_xq(x)) = 0\),最後強調 KL 不對稱,且「measures the expected number of extra bits required to describe samples from \(p(x)\) using a compression code based on \(q\) instead of \(p\)」。下面的補充框把這一行證明逐步展開。
非負性的證明(課堂跳過的「一行證明」):Jensen 不等式
Jensen 不等式:若 \(f\) 是凸函數,則 \(\mathbb E[f(X)]\ge f(\mathbb E[X])\)。直覺:凸函數的圖形是向上彎的碗,兩點連線(平均)一定在曲線上方。
\(-\log\) 是凸函數(\(\log\) 是凹的)。令 \(X = q(\mathbf x)/p(\mathbf x)\),\(\mathbf x\sim p\):
等號只有在 \(q(\mathbf x)/p(\mathbf x)\) 是常數時成立(Jensen 的等號條件),又因為兩者都加總為 1,常數只能是 1,也就是 \(p=q\)。
注意:KL 不是數學上的「距離」(metric),因為它不對稱,也不滿足三角不等式。所以常叫它 divergence。
KL 的壓縮解釋
知道資料的分佈,就能設計更好的壓縮方式。43:24
- 公平硬幣丟 100 次:正面記 0、反面記 1,平均每次 1 bit,無法更好。
- 如果正面遠比反面常見:把常見的序列(HHHH)編成短碼,罕見的(TTTT)編成長碼,平均長度就會變短。
- Morse code 就是這樣:E 是「•」、A 是「•−」,罕見的 Q 是「− − • −」。英文裡母音最常見,所以碼最短。44:26
投影片 8 的圖(「Detour on KL-divergence」):100 次公平硬幣,正面記 0、反面記 1,期望每個樣本 1 bit,無法更好;硬幣有偏 \(P[H]\gg P[T]\) 時,把常見的長序列 HHHH 用短碼、罕見的 TTTT 用長碼,再以 Morse code(E = •、A = •−、Q = −−•−)為例;最後一句是 KL 的壓縮解釋。
Entropy、cross-entropy 和 KL 的關係(課堂只提到名字)
最佳編碼給機率 \(p(\mathbf x)\) 的事件分配約 \(-\log_2 p(\mathbf x)\) 個 bit(Shannon)。機率 1/2 用 1 bit,1/8 用 3 bit。
- Entropy:用正確分佈編碼的平均長度,\(H(p) = -\mathbb E_{p}[\log p(\mathbf x)]\)。這是無法再壓縮的下限,代表資料本身有多隨機。
- Cross-entropy:資料來自 \(p\),卻用 \(q\) 的編碼,\(H(p,q) = -\mathbb E_{p}[\log q(\mathbf x)]\)。
- KL:兩者之差,\(D(p\Vert q) = H(p,q) - H(p)\ge0\)。
例:真實硬幣 \(p(H)=0.9\)。\(H(p) = -0.9\log_2 0.9 - 0.1\log_2 0.1 \approx 0.469\) bit。若誤以為是公平硬幣(\(q(H)=0.5\)),每次都用 1 bit,cross-entropy 是 1 bit,多花了 \(D(p\Vert q)\approx0.531\) bit。
分類器訓練用的「cross-entropy loss」就是這個 \(H(p,q)\),\(p\) 是真實標籤(one-hot)、\(q\) 是模型預測。
方向很重要:forward KL vs. reverse KL
學生問:把兩個參數對調,改成 \(D(P_\theta\Vert P_{\text{data}})\) 會怎樣?49:11
| \(D(P_{\text{data}}\Vert P_\theta)\)(forward) | \(D(P_\theta\Vert P_{\text{data}})\)(reverse) | |
|---|---|---|
| 對誰取期望 | 真實資料 | 模型自己生成的樣本 |
| 重罰的情況 | 資料可能出現、模型卻給 ≈0 機率(log 爆掉) | 模型生成、資料卻幾乎不可能出現 |
| 行為 | mode-covering:把機率質量攤開,蓋住所有資料 | mode-seeking:集中在一個 mode 也能得到不錯的分數 |
| 類比 | 重 recall(不能漏掉任何真實樣本) | 重 precision(生成的都要像真的) |
| 可計算性 | 可以,會化成 maximum likelihood(B3) | 需要 \(P_{\text{data}}(\mathbf x)\) 的值,無法直接最佳化;GAN 會再談 |
老師指出 reverse KL 在某種意義上更符合使用情境:你實際在乎的是模型自己生成的東西好不好。但它少了讓 forward KL 可計算的那個好性質。49:44兩者在模型夠大、資料無限、最佳化完美時都會得到 \(P_\theta=P_{\text{data}}\),但在真實情況下結果很不一樣。52:58
DemoForward vs. reverse KL:用一個高斯擬合兩個峰
真實分佈 \(P_{\text{data}}\)(灰色)是兩個高斯的混合。模型家族只有單一高斯 \(q=\mathcal N(\mu,\sigma^2)\)(藍色),表達能力不夠,一定會有取捨。拖動滑桿手動調整,或按按鈕讓梯度下降分別最小化兩種 KL。
- Forward KL 的最佳解剛好是「和資料同平均、同變異數」的高斯(moment matching):寬大的鐘形蓋住兩個峰,中間沒有資料的地方也給了不少機率。這就是 maximum likelihood 的行為,也對應老師說的「被迫分散機率質量,可能生成訓練集中沒有的怪東西」。64:16
- Reverse KL 會收斂到其中一個峰,忽略另一個。按鈕固定從 \(\mu = 1\)、\(\sigma = 0.4\) 出發,實測收斂到右邊的峰(\(\mu\approx1.99\)、\(\sigma\approx0.61\),reverse KL 0.692 nats,但 forward KL 高達 10 nats);換一個起點,就可能收斂到另一個峰。生成的樣本都很像真的,但多樣性不足。之後 GAN 的 mode collapse 和這個現象有關。
- Reverse KL 的目標函數有多個局部最佳解。手動把 μ 調到 0、σ 調到 1.8,reverse KL 是 1.138 nats,往 μ 或 σ 任何方向稍微移動都會變大:這是另一個(比較差的)局部極小,比單峰解的 0.692 差。梯度下降如果從這附近出發,會卡在兩峰中間。這是非凸最佳化的典型情形。(Forward KL 的按鈕實測收斂到 \(\mu\approx0.15\)、\(\sigma\approx2.17\),forward KL 0.559 nats。)
- 把兩峰的距離調到 0,兩種 KL 的最佳解會變成同一個,因為這時模型家族已經能完全表示資料。
B3從 KL 到 maximum likelihood
\(D(P_{\text{data}}\Vert P_\theta)\) 裡面有 \(P_{\text{data}}(\mathbf x)\),看起來算不了。把 log 的比值拆開:55:29
第一項是常數,最佳化時可以忽略。於是
- 意思是:讓模型給從 \(P_{\text{data}}\) 抽出的樣本高機率。56:30
- 因為有 log,任何 \(P_\theta(\mathbf x)\approx0\) 的資料點都會對目標造成很大影響。這就是 forward KL「mode-covering」的來源:每個訓練樣本都必須得到非零機率(高 recall),模型容量有限時就只能把機率質量攤到其他地方,可能生成訓練集中沒有的怪東西(precision 下降)。63:46
代價:只能比較,不知道離最佳有多遠
丟掉的那一項是資料分佈的 entropy \(H(P_{\text{data}})\),代表資料本身有多難建模。我們能比較兩個模型 \(\theta_1,\theta_2\) 誰比較接近資料(相減時常數消掉),但永遠不知道自己離 \(P_{\text{data}}\) 的距離。57:35
學生問:兩個模型 log-likelihood 一樣時怎麼選?老師說用 Occam's razor,選比較簡單的。59:39
最後一步:用訓練集近似期望
\(\mathbb E_{P_{\text{data}}}\) 還是算不了,但可以用訓練集的平均近似:60:10
右邊是「看到這份資料集的機率」,因為樣本 i.i.d.,所以是乘積;取 log 就變成左邊的總和(\(1/|\mathcal D|\) 是常數,不影響最佳解)。61:43
出處:Lai et al. (2026) §1.1.1「Mathematical Setup」的「Forward KL and Maximum Likelihood Estimation」段落用同一條推導,並強調 MLE 只需要資料的樣本,不需要算資料密度本身;同一段也說明 forward KL 為什麼是 mode covering:只要模型在資料有機率的區域給 0,KL 就是無窮大。
學生問:能不能也用樣本估計被丟掉的 entropy?
期望可以用樣本平均估,但裡面的 \(\log P_{\text{data}}(\mathbf x)\) 本身未知,這才是困難所在。可以用 kernel density estimation 之類的方法估 \(P_{\text{data}}\),或乾脆代入一個你相信不錯的模型 \(P_\theta\),但永遠不知道自己偏差多少。62:45
B4Monte Carlo 估計:為什麼可以用樣本平均
這個「用樣本平均取代期望」的想法整門課會一直出現。64:47
- 把想算的量寫成某個隨機變數的期望:\(\mathbb E_{x\sim P}[g(x)] = \sum_x g(x)P(x)\)。
- 從 \(P\) 抽 \(T\) 個獨立樣本 \(x^1,\dots,x^T\)。
- 估計量 \(\hat g(x^1,\dots,x^T) = \frac1T\sum_{t=1}^T g(x^t)\)。
\(\hat g\) 本身是隨機變數,因為它取決於抽到哪些樣本。它的三個性質:66:25
| 不偏 unbiased | \(\mathbb E_P[\hat g] = \mathbb E_P[g(x)]\):平均而言答案是對的 |
| 收斂 | 大數法則:\(T\to\infty\) 時 \(\hat g\to\mathbb E_P[g(x)]\) |
| 變異數 | \(\mathrm{Var}_P[\hat g] = \mathrm{Var}_P[g(x)]/T\):樣本越多,越不可能離譜 |
不偏和變異數公式的推導
不偏:期望是線性的,\(\mathbb E[\hat g] = \frac1T\sum_t\mathbb E[g(x^t)] = \frac1T\cdot T\cdot\mathbb E[g(x)]\)。
變異數:獨立隨機變數的和,變異數可以相加;常數提出變異數要平方:
所以標準差(誤差的典型大小)以 \(1/\sqrt T\) 下降:樣本多 100 倍,誤差才小 10 倍。
套回 MLE:期望 log-likelihood 是一個固定的數;訓練集平均是它的 Monte Carlo 估計。換一份訓練集答案會不同,但訓練集夠大時會很接近真值。67:28
Demo · 重複估計 2,000 次,看估計量的分佈
要估計 \(\mathbb E[x^2]\),\(x\sim\mathcal N(0,1)\),真值是 1。每次用 \(T\) 個樣本得到一個 \(\hat g\),重複 2,000 次畫直方圖。
B5最簡單的例子:丟硬幣
資料 \(\mathcal D = \{H,H,T,H,T\}\)。模型家族是所有 \(\{H,T\}\) 上的分佈:\(P_\theta(H)=\theta\)、\(P_\theta(T)=1-\theta\)。68:31
找讓 \(L\) 最大的 \(\theta\):答案是 0.6,可以用公式直接解出來(closed form)。70:35
投影片 15 的圖:\(L(\theta)\) 對 \(\theta\in[0,1]\) 的曲線,一個不對稱的鐘形,在 \(\theta = 0.6\) 達到最大,兩端都是 0。
為什麼是 0.6?微分求極值
一般化:\(n_H\) 個正面、\(n_T\) 個反面。log-likelihood 為
(取 log 不改變最大值的位置,因為 log 遞增;而且乘積變成總和,比較好微分。)令導數為 0:
二階導數 \(-n_H/\theta^2 - n_T/(1-\theta)^2 < 0\),確定是最大值。所以 MLE 就是正面出現的比例:3/5 = 0.6。
這也證明了第 2 講 Demo A 的說法:Bayes net 每個 CPT 的 MLE 就是「計數再除以總數」。Categorical 分佈的 MLE 同樣是各類別的頻率。
Demo · 點硬幣切換正反,看 likelihood 曲線
觀察:資料越多,likelihood 曲線越尖,代表資料對 \(\theta\) 的約束越強。只有 1、2 枚硬幣時,MLE 可能是 0 或 1,這就是小資料下的 overfitting(B7)。
B6訓練 autoregressive model
現在 \(\theta\) 是神經網路的所有參數,但道理相同:找讓資料集機率最大的 \(\theta\)。好消息是 autoregressive model 算 likelihood 很容易,就是 chain rule。71:08
- 不再有 closed form,要用最佳化演算法。72:41
- \(\ell(\theta)\) 就是「所有資料點、所有位置上,各個條件分類器的 log 機率總和」。所以 MLE = 讓每個「由前文預測下一個變數」的分類器的 cross-entropy 盡量小。73:44
- 隨機初始化 \(\theta^0\);
- 用 backpropagation 算 \(\nabla_\theta\ell(\theta)\);
- \(\theta^{t+1} = \theta^t + \alpha_t\nabla_\theta\ell(\theta^t)\)。
沒有參數共享時:各自獨立
\(\theta_i\) 只出現在第 \(i\) 個條件中,所以每個條件分佈可以分開訓練。實務上 NADE、PixelRNN、PixelCNN 都會共享參數,梯度就會從所有位置匯集過來(第 3 講 NADE 的 \(\mathbf w_1\) 從所有預測任務得到訊號)。
資料太多時:SGD 是另一層 Monte Carlo
每一步都要對整個資料集求和,太貴。把總和改寫成對「均勻抽一筆資料」的期望:76:23
再用 Monte Carlo:只抽一筆(或一小批)資料,用它的梯度估計整體梯度。這就是 stochastic gradient descent 和 mini-batch。這個估計是不偏的,batch 越大變異數越小,和 B4 的 demo 是同一回事。77:26
為什麼 autoregressive model 的 MLE 能拆成分類器的 cross-entropy?以二元像素為例
第 \(i\) 個條件是 Bernoulli,\(\hat x_i = p(x_i{=}1\mid\mathbf x_{<i})\),所以
每一項就是一個二元分類器的 binary cross-entropy,「正確答案」是資料中真正的 \(x_i^{(j)}\)。這也是第 3 講 autoencoder 損失和 FVSBN 長得一樣的原因。
對 logistic 單元,梯度非常簡潔:\(\partial(-\log p)/\partial z_i = \hat x_i - x_i\)(預測減答案)。第 2、3 講的 demo 程式碼裡的 g = sig(z) - x[i] 就是這一行。
B7過擬合與 bias-variance 取捨
盲目最大化訓練集 likelihood 會出問題。極端例子:模型就是資料本身,把訓練集背下來,每個訓練樣本給機率 \(1/m\),其他全給 0。訓練分數很好,但對沒看過的樣本完全沒用(log 0 = −∞)。我們在乎的是泛化:從同一個分佈來、但沒見過的樣本。78:00
假設空間太有彈性、資料又少:很多模型都能把資料擬合得很好,甚至比真模型還好;資料稍微變動,學出的參數就變很多。80:06
投影片用多項式迴歸說明:直線 underfit,高次多項式 overfit,低次多項式取得平衡。下面改用和本課直接相關的密度估計示範同一件事。80:39
投影片 22 的圖:同一組帶雜訊的點畫了三次:用直線擬合(「Hypothesis space: linear relationship. Does it fit well? Underfits」)、用高次多項式擬合(曲線劇烈擺動穿過每個點,「Overfits」)、用低次多項式擬合(「Right tradeoff」)。
Demo · 直方圖密度估計:箱子越多越好嗎?
模型家族:在 \([-4,4]\) 上切成 \(B\) 個等寬箱子的直方圖密度(每箱的 MLE 就是「落在箱內的比例 ÷ 箱寬」,再加一點點平滑避免 log 0)。\(B\) 越大,模型越有彈性。
- B 很小(bias 大):直方圖太粗,訓練和測試分數都差。
- B 很大(variance 大):訓練分數持續上升,甚至超過真實分佈的最佳值(模型「比真模型還好」地擬合了訓練資料),但測試分數下降。按「換一份訓練集」,直方圖形狀會大幅改變。
- 增加訓練樣本數 m,最佳的 B 會往右移:資料越多,能負擔越有彈性的模型。
怎麼避免 overfitting
- 硬限制:選表達力較低的模型家族,例如較小的神經網路、權重共享(第 3 講的 NADE、RNN)。82:10
- 軟偏好(Occam's razor):在目標函數加正則化項,\(\text{objective}(\mathbf x,\mathcal M) = \text{loss}(\mathbf x,\mathcal M) + R(\mathcal M)\)。例如偏好參數較少、或參數值較小的模型。82:43
- 驗證集:留一部分資料不訓練,用來評估。訓練和驗證 loss 差距很大就表示 overfitting。這是實務上最常用的做法。83:15
- Bayesian 方法:理論上可以,但計算上非常困難。81:40
投影片 23 的圖:再一次畫出資料、模型家族與距離的大圖,旁邊列出硬限制(較小的網路、權重共享)、軟偏好(Occam's razor、正則化 \(\text{objective}(\mathbf x,\mathcal M) = \text{loss}(\mathbf x,\mathcal M) + R(\mathcal M)\)),以及用驗證集評估泛化。
Bias-variance 分解(以平方誤差為例)
設真值是 \(f\),在不同訓練集上學到的估計是 \(\hat f\)(隨訓練集而變的隨機變數)。則
(展開平方,交叉項的期望是 0。)bias 是「平均而言離真值多遠」,variance 是「換一份資料會抖多少」。模型越有彈性,bias 越小、variance 越大,總誤差在中間某處最小。直方圖 demo 的測試曲線先升後降就是這個現象。
B8條件生成模型(投影片 24)
如果只想由一組變數 \(\mathbf X\) 生成另一組 \(\mathbf Y\)(例如 text-to-speech),就只需要建模 \(p(\mathbf Y\mid\mathbf X)\),用條件損失 \(-\log P_\theta(\mathbf y\mid\mathbf x)\) 訓練。因為損失只依賴條件分佈,不需要學聯合分佈。這是 B1「特定預測任務」那一類,課堂最後一句話帶過。
投影片 24 的圖:一張草地上的棕色馬的照片「Input Image」,箭頭指向文字「Brown horse in grass field」(「Output Caption」),說明看圖說話只需要條件分佈 \(P_\theta(\mathbf y\mid\mathbf x)\)。
本講總結(投影片 25)
- Autoregressive model 很容易算 \(p_\theta(\mathbf x)\),理想上每個條件 \(\log p_{\text{neural}}(x_i^{(j)}\mid\mathbf x_{<i}^{(j)};\theta_i)\) 可以平行計算(不像 RNN),所以很自然用 maximum likelihood 訓練。
- log-likelihood 較高,不一定代表樣本看起來比較好。Forward KL 在乎的是「不漏掉任何資料」,不是「每個樣本都漂亮」。
- 還有其他衡量分佈相似度的方式,例如 GAN(第 9–10 講)。
與其他講的關聯
- 第 2 講:「計數就是 MLE」在 B5 證明了。第 2 講的大圖中那個距離 \(d\),這講正式定為 forward KL。
- 第 3 講:所有 demo 都在做這講的 MLE:char-RNN 的 loss 曲線就是 \(-\ell(\theta)/\)字元數,單位 bits。
- 第 5–6 講 VAE:潛在變數模型的 \(\log p_\theta(\mathbf x) = \log\int p(\mathbf z)p(\mathbf x\mid\mathbf z)d\mathbf z\) 算不出來,會用 Jensen 不等式(B2 的同一招)得到下界 ELBO,並大量使用 Monte Carlo(B4)。
- 第 7–8 講 Flow:設計讓 \(p_\theta(\mathbf x)\) 精確可算的模型,直接做 MLE。
- 第 9–10 講 GAN:換掉距離,不用 KL,改用分辨真假樣本的能力(two-sample test、f-divergence)。Reverse KL 的 mode-seeking 會再出現。
- 第 15 講 Evaluation:bits/dim、likelihood 和樣本品質不一致的問題會詳細討論。
常見誤解
自我測驗
1. Attention 解決了 RNN 的哪兩個問題?Transformer 如何在訓練時平行化?
2. PixelCNN 為什麼要遮罩卷積?疊很多層後會出現什麼問題?
3. 用 Jensen 不等式證明 D(p‖q) ≥ 0。
4. 真實硬幣 p(H) = 0.9,你用公平硬幣的編碼。平均每次多花幾個 bit?
5. 推導:最小化 D(P_data‖P_θ) 等價於最大化期望 log-likelihood。
6. 為什麼 forward KL 會 mode-covering?
7. 為什麼 reverse KL 不能直接拿來訓練?
8. Monte Carlo 估計用 T = 100 個樣本,誤差標準差是 0.2。想降到 0.02,需要多少樣本?
9. 資料有 7 個正面、3 個反面。寫出 log-likelihood 並求 MLE。
10. 沒有參數共享時,FVSBN 的 MLE 可以怎麼簡化?
11. 為什麼 SGD 也算一種 Monte Carlo?它的估計不偏嗎?
12. 直方圖密度估計中,箱子數 B 很大時訓練 log-likelihood 為什麼可以超過真實分佈的 −H?
延伸閱讀
- CS236 course notes:Autoregressive models,「Learning and inference」一節講 KL、MLE 與梯度訓練(講義沒有獨立的 learning 頁面)。
- Lai et al. (2026),《The Principles of Diffusion Models》§1.1(本頁參考):forward KL 與 MLE 的等價、mode covering,以及之後會用到的 Fisher divergence 和 f-divergence。
- Deep Learning book 第 5 章:5.2–5.5 容量、overfitting、MLE 與 KL 的關係。
- Deep Learning book 3.13 節:資訊理論、entropy、KL divergence,含 forward / reverse KL 的圖示。
- Song et al. (2018), PixelDefend。
- van den Oord et al. (2016), Conditional Image Generation with PixelCNN Decoders:Gated PixelCNN,解決 blind spot。
- Vaswani et al. (2017), Attention Is All You Need。