Variational Autoencoder:同時學生成器和推論器
上一講得到了 ELBO:只要 \(q\) 接近後驗,它就是 \(\log p(\mathbf x)\) 的好近似。這講把它變成真正能訓練的演算法,分三步:(1) 把 \(q\) 參數化成 \(q(\mathbf z;\boldsymbol\phi)\),和 \(\theta\) 一起用梯度最佳化;(2) 用 reparameterization trick 讓梯度穿過抽樣;(3) 用一個 encoder 網路一次預測所有資料點的 \(\boldsymbol\phi\)(amortized inference)。三步合起來,就是名字裡有 autoencoder 的原因。
讀完這頁你應該能夠
- 用 KL 非負性推導 ELBO,並說出它的兩種拆法:「完全觀測的 log-likelihood + entropy」與「重建 − KL 到先驗」。
- 說明 variational inference 為什麼是「在一族下界中找最緊的那一個」,以及 \(\theta\) 和 \(\boldsymbol\phi\) 怎麼互相牽動。
- 寫出 SVI 演算法,說明為什麼每個資料點需要不同的 \(\boldsymbol\phi^i\)。
- 解釋 \(\nabla_\theta\) 容易、\(\nabla_{\boldsymbol\phi}\) 困難的原因,推導 reparameterization trick,並說明它的適用條件。
- 比較 REINFORCE 與 reparameterization 的變異數。
- 說明 amortized inference 的好處與代價(amortization gap)。
- 把 ELBO 寫成 autoencoder 的損失,並用 Alice / Bob 的故事解釋兩項各在做什麼。
前置知識檢查
- 第 5 講:ELBO、\(\log p(\mathbf x) = \text{ELBO} + D_{\mathrm{KL}}(q\Vert p(\mathbf z\mid\mathbf x))\)、EM
- 第 4 講:Monte Carlo 估計、SGD、forward / reverse KL
- 多變數微積分的 chain rule、backpropagation 的概念
- 高斯的取樣:\(z = \mu + \sigma\epsilon,\ \epsilon\sim\mathcal N(0,1)\)(第 2 講補充框)
本頁對照過投影片圖片;標「出處」的補充來自 Kingma & Welling (2019) An Introduction to VAEs(arXiv 1906.02691v3)、Lai, Song, Kim, Mitsufuji & Ermon The Principles of Diffusion Models(arXiv 2510.21890v3)、官方講義,以及 Lilian Weng 的〈From Autoencoder to Beta-VAE〉。注意:Lai 等人的書把 encoder 參數寫成 \(\theta\)、decoder 寫成 \(\phi\),和本課相反。本頁一律用課堂記號:decoder \(\theta\)、encoder \(\boldsymbol\phi\)。
01回顧與兩個問答
VAE:\(\mathbf z\sim\mathcal N(0,I)\),\(p(\mathbf x\mid\mathbf z) = \mathcal N(\boldsymbol\mu_\theta(\mathbf z),\Sigma_\theta(\mathbf z))\)。積木簡單,邊際 \(p(\mathbf x)\) 卻是無限多個高斯的混合,非常有彈性。可以把它看成 k-means 的推廣:潛在變數更有彈性,能找到更複雜的變化因素。代價是 \(p(\mathbf x)\) 難算,所以訓練也難。02:09
02ELBO 的兩張臉
拆法一:完全觀測的 log-likelihood + entropy(投影片 5)
第一項:用 \(q\) 猜出缺的 \(\mathbf z\),然後假裝資料是完全觀測的,算平均 log-likelihood。第二項只和 \(q\) 有關,衡量 \(q\) 有多「不確定」。這就是 EM 的味道:先補值,再當作完整資料來學。08:53EM 本身在深度生成模型中無法擴展,但這講的方法和它目標相同:處理有缺失資料的學習問題。11:30
另一條推導:只用 KL ≥ 0(投影片 6)
移項就得到 ELBO。這條推導比 Jensen 更好,因為它直接告訴你下界有多鬆:缺口就是 \(q\) 和真實後驗的 KL。13:36
03後驗算不出來:variational inference
在 VAE 中,算後驗等於要「反轉」decoder 網路 \(\boldsymbol\mu_\theta,\Sigma_\theta\):給一個 \(\mathbf x\),找出哪些 \(\mathbf z\) 可能產生它,而且是在機率意義下的反轉。這一般非常困難。18:50
Variational inference 的做法:選一個可計算的分佈族 \(q(\mathbf z;\boldsymbol\phi)\),例如 \(q(\mathbf z;\boldsymbol\phi) = \mathcal N(\phi_1,\phi_2)\),\(\boldsymbol\phi\) 叫 variational parameters,然後調 \(\boldsymbol\phi\) 讓 \(q\) 盡量接近 \(p(\mathbf z\mid\mathbf x;\theta)\)。這把「推論」變成了「最佳化」。22:36
投影片 7 的圖:藍色是真實後驗(兩個高斯的混合,有兩個峰),橘色 \(\mathcal N(2,2)\) 寬寬地蓋住藍色的主要區域,綠色 \(\mathcal N(-4,0.75)\) 是左邊一個窄峰,幾乎落在藍色之外。結論是橘色比較好。第 5 講 Demo B 可以手動重現這個比較。23:07
- 怎麼衡量 \(q\) 好不好?最自然的是 KL,因為 KL 正好就是 ELBO 和真值的缺口。25:48
- \(q\) 的維度是潛在變數的維度,和 \(\mathbf x\) 無關。實務上 VAE 的 \(q\) 也是高斯。
04一族下界:同時學 θ 與 φ
投影片 9 的圖:橫軸是 \(\theta\),黑色實線是真正的 marginal likelihood \(\log p(\mathbf x;\theta)\)。下方有紅、橘兩條曲線 \(\mathcal L(\mathbf x;\theta,\phi_1)\)、\(\mathcal L(\mathbf x;\theta,\phi_2)\),永遠在黑線下面,分別在不同的 \(\theta\)(\(\theta_{i+1}\)、\(\theta_i\))處最貼近黑線。26:52
- 每個 \(\boldsymbol\phi\) 給出一條下界曲線。調 \(\boldsymbol\phi\):在這一族下界中找最緊的那一條。調 \(\theta\):把這條下界往上推,間接把真正的 likelihood 往上推。27:55
- \(\theta\) 是 decoder,\(\boldsymbol\phi\) 會變成 encoder,兩者合作把 ELBO 推高。28:57
- \(\theta\) 和 \(\boldsymbol\phi\) 是耦合的:最好的 \(\boldsymbol\phi\) 是當前 \(\theta\) 下的後驗。在某個 \(\theta\) 附近紅線比較好,換了 \(\theta\) 可能變成橘線比較好,所以要讓兩者保持同步。38:19
EM vs. 梯度:兩種讓 θ 和 φ 同步的策略
EM:E-step 把 \(\boldsymbol\phi\) 一次調到最好(下界在當前 \(\theta\) 處變緊),M-step 再盡量最大化 \(\theta\)。VAE:每一步對 \(\theta\) 和 \(\boldsymbol\phi\) 各走一小步梯度。老師說兩者哲學相同,只是後者能用在後驗算不出來、M-step 也沒有公式解的深度模型上。38:19
05整個資料集與 SVI
對資料集,把每個資料點的 ELBO 加起來(投影片 10):39:21
每個資料點用不同的 \(\boldsymbol\phi^i\),因為即使 \(\theta\) 相同,真實後驗 \(p(\mathbf z\mid\mathbf x^i;\theta)\) 也隨 \(\mathbf x^i\) 而不同。40:23
投影片 11 的圖:一張下半部像 9 的數字,上半部塗成綠色當作潛在變數。用獨立 Bernoulli 的 \(q(\mathbf z;\boldsymbol\phi)\):全部 0.5 不好、全部 1 不好、對應 9 上半部的像素 \(\approx1\) 才好。如果看到的是一條直線,可能是 1,要的 \(\boldsymbol\phi\) 就完全不同。投影片另外加了一句:如果 \(p(\mathbf z,\mathbf x;\theta)\) 離 \(p_{\text{data}}\) 還很遠(例如剛開始訓練時),上面的判斷就不成立。41:54
Stochastic variational inference(SVI,投影片 12)
- 初始化 \(\theta,\boldsymbol\phi^1,\dots,\boldsymbol\phi^M\)
- 從 \(\mathcal D\) 隨機抽一個資料點 \(\mathbf x^i\)
- 對 \(\boldsymbol\phi^i\) 最佳化 \(\mathcal L(\mathbf x^i;\theta,\boldsymbol\phi^i)\):重複 \(\boldsymbol\phi^i \leftarrow \boldsymbol\phi^i + \eta\nabla_{\boldsymbol\phi^i}\mathcal L\),直到收斂到 \(\boldsymbol\phi^{i,*}\approx\arg\max_{\boldsymbol\phi}\mathcal L(\mathbf x^i;\theta,\boldsymbol\phi)\)
- 算 \(\nabla_\theta\mathcal L(\mathbf x^i;\theta,\boldsymbol\phi^{i,*})\)
- 沿梯度更新 \(\theta\),回到步驟 2
- 內迴圈找出當前 \(\theta\) 下最緊的下界,步驟 4–5 在那條下界上走一步。這是 coordinate ascent 的味道;\(\theta\) 和 \(\boldsymbol\phi\) 各走幾步最好,目前沒有定論。50:21
- 非凸,可能卡在很差的局部最佳解:一開始 \(\boldsymbol\phi\) 很爛時,猜出的潛在變數很差,\(\theta\) 可能學不起來。52:59
- 官方講義把這個做法叫 black-box variational inference(BBVI),並指出內迴圈是一個昂貴的最佳化,這正是 amortized inference 的動機(第 8 節)。出處:CS236 notes, VAE 章。
06梯度:θ 容易、φ 困難
期望沒有解析解,用 Monte Carlo:從 \(q\) 抽 \(\mathbf z^1,\dots,\mathbf z^K\):55:06
實務上訓練 VAE 通常只用 \(K=1\)。55:36
對 θ:直接把梯度推進期望裡
\(q\) 不依賴 \(\theta\),抽樣的分佈不變,梯度可以直接進到期望裡面。而 \(\log p(\mathbf z^k,\mathbf x;\theta)\) 是完全觀測的 log-likelihood,算梯度就和 autoregressive model 一樣。57:09
對 φ:抽樣的分佈本身在動
期望是對 \(q(\mathbf z;\boldsymbol\phi)\) 取的。改變 \(\boldsymbol\phi\) 會改變抽到哪些 \(\mathbf z\),不能直接把梯度推進去:
要知道「\(\boldsymbol\phi\) 稍微改一點,樣本會怎麼變」。58:10老師的強化學習類比:把 \(\mathbf z\) 想成動作、\(q\) 想成隨機策略、期望裡的東西想成獎勵。問題就是「要怎麼改策略,才能讓期望獎勵變大」。61:49
兩種解法:通用的 REINFORCE(之後的課會講,第 17 講),和這講的 reparameterization,後者比較好但不那麼通用:只適用於連續的 \(\mathbf z\),而且只有某些分佈可以。59:41
07Reparameterization trick
目標:算 \(\nabla_{\boldsymbol\phi}\mathbb E_{q(\mathbf z;\boldsymbol\phi)}[r(\mathbf z)] = \nabla_{\boldsymbol\phi}\int q(\mathbf z;\boldsymbol\phi)r(\mathbf z)\,d\mathbf z\),\(\mathbf z\) 連續。設 \(q(\mathbf z;\boldsymbol\phi) = \mathcal N(\boldsymbol\mu,\sigma^2I)\),\(\boldsymbol\phi = (\boldsymbol\mu,\sigma)\)。下面兩種抽樣方式等價:62:52
- 直接抽 \(\mathbf z\sim q(\mathbf z;\boldsymbol\phi)\);
- 抽 \(\boldsymbol\epsilon\sim\mathcal N(0,I)\),再算 \(\mathbf z = \boldsymbol\mu + \sigma\boldsymbol\epsilon = g(\boldsymbol\epsilon;\boldsymbol\phi)\)。\(g\) 是確定性的。
於是同一個期望可以寫成兩種形式,而第二種的期望不再依賴 \(\boldsymbol\phi\),梯度可以直接推進去:64:24
直覺:抽樣過程寫成「固定雜訊經過確定性變換」之後,就確切知道改變 \(\boldsymbol\phi\) 會讓樣本怎麼移動,chain rule 就能算出效果。64:54
ELBO 的情況:期望裡也有 φ(投影片 16)
ELBO 的被積函數 \(r(\mathbf z,\boldsymbol\phi) = \log p(\mathbf z,\mathbf x;\theta) - \log q(\mathbf z;\boldsymbol\phi)\) 本身也依賴 \(\boldsymbol\phi\)。沒關係,照樣代換:68:28
\(\boldsymbol\phi\) 透過兩條路影響結果:經過 \(\mathbf z = g(\boldsymbol\epsilon;\boldsymbol\phi)\),以及直接出現在 \(\log q\) 裡。autodiff 會自動處理兩條路的 chain rule。
REINFORCE(score function estimator)怎麼來的?為什麼變異數大?
利用 \(\nabla_{\boldsymbol\phi}q = q\,\nabla_{\boldsymbol\phi}\log q\)(log-derivative trick):
它不需要 \(f\) 可微,也適用離散的 \(\mathbf z\),所以很通用。代價是變異數大:
- 它只用到 \(f(\mathbf z)\) 的純量值,告訴你「這個樣本好或壞」;reparameterization 用的是 \(\nabla_{\mathbf z}f\) 這個向量,直接告訴你「往哪個方向移動會更好」。Kingma & Welling 把這描述成資訊瓶頸:一個被純量卡住,另一個被寬得多的梯度向量卡住。
- 他們引用 Kucukelbir et al. (2016) 的實驗:精心設計的 score function 估計要多用約兩個數量級的樣本,才能達到和 reparameterization 相同的變異數。
常見的降變異數方法是減掉一個 baseline \(b\)(control variate):\(\mathbb E_q[(f(\mathbf z)-b)\nabla\log q]\) 仍然不偏,因為 \(\mathbb E_q[\nabla\log q] = 0\)。注意 \(b\) 不能用到這個樣本自己,否則會產生偏差;Demo A 的 baseline 用「同一批其他樣本的平均」(leave-one-out),可以開關。
出處:Kingma & Welling (2019), §2.9.1 "Score function estimator";官方講義 VAE 章。
只有高斯可以 reparameterize 嗎?離散變數為什麼不行?
條件是能把抽樣寫成「固定分佈的雜訊經過可微變換」。高斯(\(\boldsymbol\mu+L\boldsymbol\epsilon\))、Laplace、指數分佈、logistic 等 location-scale 族都可以;也可以接上 normalizing flow 讓 \(q\) 更有彈性。67:28
離散變數雖然也能用「均勻雜訊 + 反 CDF」抽樣,但那個變換是階梯函數,幾乎處處導數為 0,梯度傳不過去。這時要用 REINFORCE,或第 17 講的 Gumbel-softmax 之類的連續鬆弛。
\(\log q\) 怎麼算:若 \(g\) 可逆,\(\log q(\mathbf z) = \log p(\boldsymbol\epsilon) - \log\left|\det\frac{\partial\mathbf z}{\partial\boldsymbol\epsilon}\right|\)。對角高斯 \(\mathbf z = \boldsymbol\mu+\boldsymbol\sigma\odot\boldsymbol\epsilon\) 的 Jacobian 是 \(\mathrm{diag}(\boldsymbol\sigma)\),所以 \(\log q(\mathbf z) = \sum_i[\log\mathcal N(\epsilon_i;0,1) - \log\sigma_i]\)。全共變異數時用 Cholesky 分解 \(\Sigma = LL^\top\)、\(\mathbf z = \boldsymbol\mu + L\boldsymbol\epsilon\),\(L\) 是下三角矩陣,行列式就是對角線乘積。這個「變數變換 + Jacobian 行列式」正是第 7 講 normalizing flow 的核心公式。
出處:Kingma & Welling (2019), §2.4–2.5。
Demo AREINFORCE vs. reparameterization:同一個梯度,兩種估計
要估計 \(\frac{\partial}{\partial\mu}\mathbb E_{z\sim\mathcal N(\mu,\sigma^2)}[r(z)]\)。每個估計只用 \(K\) 個樣本,重複 2,000 次,看估計值的分佈。
- 二次函數:兩者都不偏(平均都落在真值),但 REINFORCE 的分佈寬得多。實測預設值(μ = −1、σ = 0.8、K = 1)時,REINFORCE 的變異數約是 reparameterization 的 108 倍。μ 離 2 越遠、σ 越小,差距越誇張:μ = 3、σ = 0.1 時約 2,700 倍。
- 加上 baseline 後,REINFORCE 的變異數明顯下降,但仍比 reparameterization 大:二次函數、K = 4 時,倍數從 103 降到 34。
- 正弦函數是反例:\(r'(z) = 3\cos(3z)\) 振盪得很厲害,而 σ = 0.8 時 \(3z\) 的範圍跨越好幾個週期,reparameterization 的每個樣本導數在 −3 到 3 之間亂跳。實測它的變異數反而是 REINFORCE 的約 5 倍(變異數比 0.2)。「reparameterization 變異數較低」是常見情況,不是定理;Kingma & Welling 的說法也是「generally」。
- 階梯函數:\(r'(z) = 0\) 幾乎處處成立,reparameterization 估計永遠是 0,有偏差,而真實梯度其實是 \(\mathcal N(1;\mu,\sigma^2)\) 的密度值。REINFORCE 不需要可微,仍然不偏。這就是投影片說它「比較好但不那麼通用」的原因。
08Amortized inference
每個資料點一組 \(\boldsymbol\phi^i\):資料集一大就無法擴展,而且每個資料點都要跑一次內迴圈最佳化。70:01
投影片 18 的圖:三張手寫數字(3、7、4)。假設 \(\mathbf z\) 捕捉了數字類別、筆跡風格等資訊,每張圖的最佳 \(\boldsymbol\phi^{i,*}\) 都不同;amortized inference 讓 \(f_\lambda\) 學會「幫你解這個最佳化問題」。71:02
聯合訓練(投影片 19)
- 初始化 \(\theta^{(0)},\boldsymbol\phi^{(0)}\)
- 從 \(\mathcal D\) 隨機抽 \(\mathbf x^i\)(實務上是一個 minibatch)
- 用 reparameterization 算 \(\nabla_\theta\mathcal L(\mathbf x^i;\theta,\boldsymbol\phi)\) 和 \(\nabla_{\boldsymbol\phi}\mathcal L(\mathbf x^i;\theta,\boldsymbol\phi)\)
- 沿梯度同時更新 \(\theta\) 和 \(\boldsymbol\phi\)
同時更新而不是交替,是因為兩者耦合:\(\boldsymbol\phi\) 應該追蹤當前 \(\theta\) 下的後驗。79:53Kingma & Welling 把這叫「doubly stochastic」最佳化:雜訊同時來自 minibatch 抽樣和 \(\boldsymbol\epsilon\) 抽樣。原始論文把這整套叫 AEVB(Auto-Encoding Variational Bayes)。出處:Kingma & Welling (2019), Algorithm 1。
代價與好處
- 代價:限制只能用 \(f_\lambda\) 能產生的 \(\boldsymbol\phi\),下界比每點分別最佳化更鬆。如果負擔得起,每點分別最佳化會更好,只是慢、無法擴展。72:02
- 好處 1:測試時沒有成本。新資料點只要一次 forward 就得到 \(q\),最佳化的成本被「攤銷」(amortized)了。73:03
- 好處 2:正則化。聯合訓練時,\(\theta\) 也被推向「後驗能被這個小網路近似」的生成模型,有防止 overfitting 的效果(投影片 24 引用 Shu et al., 2018)。74:08
Amortization gap 和 approximation gap
ELBO 和真正的 \(\log p(\mathbf x)\) 之間的缺口可以拆成兩段:
- Approximation gap:分佈族 \(\mathcal Q\)(例如對角高斯)本身表示不了真實後驗,即使為這個點單獨最佳化也無法消除。要用更有彈性的 \(q\)(例如 flow)才能縮小。
- Amortization gap:encoder 對這個點給出的 \(q\) 不是族內最好的那一個。每點單獨最佳化(SVI)就能消除。
Demo C 會實際量出這兩段。
出處:這個分解來自 Cremer, Li & Duvenaud (2018)〈Inference Suboptimality in Variational Autoencoders〉,ICML 2018,arXiv 1801.03558;分解式本身可直接驗證(第二項加第一項正好消去中間的 \(\max_{q}\mathcal L\))。
09Autoencoder 觀點(課堂最後幾分鐘,投影片 20–21 下一講接續)
第 7 講的前 34 分鐘把這一節完整講完,大量的課堂問答(posterior collapse、為什麼不直接拉近邊際分佈、怎麼取樣等)整理在第 7 講筆記的 Part A。
把 ELBO 中間加減一個 \(\log p(\mathbf z)\):80:26
投影片 20 的圖:左邊一張輸入影像進入 encoder 網路,輸出「平均」和「標準差」兩個向量,合成一個潛在分佈,從中抽出 \(\hat{\mathbf z}\),再進 decoder 網路,輸出一張重建影像。
- 拿一個資料點 \(\mathbf x^i\),從 \(q_{\boldsymbol\phi}(\mathbf z\mid\mathbf x^i)\) 抽 \(\hat{\mathbf z}\):encoder。實際上是 \((\boldsymbol\mu,\boldsymbol\sigma) = \text{encoder}_{\boldsymbol\phi}(\mathbf x^i)\),再從那個高斯抽樣。
- 從 \(p(\mathbf x\mid\hat{\mathbf z};\theta)\) 重建 \(\hat{\mathbf x}\):decoder。
- 第一項讓 \(\hat{\mathbf x}\approx\mathbf x^i\),也就是 autoencoder 的重建損失。
- 第二項讓 \(\hat{\mathbf z}\) 的分佈接近先驗 \(p(\mathbf z)\)。這正好回答了第 3 講的問題:普通 autoencoder 不知道要餵什麼給 decoder;VAE 把潛在碼的分佈拉向 \(p(\mathbf z)\),生成時從 \(p(\mathbf z)\) 抽樣就行。
Alice 和 Bob(投影片 21)
投影片 21 的圖:左邊 Alice 和一張狗的照片,中間是一個寫著「big compute data」的方塊(太空傳輸通道),右邊 Bob 拿到重建的照片。
- Alice 出太空任務,要把影像傳回地球給 Bob。她把影像 \(\mathbf x^i\)(隨機地)壓縮成訊息 \(\hat{\mathbf z}\sim q_{\boldsymbol\phi}(\mathbf z\mid\mathbf x^i)\) 傳出去。
- Bob 收到 \(\hat{\mathbf z}\),用 \(p(\mathbf x\mid\hat{\mathbf z};\theta)\) 重建影像。
- \(\mathbb E_{q}[\log p(\mathbf x\mid\mathbf z;\theta)]\) 大,代表這套通訊方式很成功。
- \(D_{\mathrm{KL}}(q_{\boldsymbol\phi}(\mathbf z\mid\mathbf x)\Vert p(\mathbf z))\) 強迫訊息的分佈長成 \(p(\mathbf z)\) 的樣子。這樣 Bob 知道 \(p(\mathbf z)\) 之後,可以自己產生逼真的訊息 \(\hat{\mathbf z}\sim p(\mathbf z)\) 和對應的影像,就像真的收到 Alice 傳來的一樣。
兩個高斯之間的 KL 有公式解
VAE 的 KL 項不用抽樣也能算。若 \(q = \mathcal N(\boldsymbol\mu,\mathrm{diag}(\boldsymbol\sigma^2))\)、\(p(\mathbf z) = \mathcal N(0,I)\),\(d\) 維:
推導(一維):\(\mathbb E_q[\log q] = -\tfrac12\log(2\pi\sigma^2) - \tfrac12\)、\(\mathbb E_q[\log p] = -\tfrac12\log(2\pi) - \tfrac12(\mu^2+\sigma^2)\),相減即得。各維獨立所以加總。
- \(\mu_j\) 離 0 越遠,罰得越重:潛在碼被拉回原點附近。
- \(\sigma_j\to0\) 時 \(-\log\sigma_j^2\to\infty\):encoder 不能給出「完全確定」的點,必須保留不確定性。這是 VAE 和普通 autoencoder 最大的不同。
Demo B 的訓練程式直接用這個公式,再加上一個 \(\mathbf z\) 樣本的重建項。
高斯 decoder 時重建項就是 MSE;為什麼 VAE 的樣本常常模糊?
若 decoder 是固定變異數的高斯 \(p(\mathbf x\mid\mathbf z) = \mathcal N(\boldsymbol\mu_\theta(\mathbf z),\sigma^2I)\),重建項變成
也就是均方誤差,訓練 VAE 就是最小化「正則化過的重建誤差」。(二值資料用 Bernoulli decoder,重建項就是第 3 講的 binary cross-entropy,Demo B 用的是這個。)
模糊的原因:固定 encoder 時,平方誤差的最佳 decoder 是條件期望 \(\boldsymbol\mu^*(\mathbf z) = \mathbb E[\mathbf x\mid\mathbf z]\)。如果兩張不同的圖被 encoder 映射到重疊的潛在區域,decoder 在那裡只能輸出它們的平均,看起來就是模糊的。這是常見的「簡單高斯 decoder + 平方誤差」設定的限制,不是所有 VAE 都如此。
Kingma & Welling 從 KL 方向的角度給了另一種解釋:最大化 ELBO 等於最小化 \(D_{\mathrm{KL}}(q_{\mathcal D}(\mathbf x,\mathbf z)\Vert p_\theta(\mathbf x,\mathbf z))\),這是 forward KL。模型必須蓋住所有資料,在資料之間多放機率質量只會被輕罰,於是樣本會比資料更「散」。(第 4 講的 mode-covering。)
出處:Lai et al. (2026), §2.1.3–2.1.4 "Gaussian VAE"、"Drawbacks of Standard VAE";Kingma & Welling (2019), §2.8.2 "Blurriness of generative model"。
β-VAE:調整兩項的比重
把目標改成 \(\mathbb E_q[\log p(\mathbf x\mid\mathbf z)] - \beta\,D_{\mathrm{KL}}(q\Vert p(\mathbf z))\)。\(\beta=1\) 是標準 VAE。\(\beta>1\) 對潛在瓶頸施加更強的限制,限制 \(\mathbf z\) 能攜帶的資訊量,經驗上能讓潛在變數更 disentangled(每一維只對一個變化因素敏感),但重建品質會變差。Lilian Weng 的文章把它推導成「在 KL 小於某個常數的限制下最大化重建」的 Lagrangian。Demo B 有 β 滑桿可以試。
出處:Lilian Weng,〈From Autoencoder to Beta-VAE〉;Higgins et al. (2017)。
Demo B在瀏覽器裡訓練一個 VAE
資料:8×8 二值手寫數字。Encoder:64 → 64(tanh)→ \((\boldsymbol\mu,\log\boldsymbol\sigma^2)\in\mathbb R^2\);decoder:2 → 64(tanh)→ 64 個 Bernoulli。潛在空間只有 2 維,可以直接畫出來。用 reparameterization(每點 1 個樣本)和 Adam 聯合訓練 encoder 和 decoder。
- 潛在空間:沒有用到任何標籤,同一個數字卻自然聚在一起,對應第 5 講投影片 11 的 MNIST 潛在空間圖。分佈大致在先驗的 2σ 圓內,這是 KL 項的效果。
- 格點解碼:這就是 Bob 自己從 \(p(\mathbf z)\) 產生訊息再解碼。相鄰格子之間數字平滑過渡,也看得到第 5 講課堂問答說的「6 和 7 之間的東西」。
- β = 0:沒有 KL 項,變成普通 autoencoder。重建最好,但潛在點散得很開,可能遠離先驗,格點解碼(從先驗抽樣)有很多地方是垃圾。β 很大:所有點被擠到原點,重建變差,格點趨向同一張平均圖(KL 太強時潛在碼幾乎不帶資訊)。改 β 後要重設再訓練。
Demo CAmortization gap:encoder 給的 q 有多好?
用 Demo B 訓練好的 VAE,挑一張測試圖。比較三個數字:(1) encoder 給的 \(q_{\boldsymbol\phi}(\mathbf z\mid\mathbf x)\) 的 ELBO;(2) 只針對這一張圖、從 encoder 的輸出出發,用 reparameterization 梯度直接最佳化 \((\boldsymbol\mu,\log\boldsymbol\sigma^2)\) 300 步之後的 ELBO(這就是 SVI 的內迴圈);(3) 用 importance sampling(5,000 個樣本)估計的 \(\log p(\mathbf x)\)。2 維潛在空間的 \(\log p\) 估計已經非常準。
通常會看到:SVI 最佳化能把 ELBO 再往上推一點(消除 amortization gap),但仍然碰不到 \(\log p(\mathbf x)\),因為對角高斯畫不出真實後驗的形狀(approximation gap)。後驗常常是歪的或彎的,橢圓只能盡量貼合。
實測(Demo B 用 β = 1 訓練到停止,測試集 −ELBO 約 29.9 bits / 圖):8 張測試圖中,7 張的 amortization gap 在 0.02–0.73 bits,但有一張數字 6(#148)高達 7.3 bits,encoder 對它給的 \(q\) 很差,每點最佳化補回很多;approximation gap 在 0.13–0.97 bits。這個 2 維的小例子裡,兩段缺口大多很小。Cremer et al. 在較大的模型上發現,和真實後驗的差距往往主要來自 encoder 不夠好(amortization gap),而不是分佈族太簡單(摘要原文:「often due to imperfect recognition networks」)。
10投影片 22–26:課堂沒講到的部分
影片在 autoencoder 觀點的開頭結束。以下是剩下投影片的內容,下一講開頭可能會接續。
潛在變數模型總結(投影片 22)
- 組合簡單模型得到更有彈性的模型(例如高斯混合)。
- 有向模型允許 ancestral sampling,生成很有效率:\(\mathbf z\sim p(\mathbf z)\),\(\mathbf x\sim p(\mathbf x\mid\mathbf z;\theta)\)。
- log-likelihood 一般算不出來,所以學習困難。
- 聯合學習模型(\(\theta\))和 amortized 推論元件(\(\boldsymbol\phi\)),透過最佳化 ELBO 得到可計算性。
- 任何 \(\mathbf x\) 的潛在表示都可以用 \(q_{\boldsymbol\phi}(\mathbf z\mid\mathbf x)\) 推出來。
研究方向(投影片 23–26)
改進變分學習的三個方向:更好的最佳化技巧、更有表達力的近似族、替代的損失函數。
| 方向 | 投影片列出的做法 |
|---|---|
| Encoder | Amortization(可擴展、有正則化效果,Shu et al. 2018);用 Monte Carlo 方法強化後驗:importance sampling(IWAE,Burda et al. 2015)、MCMC、sequential Monte Carlo、rejection sampling;normalizing flows(Rezende & Mohamed 2015、IAF Kingma et al. 2016) |
| Decoder | 強力 decoder(DRAW、PixelCNN decoder);可學的先驗;多個 VAE 疊起來的 hierarchical model,也就是 diffusion model |
| 目標函數 | ELBO 更緊不代表樣本更好(likelihood 和樣本品質不相關,Theis et al. 2016),也不代表潛在碼更有資訊;替代 KL 的散度:Rényi α-divergence、MMD、Wasserstein 距離 |
「強力 decoder 會忽略潛在碼」是什麼意思?(posterior collapse)
如果 decoder 很強(例如 PixelCNN),它不需要 \(\mathbf z\) 就能把 \(p(\mathbf x)\) 擬合得很好。這時最省事的解是讓 \(q_{\boldsymbol\phi}(\mathbf z\mid\mathbf x) = p(\mathbf z)\):KL 項變成 0,不用付任何代價,而重建項反正靠 decoder 自己也做得不錯。結果 \(\mathbf z\) 完全不帶資訊,叫 posterior collapse。投影片引用 Bowman et al. (2015)、Chen et al. (2016) 等。這是「重建誤差 vs. KL 懲罰」取捨的極端情況,Demo B 把 β 調很大時可以看到類似的現象。
另一個看 ELBO 的角度:模型誤差 + 推論誤差
考慮兩個聯合分佈:生成的 \(p_\theta(\mathbf x,\mathbf z) = p(\mathbf z)p_\theta(\mathbf x\mid\mathbf z)\),和推論的 \(q_{\boldsymbol\phi}(\mathbf x,\mathbf z) = p_{\text{data}}(\mathbf x)q_{\boldsymbol\phi}(\mathbf z\mid\mathbf x)\)。可以證明
左邊是「−平均 ELBO + 常數」。最大化 ELBO 就是同時壓低兩項:模型誤差(第 4 講的 MLE 目標)和推論誤差(\(q\) 離後驗多遠)。這是「two for one」的另一種寫法。
出處:Lai et al. (2026), §2.1.2「Training via the ELBO」中的段落 "Information-Theoretic View: ELBO as a Divergence Bound"。
與其他講的關聯
- 第 3 講:「普通 autoencoder 不是生成模型,因為不知道要餵什麼給 decoder」在這講得到解答:KL 項把潛在碼拉向 \(p(\mathbf z)\)。當時課堂上學生的猜測(「強迫潛在表示像高斯」)就是 VAE。
- 第 5 講:ELBO、EM、importance sampling。這講把 EM 的「精確 E-step」換成梯度更新的參數化 \(q\)。
- 第 7–8 講 Normalizing flow:reparameterization 的 \(\log q(\mathbf z) = \log p(\boldsymbol\epsilon) - \log|\det\partial\mathbf z/\partial\boldsymbol\epsilon|\) 正是 flow 的核心公式;flow 也常被用來做更有彈性的 \(q\)(IAF)。
- 第 16 講 Diffusion:hierarchical VAE 疊很多層、\(\mathbf z\) 與 \(\mathbf x\) 同維度,就是 diffusion,訓練目標也是 ELBO。Lai et al. 的書第 2 章就是從 VAE 一路推到 DDPM。
- 第 17 講:離散潛在變數不能 reparameterize,要用 REINFORCE 或 Gumbel-softmax;VQ-VAE。
常見誤解
自我測驗
1. 寫出 ELBO 的兩種拆法,並說明每一項的意義。
2. 為什麼不能直接把 q 設成真實後驗?
3. 為什麼每個資料點需要不同的 φⁱ?
4. 為什麼 ∇θ ELBO 容易、∇φ ELBO 困難?
5. 推導 q = N(μ, σ²) 時,∂/∂μ E_q[r(z)] 的 reparameterization 估計量。
6. 同一個問題的 REINFORCE 估計量是什麼?
7. 什麼情況下不能用 reparameterization?
8. 什麼是 amortized inference?它的好處和代價各是什麼?
9. 對角高斯 q = N(μ, diag σ²) 與 N(0, I) 的 KL 公式是什麼?σ → 0 時會怎樣?
10. 用 Alice 和 Bob 解釋 KL 項為什麼讓 VAE 能生成。
11. ELBO 和 log p(x) 的缺口可以拆成哪兩段?各怎麼縮小?
12. β-VAE 的 β 大於 1 和等於 0 各會發生什麼?
延伸閱讀
- Kingma & Welling (2019), An Introduction to Variational Autoencoders(v3)(本頁參考):第 2 章(encoder、ELBO、reparameterization、分解式與全共變異數高斯)、§2.9.1 score function estimator、§2.8.2 模糊的原因。
- Lai, Song, Kim, Mitsufuji & Ermon (2026), The Principles of Diffusion Models(v3)(本頁參考):§2.1 VAE(ELBO 的資訊理論觀點、Gaussian VAE、模糊、hierarchical VAE)。注意記號 θ/φ 與本課相反。
- CS236 course notes:Variational Autoencoders(本頁參考):BBVI、REINFORCE vs. reparameterization、amortized inference。
- Lilian Weng, From Autoencoder to Beta-VAE(本頁參考):從各種 autoencoder 到 VAE、reparameterization 的圖、β-VAE、VQ-VAE(第 17 講會用到)。
- Kingma & Welling (2013), Auto-Encoding Variational Bayes:VAE 原始論文。