Skip to content

EM 演算法與 PCA:下界怎麼保證概似不下降|Stanford CS229 第 10 堂

2026年10月12日1 分鐘
TL;DR前半堂用 Jensen 不等式替對數概似造出下界 ELBO,把 Q 取成後驗機率讓下界在目前參數緊貼,推出每一輪 EM 都不會讓概似下降,套回高斯混合就得到上一堂的加權平均公式。後半堂把 PCA 寫成在單位向量上最大化 uᵀΣu,答案是共變異數矩陣最大特徵值對應的特徵向量。

🌏 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)} 有一個看不到的隱變數 z(i)z^{(i)},表示它來自哪個光源。k-means 給的是硬指派,GMM 給的是軟指派:一個點可以是「50% 屬於第一群、50% 屬於第二群」。指派完再重估每一群的平均 μj\mu_j、共變異數矩陣 Σj\Sigma_j 與比例 ϕj\phi_j。畫圖時每一群是個橢圓,因為那是多變數高斯的等密度線,橢圓的軸方向就是共變異數矩陣的特徵向量。這句話後半堂會再用到。

Jensen 不等式這堂只用凹函數的版本。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

把「以機率 λ\lambda 取 aa、以機率 1−λ1-\lambda 取 bb」看成一個隨機變數 XX,上式就是 log⁡E[X]≥E[log⁡X]\log \mathbb{E}[X]\ge\mathbb{E}[\log X]。講者反覆畫這張圖的理由是:方向記不住的時候,回想 log⁡\log 的弦在曲線下方就能還原。

接著是整段推導的地圖。把所有參數(GMM 裡是全部的 μj,Σj,ϕ\mu_j,\Sigma_j,\phi)收成一個向量 θ\theta,對數概似 ℓ(θ)\ell(\theta) 是一條有好幾個山頭的曲線,沒辦法直接求最大值。EM 的做法是在目前的猜測 θt\theta_t 造一條替代曲線 Lt(θ)L_t(\theta),它要滿足兩件事:

  1. 緊貼(tight):Lt(θt)=ℓ(θt)L_t(\theta_t)=\ell(\theta_t),兩條曲線在 θt\theta_t 碰在一起。
  2. 下界:對所有 θ\theta,Lt(θ)≤ℓ(θ)L_t(\theta)\le\ell(\theta)。

然後取 θt+1=arg⁡max⁡θLt(θ)\theta_{t+1}=\arg\max_\theta L_t(\theta),再在新的位置造下一條 Lt+1L_{t+1}。造曲線叫 E 步,在曲線上求最大值叫 M 步。

有學生問,為什麼不直接對 ℓ\ell 跑梯度下降。講者的回答分兩層。第一,EM 只是解這個問題的一種演算法,不是唯一一種。第二,ℓ(θ)\ell(\theta) 裡每一項都是 log⁡∑zp(x,z;θ)\log\sum_z p(x,z;\theta),直接做就得處理對 zz 的整個邊際化;EM 利用「這是隱變數模型」這個結構,把一個難問題拆成兩個輪流解的簡單問題。這跟 k-means 輪流「指派」與「算中心」是同一種交替法。

造下界:乘一個 Q 再除回去

(錄影 12:20–20:25)

先只看一個資料點,把上標 (i)(i) 都省掉,最後再對所有點加總。這一個點的對數概似是

log⁡p(x;θ)=log⁡∑zp(x,z;θ)\log p(x;\theta)=\log\sum_z p(x,z;\theta)

難處在 log⁡\log 包住一個加總。講者接著做了一件他自己說「看起來很蠢」的事:挑任何一個在 zz 上的機率分布 QQ(Q(z)≥0Q(z)\ge 0、∑zQ(z)=1\sum_z Q(z)=1),乘進去再除回來。

log⁡∑zp(x,z;θ)=log⁡∑zQ(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)}

值沒有變,因為 Q(z)/Q(z)=1Q(z)/Q(z)=1。變的是讀法:∑zQ(z) (⋅)\sum_z Q(z)\,(\cdot) 正好是「zz 依 QQ 抽樣時的期望值」,所以右邊可以改寫成

log⁡ Ez∼Q ⁣[p(x,z;θ)Q(z)]\log\,\mathbb{E}_{z\sim Q}\!\left[\frac{p(x,z;\theta)}{Q(z)}\right]

為什麼硬要湊成期望值?講者的理由很直接:「We have exactly one tool to deal with expectations.」(00:15:19)那個工具就是 Jensen。log⁡\log 是凹函數,所以 log⁡E[X]≥E[log⁡X]\log\mathbb{E}[X]\ge\mathbb{E}[\log X],套上去:

log⁡p(x;θ)  ≥  Ez∼Q ⁣[log⁡p(x,z;θ)Q(z)]=∑zQ(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)}

右邊就是這一個點的下界。講義把它記成 ELBO(x;Q,θ)\mathrm{ELBO}(x;Q,\theta)。兩件事要留意:

  • 這個不等式對任何 QQ、任何 θ\theta 都成立,還沒有用到 QQ 該怎麼選。
  • QQ 是每個點各選一個。把上標放回去就是 Qi(z(i))Q_i(z^{(i)}),每個點有自己的一組權重。講者特別強調這點,免得以為全部資料共用一個 QQ。

本文補充一個講者沒有明說、但值得看清楚的地方:Jensen 之後 log⁡\log 跑到加總裡面,直接作用在 p(x,z;θ)p(x,z;\theta) 上。對 GMM 而言 p(x,z=j;θ)=ϕj N(x;μj,Σj)p(x,z=j;\theta)=\phi_j\,\mathcal N(x;\mu_j,\Sigma_j),取 log⁡\log 會拆成 log⁡ϕj\log\phi_j、−12log⁡∣Σj∣-\tfrac12\log|\Sigma_j| 與一個二次式相加,每個參數各管各的。這就是下界比原本的 ℓ\ell 好處理的原因。課堂的圖把 Lt(θ)L_t(\theta) 畫成一座好爬的凹形小丘,講者問「我們在乎 LtL_t 的什麼」時自己接的答案也是「It's concave」,後面還說它是「nice concave function」。這是對這張示意圖與 GMM 這類好解的模型說的;一般的隱變數模型不保證下界對 θ\theta 是凹函數。EM 的單調性也用不到凹性,只需要 M 步找得到一個讓 LtL_t 不比在 θt\theta_t 低的點,後面講單調性時的不等式鏈會看到這一點。

讓下界貼上去:Q 取後驗機率

(錄影 20:25–25:30)

下界有了,還缺緊貼。整段推導只有 Jensen 那一步是不等式,所以只要讓 Jensen 取等號就行。什麼時候取等號?當期望值裡的隨機變數其實是常數。如果對所有 zz 都有

p(x,z;θ)Q(z)=c\frac{p(x,z;\theta)}{Q(z)}=c

那左邊是 log⁡E[c]=log⁡c\log\mathbb{E}[c]=\log c,右邊是 E[log⁡c]=log⁡c\mathbb{E}[\log c]=\log c,兩邊相等。

要讓這個比值跟 zz 無關,Q(z)Q(z) 必須正比於 p(x,z;θ)p(x,z;\theta)。再加上 QQ 要加總為 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)

也就是在目前參數下,zz 的後驗機率。驗算一下比值:p(x,z;θ)/p(z∣x;θ)=p(x;θ)p(x,z;\theta)/p(z\mid x;\theta)=p(x;\theta),確實不含 zz,而且常數 cc 正好是 p(x;θ)p(x;\theta),所以下界的值是 log⁡p(x;θ)\log p(x;\theta)。

把所有點加起來,並把 QiQ_i 固定成用 θt\theta_t 算出來的後驗機率 Qi(t)(z)=p(z∣x(i);θt)Q_i^{(t)}(z)=p(z\mid x^{(i)};\theta_t),就得到開頭那張圖裡的替代曲線:

Lt(θ)=∑i=1n∑zQi(t)(z)log⁡p(x(i),z;θ)Qi(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)}

它是下界,因為每個點各自的不等式逐項成立,加總後仍然成立;它在 θt\theta_t 緊貼,因為每一項在 θt\theta_t 都取等號。注意 Qi(t)Q_i^{(t)} 裡的 θt\theta_t 是凍結的數字,Lt(θ)L_t(\theta) 只透過 p(x(i),z;θ)p(x^{(i)},z;\theta) 依賴 θ\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)  ≥  Lt(θt+1)  ≥  Lt(θt)  =  ℓ(θt)\ell(\theta_{t+1})\;\ge\;L_t(\theta_{t+1})\;\ge\;L_t(\theta_t)\;=\;\ell(\theta_t)
  • 第一個不等號用的是下界性質,它對任何 θ\theta 成立,當然包括 θt+1\theta_{t+1}。
  • 第二個不等號用的是 M 步的定義:θt+1\theta_{t+1} 是 LtL_t 的最大值點,值不會比在 θt\theta_t 小。
  • 最後的等號用的是緊貼。

所以 ℓ(θt)\ell(\theta_t) 是一個不會下降的數列。實務上的停止條件,講義建議看相鄰兩輪 ℓ\ell 的增量是否小於某個門檻。

這個保證有三個不包括的東西。第一個是講者自己點出來的,後兩個是學生問出來的:

  • 不保證全域最佳。 起點不同會爬到不同的山頭,跟 k-means 一樣。隨機性只出現在初始化,之後每一步都是確定的。
  • 不保證下界「好不好」。 有學生問有沒有什麼東西控制 LtL_t 的寬窄。講者說沒有,那取決於問題本身的形狀與曲率,就像梯度下降好不好收斂取決於損失函數。
  • 不保證只走小步。 另一個學生指出 arg⁡max⁡\arg\max 可能直接跳過 ℓ\ell 上的一個小凹陷。講者同意這有可能,並補充梯度下降因為有步長也會跳。

還有一個關於適用範圍的問答值得記下來。學生問:任何分布都能這樣做嗎?講者把問題反過來問:我們假設了什麼?答案是假設了 p(x;θ)=∑zp(x,z;θ)p(x;\theta)=\sum_z p(x,z;\theta) 這個分解,而且知道 zz 是什麼、取哪些值、每一群長什麼形狀。他說,看到有人寫「機率函數具有以下形式」時要警覺:「that's usually a fairly strong assumption」(00:26:32)。這個假設排除了很多模型,但在知道資料確實有群聚或點光源結構時是合理的。

至於「zz 看不到,那 QQ 從哪來」這個疑問,講者的說法是:zz 在真實世界裡量不到,但演算法執行時手上永遠有一個對 zz 的猜測。兩個群、一個點算出來是 50% 對 50%,那個點的 QQ 就是向量 (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 步要算的是

wj(i):=Qi(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)

用貝氏定理展開:

wj(i)=ϕj  N(x(i);μj,Σj)∑l=1kϕ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)}

分子有兩個因子,講者用一張圖分別說明。一個點落在兩個中心之間、離 μ1\mu_1 近一點,如果兩群一樣大,直覺會給它大約 60% 對 40%,這來自高斯密度的比值。但如果第二群的點數是第一群的一千倍,ϕ2\phi_2 就是 ϕ1\phi_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 最大化

Lt(θ)=∑i=1n∑j=1kwj(i)log⁡ϕj 1(2π)d/2∣Σj∣1/2exp⁡ ⁣(−12(x(i)−μj)⊤Σj−1(x(i)−μj))wj(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)}}

這裡 x(i),μj∈Rdx^{(i)},\mu_j\in\mathbb R^d,Σj∈Rd×d\Sigma_j\in\mathbb R^{d\times d} 對稱且半正定(講者的說法;要寫得出上面式子裡的高斯密度,還需要 Σj\Sigma_j 可逆,也就是正定,後面消去 Σl−1\Sigma_l^{-1} 時用的就是這一點)。式子很長,但 wj(i)w_j^{(i)} 在 M 步是固定的數字,做法只有一招:對每個參數求梯度、令它為零。

平均值 μl\mu_l。 把 log⁡\log 拆開,跟 μl\mu_l 有關的只剩 j=lj=l 的指數部分,其餘(log⁡ϕj\log\phi_j、行列式、log⁡wj(i)\log w_j^{(i)}、其他群的項)微分後都是零:

∇μlLt=∇μl∑i=1nwl(i)(−12(x(i)−μl)⊤Σl−1(x(i)−μl))=∑i=1nwl(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)

第二個等號用的是對稱矩陣 AA 的二次式微分 ∇μ (x−μ)⊤A(x−μ)=−2A(x−μ)\nabla_\mu\,(x-\mu)^\top A(x-\mu)=-2A(x-\mu)。把 Σl−1\Sigma_l^{-1} 提到加總外面,令梯度為零:

Σl−1∑i=1nwl(i)(x(i)−μl)=0\Sigma_l^{-1}\sum_{i=1}^n w_l^{(i)}(x^{(i)}-\mu_l)=0

講者在這裡停下來問:為什麼最後答案裡沒有 Σl\Sigma_l?兩邊同乘 Σl\Sigma_l 就消掉了。能這樣做是因為 Σl−1\Sigma_l^{-1} 滿秩,一個滿秩矩陣乘上某個向量得到零,那個向量本身必須是零。如果矩陣秩不足,括號裡就可能有非零的解。於是

∑i=1nwl(i)(x(i)−μl)=0⟹μl=∑i=1nwl(i)x(i)∑i=1nwl(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)}}

這正是上一堂直覺猜到的加權平均。同樣的推導在 GDA 與最小平方法出現過,差別只是每一項多帶一個權重。

比例 ϕj\phi_j。 跟 ϕ\phi 有關的項是 ∑i∑jwj(i)log⁡ϕj\sum_i\sum_j w_j^{(i)}\log\phi_j。直接令微分為零會出問題:這個式子隨 ϕj\phi_j 變大而一直變大,沒有臨界點。漏掉的是限制式 ∑jϕj=1\sum_j\phi_j=1。講者只提醒「有限制的變數要用拉格朗日乘數」,細節留給助教講義;以下照主講義第 11.4 節補完。令

L(ϕ)=∑i=1n∑j=1kwj(i)log⁡ϕj+β(∑j=1kϕ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)

對 ϕj\phi_j 微分並令為零:∑iwj(i)/ϕj+β=0\sum_i w_j^{(i)}/\phi_j+\beta=0,所以 ϕj=∑iwj(i)/(−β)\phi_j=\sum_i w_j^{(i)}/(-\beta)。把它代回 ∑jϕj=1\sum_j\phi_j=1,並用每個點的權重加總為 1(∑jwj(i)=1\sum_j w_j^{(i)}=1):

−β=∑i=1n∑j=1kwj(i)=n⟹ϕj=1n∑i=1nwj(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)}

共變異數 Σj\Sigma_j。 課堂沒有推,講義第 11.4 節也留作練習,結果列在第 11.1 節:

Σj=∑i=1nwj(i)(x(i)−μj)(x(i)−μj)⊤∑i=1nwj(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)}}

三條公式都跟「zz 已知時的最大概似估計」長得一樣,只是把 0/1 的指示函數換成 wj(i)w_j^{(i)}。講者的總結是,EM 把上一堂臨時湊出來的演算法還原成有根據的推導,而且每一步都只是在說:依目前的參數,這是我對分群的最佳猜測。

數值例子:手算一輪 EM

以下是本文自擬的例子,不是課堂內容,數字用 Python 另外驗算過。

一維資料四個點 x=(0,1,2,5)x=(0,1,2,5),兩個高斯。目前的參數 θt\theta_t:ϕ=(0.5,0.5)\phi=(0.5,0.5)、μ=(1,3)\mu=(1,3)、σ2=(1,1)\sigma^2=(1,1)。

E 步。 以 x=1x=1 為例,N(1;1,1)=0.3989\mathcal N(1;1,1)=0.3989、N(1;3,1)=0.0540\mathcal N(1;3,1)=0.0540。乘上 ϕj=0.5\phi_j=0.5 得聯合機率 0.19950.1995 與 0.02700.0270,加起來 p(x)=0.2265p(x)=0.2265。所以 w1=0.1995/0.2265=0.881w_1=0.1995/0.2265=0.881。四個點都算完:

x(i)x^{(i)}w1(i)w_1^{(i)}w2(i)w_2^{(i)}log⁡p(x(i);θt)\log p(x^{(i)};\theta_t)
00.9820.018−2.094
10.8810.119−1.485
20.5000.500−1.419
50.0020.998−3.610

x=2x=2 剛好在兩個中心正中間,兩群又一樣大,所以是 50% 對 50%。如果把比例改成第二群是第一群的一千倍(ϕ=(1/1001, 1000/1001)\phi=(1/1001,\,1000/1001)),同一個點會變成 w1=0.001w_1=0.001:密度相同,比例決定一切。對數概似加總 ℓ(θt)=−8.608\ell(\theta_t)=-8.608。

下界真的在下面嗎? 還是看 x=1x=1,log⁡p(x)=−1.4852\log p(x)=-1.4852。換三個 QQ 代進 ∑zQ(z)log⁡p(x,z)Q(z)\sum_z Q(z)\log\frac{p(x,z)}{Q(z)}:

QQ兩個比值 p(x,z)/Q(z)p(x,z)/Q(z)下界
(0.5, 0.5)(0.5,\,0.5)0.399、0.054−1.9189
(0.9, 0.1)(0.9,\,0.1)0.222、0.270−1.4870
(0.881, 0.119)(0.881,\,0.119)(後驗機率)0.2265、0.2265−1.4852

前兩個都低於 −1.4852-1.4852,而且比值越不一致、掉得越多。取後驗機率時兩個比值相等,都等於 p(x)p(x),下界剛好貼上。

M 步。 各群的有效點數 Nj=∑iwj(i)N_j=\sum_i w_j^{(i)} 是 (2.365, 1.635)(2.365,\,1.635)。

ϕ=(2.3654,1.6354)=(0.591, 0.409)\phi=\Big(\frac{2.365}{4},\frac{1.635}{4}\Big)=(0.591,\,0.409) μ1=0.982⋅0+0.881⋅1+0.5⋅2+0.002⋅52.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

變異數用新的平均算:σ2=(0.603, 2.596)\sigma^2=(0.603,\,2.596)。

核對不等式鏈。 用新參數 θt+1\theta_{t+1} 與舊的 ww 算下界,得 Lt(θt+1)=−7.398L_t(\theta_{t+1})=-7.398;重新算對數概似,得 ℓ(θt+1)=−7.335\ell(\theta_{t+1})=-7.335。

−7.335⏟ℓ(θt+1)  ≥  −7.398⏟Lt(θt+1)  ≥  −8.608⏟Lt(θ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)}

三個關係都成立。這個結果的意思是:第一群的中心從 1 移到 0.8、收窄去包住 0,10,1,第二群的中心往 55 移並放寬,資料在新模型下的對數概似提高了 1.27。中間那個不等號的差距 −7.335−(−7.398)=0.063-7.335-(-7.398)=0.063 是下界在新位置已經不再緊貼的量,下一輪 E 步會重新算 ww 把它貼回去。

提醒一件課堂沒講的事:這組資料只有四個點,如果你把程式繼續跑下去,第二群會縮到只剩 x=5x=5 一個點、變異數趨近零、概似衝向無限大。這是高斯混合模型用最大概似估計時已知的退化情形,跟 EM 的單調性不衝突(概似確實一路上升),只是提醒例子太小時別把後面幾輪當成合理的分群。

PCA 要找的是哪個方向

(錄影 48:05–56:15)

後半堂換主題。講者對 PCA 的定位是日常工具:「PCA is a workhorse algorithm. I use it all the time.」(00:00:05)它常被誤用,他說那是因為用的人太多。

例子是汽車的兩個量:市區油耗與高速公路油耗(每加侖跑幾英里)。畫成散布圖,休旅車與卡車落在油耗表現差的那一端,經濟型小車在中間,油電車在表現好的那一端,整團點沿著一條斜線拉開。這條斜線的意思是「這輛車整體省不省油」,它就是我們要找的第一個主成分方向 u1u_1。跟它垂直的 u2u_2 大約是「高速公路表現與市區表現的差距」,講者自己說這比較像故事而不是正式陳述。

正式一點:要找一組正規正交(orthonormal)的單位向量 u1,u2,…u_1,u_2,\dots,u1u_1 捕捉資料中最大的變異,u2u_2 捕捉次大的,依此類推。任何一點都可以用這組基底寫成 x=α1u1+α2u2+⋯x=\alpha_1u_1+\alpha_2u_2+\cdots;維度高的時候只留前幾項,就是降維。

動手之前有兩個前處理。

中心化。 把每個點減掉全體平均,讓資料的平均是零。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)

先解一個小問題:給單位向量 uu,直線是 {tu:t∈R}\{tu:t\in\mathbb R\},直線上哪一點離 xx 最近?設那一點是 αu\alpha 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

第二個等號用了 ∥u∥=1\|u\|=1。這是 α\alpha 的開口向上二次式,對 α\alpha 微分令為零:

2α−2u⊤x=0⟹α=u⊤x2\alpha-2u^\top x=0\quad\Longrightarrow\quad\alpha=u^\top x

所以最近的點是 (u⊤x) u(u^\top x)\,u,也就是 xx 在 uu 上的正交投影。有學生問,這跟直接算投影有什麼不同;講者說沒有不同,這段推導只是讓投影公式自己掉出來。

推廣到 kk 個正規正交向量 u1,…,uku_1,\dots,u_k 張成的子空間,做法一樣:展開 ∥x−∑jαjuj∥2\|x-\sum_j\alpha_ju_j\|^2 時,交叉項 uj⊤ulu_j^\top u_l(j≠lj\ne l)因為正交而消失,剩下每個 αj\alpha_j 各自的二次式,解出 αj=uj⊤x\alpha_j=u_j^\top x。正交性就是用在這裡,少了它各個係數會糾纏在一起。

講者接著放了一張資料點、直線與殘差的圖,直接說結論:最大化投影後的變異,等於最小化垂直方向的殘差。中間那一步課堂沒有寫出來,以下是本文補的。把 α=u⊤x\alpha=u^\top x 代回距離公式,得到殘差(點到直線的距離平方):

∥x−(u⊤x)u∥2=∥x∥2−(u⊤x)2\|x-(u^\top x)u\|^2=\|x\|^2-(u^\top x)^2

∥x∥2\|x\|^2 跟 uu 的選擇無關。對所有資料點加總,∑i∥x(i)∥2\sum_i\|x^{(i)}\|^2 是固定的,所以

min⁡∥u∥=1∑i=1n∥x(i)−(u⊤x(i))u∥2⟺max⁡∥u∥=1∑i=1n(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⊤x(i))2(u^\top x^{(i)})^2 裡的貢獻就特別大,uu 會被拉向那個座標。

特徵分解把問題變成分配權重

(錄影 1:02:30–1:13:45)

接下來是一段線性代數。講者先講一般的對稱矩陣 AA,下一節才指出 PCA 裡的 AA 是誰。

對稱方陣 A∈Rd×dA\in\mathbb R^{d\times d} 可以分解成

A=UΛU⊤,U⊤U=I,Λ=diag(λ1,…,λd),λ1≥λ2≥⋯≥λdA=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

UU 的各行 u1,…,udu_1,\dots,u_d 是正規正交的特徵向量,λi\lambda_i 是對應的特徵值,慣例由大排到小。驗證一下:U⊤ui=eiU^\top u_i=e_i(第 ii 個標準基底向量),所以

Aui=UΛU⊤ui=UΛei=λi Uei=λiuiAu_i=U\Lambda U^\top u_i=U\Lambda e_i=\lambda_i\,Ue_i=\lambda_iu_i

現在要解的是 max⁡∥v∥=1v⊤Av\max_{\|v\|=1}v^\top Av。課堂上這個被最大化的向量寫成 xx,為了不跟資料點撞名,這裡改叫 vv。因為 u1,…,udu_1,\dots,u_d 是一組基底,vv 可以寫成 v=∑jαjuj=Uαv=\sum_j\alpha_ju_j=U\alpha。代進去:

v⊤Av=α⊤U⊤ UΛU⊤ Uα=α⊤Λα=∑j=1dλjαj2v^\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

兩次用到 U⊤U=IU^\top U=I。同樣地 ∥v∥2=α⊤U⊤Uα=∑jαj2\|v\|^2=\alpha^\top U^\top U\alpha=\sum_j\alpha_j^2。所以原問題變成

max⁡α  ∑j=1dλjαj2限制∑j=1dαj2=1\max_{\alpha}\;\sum_{j=1}^d\lambda_j\alpha_j^2\qquad\text{限制}\quad\sum_{j=1}^d\alpha_j^2=1

這是在分配一單位的權重:每放一份權重在第 jj 個方向,就得到 λj\lambda_j 的報酬。λ1\lambda_1 最大,所以把全部權重放在第一個方向,α=e1\alpha=e_1、v=u1v=u_1,最大值是 λ1\lambda_1。寫成不等式是 ∑jλjαj2≤λ1∑jαj2=λ1\sum_j\lambda_j\alpha_j^2\le\lambda_1\sum_j\alpha_j^2=\lambda_1。

講者接著追問:如果 λ1=λ2\lambda_1=\lambda_2 呢?u1u_1 仍然是解,但 u1,u2u_1,u_2 張成的平面上任何單位向量都一樣好,「第一主成分」不再是一個方向,而是一整個子空間。更麻煩的是兩個特徵值很接近的時候:理論上有唯一解,實際上資料稍微變動,算出來的方向就可能在那個平面裡轉到別處。這一點下面講 PCA 的風險時會再回來。

那個矩陣就是共變異數矩陣

(錄影 1:13:45–1:14:55)

回到 PCA 的目標。除以 nn 不影響最大值的位置:

1n∑i=1n(u⊤x(i))2=1n∑i=1nu⊤x(i)x(i)⊤u=u⊤(1n∑i=1nx(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

第一個等號把純量 (u⊤x)2(u^\top x)^2 寫成 (u⊤x)(x⊤u)(u^\top x)(x^\top u),第二個等號把跟 ii 無關的 uu 提到加總外面。中間的 Σ=1n∑ix(i)x(i)⊤\Sigma=\frac1n\sum_ix^{(i)}x^{(i)\top} 在資料平均為零時就是經驗共變異數矩陣。共變異數的定義裡本來是 (x−μ)(x−μ)⊤(x-\mu)(x-\mu)^\top,這裡沒有 μ\mu 是因為已經先減掉了。這是中心化在數學上的理由:不減平均,這個矩陣就不能解讀成共變異數。

Σ\Sigma 對稱,套用上一節的結論:最大化 u⊤Σuu^\top\Sigma u 的單位向量是 Σ\Sigma 最大特徵值對應的特徵向量。要 kk 個方向就取前 kk 個特徵向量;講者說多維的情形是同一套論證,把向量換成矩陣,課堂上略過。這也接回開頭那句話:GMM 的橢圓軸是共變異數矩陣的特徵向量,PCA 找的是同一種東西。

講者在這裡把中心化說成「whiten」。一般用法裡 whitening 指的是進一步讓共變異數變成單位矩陣,比減平均多做一步;他這裡指的只是減掉平均。

數值例子:四輛車的 PCA

以下是本文自擬的例子,不是課堂內容,數字用 Python 另外驗算過。

四輛車的(市區、高速)油耗:(27,32)(27,32)、(26,33)(26,33)、(23,30)(23,30)、(24,29)(24,29)。

中心化。 平均是 (25,31)(25,31),減掉後得到 (2,1)(2,1)、(1,2)(1,2)、(−2,−1)(-2,-1)、(−1,−2)(-1,-2)。

共變異數矩陣。 第一個座標的平方和是 4+1+4+1=104+1+4+1=10,第二個也是 10,交叉乘積和是 2+2+2+2=82+2+2+2=8,各除以 4:

Σ=(2.5222.5)\Sigma=\begin{pmatrix}2.5&2\\2&2.5\end{pmatrix}

特徵分解。 Σ(11)=(4.54.5)\Sigma\begin{pmatrix}1\\1\end{pmatrix}=\begin{pmatrix}4.5\\4.5\end{pmatrix}、Σ(1−1)=(0.5−0.5)\Sigma\begin{pmatrix}1\\-1\end{pmatrix}=\begin{pmatrix}0.5\\-0.5\end{pmatrix},所以 λ1=4.5\lambda_1=4.5、u1=12(1,1)u_1=\frac{1}{\sqrt2}(1,1),λ2=0.5\lambda_2=0.5、u2=12(1,−1)u_2=\frac{1}{\sqrt2}(1,-1)。

驗算目標函數。 四個點在 u1u_1 上的投影是 ±3/2\pm3/\sqrt2,平方都是 4.5,平均 4.5,等於 λ1\lambda_1。換成座標軸方向 (1,0)(1,0),投影平方的平均只有 2.5;換成 30 度方向是 4.23。都比 4.5 小。

殘差。 每個點的 ∥x∥2=5\|x\|^2=5,在 u1u_1 上解釋掉 4.5,殘差 5−4.5=0.55-4.5=0.5,剛好是它在 u2u_2 上投影的平方。

結果代表什麼。 u1u_1 是「市區與高速一起變好」的方向,占總變異 4.5/(4.5+0.5)=90%4.5/(4.5+0.5)=90\%。如果只留一個數字描述每輛車,用 u1⊤xu_1^\top x 就保住九成的變異。

不中心化會怎樣。 直接用原始資料算 1n∑ix(i)x(i)⊤\frac1n\sum_ix^{(i)}x^{(i)\top},得到 (627.5777777963.5)\begin{pmatrix}627.5&777\\777&963.5\end{pmatrix},它的第一特徵向量是 (0.628,0.778)(0.628,0.778)。把平均 (25,31)(25,31) 正規化是 (0.628,0.778)(0.628,0.778),幾乎一模一樣。原因是這個矩陣等於 Σ+μμ⊤\Sigma+\mu\mu^\top,μμ⊤\mu\mu^\top 的量級遠大於 Σ\Sigma,算出來的「主成分」只是在指向資料團的位置。這個例子裡兩個方向都接近 45 度,看起來差不多,是因為市區與高速油耗的數值本來就相近;換一組平均在 (25,3)(25,3) 的資料,差別就一目了然。

尺度不同會怎樣。 把中心化後的第一個座標乘以 10(當作換了單位),Σ\Sigma 變成 (25020202.5)\begin{pmatrix}250&20\\20&2.5\end{pmatrix},第一特徵向量變成 (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),自己也常拿來看資料;他保留的是特徵值沒分開時,還把降維後的座標交給下游模型這個用法,結論是要小心,不是不要用。

那要留幾個方向?看前 kk 個特徵值占全部特徵值總和的比例。講者問全班:給一個矩陣,怎麼有效率地算出全部特徵值的和?答案是跡(trace),也就是對角線元素相加,不必做完整的特徵分解。所以只要算出前 kk 個方向,對每個方向乘一次矩陣得到 λi\lambda_i(因為 Σui=λiui\Sigma u_i=\lambda_iu_i),再除以 tr(Σ)\mathrm{tr}(\Sigma) 就知道解釋了多少。上面的例子裡 tr(Σ)=2.5+2.5=5\mathrm{tr}(\Sigma)=2.5+2.5=5,λ1/5=90%\lambda_1/5=90\%。他也提到,資料量大時只算前幾個方向的「thin PCA」可以算得相當便宜。

最後有學生問,為什麼要降維、留著全部的維度不好嗎。講者的回答有兩層。日常的一層:市區油耗與高速油耗其實是同一件事,你關心的只是車子省不省油。一般的一層:如果資料名義上在很高維的空間,實際上貼近一個低維子空間,找出那個子空間就能做更強的推論。常見的現象是解釋變異量隨著主成分數目增加很快趨緩,前幾個成分就解釋了大部分資料。

收尾時他把兩個主題併在一起看:EM 假設資料背後有機率式的隱藏結構(幾個高斯光源),PCA 假設共變異數矩陣裡的子空間分得開。他說對他而言這些假設才是重點:動手之前先問自己的資料符不符合。投影片上還有一張用 PCA 去雜訊的圖,課堂上跳過了。這也是 Chris Ré 這學期的最後一堂。

下一堂講擴散模型,會直接用到這堂的 ELBO:把加了雜訊的中間狀態當成隱變數 zz,用同一個「乘 QQ 除 QQ 再套 Jensen」的手法替概似造下界。

自我檢查

1. 某個點有兩個可能的 zz,聯合機率是 p(x,z=1)=0.03p(x,z=1)=0.03、p(x,z=2)=0.01p(x,z=2)=0.01。算出 log⁡p(x)\log p(x)、Q=(0.5,0.5)Q=(0.5,0.5) 時的下界,以及讓下界緊貼的 QQ。

答:p(x)=0.04p(x)=0.04,log⁡p(x)=−3.219\log p(x)=-3.219。Q=(0.5,0.5)Q=(0.5,0.5) 時下界是 0.5log⁡0.06+0.5log⁡0.02=−3.3630.5\log 0.06+0.5\log 0.02=-3.363,比 −3.219-3.219 低。緊貼的 QQ 是後驗機率 (0.75,0.25)(0.75,0.25),此時兩個比值 0.03/0.750.03/0.75 與 0.01/0.250.01/0.25 都是 0.040.04。

2. 寫出證明 ℓ(θt+1)≥ℓ(θt)\ell(\theta_{t+1})\ge\ell(\theta_t) 的不等式鏈,指出哪一步用緊貼、哪一步用下界、哪一步用 M 步。如果 M 步沒有找到最大值,只找到一個讓 LtL_t 比在 θt\theta_t 高的 θ\theta,結論還成立嗎?

判準:鏈是 ℓ(θt+1)≥Lt(θt+1)≥Lt(θt)=ℓ(θt)\ell(\theta_{t+1})\ge L_t(\theta_{t+1})\ge L_t(\theta_t)=\ell(\theta_t),依序是下界、M 步、緊貼。第二問成立,因為中間那一步只需要 Lt(θt+1)≥Lt(θt)L_t(\theta_{t+1})\ge L_t(\theta_t),不需要是最大值。(第二問是本文延伸,課堂沒有講。)

3. 一維兩群的 GMM,某個點在兩群的高斯密度分別是 0.3 與 0.1,ϕ=(0.2,0.8)\phi=(0.2,0.8)。它屬於第一群的 w1w_1 是多少?跟只看密度的直覺差在哪?

答:w1=0.2×0.30.2×0.3+0.8×0.1=0.060.14=0.429w_1=\frac{0.2\times0.3}{0.2\times0.3+0.8\times0.1}=\frac{0.06}{0.14}=0.429。只看密度會覺得它有 75% 屬於第一群,但第二群大四倍,結果反而略偏向第二群。

4. 中心化後的資料共變異數矩陣是 (5335)\begin{pmatrix}5&3\\3&5\end{pmatrix}。第一主成分方向是什麼?它解釋多少比例的變異?如果矩陣是 (4004)\begin{pmatrix}4&0\\0&4\end{pmatrix} 呢?

答:特徵值是 8 與 2,u1=12(1,1)u_1=\frac1{\sqrt2}(1,1),解釋 8/tr=8/10=80%8/\mathrm{tr}=8/10=80\%。第二個矩陣兩個特徵值相等,任何單位向量的 u⊤Σuu^\top\Sigma u 都是 4,沒有唯一的第一主成分,PCA 回傳哪個方向取決於實作細節與數值誤差。

5. 用一句話解釋:為什麼 M 步推導 μl\mu_l 時可以把 Σl−1\Sigma_l^{-1} 消掉,推導 ϕj\phi_j 時卻不能直接令微分為零?

判準:前者要提到 Σl−1\Sigma_l^{-1} 滿秩(可逆),所以它乘上某向量為零時該向量必為零;後者要提到 ϕ\phi 有加總為 1 的限制,少了限制目標函數沒有臨界點,要用拉格朗日乘數。

對應閱讀

主講義(2026 年 8 月版):

  • 第 11.1 節 EM for mixture of Gaussians(pp.150–153):GMM 的模型設定與 E 步、M 步公式,Σj\Sigma_j 的更新式在這裡。
  • 第 11.2 節 Jensen's inequality(pp.153–154):講義先講凸函數版本 E[f(X)]≥f(EX)\mathbb E[f(X)]\ge f(\mathbb E X),再在 Remark 說凹函數方向相反;課堂只講凹函數版本。
  • 第 11.3 節 General EM algorithms(pp.154–160):單點推導、ELBO 的定義、QQ 取後驗機率、單調性的不等式鏈。
  • 第 11.4 節 Mixture of Gaussians revisited(pp.160–162):μl\mu_l 與 ϕj\phi_j 的 M 步推導。
  • 第 12 章 Principal components analysis(pp.167–172)。

課堂與講義不同的地方:

  • ELBO 的其他寫法沒講。 講義第 11.3.1 節把 ELBO 改寫成 log⁡p(x)−DKL(Q ∥ pz∣x)\log p(x)-D_{KL}(Q\,\|\,p_{z\mid x}),可以直接看出「QQ 取後驗機率時緊貼」;課堂只用 Jensen 的等號條件。
  • VAE 沒講。 講義第 11.5 節(pp.162–166)的變分推論與 variational auto-encoder 不在這堂的範圍。
  • PCA 的證明路線不同。 講義用一個註腳請讀者以拉格朗日乘數解 max⁡u⊤Σu\max u^\top\Sigma u,得到 Σu=λu\Sigma u=\lambda u;課堂改用特徵基底展開成 ∑jλjαj2\sum_j\lambda_j\alpha_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\Sigma_j 的更新式取自講義,兩個數值例子是本文自擬。

參考資料