Background:怎麼表示一個高維機率分佈
想直接寫下 \(n\) 個像素的聯合分佈,需要 \(2^n-1\) 個參數。這一講介紹三種降低成本的辦法:條件獨立(Bayesian network)、函數形式(logistic regression),以及兩者的結合:chain rule 加上神經網路。第三種就是下一講 autoregressive model 的起點。
讀完這頁你應該能夠
- 畫出「資料、模型家族、距離、最佳化」這張學習生成模型的大圖,並說明每個元件的角色。
- 計算各種表示法需要的參數量:完整查表、完全獨立、chain rule、Markov、Bayesian network。
- 寫出 chain rule 和 Bayes rule,並解釋「只用 chain rule 不省任何參數」。
- 從一張 DAG 讀出聯合分佈的分解式,以及它隱含的條件獨立假設。
- 比較 Naive Bayes 和 logistic regression:各自的假設、優缺點、什麼時候誰比較好。
- 說明為什麼「chain rule + 神經網路條件分佈」能得到一個 deep generative model。
- 看懂 \(Z \to X\) 這種兩節點的潛在變數模型,包括 VAE 的生成過程。
前置知識檢查
- 機率密度和機率質量的差別(第 1 講有補充框,第 9 節會再複習)
- 條件機率的定義 \(p(a\mid b) = p(a,b)/p(b)\)(第 4 節補充)
- 獨立的定義 \(p(a,b) = p(a)p(b)\)(第 5 節補充,會區分獨立和條件獨立)
- 等比級數求和(第 4 節補充)
- logistic regression 和 sigmoid(第 7 節會從頭講)
- 神經網路的一層:\(h = f(Ax+b)\)(第 8 節)
投影片轉成圖片後逐頁看過,文中的「投影片 N 的圖」描述圖片內容。標「出處」的補充來自 Ng & Jordan (2002) 原文、Koller & Friedman《Probabilistic Graphical Models》(學生網路的例子),以及 CS228 講義。
01學習生成模型的大圖
老師說這張圖會在整個學期反覆出現。換掉其中的元件,就會得到不同家族的生成模型:autoregressive、diffusion、GAN 等等。01:35
- 資料:一堆樣本,假設來自某個未知的資料生成過程 \(P_{\text{data}}\)。可以是網路文字、圖片、DNA 序列。02:06
- 模型家族 \(\mathcal{M}\):一組由參數 \(\theta\) 索引的分佈,例如「所有平均與共變異數的高斯」,或「神經網路權重所能表示的所有分佈」。04:09
- 距離 / 損失 \(d\):怎麼衡量兩個高維分佈有多像。選擇什麼距離,等於決定「在乎什麼、不在乎什麼」。05:10
- 最佳化:在 \(\mathcal{M}\) 裡找最接近 \(P_{\text{data}}\) 的那一點,就像把 \(P_{\text{data}}\) 投影到 \(\mathcal{M}\) 上。
投影片 3 的圖:左邊是四張狗的照片,標 \(x_i\sim P_{\text{data}}\)、\(i = 1,2,\dots,n\);右邊一團綠色的「Model family」,裡面有一點 \(P_\theta\)、\(\theta\in M\);從 \(P_{\text{data}}\) 到 \(P_\theta\) 的箭頭標 \(d(P_{\text{data}}, P_\theta)\)。上面的 SVG 就是照這張圖重畫的。
這三個選擇都沒有標準答案,這就是為什麼會有這麼多種生成模型。本講處理的是第一個問題:模型家族要怎麼表示?第 4 講處理距離(KL divergence 與 maximum likelihood)。
學到 \(p(x)\) 之後能做的三件事(投影片 3)
02基本離散分佈:積木
單一隨機變數很簡單。兩塊積木:11:17
| 分佈 | 值域 | 參數 | 自由參數數量 | 取樣 |
|---|---|---|---|---|
| Bernoulli \(X\sim\mathrm{Ber}(p)\) | {正, 反} | \(P(X=\text{正})=p\) | 1 | 丟一枚(不公平的)硬幣 |
| Categorical \(Y\sim\mathrm{Cat}(p_1,\dots,p_m)\) | {1, …, m} | \(P(Y=i)=p_i,\ \sum_i p_i = 1\) | m − 1 | 擲一顆(不公平的)m 面骰 |
「自由參數」要扣掉 1,因為機率總和必須是 1:知道前 \(m-1\) 個,最後一個就確定了。
隨機變數、Val(X) 和「從 Categorical 取樣」的實作
隨機變數 \(X\) 是一個「結果不確定的量」。\(\mathrm{Val}(X)\) 是它所有可能取值的集合,例如一個 8-bit 色彩通道 \(\mathrm{Val}(R) = \{0,\dots,255\}\)。大寫 \(X\) 指變數本身,小寫 \(x\) 指某個具體取值。\(p(x)\) 是 \(P(X=x)\) 的簡寫。
電腦怎麼擲一顆不公平的骰子?標準做法叫 inverse CDF sampling:
- 抽一個均勻亂數 \(u \sim U(0,1)\)。
- 把區間 \([0,1)\) 依序切成長度 \(p_1, p_2, \dots, p_m\) 的小段。
- \(u\) 落在第幾段,就回傳那個值。
本頁所有 demo 的取樣都是這樣做的。Bernoulli 是 \(m=2\) 的特例:\(u < p\) 就回傳 1。
03聯合分佈的參數爆炸
一個像素的顏色
用三個隨機變數 \(R, G, B\),各取 0–255。從聯合分佈 \(p(R,G,B)\) 取樣,就是替這個像素隨機選一個顏色。要多少參數?12:53
課堂上有學生猜「3 個」,這是錯的。顏色立方體裡每一格都要一個機率:
投影片 5 的圖:一個 RGB 色彩立方體,三個軸分別是 red、green、blue,角落從黑到白,表面是連續變化的顏色;下方寫「Sampling from the joint distribution \((r, g, b)\sim p(R, G, B)\) randomly generates a color for the pixel」以及 \(256\cdot256\cdot256 - 1\)。
答 3 隱含了「三個通道互相獨立」的假設,這正是下一節要討論的事。
一張黑白圖片
\(n\) 個二元像素 \(X_1,\dots,X_n\),\(\mathrm{Val}(X_i)=\{0,1\}\)。15:28
- 可能的圖片(狀態)數:\(\underbrace{2\times2\times\cdots\times2}_{n} = 2^n\)
- 完整聯合分佈的參數:\(2^n - 1\)。對 28×28 的 MNIST,\(n=784\),\(2^{784}\approx10^{236}\),遠多於宇宙的原子數。18:05
投影片 6 的圖:三張 MNIST 手寫數字(9、3、6),說明一張黑白圖就是 \(n\) 個二元隨機變數 \(X_i\in\{\text{Black},\text{White}\}\) 的一組取值。
參數這麼多,既存不下,也不可能從資料學出來:每個參數都要看到足夠多的對應樣本才能估計,但 \(2^{784}\) 種圖絕大多數一次都不會出現。一定要做假設,問題只在於做什麼假設。
04兩個極端:完全獨立 vs. 鏈式法則
極端一:所有像素互相獨立
如果 \(X_1,\dots,X_n\) 互相獨立,聯合分佈就是邊際分佈的乘積:18:37
- 可能的狀態仍然是 \(2^n\) 個,分佈的定義域沒變。
- 但參數只要 \(n\) 個:每個像素一個 Bernoulli。這是指數級的節省。
- 代價:取樣時每個像素自己丟硬幣,完全不看其他像素。生成的「數字」只會是一團雜訊。21:18
投影片 7 的圖:兩張「每個像素獨立取樣」得到的 28×28 黑白圖:中間有一團白點,形狀模糊,看不出任何筆畫。
下面的 Demo A 第一列會讓你親眼看到這種雜訊。
兩條規則
Chain rule 是所有 autoregressive model(包括大型語言模型)的基礎:一個句子的機率 = 第一個字的機率 × 給定第一個字下第二個字的機率 × …。它對任何變數順序都成立,像素也可以。21:48
Chain rule 怎麼推出來?
從條件機率的定義 \(p(a\mid b) = p(a,b)/p(b)\) 出發,移項得 \(p(a,b) = p(b)\,p(a\mid b)\)。對三個變數重複使用兩次:
第一步把 \((x_1,x_2)\) 當成一個整體 \(b\),\(x_3\) 當成 \(a\)。用歸納法就能推廣到 \(n\) 個變數。過程沒有用到任何假設,所以叫做「永遠成立」。
Bayes rule 也只是把 \(p(s_1,s_2)\) 用兩種順序展開:\(p(s_1)p(s_2\mid s_1) = p(s_2)p(s_1\mid s_2)\),再除以 \(p(s_2)\)。
極端二:只用 chain rule,什麼都不假設
看起來進步了:每一項都是單一變數的(條件)分佈。但數一下參數:24:52
| 因子 | 條件變數的組合數 | 參數 |
|---|---|---|
| \(p(x_1)\) | 沒有條件 | 1 |
| \(p(x_2\mid x_1)\) | \(x_1\in\{0,1\}\),每種各一個 Bernoulli | 2 |
| \(p(x_3\mid x_1,x_2)\) | 4 種組合 | 4 |
| ⋮ | ⋮ | |
| \(p(x_n\mid x_1,\dots,x_{n-1})\) | \(2^{n-1}\) 種組合 | \(2^{n-1}\) |
| 總和 | \(2^n-1\) |
和完整查表完全一樣。老師的說法是 no free lunch:沒有做任何假設,就不可能得到任何節省。最後幾個條件分佈尤其昂貴。25:56
等比級數:為什麼 1 + 2 + 4 + … + 2ⁿ⁻¹ = 2ⁿ − 1?
令 \(S = 1 + 2 + \cdots + 2^{n-1}\),則 \(2S = 2 + 4 + \cdots + 2^n\)。兩式相減,中間項全部抵消:\(2S - S = 2^n - 1\)。
用二進位看更直觀:\(n\) 個 1 組成的二進位數 \(111\cdots1_2\),加 1 就變成 \(1000\cdots0_2 = 2^n\)。
05中間路線:條件獨立
Chain rule 本身沒用,但它是一個好的起點:把它寫出來,再用條件獨立假設把某些條件項刪掉。26:56
Markov 假設
假設「給定 \(X_i\),\(X_{i+1}\) 和更早的 \(X_1,\dots,X_{i-1}\) 條件獨立」,記作 \(X_{i+1} \perp X_1,\dots,X_{i-1} \mid X_i\)。於是:
參數:\(1 + 2(n-1) = 2n-1\)。從指數變成線性。
投影片 9 的圖:上半是 chain rule 與「\(1 + 2 + \cdots + 2^{n-1} = 2^n - 1\)」,並舉 \(p(x_2\mid x_1 = 0)\)、\(p(x_2\mid x_1 = 1)\) 各 1 個參數為例;下半在 chain rule 的每一項把 \(x_1,\dots,x_{i-1}\) 劃掉,得到 Markov 鏈,最後一行「How many parameters? \(2n-1\). Exponential reduction!」。
直覺:天氣。「明天的天氣只看今天,不需要知道昨天」。用在語言上就是手機的自動完成只看前一個字:做得到,但效果有限,因為需要更多上下文。28:59
獨立 vs. 條件獨立:兩者互不蘊含
獨立 \(A \perp B\):\(p(a,b) = p(a)\,p(b)\),等價於 \(p(a\mid b) = p(a)\),也就是知道 \(B\) 對猜 \(A\) 沒幫助。
條件獨立 \(A \perp B \mid C\):\(p(a,b\mid c) = p(a\mid c)\,p(b\mid c)\),等價於 \(p(a\mid b,c) = p(a\mid c)\)。意思是已經知道 \(C\) 之後,\(B\) 對猜 \(A\) 沒有額外幫助。
例 1:條件獨立但不獨立。小學生的「鞋子尺寸」和「閱讀能力」明顯相關,因為年紀大的兩者都高。但給定年齡之後,兩者大致無關。年齡是共同原因。
例 2:獨立但不條件獨立。兩枚公平硬幣 \(A, B\) 互相獨立。令 \(C\) = 「兩枚是否相同」。給定 \(C\) 之後,知道 \(A\) 就完全知道 \(B\),兩者不再獨立。這叫 explaining away。
本課最常用的條件獨立形式就是上面的 \(p(a\mid b,c) = p(a\mid c)\):把條件裡的 \(b\) 刪掉。
Demo A模型階梯:同一份資料,四種假設
資料是 1,797 張 8×8 黑白手寫數字(sklearn digits,二值化),所以 \(n=64\)。完整查表需要 \(2^{64}-1 \approx 1.8\times10^{19}\) 個參數。下面四個模型由弱到強排列,都直接在你的瀏覽器裡訓練。前三個靠計數就能學(第 4 講會證明「計數」就是 maximum likelihood),第四個用梯度下降。
Test NLL 是 1,497 張訓練圖以外 300 張測試圖的平均負對數似然,單位是 bits / 張,越低越好。它代表「用這個模型壓縮一張圖平均需要幾個 bit」。完全不學、每個像素丟公平硬幣是 64 bits。
瀏覽器實測的 Test NLL(bits / 張):獨立 36.0、Markov 34.1、鄰居 Bayes net 30.5、chain rule + logistic 25.9。每多一點結構,壓縮就更好;全部都遠低於不學習的 64 bits。觀察重點:
- 獨立模型只記住「哪些位置常有墨水」,樣本是散在中間的雜點,看不出筆畫。
- Markov 鏈(逐列掃描,只看左邊一格)能畫出水平的短線段,但上下兩列之間毫無關聯。
- 鄰居 Bayes net(看上方和左方各一格)開始出現連續的筆畫和封閉形狀,參數仍只有 256 個。
- Chain rule + logistic regression:每個像素看所有前面的像素,但條件分佈用 logistic 函數表示,而不是查表。參數從 \(2^{64}\) 降到 2,080 個,樣本最像數字。這就是第 8 節「chain rule + 神經網路」的最簡版本,下一講會叫它 FVSBN。
這四個模型的參數怎麼算、怎麼訓練?
- 獨立:64 個 \(p(x_i=1)\),每個用「訓練集中該位置是 1 的比例」估計。
- Markov:\(p(x_1)\) 1 個,加上每個 \(i\ge2\) 的 \(p(x_i=1\mid x_{i-1}=0)\) 和 \(p(x_i=1\mid x_{i-1}=1)\) 各 1 個,共 \(1+63\times2=127\)。
- 鄰居 Bayes net:每個像素的父節點是上方和左方,條件組合 4 種,共 \(64\times4=256\)(邊界上不存在的鄰居當作 0)。
- Logistic chain rule:\(p(x_i=1\mid x_{<i}) = \sigma\big(b_i + \sum_{j<i} w_{ij}x_j\big)\),參數 \(64 + \sum_{i}(i-1) = 64 + 2016 = 2080\)。用 Adam(minibatch 100、30 個 epoch)最大化訓練集的 log-likelihood。
計數時都加了 Laplace smoothing(分子 +1、分母 +2),避免沒看過的組合得到機率 0,否則測試時 \(\log 0 = -\infty\)。
06Bayesian network
把 Markov 假設一般化:每個變數不一定只看前一個,而是看一組父節點。29:30
- 每個隨機變數 \(X_i\) 一個節點;
- 每個節點一個條件機率分佈(CPD)\(p(x_i\mid x_{\mathrm{Pa}(i)})\),\(\mathrm{Pa}(i)\) 是它的父節點。
- 為什麼一定是合法的分佈?DAG 一定能排出一個拓撲順序。照這個順序寫 chain rule,再依假設刪掉非父節點的條件,就得到上面的乘積。32:41
- 為什麼省參數?每個 CPD 的大小是父節點數量的指數,而不是總變數數 \(|V|\) 的指數。圖越稀疏越省,越密越有表達力。單鏈就是 Markov 模型。33:12
投影片 12 的圖:左邊是一張有 directed cycle 的圖(藍色節點沿箭頭繞一圈),右邊是一張 DAG(同樣的節點,箭頭方向改成沒有環),下面註明「DAG stands for Directed Acyclic Graph」。
DAG、拓撲排序,以及「乘起來總和為 1」的證明
DAG:所有邊都有方向,而且沿著箭頭走不可能繞回原點(沒有 directed cycle)。拓撲排序:把節點排成一列,使每條邊都從前面指向後面。DAG 一定排得出來(先拿掉一個沒有入邊的節點,重複即可),有環的圖則排不出來。
總和為 1 的證明:照拓撲順序,最後一個節點 \(X_n\) 不是任何人的父節點,所以它只出現在自己的 CPD 裡。對它求和:
每次消掉一個葉節點,重複 \(n\) 次,最後得到 1。如果圖有環,就找不到可以先消的節點,這個論證失敗,乘積也確實可能不是合法分佈。
學生網路的例子
五個變數:考試難度 D、學生智力 I、成績 G、SAT 分數 S、推薦信 L。34:15
投影片 13 的圖:Difficulty、Intelligence 指向 Grade,Intelligence 指向 SAT,Grade 指向 Letter,每個節點旁邊掛一張 CPD 表:\(p(d^0, d^1) = (0.6, 0.4)\)、\(p(i^0, i^1) = (0.7, 0.3)\);\(p(g\mid i, d)\) 四列 \((i^0d^0)\ 0.3/0.4/0.3\)、\((i^0d^1)\ 0.05/0.25/0.7\)、\((i^1d^0)\ 0.9/0.08/0.02\)、\((i^1d^1)\ 0.5/0.3/0.2\);\(p(s\mid i)\):\(i^0\) 為 0.95/0.05、\(i^1\) 為 0.2/0.8;\(p(l\mid g)\):\(g^1\) 0.1/0.9、\(g^2\) 0.4/0.6、\(g^3\) 0.99/0.01。(\(g^1\) 是最好的成績。)Demo B 用的就是這幾張表。
出處:這個「學生網路」是 Koller & Friedman《Probabilistic Graphical Models》(2009)第 3 章的經典例子,CS228 講義也沿用它。
Demo B · 讀出分解式、計算機率、祖先取樣
參數量(D、I、S、L 各 2 值,G 有 3 個等第):
| 表示法 | 計算 | 參數 |
|---|---|---|
| 完整聯合分佈 | \(2\cdot2\cdot3\cdot2\cdot2 - 1\) | 47 |
| Bayesian network | \(\underbrace{1}_{D}+\underbrace{1}_{I}+\underbrace{4\times2}_{G\mid I,D}+\underbrace{2\times1}_{S\mid I}+\underbrace{3\times1}_{L\mid G}\) | 15 |
圖的結構 = 條件獨立假設
把上面的分解式和「不做任何假設」的 chain rule(順序 D, I, G, S, L)並排:36:19
每一個被刪掉的條件,就是一條獨立假設:
- \(p(i\mid d)\to p(i)\):\(D \perp I\)(考試難度和學生智力無關)
- \(p(s\mid i,d,g)\to p(s\mid i)\):\(S \perp \{D,G\}\mid I\)(知道智力後,SAT 和這門課的難度、成績無關)
- \(p(l\mid g,d,i,s)\to p(l\mid g)\):\(L \perp \{I,D,S\}\mid G\)(推薦信只看成績)
投影片 14 的圖:同一張學生網路(不含 CPD 表),下面先寫出 BN 的分解,再寫出「任何分佈都可以用 chain rule 寫成」的 \(p(d)p(i\mid d)p(g\mid i,d)p(s\mid i,d,g)p(l\mid g,d,i,s)\),最後一行列出三個額外的條件獨立:\(D\perp I\)、\(S\perp\{D,G\}\mid I\)、\(L\perp\{I,D,S\}\mid G\)。
小結與本課的定位
- 算任一組取值的機率:把 CPD 乘起來(Demo B 右上)。
- 取樣:照 DAG 順序,從每個 CPD 依序取樣,叫做 ancestral sampling(Demo B 右下)。37:54
- 從圖的結構可以讀出部分條件獨立性質。
07Generative vs. discriminative
為了把「神經網路」接進來,先看一個熟悉的分類問題,比較兩種建模方式。39:55
Naive Bayes:一個用來分類的生成模型
垃圾郵件分類:\(Y=1\) 是垃圾信。字彙表有 \(n\) 個字,\(X_i=1\) 表示第 \(i\) 個字出現在信裡。40:29
假設:給定 \(Y\),所有字互相條件獨立。對應的 Bayes net 是 \(Y\) 指向每一個 \(X_i\):
它的生成故事是:先決定這封信是不是垃圾信,再依此逐字決定每個字出不出現。41:32
投影片 16 的圖:一個標「Label」的節點 \(Y\),箭頭指向下方一排「Features」\(X_1, X_2, X_3,\dots,X_n\),特徵之間沒有任何邊。
- 訓練:數「垃圾信中出現字 \(i\) 的比例」等等,參數只有 \(1 + 2n\) 個。
- 分類:用 Bayes rule 反推:43:07
假設顯然不對:「bank」出現會讓「account」更可能出現。但它在實務上常常還算堪用。投影片的說法是:幾乎所有機率模型都是錯的,但其中很多仍然有用。44:09
同一個聯合分佈,兩種 chain rule 順序
- Generative(\(Y\to\mathbf X\)):要學 \(p(Y)\) 和 \(p(\mathbf X\mid Y)\),再用 Bayes rule 算 \(p(Y\mid\mathbf X)\)。
- Discriminative(\(\mathbf X\to Y\)):直接學 \(p(Y\mid\mathbf X)\)。完全不需要建模 \(p(\mathbf X)\),反正測試時 \(\mathbf X\) 一定會給你。46:46
投影片 18–20 的圖:(18) 兩張兩節點的圖:Generative 是 \(Y\to X\),Discriminative 是 \(X\to Y\)(\(X\) 塗灰表示永遠觀測到)。(19) 把 \(X\) 展開成 \(X_1,\dots,X_n\):generative 這邊 \(Y\) 指向每個 \(X_i\)、\(X_i\) 之間也有一串邊;discriminative 這邊 \(X_1,\dots,X_n\) 之間互相連接、全部指向 \(Y\)。(20) 左邊那張完整的 generative 圖,經過一個粗箭頭,刪掉 \(X_i\) 之間所有的邊,變成 Naive Bayes。
但兩邊都沒有免費午餐
把 \(\mathbf X\) 展開成 \(X_1,\dots,X_n\):47:47
- Generative 這邊,\(p(Y)\) 很簡單,但 \(X_i\) 們有很多父節點。Naive Bayes 的解法是砍邊(條件獨立)。
- Discriminative 這邊,不用管 \(p(\mathbf X)\),但 \(p(Y\mid X_1,\dots,X_n)\) 有 \(2^n\) 種條件組合,查表一樣存不下。50:55解法是假設函數形式。
Logistic regression:假設函數形式
不再用表格,而是假設 \(p(Y=1\mid\mathbf x;\boldsymbol\alpha) = f(\mathbf x,\boldsymbol\alpha)\),\(f\) 要滿足:52:27
- 輸出在 0 和 1 之間(它是機率);
- 以某種簡單但合理的方式依賴 \(x_1,\dots,x_n\);
- 只用 \(n+1\) 個參數 \(\boldsymbol\alpha\) 就能完全描述(精簡)。
這樣假設的後果(投影片 22):59:12
- 決策邊界 \(p(Y=1\mid\mathbf x) > 0.5\) 在 \(\mathbf x\) 上是線性的(\(z>0\) 是一個超平面的一側)。
- 等機率的等高線都是直線。
- 機率隨 \(\mathbf x\) 變化的方式被固定成 S 形曲線。如果真實的 \(p(y\mid x)\) 長得完全不一樣,這個模型就會表現不好。
投影片 21–22 的圖:(21) 右邊是 sigmoid 曲線 \(\sigma(z)\),從 0 平滑升到 1。(22) 三張圖:第一張是二維特徵平面上的紅色 + 與藍色 ◆ 兩類點,背景是預測機率的等高線,決策邊界是一條直線;第二張是同一個機率的俯視圖,等機率線全是平行直線;第三張是機率曲面的 3D 圖,沿一個方向呈 S 形上升。
Sigmoid、log-odds,以及為什麼叫「regression」
\(\sigma(z) = 1/(1+e^{-z})\) 把整條實數線壓到 \((0,1)\):\(\sigma(0)=0.5\),\(z\to+\infty\) 時趨近 1,\(z\to-\infty\) 時趨近 0,而且 \(\sigma(-z) = 1-\sigma(z)\)。
它的反函數是 log-odds(logit):若 \(p=\sigma(z)\),則 \(z = \log\dfrac{p}{1-p}\)。所以 logistic regression 的真正假設是:log-odds 是 \(\mathbf x\) 的線性函數。
老師解釋了名字的由來:它不是查表,而是一個把 \(\mathbf x\)「迴歸」到機率值的函數。只是這個迴歸的輸出被限制在 0 和 1 之間,所以要套上 sigmoid。55:04
課堂問答:Naive Bayes 和 logistic regression 的關係
學生問:線性依賴是不是就等於假設各個 \(X\) 互相獨立?老師回答:反過來才成立。Naive Bayes 的分解式會推出 \(p(y\mid\mathbf x)\) 恰好是 logistic 形式,但 logistic 形式並不蘊含 Naive Bayes。所以 logistic regression 做的假設比較弱。56:06
證明:Naive Bayes 推出 logistic 形式(課堂只提了結論)
令 \(\theta_{i1} = p(X_i=1\mid Y=1)\),\(\theta_{i0} = p(X_i=1\mid Y=0)\),\(\pi = p(Y=1)\)。因為 \(x_i\in\{0,1\}\),可以寫成
計算後驗的 log-odds:
(分母 \(p(\mathbf x)\) 在兩類相除時約掉了。)log-odds 是 \(\mathbf x\) 的線性函數,所以 \(p(Y=1\mid\mathbf x) = \sigma(\alpha_0 + \sum_i\alpha_i x_i)\),正是 logistic regression 的形式。
反方向不成立:logistic regression 可以學出任何 \(\boldsymbol\alpha\),但很多產生線性 log-odds 的資料分佈並不滿足「給定 \(Y\) 下各字獨立」。所以 logistic regression 的模型家族(作為條件分佈)比 Naive Bayes 推出的還要大。
什麼時候誰比較好?
- 資料多:logistic regression 假設較少,通常比較準。57:10
- 資料少:Naive Bayes 的強假設像一個先驗,反而有幫助。
- 相關的特徵:如果「bank」和「account」總是一起出現,Naive Bayes 被迫當它們是獨立證據,會重複計算,變得過度自信。Logistic regression 可以把其中一個係數設為 0。61:19
- 缺值:discriminative model 只會從完整的 \(\mathbf x\) 預測 \(y\)。有些像素或特徵缺了,它不知道怎麼辦,因為它沒有建模 \(p(\mathbf X)\)。生成模型擁有完整的聯合分佈,原則上可以「從任何東西預測任何東西」:對沒看到的變數做邊際化,或直接補值。62:53
缺值時,生成模型怎麼算 p(y | 部分 x)?
把特徵分成看得到的 \(\mathbf x_e\)(evidence)和看不到的 \(\mathbf x_h\)。對看不到的部分求和(邊際化):
對 Naive Bayes 來說特別簡單:\(\sum_{x_h} p(x_h\mid y) = 1\),所以缺掉的字直接從乘積中消失,只要用看得到的字算就好。
這個「生成模型能處理任意條件查詢」的性質,正是第 1 講 inpainting、超解析度能用生成模型解的原因。
「資料少時 Naive Bayes 較好」的出處
這個結論來自 Ng & Jordan (2002) 的經典論文〈On Discriminative vs. Generative Classifiers〉。這裡的 \(n\) 是特徵數,比較的是分類錯誤率:
- 漸近而言(樣本無限多),logistic regression 的錯誤率不會比 Naive Bayes 高(Proposition 1):它在所有線性分類器裡找最好的,Naive Bayes 選出的也是一個線性分類器。
- 但要接近各自的漸近錯誤率,logistic regression 需要 \(O(n)\) 個樣本(Proposition 2,由 VC 維度 \(n\) 的一致收斂界得到,而且最壞情況下也至少要這麼多);Naive Bayes 只需要 \(O(\log n)\) 個(Lemma 3 加上 Corollary 6,需要一些溫和的條件,Naive Bayes 的假設成立時這些條件會滿足)。
所以兩者的學習曲線常會交叉:樣本少時 Naive Bayes 較好,樣本多時 logistic regression 較好。論文用 UCI 資料集的實驗展示了這兩個區間。下面的 Demo C 可以重現這個交叉。
出處:Ng & Jordan (2002) §3 Proposition 1–2、Lemma 3、Corollary 6,以及摘要。
Demo CNaive Bayes vs. logistic regression
合成的垃圾郵件資料:5 個真正有資訊的字(第 1 個是「bank」),再加上 \(k\) 個「bank」的完全複製品(「account」等,總是和 bank 同時出現)。複製品不帶任何新資訊,但 Naive Bayes 會把它們當成獨立證據。
右圖是測試集的平均 log-loss(越低越好)對訓練樣本數 N(對數刻度),每點是 6 次隨機重抽的平均。試試看:
- \(k=0\):Naive Bayes 的假設完全正確,它在每個 N 都很好,小樣本時明顯勝出。
- \(k=1\):只有一個複製品。N 很小時 Naive Bayes 仍然較好,但大約在 N = 20–40 之間兩條曲線交叉,之後 logistic regression 勝出,因為 Naive Bayes 停在比較差的位置。這就是 Ng & Jordan 描述的現象。
- \(k=3\) 以上:Naive Bayes 把 bank 的證據算了 \(k+1\) 次,在每個 N 都比較差。左邊「只含 bank 的信」可以看到它的機率被推向極端(真實值約 0.45,它給出接近 1)。Logistic regression 則逼近最佳。
08把神經網路當成條件分佈
Logistic regression 仍然假設 log-odds 是線性的,這可能太簡單。更有彈性的做法是先把 \(\mathbf x\) 做非線性轉換,再做 logistic regression:64:56
- \(\mathbf h\) 是學出來的特徵,\(f\) 是逐元素的非線性函數。這就是一層的神經網路。
- 參數變多(\(A, \mathbf b, \boldsymbol\alpha\)),但能表示更複雜的 \(p(y\mid\mathbf x)\) 形狀。
- 把 \(\mathbf h\) 再送進下一層,重複很多次,就是深度神經網路。
投影片 26 的圖:一個小型神經網路:輸入 \(x_1, x_2, x_3\) 連到一排隱藏單元(全連接),再匯集到單一輸出 \(y\)。
Bayes net vs. 神經模型:本講的結論
三種寫法放在一起看(投影片 27):69:18
- Bayes net:靠刪掉條件變數來簡化,也就是條件獨立。對影像和文字通常太強。
- 神經模型:保留所有條件變數,但假設條件分佈有特定的函數形式。夠深的網路可以逼近任何函數(universal approximation)。
投影片 27 的圖:三行公式。第一行 chain rule(「Fully General」);第二行 Bayes net,把 \(p(x_3\mid x_1,x_2)\) 中的 \(x_1\)、\(p(x_4\mid x_1,x_2,x_3)\) 中的 \(x_2, x_3\) 劃掉(「Assumes conditional independencies」);第三行把後兩項換成 \(p_{\text{Neural}}\)(「Assume specific functional form for the conditionals. A sufficiently deep neural net can approximate any function.」)。
「chain rule + 每個條件分佈用神經網路」就是 neural autoregressive model,也是大型語言模型在做的事:用神經網路從前面的字預測下一個字。Demo A 第四列就是它最簡單的版本(每個條件是一個 logistic regression)。68:45
Universal approximation 定理在說什麼?它保證了什麼、沒保證什麼?
定理大意:只要隱藏單元夠多,一層隱藏層、使用非線性激活函數的神經網路就能以任意精度逼近任何(在有界區域上)連續的函數。
它保證:神經網路的模型家族夠大,原則上能表示需要的條件分佈。
它沒保證:(1) 需要多少單元(可能多到不實際);(2) 梯度下降能找到那組權重;(3) 用有限資料學到的結果能泛化。所以老師說「no free lunch」:我們賭的是神經網路能捕捉這些條件分佈,實際上不一定成立。
09連續變數與兩節點的潛在變數模型
連續變數有無限多個可能值,表格完全不可行,一定要用參數化的密度函數:72:56
多維的高斯(\(\mathbf x\in\mathbb R^n\)):
Chain rule、Bayes rule 對密度一樣成立,例如 $$p_{X,Y,Z}(x,y,z) = p_X(x)\,p_{Y\mid X}(y\mid x)\,p_{Z\mid X,Y}(z\mid x,y)$$ 所以 Bayes net 和神經網路可以自由混搭連續與離散變數。74:57
多維高斯的參數量,以及 |Σ| 和 Σ⁻¹ 是什麼
\(\boldsymbol\mu\) 有 \(n\) 個數,\(\Sigma\) 是對稱的 \(n\times n\) 共變異數矩陣,有 \(n(n+1)/2\) 個自由數。總共 \(O(n^2)\):對 \(n=784\) 約 31 萬個,可以存。但高斯只能表示「一個橢圓團」,形狀太簡單,不夠描述手寫數字。
\(|\Sigma|\) 是行列式,衡量這個橢圓團的「體積」,放在分母讓積分等於 1。\(\Sigma^{-1}\) 決定橢圓的方向和各軸的伸縮。\((\mathbf x-\boldsymbol\mu)^\top\Sigma^{-1}(\mathbf x-\boldsymbol\mu)\) 叫 Mahalanobis 距離的平方:考慮各方向尺度後,\(\mathbf x\) 離中心多遠。
三個 \(Z\to X\) 的例子(投影片 29)
投影片 28–29:兩頁都是純文字。28 列出一維 Gaussian、Uniform 與多維 Gaussian 的密度,以及「Chain rule, Bayes rule, etc all still apply」的連續版 chain rule;29 列出下面三個例子,最後一句「Note: Even if \(\mu_\theta, \sigma_\phi\) are very deep (flexible), functional form is still Gaussian」。
都是兩節點的 Bayes net,分解為 \(p_{Z,X}(z,x) = p_Z(z)\,p_{X\mid Z}(x\mid z)\):75:58
- 兩個高斯的混合:\(Z\sim\mathrm{Bernoulli}(p)\);\(X\mid Z=0 \sim\mathcal N(\mu_0,\sigma_0)\),\(X\mid Z=1\sim\mathcal N(\mu_1,\sigma_1)\)。參數 \(p,\mu_0,\sigma_0,\mu_1,\sigma_1\)。(第 1 講 demo 的 GMM 就是它的多元推廣。)
- 均勻潛在變數:\(Z\sim U(a,b)\),\(X\mid Z=z\sim\mathcal N(z,\sigma)\)。參數 \(a,b,\sigma\)。77:32
- Variational autoencoder:\(Z\sim\mathcal N(0,1)\),\(X\mid Z=z\sim\mathcal N\big(\mu_\theta(z), e^{\sigma_\phi(z)}\big)\),其中 \(\mu_\theta,\sigma_\phi\) 是神經網路。這裡 Bayes net 和神經網路混在一起。78:02
但對 \(z\) 積分後的邊際分佈 \(p(x) = \int p(z)\,p(x\mid z)\,dz\) 可以非常複雜,因為它是無限多個高斯的混合。下面的 demo 把這點畫出來。
Demo D · 給定 z 是高斯,對 z 積分後就不是了
在 ③ 中,\(\mu(z) = 1.6\tanh(3z) + 0.5\sin(4z)\) 是一個固定的小函數,代替訓練好的 decoder。橘色的每一條都只是一個鐘形,但加起來的藍色曲線有好幾個峰。把 σ 調小,峰會更尖、更多。第 5 講會講怎麼訓練這種模型,難點在於那個積分算不出來。
與其他講的關聯
- 第 1 講:「維度災難計算機」在這講具體化為 \(2^n-1\);「generative vs. discriminative」在這講正式比較。
- 第 3 講 Autoregressive:本講結論「chain rule + 神經網路條件」的完整展開,包括 FVSBN(Demo A 第四列)、NADE、權重共享、RNN / Transformer。
- 第 4 講 MLE:證明本講的「計數」就是 maximum likelihood,並定義第 1 節大圖中的距離 \(d\)(KL divergence)。
- 第 5–6 講 VAE:Demo D 的 ③ 加上「怎麼訓練」和「怎麼從 \(x\) 推回 \(z\)」。
常見誤解
自我測驗
1. 學習生成模型的大圖中有哪三個需要「選擇」的元件?
2. 三個像素,每個像素是 RGB、各 256 階。完整聯合分佈要多少參數?
3. n 個二元變數,用 chain rule(不做假設)要多少參數?為什麼?
4. 在 Markov 假設下參數是多少?寫出它用的條件獨立式。
5. 一個 Bayes net 中每個節點最多 k 個父節點,所有變數二元。參數最多多少?
6. 學生網路中,為什麼可以寫 p(s | i) 而不是 p(s | i, d, g)?這代表什麼假設?
7. 為什麼有環的有向圖不能當 Bayesian network?
8. 證明(或描述)Naive Bayes 的後驗具有 logistic 形式。反過來成立嗎?
9. 「bank」和「account」總是同時出現。Naive Bayes 和 logistic regression 各會怎樣?
10. 給一張缺了一半像素的圖,discriminative 分類器能補回缺的像素嗎?生成模型呢?
11. 「chain rule + 神經網路」的模型為什麼有實務上的困難?怎麼解決?
12. VAE 中 p(x | z) 是高斯。p(x) 也是高斯嗎?
延伸閱讀
- CS236 course notes:Introduction,涵蓋 representation 和 generative vs. discriminative 的段落。
- CS228 notes:Bayesian networks,老師說這講是 CS228 的壓縮版,想把圖模型學紮實可以讀這篇。
- Ng & Jordan (2002), On Discriminative vs. Generative Classifiers(本頁參考):Demo C 交叉現象的理論出處,只有 8 頁,§3 的論證很好讀。
- Deep Learning book 第 3 章:3.5–3.7 條件機率、chain rule、獨立,3.14 structured probabilistic models。