CS236 第 5 講 · Latent Variable Models
Stanford CS236 · Fall 2023 · Lecture 5

Latent Variable Models:加入看不見的變數

Autoregressive model 算機率容易,但取不出特徵。這講加入看不見的潛在變數 \(\mathbf z\):用簡單的 \(p(\mathbf x\mid\mathbf z)\) 拼出複雜的 \(p(\mathbf x)\),順便得到可解釋的特徵。代價是 \(p(\mathbf x) = \int p(\mathbf x,\mathbf z)\,d\mathbf z\) 算不出來。解法是一條推導鏈:Monte Carlo → importance sampling → 取 log 後用 Jensen 不等式 → ELBO,而 ELBO 在 \(q\) 等於真實後驗時恰好等號成立。

讀完這頁你應該能夠

  1. 說明潛在變數的兩個動機:用簡單條件分佈組出複雜邊際分佈,以及從 \(p(\mathbf z\mid\mathbf x)\) 取得特徵。
  2. 寫出 GMM 和 VAE 的生成過程,並說明 VAE 為什麼是「無限多個高斯的混合」。
  3. 解釋為什麼 \(\log p_\theta(\mathbf x) = \log\sum_{\mathbf z}p_\theta(\mathbf x,\mathbf z)\) 難以計算和微分。
  4. 寫出 importance sampling 估計量,說明它不偏、以及 \(q\) 該怎麼選。
  5. 用 Jensen 不等式推導 ELBO,並證明 \(q = p(\mathbf z\mid\mathbf x)\) 時等號成立。
  6. 寫出 \(\log p(\mathbf x) = \text{ELBO} + D_{\mathrm{KL}}(q\Vert p(\mathbf z\mid\mathbf x))\),並說明它和 EM 演算法的關係。

前置知識檢查

  • 第 2 講:Bayes net 的 \(Z\to X\)、GMM、VAE 的生成過程(Demo D)
  • 第 4 講:KL divergence、entropy \(H(q)\)、Jensen 不等式、Monte Carlo 估計的不偏性
  • Bayes rule:\(p(\mathbf z\mid\mathbf x) = p(\mathbf x\mid\mathbf z)p(\mathbf z)/p(\mathbf x)\)
  • 邊際化:\(p(\mathbf x) = \sum_{\mathbf z}p(\mathbf x,\mathbf z)\)(連續時是積分)
  • 凹函數:\(\log\) 的圖形向下彎

本頁的投影片內容都對照過投影片圖片;標「出處」的補充來自官方講義、Kingma & Welling〈An Introduction to Variational Autoencoders〉(arXiv 1906.02691v3)的 TeX 原文,以及 Locatello et al. (2019)。

01為什麼要潛在變數

回顧 autoregressive model 的優缺點:01:06

優點容易算 likelihood、容易用 MLE 訓練、可做異常偵測。
缺點
要選順序;生成是逐步的(即使 Transformer 訓練能平行);無法非監督地學到特徵。

以人臉資料集為例,影像的變化來自性別、年齡、姿勢、髮色、眼睛顏色等因素。如果有這些標註,可以分別建模(條件化之後比較簡單),但通常只有圖片,這些因素是潛在的(latent)。02:43

投影片 4–5 的圖:左邊是一格格的人臉照片(CelebA 風格)。右邊是一張 Bayes net:上排白色節點 Gender、Ethnicity、Eye color、Hair color、Pose,箭頭都指向下方灰色的 Image 節點。灰色代表觀測得到,白色代表觀測不到。

想法:明確加入一組潛在變數 \(\mathbf z\) 來表示這些變化因素。04:16

  • 資料中只觀測到 \(\mathbf x\)(像素),\(\mathbf z\) 對應高層特徵。
  • \(\mathbf z\) 選得好,\(p(\mathbf x\mid\mathbf z)\) 會比 \(p(\mathbf x)\) 簡單得多:條件化在某一群之後,剩下的變化很少。06:53
  • 訓練好之後,可以用 \(p(\mathbf z\mid\mathbf x)\) 推回特徵,例如 \(p(\text{EyeColor}=\text{Blue}\mid\mathbf x)\)。這就是第 1 講「反向圖學」的具體版本。07:23
  • 困難:要手動指定這些條件分佈非常難。
「後驗」\(p(\mathbf z\mid\mathbf x)\) 是什麼?怎麼算?

模型定義的是生成方向:先抽 \(\mathbf z\),再抽 \(\mathbf x\)。\(p(\mathbf z)\) 叫先驗(prior,看到資料之前對 \(\mathbf z\) 的信念),\(p(\mathbf z\mid\mathbf x)\) 叫後驗(posterior,看到 \(\mathbf x\) 之後對 \(\mathbf z\) 的信念)。用 Bayes rule 反推:

$$p(\mathbf z\mid\mathbf x) = \frac{p(\mathbf x\mid\mathbf z)\,p(\mathbf z)}{p(\mathbf x)} = \frac{p(\mathbf x,\mathbf z)}{\sum_{\mathbf z'}p(\mathbf x,\mathbf z')}$$

分子容易算(照著模型定義);分母就是這講的大麻煩 \(p(\mathbf x)\)。所以算後驗和算 likelihood 一樣難。官方講義指出,對任何 \(\mathbf z\) 都有 \(p_\theta(\mathbf x) = p_\theta(\mathbf x\mid\mathbf z)p(\mathbf z)/p_\theta(\mathbf z\mid\mathbf x)\),所以只要能算後驗,就能算 likelihood,反之亦然。出處:CS236 notes, VAE 章。

02深度潛在變數模型

不再手動設計有語意的 Bayes net,改用神經網路:08:24

模型
  1. \(\mathbf z\sim\mathcal N(\mathbf 0, I)\)
  2. \(p(\mathbf x\mid\mathbf z) = \mathcal N\big(\boldsymbol\mu_\theta(\mathbf z), \Sigma_\theta(\mathbf z)\big)\),\(\boldsymbol\mu_\theta,\Sigma_\theta\) 是神經網路

投影片 6 的圖:左邊是 z → x 的兩節點圖;右邊是一個全連接網路,底下一排是 z、頂端連到一張人臉,表示網路把 z 映射成影像的參數。

  • \(\mathbf z\) 沒有預先指定的語意。我們希望訓練後它會對應到有意義的變化因素,這是非監督式表示學習。特徵一樣用 \(p(\mathbf z\mid\mathbf x)\) 取得。
  • 這個問題本質上定義不清(ill-posed):「有意義的結構」到底是什麼?沒有保證。09:59

課堂問答整理

  • \(\mathbf x\) 是 autoregressive 生成的嗎?這裡不是,\(p(\mathbf x\mid\mathbf z)\) 只是一個高斯。也可以換成 autoregressive model 得到更有彈性的模型(「混搭」),但 VAE 的設計是讓它保持簡單。11:36
  • 每個 \(\mathbf z\) 用不同的網路嗎?不是,同一組網路,餵不同的 \(\mathbf z\) 得到不同輸出。13:11
  • 怎麼取樣?很容易:抽 \(\mathbf z\sim\mathcal N(0,I)\),送進兩個網路得到平均和共變異數,再從那個高斯抽 \(\mathbf x\)。難的是算 \(p(\mathbf x)\),這是本講的「no free lunch」。16:49
  • \(\mathbf z\) 的維度?是超參數,通常遠小於 \(\mathbf x\)。但之後會看到 diffusion model 的 \(\mathbf z\) 和 \(\mathbf x\) 維度相同,這會帶來好的計算性質。37:30
  • 先驗一定要是標準高斯嗎?不一定,只要容易取樣就好(均勻分佈也行)。可以用 autoregressive 先驗增加彈性,或若知道有 10 類,加入一個 categorical 變數。34:24 38:30
  • \(\mathbf z\) 會對應到「髮色」「眼睛顏色」嗎?不保證。MLE 只要求把資料擬合好。Disentangled representation learning 這個領域專門研究怎麼讓潛在變數更有意義,但有定理證明一般情況下做不到,因為問題本身定義不清。60:51
  • 有部分標籤怎麼辦?有標籤的資料點直接代入 \(\mathbf z\) 的真值、不用求和,就是半監督學習,也能引導潛在變數往想要的方向。61:56
「不可能做到 disentanglement」的定理是什麼?

老師提到的定理應該是 Locatello et al. (2019)〈Challenging Common Assumptions in the Unsupervised Learning of Disentangled Representations〉(ICML 2019 best paper)。大意是:在沒有任何歸納偏誤(對模型或資料的額外假設)的情況下,純非監督地學出 disentangled 表示是不可能的。因為對同一個資料分佈,存在無限多種潛在變數的「旋轉」或重組都能產生一模一樣的 \(p(\mathbf x)\),光看資料無法分辨哪一種才是「髮色是一個維度」。

直覺例子:\(\mathbf z\sim\mathcal N(0,I)\) 是各向同性的,把 \(\mathbf z\) 旋轉任意角度後分佈完全不變。decoder 只要跟著反向旋轉,\(p(\mathbf x)\) 就一模一樣,但每一維的「意義」全變了。

論文的 Theorem 1 把這個直覺寫成一般的形式:若 \(\mathbf z\) 的分佈可分解(例如標準高斯),就存在無限多個雙射 \(f\),讓 \(f(\mathbf z)\) 和 \(\mathbf z\) 的分佈完全相同,但 \(f(\mathbf z)\) 的每一維都和 \(\mathbf z\) 的每一維糾纏在一起;旋轉只是其中一個例子。論文也訓練了超過 12,000 個模型做大規模實驗。這部分在第 15 講評估潛在表示時會再出現。

出處:Locatello et al. (2019), arXiv 1811.12359, Theorem 1(已對照原文)。

03GMM:最淺的潛在變數模型

Bayes net \(\mathbf z\to\mathbf x\),沒有神經網路:17:50

$$\mathbf z\sim\mathrm{Categorical}(1,\dots,K), \qquad p(\mathbf x\mid\mathbf z=k) = \mathcal N(\boldsymbol\mu_k,\Sigma_k)$$

生成:先抽一個成分 \(k\),再從那個高斯抽一個點。每個成分的平均和共變異數直接查表,彈性最大,但成分數一多就無法擴展。35:27

投影片 7–8 的圖:(1) 三個彩色橢圓(μ₁、μ₂、μ₃)畫在 x₁–x₂ 平面上。(2) Old Faithful 間歇泉資料的三個面板:原始資料散佈圖(橫軸噴發持續時間、縱軸兩次噴發的間隔,明顯分成兩團);用單一高斯擬合時,橢圓蓋住兩團中間沒有資料的地方;用兩個高斯擬合時,紅藍兩個橢圓各包住一團。19:54

  • 分群:後驗 \(p(z\mid\mathbf x)\) 告訴你資料點屬於哪個成分。Old Faithful 的例子中,就是判斷這次噴發屬於哪一型。
  • 非監督學習:希望從沒有標籤的資料學到結構,但「好的分群」沒有唯一定義,所以是 ill-posed。21:59

投影片 9–11 的圖:一團灰色的二維資料點;用三成分 GMM 擬合後,點依後驗 \(P(z=i\mid\mathbf x)\) 塗成橘、綠、紅三色。最後一張是 MNIST 在二維潛在空間中的投影,點依真實數字類別上色(模型訓練時看不到類別),同一數字大多聚在一起,有些數字(例如 2)分成兩群,可能對應不同寫法。23:29

課堂問答 · 22:29GMM 直接用在影像上會很慘嗎?會。單一高斯的平均就是所有圖的平均,取樣只會是一團模糊;分成兩群也好不了多少。K 極大時理論上能逼近任何分佈,但實務上需要的 K 大到不可行。22:29

04另一個動機:混合讓模型更有表達力

$$p(\mathbf x) = \sum_{\mathbf z}p(\mathbf x,\mathbf z) = \sum_{\mathbf z}p(\mathbf z)\,p(\mathbf x\mid\mathbf z) = \sum_{k=1}^{K}p(\mathbf z=k)\underbrace{\mathcal N(\mathbf x;\boldsymbol\mu_k,\Sigma_k)}_{\text{component}}$$

投影片 12 的圖:藍、橘、綠三條鐘形曲線,平均和寬度各不同;疊加後的紅色曲線有多個峰和肩部,形狀比任何單一高斯都複雜。27:33

VAE:無限多個高斯的混合

把 \(\mathbf z\) 從有限個類別換成連續的高斯,成分數就變成無限多個,求和變成積分:29:07

$$p(\mathbf x) = \int p(\mathbf z)\,\mathcal N\big(\mathbf x;\boldsymbol\mu_\theta(\mathbf z),\Sigma_\theta(\mathbf z)\big)\,d\mathbf z$$

投影片 13 給了一個具體的小例子(\(\mathbf x\) 是二維):

$$\boldsymbol\mu_\theta(\mathbf z) = \sigma(A\mathbf z+\mathbf c) = \big(\sigma(a_1\mathbf z+c_1),\,\sigma(a_2\mathbf z+c_2)\big),\qquad \Sigma_\theta(\mathbf z) = \mathrm{diag}\big(\exp(\sigma(B\mathbf z+\mathbf d))\big),\qquad \theta = (A,B,\mathbf c,\mathbf d)$$
  • 代價:GMM 中每個成分的平均和共變異數可以任意查表;VAE 中它們不能任意,必須是神經網路對 \(\mathbf z\) 的輸出。30:13
  • 共變異數取 exp 是為了保證正值(半正定),對角是為了簡單,都是建模選擇。40:32
  • 即使 \(p(\mathbf x\mid\mathbf z)\) 很簡單,邊際 \(p(\mathbf x)\) 可以非常複雜。第 2 講的 Demo D 畫過這件事。
課堂問答 · 32:19如果 \(\mathbf z\) 是連續的,「6」和「7」兩群之間的 \(\mathbf z\) 會生成什麼?現實中沒有介於 6 和 7 之間的數字。老師承認這是對的:連續潛在空間讓群之間可以過渡,這未必合理,模型可能得找出奇怪的變化軸。也可以混用離散和連續潛在變數。32:19
小結(投影片 14)潛在變數模型用簡單的積木 \(p(\mathbf x\mid\mathbf z)\) 定義複雜的 \(p(\mathbf x)\);很適合非監督任務(分群、表示學習);但 no free lunch:比完全觀測的 autoregressive model 難學得多。

05代價:邊際機率算不出來

先看一個直覺的例子:缺了上半部的圖

假設訓練時有些像素遺失了(例如上半部),而我們有一個聯合分佈模型 \(p(\mathbf X,\mathbf Z;\theta)\)(例如 PixelCNN),\(\mathbf X\) 是看得到的、\(\mathbf Z\) 是看不到的。看到 \(\bar{\mathbf x}\) 的機率是41:04

$$p(\mathbf X=\bar{\mathbf x};\theta) = \sum_{\mathbf z}p(\mathbf X=\bar{\mathbf x},\mathbf Z=\mathbf z;\theta) = \sum_{\mathbf z}p(\bar{\mathbf x},\mathbf z;\theta)$$

投影片 15 的圖:三張黑白手寫數字,上半部被塗成綠色並標上問號。要算機率,就得考慮所有可能填滿綠色區域的方式。

聯合機率容易算(chain rule 乘起來就好),但必須把所有可能的補法加總,數量太多。VAE 也一樣,只是 \(\mathbf z\) 連續,加總變成積分。44:44

部分觀測資料的 MLE

資料集 \(\mathcal D = \{\mathbf x^{(1)},\dots,\mathbf x^{(M)}\}\),每筆只看得到 \(\mathbf X\),\(\mathbf Z\) 永遠看不到。Maximum likelihood 的目標:48:58

$$\log\prod_{\mathbf x\in\mathcal D}p(\mathbf x;\theta) = \sum_{\mathbf x\in\mathcal D}\log p(\mathbf x;\theta) = \sum_{\mathbf x\in\mathcal D}\log\sum_{\mathbf z}p(\mathbf x,\mathbf z;\theta)$$
  • 30 個二元潛在變數,\(\sum_{\mathbf z}\) 就有 \(2^{30}\approx10^9\) 項。連續變數的 \(\int\) 通常也算不出來。50:01
  • 梯度 \(\nabla_\theta\) 一樣難算。
  • 需要近似,而且必須很便宜:每個訓練資料點每次更新都要算一次。50:32
為什麼數值積分也不行?

一維積分用格點法很容易:取 100 個點相加。但 \(d\) 維積分在每一維都取 100 個點,總共要 \(100^d\) 個點。\(d=10\) 就是 \(10^{20}\) 個,完全不可行。這是維度災難在積分上的版本。Monte Carlo 的誤差以 \(1/\sqrt{T}\) 下降,和維度無關(第 4 講),所以高維積分幾乎只能靠抽樣。問題在於變異數可能非常大,這就是下一節的主題。

06Naive Monte Carlo 與 importance sampling

第一次嘗試:均勻亂猜

把總和寫成對均勻分佈的期望,再用樣本平均近似:51:34

$$p_\theta(\mathbf x) = \sum_{\mathbf z}p_\theta(\mathbf x,\mathbf z) = |\mathcal Z|\sum_{\mathbf z}\frac{1}{|\mathcal Z|}p_\theta(\mathbf x,\mathbf z) = |\mathcal Z|\,\mathbb E_{\mathbf z\sim\text{Uniform}(\mathcal Z)}[p_\theta(\mathbf x,\mathbf z)] \approx |\mathcal Z|\frac1k\sum_{j=1}^{k}p_\theta(\mathbf x,\mathbf z^{(j)})$$

理論上可行(不偏),實際上不行:大多數隨機補法根本不合理,\(p_\theta(\mathbf x,\mathbf z)\) 極小;少數合理的補法機率很大,但均勻亂抽幾乎永遠抽不到。變異數大到沒用。54:40

第二次嘗試:importance sampling

改從一個可以自選的分佈 \(q(\mathbf z)\) 抽樣,乘除同一個 \(q(\mathbf z)\):63:29

$$p_\theta(\mathbf x) = \sum_{\mathbf z}\frac{q(\mathbf z)}{q(\mathbf z)}p_\theta(\mathbf x,\mathbf z) = \mathbb E_{\mathbf z\sim q(\mathbf z)}\!\left[\frac{p_\theta(\mathbf x,\mathbf z)}{q(\mathbf z)}\right] \approx \frac1k\sum_{j=1}^{k}\frac{p_\theta(\mathbf x,\mathbf z^{(j)})}{q(\mathbf z^{(j)})},\quad\mathbf z^{(j)}\sim q$$
  • 對任何 \(q\) 都是不偏估計(只要 \(q\) 在 \(p_\theta(\mathbf x,\mathbf z)>0\) 的地方也大於 0)。66:40
  • 好的 \(q\):常常抽到在 \(p_\theta(\mathbf x,\mathbf z)\) 下合理的補法。理想上是給定 \(\mathbf x\) 的 \(\mathbf z\),也就是 \(q\) 應該依賴 \(\mathbf x\)。65:37
最好的 q 是什麼?(課堂沒明講,但這是 ELBO 會「剛好等號」的原因)

估計量的每一項是比值 \(w(\mathbf z) = p_\theta(\mathbf x,\mathbf z)/q(\mathbf z)\)。如果選 \(q(\mathbf z) = p_\theta(\mathbf z\mid\mathbf x) = p_\theta(\mathbf x,\mathbf z)/p_\theta(\mathbf x)\),則

$$w(\mathbf z) = \frac{p_\theta(\mathbf x,\mathbf z)}{p_\theta(\mathbf x,\mathbf z)/p_\theta(\mathbf x)} = p_\theta(\mathbf x)\quad\text{(對每個 }\mathbf z\text{ 都是同一個常數)}$$

每一項都恰好等於答案,變異數為 0,抽一個樣本就夠了。當然,能從後驗抽樣的話本來就會算 \(p_\theta(\mathbf x)\) 了,所以這只是理想。但它告訴我們:\(q\) 越接近後驗,估計越準。第 8 節會看到 ELBO 的緊度也是由同一件事決定。

反過來,如果 \(q\) 在某些 \(p_\theta(\mathbf x,\mathbf z)\) 很大的地方幾乎是 0,\(w\) 會偶爾爆出巨大值,變異數極大。這就是均勻亂猜失敗的原因。

出處:Kingma & Welling (2019) §2.6「Estimation of the Marginal Likelihood」:訓練好 VAE 之後,就是用這個 importance sampling 估計量(以 encoder 當 \(q\))估計 \(\log p_\theta(\mathbf x)\),樣本數 \(L\to\infty\) 時收斂到真值;\(L = 1\) 時正好是 ELBO 的估計量。

麻煩:我們要的是 log

訓練要的是 \(\log p_\theta(\mathbf x)\)。直接對估計量取 log:67:15

$$\log p_\theta(\mathbf x) \approx \log\left(\frac1k\sum_{j=1}^{k}\frac{p_\theta(\mathbf x,\mathbf z^{(j)})}{q(\mathbf z^{(j)})}\right) \overset{k=1}{\approx} \log\frac{p_\theta(\mathbf x,\mathbf z^{(1)})}{q(\mathbf z^{(1)})}$$

問題:期望的 log 不等於 log 的期望。

$$\mathbb E_{\mathbf z^{(1)}\sim q}\!\left[\log\frac{p_\theta(\mathbf x,\mathbf z^{(1)})}{q(\mathbf z^{(1)})}\right] \ne \log\mathbb E_{\mathbf z^{(1)}\sim q}\!\left[\frac{p_\theta(\mathbf x,\mathbf z^{(1)})}{q(\mathbf z^{(1)})}\right]$$

取了 log 之後估計就有偏差了。幸好偏差的方向是可以確定的。

07Jensen 不等式與 ELBO

\(\log\) 是凹函數:\(\log(px + (1-p)x') \ge p\log x + (1-p)\log x'\)。推廣成期望就是 Jensen 不等式:68:49

$$\log\big(\mathbb E_{\mathbf z\sim q}[f(\mathbf z)]\big) = \log\Big(\sum_{\mathbf z}q(\mathbf z)f(\mathbf z)\Big) \ge \sum_{\mathbf z}q(\mathbf z)\log f(\mathbf z) = \mathbb E_{\mathbf z\sim q}[\log f(\mathbf z)]$$

投影片 21 的圖:一條向下彎的 log 曲線,橫軸標了 f(z₁)、f(z₂) 兩點。兩點之間的紅色直線段(取 log 後再平均)落在曲線(先平均再取 log)的下方。

取 \(f(\mathbf z) = p_\theta(\mathbf x,\mathbf z)/q(\mathbf z)\):

EVIDENCE LOWER BOUND(ELBO) $$\log p_\theta(\mathbf x) = \log\mathbb E_{\mathbf z\sim q}\!\left[\frac{p_\theta(\mathbf x,\mathbf z)}{q(\mathbf z)}\right] \ge \mathbb E_{\mathbf z\sim q}\!\left[\log\frac{p_\theta(\mathbf x,\mathbf z)}{q(\mathbf z)}\right]$$
  • 左邊是想要的 log 邊際機率(evidence:看到的資料 \(\mathbf x\) 的機率),右邊是可以用 \(q\) 的樣本估計的量。73:30
  • 最大化下界,真正的目標至少不會比下界低,通常也會跟著上升。70:51
  • 所以策略是:最佳化 ELBO。\(q\) 的選擇決定下界有多緊。72:24
課堂問答 · 76:39能不能找上界?有人研究(例如 CUBO),但難得多。直覺:只抽少數幾個 \(\mathbf z\),很容易說「我已經看到這麼多機率質量了,總量至少有這麼多」(下界);但很難保證「沒有在別處漏掉一大塊機率很高的 \(\mathbf z\)」(上界需要的)。76:39

08什麼時候 ELBO 是緊的

把 ELBO 展開:78:12

$$\log p(\mathbf x;\theta) \ge \sum_{\mathbf z}q(\mathbf z)\log\frac{p_\theta(\mathbf x,\mathbf z)}{q(\mathbf z)} = \sum_{\mathbf z}q(\mathbf z)\log p_\theta(\mathbf x,\mathbf z)\;\underbrace{-\sum_{\mathbf z}q(\mathbf z)\log q(\mathbf z)}_{\text{entropy }H(q)} = \sum_{\mathbf z}q(\mathbf z)\log p_\theta(\mathbf x,\mathbf z) + H(q)$$

當 \(q = p(\mathbf z\mid\mathbf x;\theta)\) 時等號成立(投影片 24 的推導;Kingma & Welling 2019 §2.2 用同樣的拆法證明缺口恰好是 \(D_{\mathrm{KL}}(q\Vert p(\mathbf z\mid\mathbf x))\),見第 9 節):78:42

$$\sum_{\mathbf z}p(\mathbf z\mid\mathbf x;\theta)\log\frac{p(\mathbf x,\mathbf z;\theta)}{p(\mathbf z\mid\mathbf x;\theta)} = \sum_{\mathbf z}p(\mathbf z\mid\mathbf x;\theta)\log\frac{p(\mathbf z\mid\mathbf x;\theta)\,p(\mathbf x;\theta)}{p(\mathbf z\mid\mathbf x;\theta)} = \log p(\mathbf x;\theta)\underbrace{\sum_{\mathbf z}p(\mathbf z\mid\mathbf x;\theta)}_{=1} = \log p(\mathbf x;\theta)$$
  • 這確認了 importance sampling 的直覺:最好的猜法是用模型本身的後驗分佈,選「可能的補法」。
  • 這正是 EM 演算法的 E-step 在做的事。79:43
  • 問題:對 VAE 來說,後驗要「反轉神經網路」:找出哪些 \(\mathbf z\) 餵進 decoder 會產生這個 \(\mathbf x\)。一般很難算,只能近似。下一講會同時最佳化 \(p\) 和 \(q\)。80:13
EM 演算法:用 ELBO 的角度看(課堂只提了名字)

EM 交替最大化同一個目標 \(\mathcal L(q,\theta) = \mathbb E_q[\log p_\theta(\mathbf x,\mathbf z)] + H(q)\):

  • E-step:固定 \(\theta\),對 \(q\) 最大化。最佳解是 \(q = p_\theta(\mathbf z\mid\mathbf x)\),此時 \(\mathcal L = \log p_\theta(\mathbf x)\),下界變緊。GMM 中就是算每個點屬於每個成分的 responsibility。
  • M-step:固定 \(q\),對 \(\theta\) 最大化。\(H(q)\) 與 \(\theta\) 無關,所以只要最大化 \(\mathbb E_q[\log p_\theta(\mathbf x,\mathbf z)]\),這通常有公式解(GMM 的加權平均、加權共變異數)。

為什麼 log-likelihood 不會下降:

$$\log p_{\theta^{t+1}}(\mathbf x) \ge \mathcal L(q^{t},\theta^{t+1}) \ge \mathcal L(q^{t},\theta^{t}) = \log p_{\theta^{t}}(\mathbf x)$$

第一個 ≥ 是 ELBO 對任何 \(q\) 都成立,第二個 ≥ 是 M-step 的定義,等號是 E-step 讓下界變緊。Demo A 把這三步畫成一個階梯。

EM 只適用於能精確算後驗的模型(例如 GMM)。VAE 的後驗算不出來,所以下一講改用一個參數化的 \(q_\phi\) 近似它,用梯度同時更新兩者。

Demo AEM 的 ELBO 階梯

一維、兩個成分的 GMM,資料是仿 Old Faithful「噴發持續時間」的合成資料(兩團,約 2 分鐘和 4.3 分鐘)。每按一次「下一步」做一次 E-step 或 M-step。

成分 1成分 2p(x)點的顏色 = 後驗 p(z | x)
log p(x; θ)(平均每點)ELBO(q, θ)
  • E-step 之後,紅線(ELBO)跳上來碰到藍線(log-likelihood):\(q\) 換成了真正的後驗,下界變緊。
  • M-step 之後,兩條線都上升,但紅線在藍線下方:\(q\) 是舊 \(\theta\) 的後驗,對新的 \(\theta\) 不再是最佳,所以下界又有了缺口。缺口的大小就是 \(D_{\mathrm{KL}}(q\Vert p_\theta(\mathbf z\mid\mathbf x))\)。
  • 藍線永遠不會下降(上面的三段不等式)。
  • 實測(重設後的壞初始值 \(\mu = (4.60, 1.00)\)、\(\sigma = (0.25, 2.00)\)):平均 log-likelihood 從 −1.743 開始,第一輪 M-step 後升到 −1.234,這時 ELBO 是 −1.265,缺口 0.031;再連跑 10 輪收斂到 −0.970,\(\pi = 0.667\)、\(\mu = (4.31, 1.98)\),和資料的兩團一致。

Demo B連續潛在變數:q 越像後驗,估計越準、ELBO 越緊

一個一維的「迷你 VAE」:\(z\sim\mathcal N(0,1)\),\(x\mid z\sim\mathcal N(\mu(z), 0.3^2)\),\(\mu(z) = 2\tanh(2z) + 0.4z\)。觀測到一個 \(\bar x\)。這個模型夠小,可以用格點精確算出 \(\log p(\bar x)\) 和真實後驗 \(p(z\mid\bar x)\),拿來和各種近似比較。

真實後驗 p(z | x̄)q(z)先驗 p(z)
1,000 次估計的 log p̂(x̄) 直方圖真值 log p(x̄)ELBO
  • 這就是投影片 26 的圖:藍色後驗被 \(\mathcal N(2,2)\) 近似得比 \(\mathcal N(-4, 0.75)\) 好。預設的 \(q\) 放在錯的位置,直方圖很寬,ELBO 遠低於真值。按「設成後驗的高斯近似」,直方圖會縮成一條細線,ELBO 幾乎貼上真值。
  • 實測(\(\bar x = 1.6\),真值 \(\log p(\bar x) = -1.806\)):預設 \(q = \mathcal N(-1.5, 0.4^2)\) 的 ELBO 是 −98.07,缺口 96.3 nats;k = 5 的估計平均 −87.5、標準差 10.5,離真值很遠。設成後驗的高斯近似後,ELBO = −1.950,缺口只剩 0.144。
  • 均勻和先驗都不看 \(\bar x\),是課堂說的「亂猜」。它們的 ELBO 很差(\(\bar x = 1.6\) 時缺口分別是 55.4 和 33.6;先驗在 \(\bar x = 2.6\) 時缺口增加到 57.3),x̄ 越極端越糟。在這個一維例子裡,k = 1000 時兩者的估計平均仍接近真值,但標準差(0.126、0.067)比好的 \(q\) 大;維度一高,亂猜需要的樣本數會指數成長。
  • k = 1 時,log 估計值的平均就是 ELBO,落在真值左邊:這是 Jensen 造成的偏差。k 增大,直方圖往真值靠攏,偏差變小:用後驗的高斯近似時,k = 1、20、1000 的平均分別是 −1.927、−1.815、−1.809,標準差 0.833、0.102、0.020。把這個 k 個樣本的估計量直接當訓練目標,就是 IWAE(Burda et al. 2015;Kingma & Welling 2019 §2.6 有介紹)。

Demo C補上半張數字:投影片 15 和 27 的實作

先在瀏覽器裡訓練第 3 講的 FVSBN(8×8 手寫數字,raster 順序)。拿一張測試圖,把最上面兩列(16 個像素)當成看不到的 \(\mathbf z = \mathbf x^{\text{top}}\),其餘 48 個像素是觀測的 \(\mathbf x\)。16 個二元像素只有 \(2^{16} = 65{,}536\) 種補法,可以全部列舉,精確算出 \(\log p(\mathbf x^{\text{bottom}})\) 和真實後驗。

投影片 27 用的近似後驗是每個像素獨立的 Bernoulli:\(q(\mathbf x^{\text{top}};\boldsymbol\phi) = \prod_i\phi_i^{x_i^{\text{top}}}(1-\phi_i)^{1-x_i^{\text{top}}}\)。投影片問:\(\phi_i = 0.5\) 好嗎?不好。\(\phi_i = 1\) 好嗎?不好。對「9 的上半部」那些像素 \(\phi_i\approx1\) 呢?好。下面直接算出這幾種 \(q\) 的 ELBO。

第一張是原圖,第二張是觀測部分(上兩列遮起來),其餘是各種 \(q\) 的 \(\boldsymbol\phi\)(灰階,越深越接近 1),下方是從該 \(q\) 抽出的一個補法。表格中的 gap = log p − ELBO = \(D_{\mathrm{KL}}(q\Vert p(\mathbf z\mid\mathbf x))\)。「後驗邊際」是把真實後驗每個像素的邊際機率拿來當 \(\phi_i\),是這個家族裡很好的近似,但因為假設各像素獨立,仍然不完全等於後驗,所以 gap 不為 0。「資料邊際」是訓練資料上兩列每個像素的平均,完全不看這張圖的下半部。

實測五張測試圖:真值 \(\log_2 p(\mathbf x^{\text{bottom}})\) 在 −19.6 到 −25.0 bits 之間。gap 依序是:\(\phi = 0.5\) 為 33–45 bits,\(\phi = 1\) 為 66–79 bits,資料邊際為 2.6–7.4 bits,後驗邊際只有 0.13–0.57 bits。這正是投影片 27 的排序。

09投影片 25–29:時間不夠沒講到的部分

影片在 EM 的連結處結束(投影片 24)。以下是剩下五頁的內容。第 6 講的前半把這幾頁完整講過一遍,課堂細節和問答整理在第 6 講筆記的第 2–5 節。

另一條推導 ELBO 的路(投影片 25)

直接算 \(q\) 和真實後驗的 KL:

$$D_{\mathrm{KL}}\big(q(\mathbf z)\Vert p(\mathbf z\mid\mathbf x;\theta)\big) = -\sum_{\mathbf z}q(\mathbf z)\log p(\mathbf z,\mathbf x;\theta) + \log p(\mathbf x;\theta) - H(q) \ge 0$$
這一步的「一點代數」
$$\begin{aligned} D_{\mathrm{KL}}(q\Vert p(\mathbf z\mid\mathbf x)) &= \sum_{\mathbf z}q(\mathbf z)\log\frac{q(\mathbf z)}{p(\mathbf z\mid\mathbf x)} = \sum_{\mathbf z}q(\mathbf z)\log\frac{q(\mathbf z)\,p(\mathbf x)}{p(\mathbf z,\mathbf x)} \\ &= \underbrace{\sum_{\mathbf z}q(\mathbf z)\log q(\mathbf z)}_{-H(q)} + \log p(\mathbf x)\underbrace{\sum_{\mathbf z}q(\mathbf z)}_{1} - \sum_{\mathbf z}q(\mathbf z)\log p(\mathbf z,\mathbf x) \end{aligned}$$

第二步用了 \(p(\mathbf z\mid\mathbf x) = p(\mathbf z,\mathbf x)/p(\mathbf x)\)。

移項就得到:

核心恆等式 $$\log p(\mathbf x;\theta) = \underbrace{\sum_{\mathbf z}q(\mathbf z)\log p(\mathbf z,\mathbf x;\theta) + H(q)}_{\text{ELBO}} + D_{\mathrm{KL}}\big(q(\mathbf z)\Vert p(\mathbf z\mid\mathbf x;\theta)\big)$$ \(q\) 越接近後驗,ELBO 越接近真正的 log-likelihood。和 Jensen 的推導不同,這條路直接給出缺口的大小。

官方講義補充:這個等式要求 \(q\) 的支撐集涵蓋後驗的支撐集,否則 KL 為無窮大,只剩不等式。出處:CS236 notes, VAE 章。

Variational inference(投影片 26)

後驗算不出來時,取一個可計算、由參數 \(\boldsymbol\phi\) 決定的分佈族 \(q(\mathbf z;\boldsymbol\phi)\),例如 \(q(\mathbf z;\boldsymbol\phi) = \mathcal N(\phi_1,\phi_2)\),再挑 \(\boldsymbol\phi\) 讓 \(q\) 盡量接近 \(p(\mathbf z\mid\mathbf x;\theta)\)。這叫 variational inference,\(\boldsymbol\phi\) 叫 variational parameters。

投影片 26 的圖:藍色曲線是後驗 \(p(\mathbf z\mid\mathbf x;\theta)\),形狀不是單純的鐘形;橘色 \(\mathcal N(2,2)\) 大致蓋住藍色的主要區域;綠色 \(\mathcal N(-4,0.75)\) 是一個窄峰,落在藍色幾乎為 0 的地方。結論:\(\mathcal N(2,2)\) 是比較好的近似。Demo B 可以重現這個比較。

手寫數字的例子(投影片 27)

假設 \(p(\mathbf x^{\text{top}},\mathbf x^{\text{bottom}};\theta)\) 會給「像數字的圖」高機率,把 \(\mathbf z = \mathbf x^{\text{top}}\) 當作潛在變數。用獨立 Bernoulli 的 \(q(\mathbf x^{\text{top}};\boldsymbol\phi)\) 近似後驗 \(p(\mathbf x^{\text{top}}\mid\mathbf x^{\text{bottom}};\theta)\)。投影片的圖是一張下半部像 9 的數字,上半部塗成綠色。全部 0.5 不好、全部 1 不好、對應 9 上半部的像素 \(\approx1\) 才好。Demo C 把這幾種選擇的 ELBO 實際算出來了。

最終形式與本講總結(投影片 28–29)

$$\log p(\mathbf x;\theta) \ge \sum_{\mathbf z}q(\mathbf z;\boldsymbol\phi)\log p(\mathbf z,\mathbf x;\theta) + H(q(\mathbf z;\boldsymbol\phi)) = \mathcal L(\mathbf x;\theta,\boldsymbol\phi) \quad\text{(ELBO)}$$
$$\log p(\mathbf x;\theta) = \mathcal L(\mathbf x;\theta,\boldsymbol\phi) + D_{\mathrm{KL}}\big(q(\mathbf z;\boldsymbol\phi)\Vert p(\mathbf z\mid\mathbf x;\theta)\big)$$

下一步:在整個資料集上,同時對 \(\theta\) 和 \(\boldsymbol\phi\) 最大化 ELBO。

潛在變數模型的優點容易建出有彈性的模型;適合非監督學習。
缺點
likelihood 難算、難用 MLE 訓練。根本原因是後驗推論 \(p(\mathbf z\mid\mathbf x)\) 很難,通常需要變分近似。另一條路是乾脆放棄 KL 和 likelihood(GAN)。

常見誤解

誤解:「潛在變數模型取樣很難」。取樣很容易(先抽 z 再抽 x)。難的是評估 \(p(\mathbf x)\) 和後驗推論。
誤解:「p(x|z) 是高斯,所以 p(x) 也是高斯」。\(p(\mathbf x)\) 是對 \(\mathbf z\) 積分的混合,可以非常複雜。
誤解:「訓練後 z 的每一維自動對應有語意的特徵」。MLE 只要求擬合資料,不保證語意;甚至有定理說非監督下一般做不到。
誤解:「importance sampling 估計 p(x) 不偏,所以 log 估計也不偏」。log 是凹函數,\(\mathbb E[\log\hat p]\le\log\mathbb E[\hat p]\),log 估計系統性偏低。這個偏低的期望值就是 ELBO(k = 1 時)。
誤解:「ELBO 只是一個鬆的近似」。它和真值的差恰好是 \(D_{\mathrm{KL}}(q\Vert p(\mathbf z\mid\mathbf x))\),\(q\) 等於後驗時完全相等。
誤解:「q 隨便選一個固定分佈就好」。最好的 \(q\) 是後驗,而後驗依賴 \(\mathbf x\)。每個資料點需要不同的 \(q\),這就是下一講 amortized inference 的動機。

自我測驗

1. 潛在變數模型的兩個主要動機是什麼?
(1) 用簡單的 \(p(\mathbf x\mid\mathbf z)\) 組合出複雜的 \(p(\mathbf x)\),提高表達力;(2) 透過後驗 \(p(\mathbf z\mid\mathbf x)\) 非監督地取得特徵或分群。
2. 寫出 VAE 的生成過程,並說明它和 GMM 的差別。
\(\mathbf z\sim\mathcal N(0,I)\),\(\mathbf x\sim\mathcal N(\boldsymbol\mu_\theta(\mathbf z),\Sigma_\theta(\mathbf z))\)。GMM 的 \(z\) 只有 K 個值,每個成分的參數查表可任意設定;VAE 的 \(\mathbf z\) 連續,成分無限多,但參數必須由神經網路從 \(\mathbf z\) 算出。
3. 為什麼 log Σ_z p(x, z) 不能直接最佳化?
求和(或積分)的項數是指數級的(30 個二元潛在變數就有 \(2^{30}\) 項),連續時通常沒有解析解;梯度也一樣難算;而每個資料點每步都要算,必須很便宜。
4. 均勻抽樣的 Monte Carlo 估計是不偏的,為什麼實務上不行?
大多數隨機 \(\mathbf z\) 給出的 \(p(\mathbf x,\mathbf z)\) 極小,少數合理的 \(\mathbf z\) 幾乎抽不到,估計量的變異數極大。
5. 寫出 importance sampling 估計 p(x) 的公式,並證明它不偏。
\(\hat p = \frac1k\sum_j p(\mathbf x,\mathbf z^{(j)})/q(\mathbf z^{(j)})\),\(\mathbf z^{(j)}\sim q\)。\(\mathbb E_q[p(\mathbf x,\mathbf z)/q(\mathbf z)] = \sum_{\mathbf z}q(\mathbf z)\,p(\mathbf x,\mathbf z)/q(\mathbf z) = \sum_{\mathbf z}p(\mathbf x,\mathbf z) = p(\mathbf x)\)。
6. 若 q(z) = p(z|x),importance sampling 估計量的變異數是多少?
0。每一項 \(p(\mathbf x,\mathbf z)/p(\mathbf z\mid\mathbf x) = p(\mathbf x)\) 都是同一個常數。
7. 用 Jensen 不等式推導 ELBO。
\(\log p(\mathbf x) = \log\mathbb E_q[p(\mathbf x,\mathbf z)/q(\mathbf z)] \ge \mathbb E_q[\log p(\mathbf x,\mathbf z) - \log q(\mathbf z)]\),因為 log 是凹函數。
8. 把 ELBO 寫成「期望 log 聯合機率 + entropy」的形式。
\(\text{ELBO} = \sum_{\mathbf z}q(\mathbf z)\log p_\theta(\mathbf x,\mathbf z) + H(q)\),其中 \(H(q) = -\sum_{\mathbf z}q(\mathbf z)\log q(\mathbf z)\)。
9. 證明 log p(x) = ELBO + KL(q‖p(z|x))。
展開 \(D_{\mathrm{KL}}(q\Vert p(\mathbf z\mid\mathbf x)) = \sum q\log q - \sum q\log p(\mathbf z,\mathbf x) + \log p(\mathbf x)\)(用 \(p(\mathbf z\mid\mathbf x) = p(\mathbf z,\mathbf x)/p(\mathbf x)\)),移項即得。
10. EM 的 E-step 和 M-step 各在對 ELBO 做什麼?為什麼 log-likelihood 不會下降?
E-step 固定 θ、把 q 設為後驗,使 ELBO = log p;M-step 固定 q、對 θ 最大化 ELBO。\(\log p_{\theta'} \ge \mathcal L(q,\theta') \ge \mathcal L(q,\theta) = \log p_\theta\)。
11. Demo C 中,為什麼 q 用「後驗邊際」當 φ,gap 仍不為 0?
這個 \(q\) 假設 16 個像素在後驗下互相獨立,但真實後驗中像素彼此相關(筆畫是連續的)。分解式家族表示不了這種相關,所以 \(D_{\mathrm{KL}}(q\Vert p(\mathbf z\mid\mathbf x))>0\)。
12. 為什麼 ELBO 的缺口是 reverse KL?這對 q 的行為有什麼影響?
缺口是 \(D_{\mathrm{KL}}(q\Vert p(\mathbf z\mid\mathbf x))\),期望對 \(q\) 取。依第 4 講,這個方向是 mode-seeking:\(q\) 傾向集中在後驗的某個 mode,而不是蓋住全部。

延伸閱讀