🌏 English version
影片狀態:已附影片。 這篇依 Stanford Online 公開的 Spring 2026 第 10 堂錄影的英文字幕寫成,公式記號對照 2026 主講義第 11 章與第 12 章;沒看到板書畫面,講者指著板書說的地方靠前後文與講義還原。
上一堂 結尾,高斯混合模型(GMM)的更新公式是「瞇著眼看出來的」:平均值應該是加權平均、比例應該是加權計數。這一堂由 Chris Ré 把它補成正式推導,然後轉到 PCA。兩個主題的關係,他開場用一句話帶過:PCA 是 EM 的「non-probabilistic analog」(00:00:05)。到收尾他才把話說完:兩者都假設資料底下藏著結構,EM 假設的是機率式的隱變數,PCA 假設的是資料落在一個低維子空間附近。
先備是上一堂的 k-means 與 GMM、Jensen 不等式、多變數高斯分布,以及線性代數裡的正交基底與對稱矩陣特徵分解。讀完你應該能自己寫出 ELBO、說明 EM 每一輪為什麼不會讓概似變差、手算一輪一維 GMM 的 EM,並且解釋 PCA 為什麼等於求共變異數矩陣的特徵向量。整門課的地圖在課程總覽 。
YouTube:Stanford CS229 Machine Learning | Spring 2026 | Lecture 10: GMM (EM), PCA
EM 在爬一條看不清楚的曲線
(錄影 00:00–12:20)
開頭先複習上一堂的設定。資料是感光板上的光子落點,不知道有幾個光源各貢獻多少、形狀如何。每個點 x ( i ) x^{(i)} x ( i ) 有一個看不到的隱變數 z ( i ) z^{(i)} z ( i ) ,表示它來自哪個光源。k-means 給的是硬指派,GMM 給的是軟指派:一個點可以是「50% 屬於第一群、50% 屬於第二群」。指派完再重估每一群的平均 μ j \mu_j μ j 、共變異數矩陣 Σ j \Sigma_j Σ j 與比例 ϕ j \phi_j ϕ j 。畫圖時每一群是個橢圓,因為那是多變數高斯的等密度線,橢圓的軸方向就是共變異數矩陣的特徵向量。這句話後半堂會再用到。
Jensen 不等式這堂只用凹函數的版本。log \log log 是凹函數,曲線上任兩點連成的弦都在曲線下方。寫成兩點的形式:
log ( λ a + ( 1 − λ ) b ) ≥ λ log a + ( 1 − λ ) log b , 0 ≤ λ ≤ 1 \log\big(\lambda a+(1-\lambda)b\big)\;\ge\;\lambda\log a+(1-\lambda)\log b,\qquad 0\le\lambda\le 1 log ( λa + ( 1 − λ ) b ) ≥ λ log a + ( 1 − λ ) log b , 0 ≤ λ ≤ 1
把「以機率 λ \lambda λ 取 a a a 、以機率 1 − λ 1-\lambda 1 − λ 取 b b b 」看成一個隨機變數 X X X ,上式就是 log E [ X ] ≥ E [ log X ] \log \mathbb{E}[X]\ge\mathbb{E}[\log X] log E [ X ] ≥ E [ log X ] 。講者反覆畫這張圖的理由是:方向記不住的時候,回想 log \log log 的弦在曲線下方就能還原。
接著是整段推導的地圖。把所有參數(GMM 裡是全部的 μ j , Σ j , ϕ \mu_j,\Sigma_j,\phi μ j , Σ j , ϕ )收成一個向量 θ \theta θ ,對數概似 ℓ ( θ ) \ell(\theta) ℓ ( θ ) 是一條有好幾個山頭的曲線,沒辦法直接求最大值。EM 的做法是在目前的猜測 θ t \theta_t θ t 造一條替代曲線 L t ( θ ) L_t(\theta) L t ( θ ) ,它要滿足兩件事:
緊貼(tight) :L t ( θ t ) = ℓ ( θ t ) L_t(\theta_t)=\ell(\theta_t) L t ( θ t ) = ℓ ( θ t ) ,兩條曲線在 θ t \theta_t θ t 碰在一起。
下界 :對所有 θ \theta θ ,L t ( θ ) ≤ ℓ ( θ ) L_t(\theta)\le\ell(\theta) L t ( θ ) ≤ ℓ ( θ ) 。
然後取 θ t + 1 = arg max θ L t ( θ ) \theta_{t+1}=\arg\max_\theta L_t(\theta) θ t + 1 = arg max θ L t ( θ ) ,再在新的位置造下一條 L t + 1 L_{t+1} L t + 1 。造曲線叫 E 步,在曲線上求最大值叫 M 步。
有學生問,為什麼不直接對 ℓ \ell ℓ 跑梯度下降。講者的回答分兩層。第一,EM 只是解這個問題的一種演算法,不是唯一一種。第二,ℓ ( θ ) \ell(\theta) ℓ ( θ ) 裡每一項都是 log ∑ z p ( x , z ; θ ) \log\sum_z p(x,z;\theta) log ∑ z p ( x , z ; θ ) ,直接做就得處理對 z z z 的整個邊際化;EM 利用「這是隱變數模型」這個結構,把一個難問題拆成兩個輪流解的簡單問題。這跟 k-means 輪流「指派」與「算中心」是同一種交替法。
造下界:乘一個 Q 再除回去
(錄影 12:20–20:25)
先只看一個資料點,把上標 ( i ) (i) ( i ) 都省掉,最後再對所有點加總。這一個點的對數概似是
log p ( x ; θ ) = log ∑ z p ( x , z ; θ ) \log p(x;\theta)=\log\sum_z p(x,z;\theta) log p ( x ; θ ) = log z ∑ p ( x , z ; θ )
難處在 log \log log 包住一個加總。講者接著做了一件他自己說「看起來很蠢」的事:挑任何一個在 z z z 上的機率分布 Q Q Q (Q ( z ) ≥ 0 Q(z)\ge 0 Q ( z ) ≥ 0 、∑ z Q ( z ) = 1 \sum_z Q(z)=1 ∑ z Q ( z ) = 1 ),乘進去再除回來。
log ∑ z p ( x , z ; θ ) = log ∑ z Q ( z ) p ( x , z ; θ ) Q ( z ) \log\sum_z p(x,z;\theta)=\log\sum_z Q(z)\,\frac{p(x,z;\theta)}{Q(z)} log z ∑ p ( x , z ; θ ) = log z ∑ Q ( z ) Q ( z ) p ( x , z ; θ )
值沒有變,因為 Q ( z ) / Q ( z ) = 1 Q(z)/Q(z)=1 Q ( z ) / Q ( z ) = 1 。變的是讀法:∑ z Q ( z ) ( ⋅ ) \sum_z Q(z)\,(\cdot) ∑ z Q ( z ) ( ⋅ ) 正好是「z z z 依 Q Q Q 抽樣時的期望值」,所以右邊可以改寫成
log E z ∼ Q [ p ( x , z ; θ ) Q ( z ) ] \log\,\mathbb{E}_{z\sim Q}\!\left[\frac{p(x,z;\theta)}{Q(z)}\right] log E z ∼ Q [ Q ( z ) p ( x , z ; θ ) ]
為什麼硬要湊成期望值?講者的理由很直接:「We have exactly one tool to deal with expectations.」(00:15:19)那個工具就是 Jensen。log \log log 是凹函數,所以 log E [ X ] ≥ E [ log X ] \log\mathbb{E}[X]\ge\mathbb{E}[\log X] log E [ X ] ≥ E [ log X ] ,套上去:
log p ( x ; θ ) ≥ E z ∼ Q [ log p ( x , z ; θ ) Q ( z ) ] = ∑ z Q ( z ) log p ( x , z ; θ ) Q ( z ) \log p(x;\theta)\;\ge\;\mathbb{E}_{z\sim Q}\!\left[\log\frac{p(x,z;\theta)}{Q(z)}\right]=\sum_z Q(z)\log\frac{p(x,z;\theta)}{Q(z)} log p ( x ; θ ) ≥ E z ∼ Q [ log Q ( z ) p ( x , z ; θ ) ] = z ∑ Q ( z ) log Q ( z ) p ( x , z ; θ )
右邊就是這一個點的下界。講義把它記成 E L B O ( x ; Q , θ ) \mathrm{ELBO}(x;Q,\theta) ELBO ( x ; Q , θ ) 。兩件事要留意:
這個不等式對任何 Q Q Q 、任何 θ \theta θ 都成立,還沒有用到 Q Q Q 該怎麼選。
Q Q Q 是每個點各選一個 。把上標放回去就是 Q i ( z ( i ) ) Q_i(z^{(i)}) Q i ( z ( i ) ) ,每個點有自己的一組權重。講者特別強調這點,免得以為全部資料共用一個 Q Q Q 。
本文補充一個講者沒有明說、但值得看清楚的地方:Jensen 之後 log \log log 跑到加總裡面,直接作用在 p ( x , z ; θ ) p(x,z;\theta) p ( x , z ; θ ) 上。對 GMM 而言 p ( x , z = j ; θ ) = ϕ j N ( x ; μ j , Σ j ) p(x,z=j;\theta)=\phi_j\,\mathcal N(x;\mu_j,\Sigma_j) p ( x , z = j ; θ ) = ϕ j N ( x ; μ j , Σ j ) ,取 log \log log 會拆成 log ϕ j \log\phi_j log ϕ j 、− 1 2 log ∣ Σ j ∣ -\tfrac12\log|\Sigma_j| − 2 1 log ∣ Σ j ∣ 與一個二次式相加,每個參數各管各的。這就是下界比原本的 ℓ \ell ℓ 好處理的原因。課堂的圖把 L t ( θ ) L_t(\theta) L t ( θ ) 畫成一座好爬的凹形小丘,講者問「我們在乎 L t L_t L t 的什麼」時自己接的答案也是「It's concave」,後面還說它是「nice concave function」。這是對這張示意圖與 GMM 這類好解的模型說的;一般的隱變數模型不保證下界對 θ \theta θ 是凹函數。EM 的單調性也用不到凹性,只需要 M 步找得到一個讓 L t L_t L t 不比在 θ t \theta_t θ t 低的點,後面講單調性時的不等式鏈會看到這一點。
讓下界貼上去:Q 取後驗機率
(錄影 20:25–25:30)
下界有了,還缺緊貼。整段推導只有 Jensen 那一步是不等式,所以只要讓 Jensen 取等號就行。什麼時候取等號?當期望值裡的隨機變數其實是常數。如果對所有 z z z 都有
p ( x , z ; θ ) Q ( z ) = c \frac{p(x,z;\theta)}{Q(z)}=c Q ( z ) p ( x , z ; θ ) = c
那左邊是 log E [ c ] = log c \log\mathbb{E}[c]=\log c log E [ c ] = log c ,右邊是 E [ log c ] = log c \mathbb{E}[\log c]=\log c E [ log c ] = log c ,兩邊相等。
要讓這個比值跟 z z z 無關,Q ( z ) Q(z) Q ( z ) 必須正比於 p ( x , z ; θ ) p(x,z;\theta) p ( x , z ; θ ) 。再加上 Q Q Q 要加總為 1,講義把正規化寫完:
Q ( z ) = p ( x , z ; θ ) ∑ z ′ p ( x , z ′ ; θ ) = p ( x , z ; θ ) p ( x ; θ ) = p ( z ∣ x ; θ ) Q(z)=\frac{p(x,z;\theta)}{\sum_{z'}p(x,z';\theta)}=\frac{p(x,z;\theta)}{p(x;\theta)}=p(z\mid x;\theta) Q ( z ) = ∑ z ′ p ( x , z ′ ; θ ) p ( x , z ; θ ) = p ( x ; θ ) p ( x , z ; θ ) = p ( z ∣ x ; θ )
也就是在目前參數下,z z z 的後驗機率。驗算一下比值:p ( x , z ; θ ) / p ( z ∣ x ; θ ) = p ( x ; θ ) p(x,z;\theta)/p(z\mid x;\theta)=p(x;\theta) p ( x , z ; θ ) / p ( z ∣ x ; θ ) = p ( x ; θ ) ,確實不含 z z z ,而且常數 c c c 正好是 p ( x ; θ ) p(x;\theta) p ( x ; θ ) ,所以下界的值是 log p ( x ; θ ) \log p(x;\theta) log p ( x ; θ ) 。
把所有點加起來,並把 Q i Q_i Q i 固定成用 θ t \theta_t θ t 算出來的後驗機率 Q i ( t ) ( z ) = p ( z ∣ x ( i ) ; θ t ) Q_i^{(t)}(z)=p(z\mid x^{(i)};\theta_t) Q i ( t ) ( z ) = p ( z ∣ x ( i ) ; θ t ) ,就得到開頭那張圖裡的替代曲線:
L t ( θ ) = ∑ i = 1 n ∑ z Q i ( t ) ( z ) log p ( x ( i ) , z ; θ ) Q i ( t ) ( z ) L_t(\theta)=\sum_{i=1}^n\sum_{z}Q_i^{(t)}(z)\log\frac{p(x^{(i)},z;\theta)}{Q_i^{(t)}(z)} L t ( θ ) = i = 1 ∑ n z ∑ Q i ( t ) ( z ) log Q i ( t ) ( z ) p ( x ( i ) , z ; θ )
它是下界,因為每個點各自的不等式逐項成立,加總後仍然成立;它在 θ t \theta_t θ t 緊貼,因為每一項在 θ t \theta_t θ t 都取等號。注意 Q i ( t ) Q_i^{(t)} Q i ( t ) 裡的 θ t \theta_t θ t 是凍結的數字,L t ( θ ) L_t(\theta) L t ( θ ) 只透過 p ( x ( i ) , z ; θ ) p(x^{(i)},z;\theta) p ( x ( i ) , z ; θ ) 依賴 θ \theta θ 。
講者把這個量叫做「evidence-based lower bound」,講義的名稱是 evidence lower bound,縮寫都是 ELBO。他順帶提到它的用途遠超過 GMM:「If you do diffusion models, you do ELBOs underneath the covers.」(00:23:26)
為什麼概似不會下降,以及 EM 不保證什麼
(錄影 17:20–18:25、24:25–32:40)
有了兩個性質,單調性只需要三步。講者在課堂上用幾何講(下界貼在曲線上,往下界的最高點走,原曲線只會更高),講義第 11.3 節寫成一條不等式鏈:
ℓ ( θ t + 1 ) ≥ L t ( θ t + 1 ) ≥ L t ( θ t ) = ℓ ( θ t ) \ell(\theta_{t+1})\;\ge\;L_t(\theta_{t+1})\;\ge\;L_t(\theta_t)\;=\;\ell(\theta_t) ℓ ( θ t + 1 ) ≥ L t ( θ t + 1 ) ≥ L t ( θ t ) = ℓ ( θ t )
第一個不等號用的是下界 性質,它對任何 θ \theta θ 成立,當然包括 θ t + 1 \theta_{t+1} θ t + 1 。
第二個不等號用的是 M 步的定義 :θ t + 1 \theta_{t+1} θ t + 1 是 L t L_t L t 的最大值點,值不會比在 θ t \theta_t θ t 小。
最後的等號用的是緊貼 。
所以 ℓ ( θ t ) \ell(\theta_t) ℓ ( θ t ) 是一個不會下降的數列。實務上的停止條件,講義建議看相鄰兩輪 ℓ \ell ℓ 的增量是否小於某個門檻。
這個保證有三個不包括的東西。第一個是講者自己點出來的,後兩個是學生問出來的:
不保證全域最佳。 起點不同會爬到不同的山頭,跟 k-means 一樣。隨機性只出現在初始化,之後每一步都是確定的。
不保證下界「好不好」。 有學生問有沒有什麼東西控制 L t L_t L t 的寬窄。講者說沒有,那取決於問題本身的形狀與曲率,就像梯度下降好不好收斂取決於損失函數。
不保證只走小步。 另一個學生指出 arg max \arg\max arg max 可能直接跳過 ℓ \ell ℓ 上的一個小凹陷。講者同意這有可能,並補充梯度下降因為有步長也會跳。
還有一個關於適用範圍的問答值得記下來。學生問:任何分布都能這樣做嗎?講者把問題反過來問:我們假設了什麼?答案是假設了 p ( x ; θ ) = ∑ z p ( x , z ; θ ) p(x;\theta)=\sum_z p(x,z;\theta) p ( x ; θ ) = ∑ z p ( x , z ; θ ) 這個分解,而且知道 z z z 是什麼、取哪些值、每一群長什麼形狀。他說,看到有人寫「機率函數具有以下形式」時要警覺:「that's usually a fairly strong assumption」(00:26:32)。這個假設排除了很多模型,但在知道資料確實有群聚或點光源結構時是合理的。
至於「z z z 看不到,那 Q Q Q 從哪來」這個疑問,講者的說法是:z z z 在真實世界裡量不到,但演算法執行時手上永遠有一個對 z z z 的猜測。兩個群、一個點算出來是 50% 對 50%,那個點的 Q Q Q 就是向量 ( 0.5 , 0.5 ) (0.5,0.5) ( 0.5 , 0.5 ) 。稍後他又補了一句,很適合拿來提醒自己別把軟指派當成事實:「This isn't a statement about the world. It's a statement about the algorithm's current belief.」(00:39:49)
套回 GMM:E 步是貝氏定理
(錄影 32:40–39:50)
把一般式套回高斯混合。E 步要算的是
w j ( i ) : = Q i ( z ( i ) = j ) = p ( z ( i ) = j ∣ x ( i ) ; ϕ , μ , Σ ) w_j^{(i)}:=Q_i(z^{(i)}=j)=p(z^{(i)}=j\mid x^{(i)};\phi,\mu,\Sigma) w j ( i ) := Q i ( z ( i ) = j ) = p ( z ( i ) = j ∣ x ( i ) ; ϕ , μ , Σ )
用貝氏定理展開:
w j ( i ) = ϕ j N ( x ( i ) ; μ j , Σ j ) ∑ l = 1 k ϕ l N ( x ( i ) ; μ l , Σ l ) w_j^{(i)}=\frac{\phi_j\;\mathcal N(x^{(i)};\mu_j,\Sigma_j)}{\sum_{l=1}^k\phi_l\;\mathcal N(x^{(i)};\mu_l,\Sigma_l)} w j ( i ) = ∑ l = 1 k ϕ l N ( x ( i ) ; μ l , Σ l ) ϕ j N ( x ( i ) ; μ j , Σ j )
分子有兩個因子,講者用一張圖分別說明。一個點落在兩個中心之間、離 μ 1 \mu_1 μ 1 近一點,如果兩群一樣大,直覺會給它大約 60% 對 40%,這來自高斯密度的比值。但如果第二群的點數是第一群的一千倍,ϕ 2 \phi_2 ϕ 2 就是 ϕ 1 \phi_1 ϕ 1 的一千倍,分子裡第二群那一項跟著乘上一千,這個點屬於第二群的機率會大幅上升。密度與比例是相乘的關係,然後除以總和做正規化。
有人會不安:這裡比較的是密度值,不是機率。講者說沒關係,這些數字是有意義的,正規化之後就是機率。他對這段的建議很實際:「code up some Python that does it once. Then it locks in your brain.」(00:38:47)下面的數值例子就是照這個建議做的。
套回 GMM:M 步是加權的最大概似
(錄影 39:50–48:05)
M 步要對 ϕ , μ , Σ \phi,\mu,\Sigma ϕ , μ , Σ 最大化
L t ( θ ) = ∑ i = 1 n ∑ j = 1 k w j ( i ) log ϕ j 1 ( 2 π ) d / 2 ∣ Σ j ∣ 1 / 2 exp ( − 1 2 ( x ( i ) − μ j ) ⊤ Σ j − 1 ( x ( i ) − μ j ) ) w j ( i ) L_t(\theta)=\sum_{i=1}^n\sum_{j=1}^k w_j^{(i)}\log\frac{\phi_j\,\dfrac{1}{(2\pi)^{d/2}|\Sigma_j|^{1/2}}\exp\!\Big(-\tfrac12(x^{(i)}-\mu_j)^\top\Sigma_j^{-1}(x^{(i)}-\mu_j)\Big)}{w_j^{(i)}} L t ( θ ) = i = 1 ∑ n j = 1 ∑ k w j ( i ) log w j ( i ) ϕ j ( 2 π ) d /2 ∣ Σ j ∣ 1/2 1 exp ( − 2 1 ( x ( i ) − μ j ) ⊤ Σ j − 1 ( x ( i ) − μ j ) )
這裡 x ( i ) , μ j ∈ R d x^{(i)},\mu_j\in\mathbb R^d x ( i ) , μ j ∈ R d ,Σ j ∈ R d × d \Sigma_j\in\mathbb R^{d\times d} Σ j ∈ R d × d 對稱且半正定(講者的說法;要寫得出上面式子裡的高斯密度,還需要 Σ j \Sigma_j Σ j 可逆,也就是正定,後面消去 Σ l − 1 \Sigma_l^{-1} Σ l − 1 時用的就是這一點)。式子很長,但 w j ( i ) w_j^{(i)} w j ( i ) 在 M 步是固定的數字,做法只有一招:對每個參數求梯度、令它為零。
平均值 μ l \mu_l μ l 。 把 log \log log 拆開,跟 μ l \mu_l μ l 有關的只剩 j = l j=l j = l 的指數部分,其餘(log ϕ j \log\phi_j log ϕ j 、行列式、log w j ( i ) \log w_j^{(i)} log w j ( i ) 、其他群的項)微分後都是零:
∇ μ l L t = ∇ μ l ∑ i = 1 n w l ( i ) ( − 1 2 ( x ( i ) − μ l ) ⊤ Σ l − 1 ( x ( i ) − μ l ) ) = ∑ i = 1 n w l ( i ) Σ l − 1 ( x ( i ) − μ l ) \nabla_{\mu_l}L_t=\nabla_{\mu_l}\sum_{i=1}^n w_l^{(i)}\Big(-\tfrac12(x^{(i)}-\mu_l)^\top\Sigma_l^{-1}(x^{(i)}-\mu_l)\Big)=\sum_{i=1}^n w_l^{(i)}\,\Sigma_l^{-1}(x^{(i)}-\mu_l) ∇ μ l L t = ∇ μ l i = 1 ∑ n w l ( i ) ( − 2 1 ( x ( i ) − μ l ) ⊤ Σ l − 1 ( x ( i ) − μ l ) ) = i = 1 ∑ n w l ( i ) Σ l − 1 ( x ( i ) − μ l )
第二個等號用的是對稱矩陣 A A A 的二次式微分 ∇ μ ( x − μ ) ⊤ A ( x − μ ) = − 2 A ( x − μ ) \nabla_\mu\,(x-\mu)^\top A(x-\mu)=-2A(x-\mu) ∇ μ ( x − μ ) ⊤ A ( x − μ ) = − 2 A ( x − μ ) 。把 Σ l − 1 \Sigma_l^{-1} Σ l − 1 提到加總外面,令梯度為零:
Σ l − 1 ∑ i = 1 n w l ( i ) ( x ( i ) − μ l ) = 0 \Sigma_l^{-1}\sum_{i=1}^n w_l^{(i)}(x^{(i)}-\mu_l)=0 Σ l − 1 i = 1 ∑ n w l ( i ) ( x ( i ) − μ l ) = 0
講者在這裡停下來問:為什麼最後答案裡沒有 Σ l \Sigma_l Σ l ?兩邊同乘 Σ l \Sigma_l Σ l 就消掉了。能這樣做是因為 Σ l − 1 \Sigma_l^{-1} Σ l − 1 滿秩,一個滿秩矩陣乘上某個向量得到零,那個向量本身必須是零。如果矩陣秩不足,括號裡就可能有非零的解。於是
∑ i = 1 n w l ( i ) ( x ( i ) − μ l ) = 0 ⟹ μ l = ∑ i = 1 n w l ( i ) x ( i ) ∑ i = 1 n w l ( i ) \sum_{i=1}^n w_l^{(i)}(x^{(i)}-\mu_l)=0\quad\Longrightarrow\quad\mu_l=\frac{\sum_{i=1}^n w_l^{(i)}x^{(i)}}{\sum_{i=1}^n w_l^{(i)}} i = 1 ∑ n w l ( i ) ( x ( i ) − μ l ) = 0 ⟹ μ l = ∑ i = 1 n w l ( i ) ∑ i = 1 n w l ( i ) x ( i )
這正是上一堂直覺猜到的加權平均。同樣的推導在 GDA 與最小平方法出現過,差別只是每一項多帶一個權重。
比例 ϕ j \phi_j ϕ j 。 跟 ϕ \phi ϕ 有關的項是 ∑ i ∑ j w j ( i ) log ϕ j \sum_i\sum_j w_j^{(i)}\log\phi_j ∑ i ∑ j w j ( i ) log ϕ j 。直接令微分為零會出問題:這個式子隨 ϕ j \phi_j ϕ j 變大而一直變大,沒有臨界點。漏掉的是限制式 ∑ j ϕ j = 1 \sum_j\phi_j=1 ∑ j ϕ j = 1 。講者只提醒「有限制的變數要用拉格朗日乘數」,細節留給助教講義;以下照主講義第 11.4 節補完。令
L ( ϕ ) = ∑ i = 1 n ∑ j = 1 k w j ( i ) log ϕ j + β ( ∑ j = 1 k ϕ j − 1 ) \mathcal L(\phi)=\sum_{i=1}^n\sum_{j=1}^k w_j^{(i)}\log\phi_j+\beta\Big(\sum_{j=1}^k\phi_j-1\Big) L ( ϕ ) = i = 1 ∑ n j = 1 ∑ k w j ( i ) log ϕ j + β ( j = 1 ∑ k ϕ j − 1 )
對 ϕ j \phi_j ϕ j 微分並令為零:∑ i w j ( i ) / ϕ j + β = 0 \sum_i w_j^{(i)}/\phi_j+\beta=0 ∑ i w j ( i ) / ϕ j + β = 0 ,所以 ϕ j = ∑ i w j ( i ) / ( − β ) \phi_j=\sum_i w_j^{(i)}/(-\beta) ϕ j = ∑ i w j ( i ) / ( − β ) 。把它代回 ∑ j ϕ j = 1 \sum_j\phi_j=1 ∑ j ϕ j = 1 ,並用每個點的權重加總為 1(∑ j w j ( i ) = 1 \sum_j w_j^{(i)}=1 ∑ j w j ( i ) = 1 ):
− β = ∑ i = 1 n ∑ j = 1 k w j ( i ) = n ⟹ ϕ j = 1 n ∑ i = 1 n w j ( i ) -\beta=\sum_{i=1}^n\sum_{j=1}^k w_j^{(i)}=n\quad\Longrightarrow\quad\phi_j=\frac1n\sum_{i=1}^n w_j^{(i)} − β = i = 1 ∑ n j = 1 ∑ k w j ( i ) = n ⟹ ϕ j = n 1 i = 1 ∑ n w j ( i )
共變異數 Σ j \Sigma_j Σ j 。 課堂沒有推,講義第 11.4 節也留作練習,結果列在第 11.1 節:
Σ j = ∑ i = 1 n w j ( i ) ( x ( i ) − μ j ) ( x ( i ) − μ j ) ⊤ ∑ i = 1 n w j ( i ) \Sigma_j=\frac{\sum_{i=1}^n w_j^{(i)}(x^{(i)}-\mu_j)(x^{(i)}-\mu_j)^\top}{\sum_{i=1}^n w_j^{(i)}} Σ j = ∑ i = 1 n w j ( i ) ∑ i = 1 n w j ( i ) ( x ( i ) − μ j ) ( x ( i ) − μ j ) ⊤
三條公式都跟「z z z 已知時的最大概似估計」長得一樣,只是把 0/1 的指示函數換成 w j ( i ) w_j^{(i)} w j ( i ) 。講者的總結是,EM 把上一堂臨時湊出來的演算法還原成有根據的推導,而且每一步都只是在說:依目前的參數,這是我對分群的最佳猜測。
數值例子:手算一輪 EM
以下是本文自擬的例子,不是課堂內容,數字用 Python 另外驗算過。
一維資料四個點 x = ( 0 , 1 , 2 , 5 ) x=(0,1,2,5) x = ( 0 , 1 , 2 , 5 ) ,兩個高斯。目前的參數 θ t \theta_t θ t :ϕ = ( 0.5 , 0.5 ) \phi=(0.5,0.5) ϕ = ( 0.5 , 0.5 ) 、μ = ( 1 , 3 ) \mu=(1,3) μ = ( 1 , 3 ) 、σ 2 = ( 1 , 1 ) \sigma^2=(1,1) σ 2 = ( 1 , 1 ) 。
E 步。 以 x = 1 x=1 x = 1 為例,N ( 1 ; 1 , 1 ) = 0.3989 \mathcal N(1;1,1)=0.3989 N ( 1 ; 1 , 1 ) = 0.3989 、N ( 1 ; 3 , 1 ) = 0.0540 \mathcal N(1;3,1)=0.0540 N ( 1 ; 3 , 1 ) = 0.0540 。乘上 ϕ j = 0.5 \phi_j=0.5 ϕ j = 0.5 得聯合機率 0.1995 0.1995 0.1995 與 0.0270 0.0270 0.0270 ,加起來 p ( x ) = 0.2265 p(x)=0.2265 p ( x ) = 0.2265 。所以 w 1 = 0.1995 / 0.2265 = 0.881 w_1=0.1995/0.2265=0.881 w 1 = 0.1995/0.2265 = 0.881 。四個點都算完:
x ( i ) x^{(i)} x ( i ) w 1 ( i ) w_1^{(i)} w 1 ( i ) w 2 ( i ) w_2^{(i)} w 2 ( i ) log p ( x ( i ) ; θ t ) \log p(x^{(i)};\theta_t) log p ( x ( i ) ; θ t ) 0 0.982 0.018 −2.094 1 0.881 0.119 −1.485 2 0.500 0.500 −1.419 5 0.002 0.998 −3.610
x = 2 x=2 x = 2 剛好在兩個中心正中間,兩群又一樣大,所以是 50% 對 50%。如果把比例改成第二群是第一群的一千倍(ϕ = ( 1 / 1001 , 1000 / 1001 ) \phi=(1/1001,\,1000/1001) ϕ = ( 1/1001 , 1000/1001 ) ),同一個點會變成 w 1 = 0.001 w_1=0.001 w 1 = 0.001 :密度相同,比例決定一切。對數概似加總 ℓ ( θ t ) = − 8.608 \ell(\theta_t)=-8.608 ℓ ( θ t ) = − 8.608 。
下界真的在下面嗎? 還是看 x = 1 x=1 x = 1 ,log p ( x ) = − 1.4852 \log p(x)=-1.4852 log p ( x ) = − 1.4852 。換三個 Q Q Q 代進 ∑ z Q ( z ) log p ( x , z ) Q ( z ) \sum_z Q(z)\log\frac{p(x,z)}{Q(z)} ∑ z Q ( z ) log Q ( z ) p ( x , z ) :
Q Q Q 兩個比值 p ( x , z ) / Q ( z ) p(x,z)/Q(z) p ( x , z ) / Q ( z ) 下界 ( 0.5 , 0.5 ) (0.5,\,0.5) ( 0.5 , 0.5 ) 0.399、0.054 −1.9189 ( 0.9 , 0.1 ) (0.9,\,0.1) ( 0.9 , 0.1 ) 0.222、0.270 −1.4870 ( 0.881 , 0.119 ) (0.881,\,0.119) ( 0.881 , 0.119 ) (後驗機率)0.2265、0.2265 −1.4852
前兩個都低於 − 1.4852 -1.4852 − 1.4852 ,而且比值越不一致、掉得越多。取後驗機率時兩個比值相等,都等於 p ( x ) p(x) p ( x ) ,下界剛好貼上。
M 步。 各群的有效點數 N j = ∑ i w j ( i ) N_j=\sum_i w_j^{(i)} N j = ∑ i w j ( i ) 是 ( 2.365 , 1.635 ) (2.365,\,1.635) ( 2.365 , 1.635 ) 。
ϕ = ( 2.365 4 , 1.635 4 ) = ( 0.591 , 0.409 ) \phi=\Big(\frac{2.365}{4},\frac{1.635}{4}\Big)=(0.591,\,0.409) ϕ = ( 4 2.365 , 4 1.635 ) = ( 0.591 , 0.409 )
μ 1 = 0.982 ⋅ 0 + 0.881 ⋅ 1 + 0.5 ⋅ 2 + 0.002 ⋅ 5 2.365 = 0.800 , μ 2 = 3.736 \mu_1=\frac{0.982\cdot0+0.881\cdot1+0.5\cdot2+0.002\cdot5}{2.365}=0.800,\qquad\mu_2=3.736 μ 1 = 2.365 0.982 ⋅ 0 + 0.881 ⋅ 1 + 0.5 ⋅ 2 + 0.002 ⋅ 5 = 0.800 , μ 2 = 3.736
變異數用新的平均算:σ 2 = ( 0.603 , 2.596 ) \sigma^2=(0.603,\,2.596) σ 2 = ( 0.603 , 2.596 ) 。
核對不等式鏈。 用新參數 θ t + 1 \theta_{t+1} θ t + 1 與舊的 w w w 算下界,得 L t ( θ t + 1 ) = − 7.398 L_t(\theta_{t+1})=-7.398 L t ( θ t + 1 ) = − 7.398 ;重新算對數概似,得 ℓ ( θ t + 1 ) = − 7.335 \ell(\theta_{t+1})=-7.335 ℓ ( θ t + 1 ) = − 7.335 。
− 7.335 ⏟ ℓ ( θ t + 1 ) ≥ − 7.398 ⏟ L t ( θ t + 1 ) ≥ − 8.608 ⏟ L t ( θ t ) = − 8.608 ⏟ ℓ ( θ t ) \underbrace{-7.335}_{\ell(\theta_{t+1})}\;\ge\;\underbrace{-7.398}_{L_t(\theta_{t+1})}\;\ge\;\underbrace{-8.608}_{L_t(\theta_t)}\;=\;\underbrace{-8.608}_{\ell(\theta_t)} ℓ ( θ t + 1 ) − 7.335 ≥ L t ( θ t + 1 ) − 7.398 ≥ L t ( θ t ) − 8.608 = ℓ ( θ t ) − 8.608
三個關係都成立。這個結果的意思是:第一群的中心從 1 移到 0.8、收窄去包住 0 , 1 0,1 0 , 1 ,第二群的中心往 5 5 5 移並放寬,資料在新模型下的對數概似提高了 1.27。中間那個不等號的差距 − 7.335 − ( − 7.398 ) = 0.063 -7.335-(-7.398)=0.063 − 7.335 − ( − 7.398 ) = 0.063 是下界在新位置已經不再緊貼的量,下一輪 E 步會重新算 w w w 把它貼回去。
提醒一件課堂沒講的事:這組資料只有四個點,如果你把程式繼續跑下去,第二群會縮到只剩 x = 5 x=5 x = 5 一個點、變異數趨近零、概似衝向無限大。這是高斯混合模型用最大概似估計時已知的退化情形,跟 EM 的單調性不衝突(概似確實一路上升),只是提醒例子太小時別把後面幾輪當成合理的分群。
PCA 要找的是哪個方向
(錄影 48:05–56:15)
後半堂換主題。講者對 PCA 的定位是日常工具:「PCA is a workhorse algorithm. I use it all the time.」(00:00:05)它常被誤用,他說那是因為用的人太多。
例子是汽車的兩個量:市區油耗與高速公路油耗(每加侖跑幾英里)。畫成散布圖,休旅車與卡車落在油耗表現差的那一端,經濟型小車在中間,油電車在表現好的那一端,整團點沿著一條斜線拉開。這條斜線的意思是「這輛車整體省不省油」,它就是我們要找的第一個主成分方向 u 1 u_1 u 1 。跟它垂直的 u 2 u_2 u 2 大約是「高速公路表現與市區表現的差距」,講者自己說這比較像故事而不是正式陳述。
正式一點:要找一組正規正交(orthonormal)的單位向量 u 1 , u 2 , … u_1,u_2,\dots u 1 , u 2 , … ,u 1 u_1 u 1 捕捉資料中最大的變異,u 2 u_2 u 2 捕捉次大的,依此類推。任何一點都可以用這組基底寫成 x = α 1 u 1 + α 2 u 2 + ⋯ x=\alpha_1u_1+\alpha_2u_2+\cdots x = α 1 u 1 + α 2 u 2 + ⋯ ;維度高的時候只留前幾項,就是降維。
動手之前有兩個前處理。
中心化。 把每個點減掉全體平均,讓資料的平均是零。PCA 找的是「變異最大的方向」,變異是相對於平均量的。如果不中心化,整團資料離原點很遠,算出來的方向會指向資料團的中心,而不是資料團內部拉得最開的方向。講者的話:「if you don't center, it will go wrong.」(00:52:09)
調整尺度。 各座標的單位不同時,要先把每個座標除以它的離散程度。講者舉的例子是英尺與英里:同一段距離用英尺表示,數值大約是英里的五千倍(1 英里是 5,280 英尺),那個座標的變異會被放大到蓋過其他座標,PCA 就會誤以為它是主要方向。講義第 12 章寫的做法是每個座標減平均後除以標準差,讓各座標的變異數都是 1;講者口頭說的是「scale them by the variance」,以講義的標準差為準。
稍後(1:05:36 前後)有學生問這是不是在做 z-score、遇到缺值怎麼辦。講者說這兩步嚴格講都不是非做不可(「technically not necessary」),但它們是實際資料上最常需要的基本前處理,還有別的做法可以再疊上去;PCA 本身不處理缺值,常見做法是先估補,比較粗暴的是把缺值的資料丟掉,而這門課不太談缺值問題。
點到直線最近的點,以及最大變異等於最小殘差
(錄影 56:15–1:02:30)
先解一個小問題:給單位向量 u u u ,直線是 { t u : t ∈ R } \{tu:t\in\mathbb R\} { t u : t ∈ R } ,直線上哪一點離 x x x 最近?設那一點是 α u \alpha u α u ,要最小化
∥ x − α u ∥ 2 = ∥ x ∥ 2 + α 2 ∥ u ∥ 2 − 2 α u ⊤ x = ∥ x ∥ 2 + α 2 − 2 α u ⊤ x \|x-\alpha u\|^2=\|x\|^2+\alpha^2\|u\|^2-2\alpha\,u^\top x=\|x\|^2+\alpha^2-2\alpha\,u^\top x ∥ x − α u ∥ 2 = ∥ x ∥ 2 + α 2 ∥ u ∥ 2 − 2 α u ⊤ x = ∥ x ∥ 2 + α 2 − 2 α u ⊤ x
第二個等號用了 ∥ u ∥ = 1 \|u\|=1 ∥ u ∥ = 1 。這是 α \alpha α 的開口向上二次式,對 α \alpha α 微分令為零:
2 α − 2 u ⊤ x = 0 ⟹ α = u ⊤ x 2\alpha-2u^\top x=0\quad\Longrightarrow\quad\alpha=u^\top x 2 α − 2 u ⊤ x = 0 ⟹ α = u ⊤ x
所以最近的點是 ( u ⊤ x ) u (u^\top x)\,u ( u ⊤ x ) u ,也就是 x x x 在 u u u 上的正交投影。有學生問,這跟直接算投影有什麼不同;講者說沒有不同,這段推導只是讓投影公式自己掉出來。
推廣到 k k k 個正規正交向量 u 1 , … , u k u_1,\dots,u_k u 1 , … , u k 張成的子空間,做法一樣:展開 ∥ x − ∑ j α j u j ∥ 2 \|x-\sum_j\alpha_ju_j\|^2 ∥ x − ∑ j α j u j ∥ 2 時,交叉項 u j ⊤ u l u_j^\top u_l u j ⊤ u l (j ≠ l j\ne l j = l )因為正交而消失,剩下每個 α j \alpha_j α j 各自的二次式,解出 α j = u j ⊤ x \alpha_j=u_j^\top x α j = u j ⊤ x 。正交性就是用在這裡,少了它各個係數會糾纏在一起。
講者接著放了一張資料點、直線與殘差的圖,直接說結論:最大化投影後的變異,等於最小化垂直方向的殘差。中間那一步課堂沒有寫出來,以下是本文補的。把 α = u ⊤ x \alpha=u^\top x α = u ⊤ x 代回距離公式,得到殘差(點到直線的距離平方):
∥ x − ( u ⊤ x ) u ∥ 2 = ∥ x ∥ 2 − ( u ⊤ x ) 2 \|x-(u^\top x)u\|^2=\|x\|^2-(u^\top x)^2 ∥ x − ( u ⊤ x ) u ∥ 2 = ∥ x ∥ 2 − ( u ⊤ x ) 2
∥ x ∥ 2 \|x\|^2 ∥ x ∥ 2 跟 u u u 的選擇無關。對所有資料點加總,∑ i ∥ x ( i ) ∥ 2 \sum_i\|x^{(i)}\|^2 ∑ i ∥ x ( i ) ∥ 2 是固定的,所以
min ∥ u ∥ = 1 ∑ i = 1 n ∥ x ( i ) − ( u ⊤ x ( i ) ) u ∥ 2 ⟺ max ∥ u ∥ = 1 ∑ i = 1 n ( u ⊤ x ( i ) ) 2 \min_{\|u\|=1}\sum_{i=1}^n\big\|x^{(i)}-(u^\top x^{(i)})u\big\|^2\quad\Longleftrightarrow\quad\max_{\|u\|=1}\sum_{i=1}^n(u^\top x^{(i)})^2 ∥ u ∥ = 1 min i = 1 ∑ n x ( i ) − ( u ⊤ x ( i ) ) u 2 ⟺ ∥ u ∥ = 1 max i = 1 ∑ n ( u ⊤ x ( i ) ) 2
左邊是「讓垂直殘差最小」,右邊是「讓投影後的變異最大」,兩個是同一個問題。後來有學生被這句話繞住,以為殘差大代表變異大,為什麼兩個目標會相同。講者澄清:最大化的是被投影方向解釋掉 的那一部分,最小化的是剩下 的那一部分,兩者加起來是定值。
右邊的式子也說明了為什麼尺度會壞事:某個座標數值特別大的點,在 ( u ⊤ x ( i ) ) 2 (u^\top x^{(i)})^2 ( u ⊤ x ( i ) ) 2 裡的貢獻就特別大,u u u 會被拉向那個座標。
特徵分解把問題變成分配權重
(錄影 1:02:30–1:13:45)
接下來是一段線性代數。講者先講一般的對稱矩陣 A A A ,下一節才指出 PCA 裡的 A A A 是誰。
對稱方陣 A ∈ R d × d A\in\mathbb R^{d\times d} A ∈ R d × d 可以分解成
A = U Λ U ⊤ , U ⊤ U = I , Λ = d i a g ( λ 1 , … , λ d ) , λ 1 ≥ λ 2 ≥ ⋯ ≥ λ d A=U\Lambda U^\top,\qquad U^\top U=I,\qquad\Lambda=\mathrm{diag}(\lambda_1,\dots,\lambda_d),\quad\lambda_1\ge\lambda_2\ge\cdots\ge\lambda_d A = U Λ U ⊤ , U ⊤ U = I , Λ = diag ( λ 1 , … , λ d ) , λ 1 ≥ λ 2 ≥ ⋯ ≥ λ d
U U U 的各行 u 1 , … , u d u_1,\dots,u_d u 1 , … , u d 是正規正交的特徵向量,λ i \lambda_i λ i 是對應的特徵值,慣例由大排到小。驗證一下:U ⊤ u i = e i U^\top u_i=e_i U ⊤ u i = e i (第 i i i 個標準基底向量),所以
A u i = U Λ U ⊤ u i = U Λ e i = λ i U e i = λ i u i Au_i=U\Lambda U^\top u_i=U\Lambda e_i=\lambda_i\,Ue_i=\lambda_iu_i A u i = U Λ U ⊤ u i = U Λ e i = λ i U e i = λ i u i
現在要解的是 max ∥ v ∥ = 1 v ⊤ A v \max_{\|v\|=1}v^\top Av max ∥ v ∥ = 1 v ⊤ A v 。課堂上這個被最大化的向量寫成 x x x ,為了不跟資料點撞名,這裡改叫 v v v 。因為 u 1 , … , u d u_1,\dots,u_d u 1 , … , u d 是一組基底,v v v 可以寫成 v = ∑ j α j u j = U α v=\sum_j\alpha_ju_j=U\alpha v = ∑ j α j u j = U α 。代進去:
v ⊤ A v = α ⊤ U ⊤ U Λ U ⊤ U α = α ⊤ Λ α = ∑ j = 1 d λ j α j 2 v^\top Av=\alpha^\top U^\top\,U\Lambda U^\top\,U\alpha=\alpha^\top\Lambda\alpha=\sum_{j=1}^d\lambda_j\alpha_j^2 v ⊤ A v = α ⊤ U ⊤ U Λ U ⊤ U α = α ⊤ Λ α = j = 1 ∑ d λ j α j 2
兩次用到 U ⊤ U = I U^\top U=I U ⊤ U = I 。同樣地 ∥ v ∥ 2 = α ⊤ U ⊤ U α = ∑ j α j 2 \|v\|^2=\alpha^\top U^\top U\alpha=\sum_j\alpha_j^2 ∥ v ∥ 2 = α ⊤ U ⊤ U α = ∑ j α j 2 。所以原問題變成
max α ∑ j = 1 d λ j α j 2 限制 ∑ j = 1 d α j 2 = 1 \max_{\alpha}\;\sum_{j=1}^d\lambda_j\alpha_j^2\qquad\text{限制}\quad\sum_{j=1}^d\alpha_j^2=1 α max j = 1 ∑ d λ j α j 2 限制 j = 1 ∑ d α j 2 = 1
這是在分配一單位的權重:每放一份權重在第 j j j 個方向,就得到 λ j \lambda_j λ j 的報酬。λ 1 \lambda_1 λ 1 最大,所以把全部權重放在第一個方向,α = e 1 \alpha=e_1 α = e 1 、v = u 1 v=u_1 v = u 1 ,最大值是 λ 1 \lambda_1 λ 1 。寫成不等式是 ∑ j λ j α j 2 ≤ λ 1 ∑ j α j 2 = λ 1 \sum_j\lambda_j\alpha_j^2\le\lambda_1\sum_j\alpha_j^2=\lambda_1 ∑ j λ j α j 2 ≤ λ 1 ∑ j α j 2 = λ 1 。
講者接著追問:如果 λ 1 = λ 2 \lambda_1=\lambda_2 λ 1 = λ 2 呢?u 1 u_1 u 1 仍然是解,但 u 1 , u 2 u_1,u_2 u 1 , u 2 張成的平面上任何單位向量都一樣好,「第一主成分」不再是一個方向,而是一整個子空間。更麻煩的是兩個特徵值很接近的時候:理論上有唯一解,實際上資料稍微變動,算出來的方向就可能在那個平面裡轉到別處。這一點下面講 PCA 的風險時會再回來。
那個矩陣就是共變異數矩陣
(錄影 1:13:45–1:14:55)
回到 PCA 的目標。除以 n n n 不影響最大值的位置:
1 n ∑ i = 1 n ( u ⊤ x ( i ) ) 2 = 1 n ∑ i = 1 n u ⊤ x ( i ) x ( i ) ⊤ u = u ⊤ ( 1 n ∑ i = 1 n x ( i ) x ( i ) ⊤ ) u = u ⊤ Σ u \frac1n\sum_{i=1}^n(u^\top x^{(i)})^2=\frac1n\sum_{i=1}^nu^\top x^{(i)}x^{(i)\top}u=u^\top\Big(\frac1n\sum_{i=1}^nx^{(i)}x^{(i)\top}\Big)u=u^\top\Sigma u n 1 i = 1 ∑ n ( u ⊤ x ( i ) ) 2 = n 1 i = 1 ∑ n u ⊤ x ( i ) x ( i ) ⊤ u = u ⊤ ( n 1 i = 1 ∑ n x ( i ) x ( i ) ⊤ ) u = u ⊤ Σ u
第一個等號把純量 ( u ⊤ x ) 2 (u^\top x)^2 ( u ⊤ x ) 2 寫成 ( u ⊤ x ) ( x ⊤ u ) (u^\top x)(x^\top u) ( u ⊤ x ) ( x ⊤ u ) ,第二個等號把跟 i i i 無關的 u u u 提到加總外面。中間的 Σ = 1 n ∑ i x ( i ) x ( i ) ⊤ \Sigma=\frac1n\sum_ix^{(i)}x^{(i)\top} Σ = n 1 ∑ i x ( i ) x ( i ) ⊤ 在資料平均為零時就是經驗共變異數矩陣。共變異數的定義裡本來是 ( x − μ ) ( x − μ ) ⊤ (x-\mu)(x-\mu)^\top ( x − μ ) ( x − μ ) ⊤ ,這裡沒有 μ \mu μ 是因為已經先減掉了。這是中心化在數學上的理由:不減平均,這個矩陣就不能解讀成共變異數。
Σ \Sigma Σ 對稱,套用上一節的結論:最大化 u ⊤ Σ u u^\top\Sigma u u ⊤ Σ u 的單位向量是 Σ \Sigma Σ 最大特徵值對應的特徵向量。要 k k k 個方向就取前 k k k 個特徵向量;講者說多維的情形是同一套論證,把向量換成矩陣,課堂上略過。這也接回開頭那句話:GMM 的橢圓軸是共變異數矩陣的特徵向量,PCA 找的是同一種東西。
講者在這裡把中心化說成「whiten」。一般用法裡 whitening 指的是進一步讓共變異數變成單位矩陣,比減平均多做一步;他這裡指的只是減掉平均。
數值例子:四輛車的 PCA
以下是本文自擬的例子,不是課堂內容,數字用 Python 另外驗算過。
四輛車的(市區、高速)油耗:( 27 , 32 ) (27,32) ( 27 , 32 ) 、( 26 , 33 ) (26,33) ( 26 , 33 ) 、( 23 , 30 ) (23,30) ( 23 , 30 ) 、( 24 , 29 ) (24,29) ( 24 , 29 ) 。
中心化。 平均是 ( 25 , 31 ) (25,31) ( 25 , 31 ) ,減掉後得到 ( 2 , 1 ) (2,1) ( 2 , 1 ) 、( 1 , 2 ) (1,2) ( 1 , 2 ) 、( − 2 , − 1 ) (-2,-1) ( − 2 , − 1 ) 、( − 1 , − 2 ) (-1,-2) ( − 1 , − 2 ) 。
共變異數矩陣。 第一個座標的平方和是 4 + 1 + 4 + 1 = 10 4+1+4+1=10 4 + 1 + 4 + 1 = 10 ,第二個也是 10,交叉乘積和是 2 + 2 + 2 + 2 = 8 2+2+2+2=8 2 + 2 + 2 + 2 = 8 ,各除以 4:
Σ = ( 2.5 2 2 2.5 ) \Sigma=\begin{pmatrix}2.5&2\\2&2.5\end{pmatrix} Σ = ( 2.5 2 2 2.5 )
特徵分解。 Σ ( 1 1 ) = ( 4.5 4.5 ) \Sigma\begin{pmatrix}1\\1\end{pmatrix}=\begin{pmatrix}4.5\\4.5\end{pmatrix} Σ ( 1 1 ) = ( 4.5 4.5 ) 、Σ ( 1 − 1 ) = ( 0.5 − 0.5 ) \Sigma\begin{pmatrix}1\\-1\end{pmatrix}=\begin{pmatrix}0.5\\-0.5\end{pmatrix} Σ ( 1 − 1 ) = ( 0.5 − 0.5 ) ,所以 λ 1 = 4.5 \lambda_1=4.5 λ 1 = 4.5 、u 1 = 1 2 ( 1 , 1 ) u_1=\frac{1}{\sqrt2}(1,1) u 1 = 2 1 ( 1 , 1 ) ,λ 2 = 0.5 \lambda_2=0.5 λ 2 = 0.5 、u 2 = 1 2 ( 1 , − 1 ) u_2=\frac{1}{\sqrt2}(1,-1) u 2 = 2 1 ( 1 , − 1 ) 。
驗算目標函數。 四個點在 u 1 u_1 u 1 上的投影是 ± 3 / 2 \pm3/\sqrt2 ± 3/ 2 ,平方都是 4.5,平均 4.5,等於 λ 1 \lambda_1 λ 1 。換成座標軸方向 ( 1 , 0 ) (1,0) ( 1 , 0 ) ,投影平方的平均只有 2.5;換成 30 度方向是 4.23。都比 4.5 小。
殘差。 每個點的 ∥ x ∥ 2 = 5 \|x\|^2=5 ∥ x ∥ 2 = 5 ,在 u 1 u_1 u 1 上解釋掉 4.5,殘差 5 − 4.5 = 0.5 5-4.5=0.5 5 − 4.5 = 0.5 ,剛好是它在 u 2 u_2 u 2 上投影的平方。
結果代表什麼。 u 1 u_1 u 1 是「市區與高速一起變好」的方向,占總變異 4.5 / ( 4.5 + 0.5 ) = 90 % 4.5/(4.5+0.5)=90\% 4.5/ ( 4.5 + 0.5 ) = 90% 。如果只留一個數字描述每輛車,用 u 1 ⊤ x u_1^\top x u 1 ⊤ x 就保住九成的變異。
不中心化會怎樣。 直接用原始資料算 1 n ∑ i x ( i ) x ( i ) ⊤ \frac1n\sum_ix^{(i)}x^{(i)\top} n 1 ∑ i x ( i ) x ( i ) ⊤ ,得到 ( 627.5 777 777 963.5 ) \begin{pmatrix}627.5&777\\777&963.5\end{pmatrix} ( 627.5 777 777 963.5 ) ,它的第一特徵向量是 ( 0.628 , 0.778 ) (0.628,0.778) ( 0.628 , 0.778 ) 。把平均 ( 25 , 31 ) (25,31) ( 25 , 31 ) 正規化是 ( 0.628 , 0.778 ) (0.628,0.778) ( 0.628 , 0.778 ) ,幾乎一模一樣。原因是這個矩陣等於 Σ + μ μ ⊤ \Sigma+\mu\mu^\top Σ + μ μ ⊤ ,μ μ ⊤ \mu\mu^\top μ μ ⊤ 的量級遠大於 Σ \Sigma Σ ,算出來的「主成分」只是在指向資料團的位置。這個例子裡兩個方向都接近 45 度,看起來差不多,是因為市區與高速油耗的數值本來就相近;換一組平均在 ( 25 , 3 ) (25,3) ( 25 , 3 ) 的資料,差別就一目了然。
尺度不同會怎樣。 把中心化後的第一個座標乘以 10(當作換了單位),Σ \Sigma Σ 變成 ( 250 20 20 2.5 ) \begin{pmatrix}250&20\\20&2.5\end{pmatrix} ( 250 20 20 2.5 ) ,第一特徵向量變成 ( 0.997 , 0.080 ) (0.997,0.080) ( 0.997 , 0.080 ) ,幾乎貼在第一個座標軸上。資料本身的關係沒變,只是單位換了,主成分就被拉走。
PCA 什麼時候不可靠,要留幾個方向
(錄影 1:11:40–1:19:20)
推導走完,PCA 會出錯的地方就列得出來了。講者點名三個:沒有中心化、各座標尺度不同、特徵值沒有分開。前兩個前面看過,第三個是他花最多時間講的。
如果第三個特徵值明顯大於第四個,前三個方向可以穩定地辨認出來。如果前幾個特徵值擠在一起,PCA 回傳的是那個子空間裡的某一組基底,換一批資料就可能回傳另一組。子空間本身是穩的,座標不穩。設想你對訓練資料做 PCA、在降維後的座標上訓練線性分類器,之後新資料進來重做 PCA,同一個「第一維」可能已經不是同一個方向,分類器在各座標上學到的權重就對不上。所以他說:「So using it for dimensionality reduction, I'm not a super fan of. You have to be careful about that if you do it.」(01:14:56)這句話要連著前文讀。他開始講 PCA 時才說過它是「a very good dimensionality reduction technique」(00:48:06),自己也常拿來看資料;他保留的是特徵值沒分開時,還把降維後的座標交給下游模型這個用法,結論是要小心,不是不要用。
那要留幾個方向?看前 k k k 個特徵值占全部特徵值總和的比例。講者問全班:給一個矩陣,怎麼有效率地算出全部特徵值的和?答案是跡(trace),也就是對角線元素相加,不必做完整的特徵分解。所以只要算出前 k k k 個方向,對每個方向乘一次矩陣得到 λ i \lambda_i λ i (因為 Σ u i = λ i u i \Sigma u_i=\lambda_iu_i Σ u i = λ i u i ),再除以 t r ( Σ ) \mathrm{tr}(\Sigma) tr ( Σ ) 就知道解釋了多少。上面的例子裡 t r ( Σ ) = 2.5 + 2.5 = 5 \mathrm{tr}(\Sigma)=2.5+2.5=5 tr ( Σ ) = 2.5 + 2.5 = 5 ,λ 1 / 5 = 90 % \lambda_1/5=90\% λ 1 /5 = 90% 。他也提到,資料量大時只算前幾個方向的「thin PCA」可以算得相當便宜。
最後有學生問,為什麼要降維、留著全部的維度不好嗎。講者的回答有兩層。日常的一層:市區油耗與高速油耗其實是同一件事,你關心的只是車子省不省油。一般的一層:如果資料名義上在很高維的空間,實際上貼近一個低維子空間,找出那個子空間就能做更強的推論。常見的現象是解釋變異量隨著主成分數目增加很快趨緩,前幾個成分就解釋了大部分資料。
收尾時他把兩個主題併在一起看:EM 假設資料背後有機率式的隱藏結構(幾個高斯光源),PCA 假設共變異數矩陣裡的子空間分得開。他說對他而言這些假設才是重點:動手之前先問自己的資料符不符合。投影片上還有一張用 PCA 去雜訊的圖,課堂上跳過了。這也是 Chris Ré 這學期的最後一堂。
下一堂 講擴散模型,會直接用到這堂的 ELBO:把加了雜訊的中間狀態當成隱變數 z z z ,用同一個「乘 Q Q Q 除 Q Q Q 再套 Jensen」的手法替概似造下界。
自我檢查
1. 某個點有兩個可能的 z z z ,聯合機率是 p ( x , z = 1 ) = 0.03 p(x,z=1)=0.03 p ( x , z = 1 ) = 0.03 、p ( x , z = 2 ) = 0.01 p(x,z=2)=0.01 p ( x , z = 2 ) = 0.01 。算出 log p ( x ) \log p(x) log p ( x ) 、Q = ( 0.5 , 0.5 ) Q=(0.5,0.5) Q = ( 0.5 , 0.5 ) 時的下界,以及讓下界緊貼的 Q Q Q 。
答:p ( x ) = 0.04 p(x)=0.04 p ( x ) = 0.04 ,log p ( x ) = − 3.219 \log p(x)=-3.219 log p ( x ) = − 3.219 。Q = ( 0.5 , 0.5 ) Q=(0.5,0.5) Q = ( 0.5 , 0.5 ) 時下界是 0.5 log 0.06 + 0.5 log 0.02 = − 3.363 0.5\log 0.06+0.5\log 0.02=-3.363 0.5 log 0.06 + 0.5 log 0.02 = − 3.363 ,比 − 3.219 -3.219 − 3.219 低。緊貼的 Q Q Q 是後驗機率 ( 0.75 , 0.25 ) (0.75,0.25) ( 0.75 , 0.25 ) ,此時兩個比值 0.03 / 0.75 0.03/0.75 0.03/0.75 與 0.01 / 0.25 0.01/0.25 0.01/0.25 都是 0.04 0.04 0.04 。
2. 寫出證明 ℓ ( θ t + 1 ) ≥ ℓ ( θ t ) \ell(\theta_{t+1})\ge\ell(\theta_t) ℓ ( θ t + 1 ) ≥ ℓ ( θ t ) 的不等式鏈,指出哪一步用緊貼、哪一步用下界、哪一步用 M 步。如果 M 步沒有找到最大值,只找到一個讓 L t L_t L t 比在 θ t \theta_t θ t 高的 θ \theta θ ,結論還成立嗎?
判準:鏈是 ℓ ( θ t + 1 ) ≥ L t ( θ t + 1 ) ≥ L t ( θ t ) = ℓ ( θ t ) \ell(\theta_{t+1})\ge L_t(\theta_{t+1})\ge L_t(\theta_t)=\ell(\theta_t) ℓ ( θ t + 1 ) ≥ L t ( θ t + 1 ) ≥ L t ( θ t ) = ℓ ( θ t ) ,依序是下界、M 步、緊貼。第二問成立,因為中間那一步只需要 L t ( θ t + 1 ) ≥ L t ( θ t ) L_t(\theta_{t+1})\ge L_t(\theta_t) L t ( θ t + 1 ) ≥ L t ( θ t ) ,不需要是最大值。(第二問是本文延伸,課堂沒有講。)
3. 一維兩群的 GMM,某個點在兩群的高斯密度分別是 0.3 與 0.1,ϕ = ( 0.2 , 0.8 ) \phi=(0.2,0.8) ϕ = ( 0.2 , 0.8 ) 。它屬於第一群的 w 1 w_1 w 1 是多少?跟只看密度的直覺差在哪?
答:w 1 = 0.2 × 0.3 0.2 × 0.3 + 0.8 × 0.1 = 0.06 0.14 = 0.429 w_1=\frac{0.2\times0.3}{0.2\times0.3+0.8\times0.1}=\frac{0.06}{0.14}=0.429 w 1 = 0.2 × 0.3 + 0.8 × 0.1 0.2 × 0.3 = 0.14 0.06 = 0.429 。只看密度會覺得它有 75% 屬於第一群,但第二群大四倍,結果反而略偏向第二群。
4. 中心化後的資料共變異數矩陣是 ( 5 3 3 5 ) \begin{pmatrix}5&3\\3&5\end{pmatrix} ( 5 3 3 5 ) 。第一主成分方向是什麼?它解釋多少比例的變異?如果矩陣是 ( 4 0 0 4 ) \begin{pmatrix}4&0\\0&4\end{pmatrix} ( 4 0 0 4 ) 呢?
答:特徵值是 8 與 2,u 1 = 1 2 ( 1 , 1 ) u_1=\frac1{\sqrt2}(1,1) u 1 = 2 1 ( 1 , 1 ) ,解釋 8 / t r = 8 / 10 = 80 % 8/\mathrm{tr}=8/10=80\% 8/ tr = 8/10 = 80% 。第二個矩陣兩個特徵值相等,任何單位向量的 u ⊤ Σ u u^\top\Sigma u u ⊤ Σ u 都是 4,沒有唯一的第一主成分,PCA 回傳哪個方向取決於實作細節與數值誤差。
5. 用一句話解釋:為什麼 M 步推導 μ l \mu_l μ l 時可以把 Σ l − 1 \Sigma_l^{-1} Σ l − 1 消掉,推導 ϕ j \phi_j ϕ j 時卻不能直接令微分為零?
判準:前者要提到 Σ l − 1 \Sigma_l^{-1} Σ l − 1 滿秩(可逆),所以它乘上某向量為零時該向量必為零;後者要提到 ϕ \phi ϕ 有加總為 1 的限制,少了限制目標函數沒有臨界點,要用拉格朗日乘數。
對應閱讀
主講義(2026 年 8 月版):
第 11.1 節 EM for mixture of Gaussians(pp.150–153):GMM 的模型設定與 E 步、M 步公式,Σ j \Sigma_j Σ j 的更新式在這裡。
第 11.2 節 Jensen's inequality(pp.153–154):講義先講凸函數版本 E [ f ( X ) ] ≥ f ( E X ) \mathbb E[f(X)]\ge f(\mathbb E X) E [ f ( X )] ≥ f ( E X ) ,再在 Remark 說凹函數方向相反;課堂只講凹函數版本。
第 11.3 節 General EM algorithms(pp.154–160):單點推導、ELBO 的定義、Q Q Q 取後驗機率、單調性的不等式鏈。
第 11.4 節 Mixture of Gaussians revisited(pp.160–162):μ l \mu_l μ l 與 ϕ j \phi_j ϕ j 的 M 步推導。
第 12 章 Principal components analysis(pp.167–172)。
課堂與講義不同的地方:
ELBO 的其他寫法沒講。 講義第 11.3.1 節把 ELBO 改寫成 log p ( x ) − D K L ( Q ∥ p z ∣ x ) \log p(x)-D_{KL}(Q\,\|\,p_{z\mid x}) log p ( x ) − D K L ( Q ∥ p z ∣ x ) ,可以直接看出「Q Q Q 取後驗機率時緊貼」;課堂只用 Jensen 的等號條件。
VAE 沒講。 講義第 11.5 節(pp.162–166)的變分推論與 variational auto-encoder 不在這堂的範圍。
PCA 的證明路線不同。 講義用一個註腳請讀者以拉格朗日乘數解 max u ⊤ Σ u \max u^\top\Sigma u max u ⊤ Σ u ,得到 Σ u = λ u \Sigma u=\lambda u Σ u = λ u ;課堂改用特徵基底展開成 ∑ j λ j α j 2 \sum_j\lambda_j\alpha_j^2 ∑ j λ j α j 2 。課堂的走法多一個收穫:特徵值相等或相近時會發生什麼事一看就知道。
最小殘差的觀點。 講義只說 PCA 也能從最小化近似誤差推出,留給作業;課堂推了點到直線最近點的投影公式,並口頭說明兩個目標相同,本文把單一方向的代數補完。
例子不同。 講義用同一個速度的英里與公里兩種讀數,以及遙控直升機飛行員的技術與興趣;課堂用市區與高速油耗。
對降維的態度不同。 講義把「先用 PCA 降維再做監督式學習」列為標準用途;講者對這個用法有保留,理由是特徵值不分開時座標不穩定。
講義有、課堂沒有的應用。 講義提到 eigenfaces(把 100×100 的人臉影像降維後比對),課堂沒提。
系列導覽 :上一堂 第 9 堂:k-means 與 GMM |下一堂 第 11 堂:擴散模型
課程影片來源
原始影片:Stanford CS229 Machine Learning | Spring 2026 | Lecture 10: GMM (EM), PCA
查核日期:2026-10-12。
內容核對:已依字幕核對(2026-10-12):全文依這支影片的英文字幕整份對照寫成,引用的英文原句都出自字幕並附時間戳;沒看板書與投影片畫面,公式依字幕的口述與主講義第 11、12 章還原,M 步中 ϕ j \phi_j ϕ j 的拉格朗日推導與 Σ j \Sigma_j Σ j 的更新式取自講義,兩個數值例子是本文自擬。
參考資料