CS236 第 6 講 · Variational Autoencoder
Stanford CS236 · Fall 2023 · Lecture 6

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 的原因。

讀完這頁你應該能夠

  1. 用 KL 非負性推導 ELBO,並說出它的兩種拆法:「完全觀測的 log-likelihood + entropy」與「重建 − KL 到先驗」。
  2. 說明 variational inference 為什麼是「在一族下界中找最緊的那一個」,以及 \(\theta\) 和 \(\boldsymbol\phi\) 怎麼互相牽動。
  3. 寫出 SVI 演算法,說明為什麼每個資料點需要不同的 \(\boldsymbol\phi^i\)。
  4. 解釋 \(\nabla_\theta\) 容易、\(\nabla_{\boldsymbol\phi}\) 困難的原因,推導 reparameterization trick,並說明它的適用條件。
  5. 比較 REINFORCE 與 reparameterization 的變異數。
  6. 說明 amortized inference 的好處與代價(amortization gap)。
  7. 把 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

課堂問答 · 04:13先驗 \(p(\mathbf z)\) 可以學嗎?可以。最簡單是讓高斯的平均和共變異數可學;也可以用 autoregressive 先驗;或在 \(\mathbf z\) 上面再疊一個 VAE,得到 hierarchical VAE。疊很多層,基本上就是 diffusion model。04:13
課堂問答 · 05:48把 decoder 網路加深,和增加 \(\mathbf z\) 的維度或疊 VAE,有什麼不同?兩者都增加彈性,但方式不同。網路再深,\(p(\mathbf x\mid\mathbf z)\) 仍然只是一個高斯;增加 \(\mathbf z\) 的維度或疊層,則像是增加更多混合成分。05:48

02ELBO 的兩張臉

拆法一:完全觀測的 log-likelihood + entropy(投影片 5)

$$\log p(\mathbf x;\theta) \ge \sum_{\mathbf z}q(\mathbf z)\log\frac{p_\theta(\mathbf x,\mathbf z)}{q(\mathbf z)} = \underbrace{\sum_{\mathbf z}q(\mathbf z)\log p_\theta(\mathbf x,\mathbf z)}_{\text{當作完全觀測時的 log-likelihood}} + \underbrace{H(q)}_{q\text{ 的 entropy}}$$

第一項:用 \(q\) 猜出缺的 \(\mathbf z\),然後假裝資料是完全觀測的,算平均 log-likelihood。第二項只和 \(q\) 有關,衡量 \(q\) 有多「不確定」。這就是 EM 的味道:先補值,再當作完整資料來學。08:53EM 本身在深度生成模型中無法擴展,但這講的方法和它目標相同:處理有缺失資料的學習問題。11:30

另一條推導:只用 KL ≥ 0(投影片 6)

$$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$$

移項就得到 ELBO。這條推導比 Jensen 更好,因為它直接告訴你下界有多鬆:缺口就是 \(q\) 和真實後驗的 KL。13:36

TWO FOR ONE $$\text{ELBO}(\mathbf x) = \log p_\theta(\mathbf x) - D_{\mathrm{KL}}\big(q_{\boldsymbol\phi}(\mathbf z\mid\mathbf x)\Vert p_\theta(\mathbf z\mid\mathbf x)\big)$$ 同時對 \(\theta\) 和 \(\boldsymbol\phi\) 最大化 ELBO,會一舉兩得:(1) 近似地提高 \(\log p_\theta(\mathbf x)\),生成模型變好;(2) 降低 \(q\) 和真實後驗的 KL,推論模型變好。 出處:Kingma & Welling (2019), §2.2.1 "Two for One"。
課堂問答 · 20:26既然最好的 \(q\) 是後驗,為什麼不直接算後驗?這是雞生蛋問題:\(p(\mathbf z\mid\mathbf x) = p(\mathbf x,\mathbf z)/p(\mathbf x)\),分母正是我們算不出來、想最佳化的 \(p(\mathbf x)\)。如果算得出後驗,根本就不需要 ELBO 了。20:56

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\) 也是高斯。
為什麼 q 只要「容易抽樣、容易算機率」?哪些模型能當 q?

估計 ELBO 要從 \(q\) 抽 \(\mathbf z\),還要算 \(\log q(\mathbf z)\),兩者都必須便宜。老師舉例:56:39

  • VAE 本身:容易抽樣,但算不了機率。不行。
  • Autoregressive model:兩者都可以。可以。
  • GAN:容易抽樣,但沒有機率。不行。
  • Normalizing flow(第 7–8 講):兩者都可以,實務上很常用。可以。

更有彈性的 \(q\) 能讓下界更緊、擬合更好,所以有很多論文在設計更好的 \(q\)。36:46

04一族下界:同時學 θ 與 φ

$$\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)$$
$$\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)$$

投影片 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
課堂問答 · 32:09訓練完之後還需要 \(q\) 嗎?只要生成的話,不需要:抽 \(\mathbf z\)、過 decoder 就好。但如果要評估某個資料點的 likelihood(例如做異常偵測),還是需要 \(q\) 來算下界或做 importance sampling。32:09
課堂問答 · 46:07最大化 ELBO 一定會最大化真正的 likelihood 嗎?不一定。下界可能離真值很遠,甚至可能下界上升而真值下降。保證只有一個:真值至少和你得到的下界一樣好。46:07
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

$$\ell(\theta;\mathcal D) = \sum_{\mathbf x^i\in\mathcal D}\log p(\mathbf x^i;\theta) \ge \sum_{\mathbf x^i\in\mathcal D}\mathcal L(\mathbf x^i;\theta,\boldsymbol\phi^i) \qquad\Rightarrow\qquad \max_\theta\ell(\theta;\mathcal D) \ge \max_{\theta,\boldsymbol\phi^1,\dots,\boldsymbol\phi^M}\sum_{\mathbf x^i\in\mathcal D}\mathcal L(\mathbf x^i;\theta,\boldsymbol\phi^i)$$

每個資料點用不同的 \(\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)

演算法
  1. 初始化 \(\theta,\boldsymbol\phi^1,\dots,\boldsymbol\phi^M\)
  2. 從 \(\mathcal D\) 隨機抽一個資料點 \(\mathbf x^i\)
  3. 對 \(\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)\)
  4. 算 \(\nabla_\theta\mathcal L(\mathbf x^i;\theta,\boldsymbol\phi^{i,*})\)
  5. 沿梯度更新 \(\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

$$\mathcal L(\mathbf x;\theta,\boldsymbol\phi) = \mathbb E_{q(\mathbf z;\boldsymbol\phi)}\big[\log p(\mathbf z,\mathbf x;\theta) - \log q(\mathbf z;\boldsymbol\phi)\big] \approx \frac1K\sum_k\big(\log p(\mathbf z^k,\mathbf x;\theta) - \log q(\mathbf z^k;\boldsymbol\phi)\big)$$

實務上訓練 VAE 通常只用 \(K=1\)。55:36

對 θ:直接把梯度推進期望裡

$$\nabla_\theta\mathbb E_{q(\mathbf z;\boldsymbol\phi)}\big[\log p(\mathbf z,\mathbf x;\theta) - \log q(\mathbf z;\boldsymbol\phi)\big] = \mathbb E_{q(\mathbf z;\boldsymbol\phi)}\big[\nabla_\theta\log p(\mathbf z,\mathbf x;\theta)\big] \approx \frac1K\sum_k\nabla_\theta\log p(\mathbf z^k,\mathbf x;\theta)$$

\(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\),不能直接把梯度推進去:

$$\nabla_{\boldsymbol\phi}\mathbb E_{q(\mathbf z;\boldsymbol\phi)}[f(\mathbf z)] \ne \mathbb E_{q(\mathbf z;\boldsymbol\phi)}[\nabla_{\boldsymbol\phi}f(\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

$$\mathbb E_{\mathbf z\sim q(\mathbf z;\boldsymbol\phi)}[r(\mathbf z)] = \int q(\mathbf z;\boldsymbol\phi)r(\mathbf z)\,d\mathbf z = \mathbb E_{\boldsymbol\epsilon\sim\mathcal N(0,I)}[r(g(\boldsymbol\epsilon;\boldsymbol\phi))] = \int\mathcal N(\boldsymbol\epsilon)\,r(\boldsymbol\mu+\sigma\boldsymbol\epsilon)\,d\boldsymbol\epsilon$$
REPARAMETERIZATION 估計 $$\nabla_{\boldsymbol\phi}\mathbb E_{q(\mathbf z;\boldsymbol\phi)}[r(\mathbf z)] = \nabla_{\boldsymbol\phi}\mathbb E_{\boldsymbol\epsilon}[r(g(\boldsymbol\epsilon;\boldsymbol\phi))] = \mathbb E_{\boldsymbol\epsilon}[\nabla_{\boldsymbol\phi}r(g(\boldsymbol\epsilon;\boldsymbol\phi))] \approx \frac1K\sum_k\nabla_{\boldsymbol\phi}r(g(\boldsymbol\epsilon^k;\boldsymbol\phi)),\quad\boldsymbol\epsilon^k\sim\mathcal N(0,I)$$ 條件:\(r\) 和 \(g\) 對 \(\boldsymbol\phi\) 可微,\(\boldsymbol\epsilon\) 容易抽樣。梯度就是 backpropagation。通常變異數比 REINFORCE 低很多。

直覺:抽樣過程寫成「固定雜訊經過確定性變換」之後,就確切知道改變 \(\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

$$\mathbb E_{q(\mathbf z;\boldsymbol\phi)}[r(\mathbf z,\boldsymbol\phi)] = \mathbb E_{\boldsymbol\epsilon}[r(g(\boldsymbol\epsilon;\boldsymbol\phi),\boldsymbol\phi)] \approx \frac1K\sum_k r(g(\boldsymbol\epsilon^k;\boldsymbol\phi),\boldsymbol\phi)$$

\(\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):

$$\nabla_{\boldsymbol\phi}\int q(\mathbf z;\boldsymbol\phi)f(\mathbf z)\,d\mathbf z = \int q(\mathbf z;\boldsymbol\phi)\,f(\mathbf z)\,\nabla_{\boldsymbol\phi}\log q(\mathbf z;\boldsymbol\phi)\,d\mathbf z = \mathbb E_{q}\big[f(\mathbf z)\,\nabla_{\boldsymbol\phi}\log q(\mathbf z;\boldsymbol\phi)\big]$$

它不需要 \(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 次,看估計值的分佈。

REINFORCEReparameterization真實梯度
  • 二次函數:兩者都不偏(平均都落在真值),但 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

AMORTIZATION學一個參數化函數 \(f_\lambda\),把每個 \(\mathbf x\) 直接映射到一組好的 variational parameters,就像對 \(\mathbf x^i\mapsto\boldsymbol\phi^{i,*}\) 做迴歸。例如 \(q(\mathbf z\mid\mathbf x^i)\) 都是高斯,平均各不相同,就學一個網路 \(f_\lambda\) 把 \(\mathbf x^i\) 映射到 \(\boldsymbol\mu^i\)。文獻中通常寫成 \(q_{\boldsymbol\phi}(\mathbf z\mid\mathbf x)\),這裡的 \(\boldsymbol\phi\) 指的是 encoder 網路的權重。

投影片 18 的圖:三張手寫數字(3、7、4)。假設 \(\mathbf z\) 捕捉了數字類別、筆跡風格等資訊,每張圖的最佳 \(\boldsymbol\phi^{i,*}\) 都不同;amortized inference 讓 \(f_\lambda\) 學會「幫你解這個最佳化問題」。71:02

聯合訓練(投影片 19)

演算法 $$\mathcal L(\mathbf x;\theta,\boldsymbol\phi) = \mathbb E_{q_{\boldsymbol\phi}(\mathbf z\mid\mathbf x)}\big[\log p(\mathbf z,\mathbf x;\theta) - \log q_{\boldsymbol\phi}(\mathbf z\mid\mathbf x)\big]$$
  1. 初始化 \(\theta^{(0)},\boldsymbol\phi^{(0)}\)
  2. 從 \(\mathcal D\) 隨機抽 \(\mathbf x^i\)(實務上是一個 minibatch)
  3. 用 reparameterization 算 \(\nabla_\theta\mathcal L(\mathbf x^i;\theta,\boldsymbol\phi)\) 和 \(\nabla_{\boldsymbol\phi}\mathcal L(\mathbf x^i;\theta,\boldsymbol\phi)\)
  4. 沿梯度同時更新 \(\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)\) 之間的缺口可以拆成兩段:

$$\log p(\mathbf x) - \mathcal L\big(\mathbf x; q_{\boldsymbol\phi}(\cdot\mid\mathbf x)\big) = \underbrace{\log p(\mathbf x) - \max_{q\in\mathcal Q}\mathcal L(\mathbf x;q)}_{\text{approximation gap}} + \underbrace{\max_{q\in\mathcal Q}\mathcal L(\mathbf x;q) - \mathcal L\big(\mathbf x;q_{\boldsymbol\phi}(\cdot\mid\mathbf x)\big)}_{\text{amortization gap}}$$
  • 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

$$\begin{aligned}\mathcal L(\mathbf x;\theta,\boldsymbol\phi) &= \mathbb E_{q_{\boldsymbol\phi}(\mathbf z\mid\mathbf x)}\big[\log p(\mathbf z,\mathbf x;\theta) - \log q_{\boldsymbol\phi}(\mathbf z\mid\mathbf x)\big] \\ &= \mathbb E_{q_{\boldsymbol\phi}(\mathbf z\mid\mathbf x)}\big[\log p(\mathbf z,\mathbf x;\theta) - \log p(\mathbf z) + \log p(\mathbf z) - \log q_{\boldsymbol\phi}(\mathbf z\mid\mathbf x)\big] \\ &= \underbrace{\mathbb E_{q_{\boldsymbol\phi}(\mathbf z\mid\mathbf x)}\big[\log p(\mathbf x\mid\mathbf z;\theta)\big]}_{\text{重建}} - \underbrace{D_{\mathrm{KL}}\big(q_{\boldsymbol\phi}(\mathbf z\mid\mathbf x)\Vert p(\mathbf z)\big)}_{\text{和先驗的距離}}\end{aligned}$$

投影片 20 的圖:左邊一張輸入影像進入 encoder 網路,輸出「平均」和「標準差」兩個向量,合成一個潛在分佈,從中抽出 \(\hat{\mathbf z}\),再進 decoder 網路,輸出一張重建影像。

  1. 拿一個資料點 \(\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)\),再從那個高斯抽樣。
  2. 從 \(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 拿到重建的照片。

  1. Alice 出太空任務,要把影像傳回地球給 Bob。她把影像 \(\mathbf x^i\)(隨機地)壓縮成訊息 \(\hat{\mathbf z}\sim q_{\boldsymbol\phi}(\mathbf z\mid\mathbf x^i)\) 傳出去。
  2. Bob 收到 \(\hat{\mathbf z}\),用 \(p(\mathbf x\mid\hat{\mathbf z};\theta)\) 重建影像。
  3. \(\mathbb E_{q}[\log p(\mathbf x\mid\mathbf z;\theta)]\) 大,代表這套通訊方式很成功。
  4. \(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\) 維:

$$D_{\mathrm{KL}}(q\Vert p) = \frac12\sum_{j=1}^{d}\big(\mu_j^2 + \sigma_j^2 - \log\sigma_j^2 - 1\big)$$

推導(一維):\(\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)\),重建項變成

$$\mathbb E_q[\log p(\mathbf x\mid\mathbf z)] = -\frac{1}{2\sigma^2}\mathbb E_q\big[\Vert\mathbf x - \boldsymbol\mu_\theta(\mathbf z)\Vert^2\big] + C$$

也就是均方誤差,訓練 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。

測試圖的 encoder 平均 \(\boldsymbol\mu(\mathbf x)\),依真實數字上色(訓練時看不到標籤)。虛線圓是先驗的 1σ、2σ。
在 \(z_1,z_2\in[-2.5,2.5]\) 的 10×10 格點上解碼,顯示 decoder 的機率 \(p(x_i=1\mid\mathbf z)\)。
−ELBO(bits / 圖)重建項 −E[log p(x|z)]KL(q‖p(z))
重建:上排原圖,下排 \(\hat{\mathbf x}\)(用 \(\boldsymbol\mu(\mathbf x)\) 解碼)
  • 潛在空間:沒有用到任何標籤,同一個數字卻自然聚在一起,對應第 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\) 估計已經非常準。

先在 Demo B 訓練模型(至少 10 個 epoch)。
SVI:每點最佳化的 ELBOencoder 的 ELBOlog p(x)(IS 估計)
底色:真實後驗 \(p(\mathbf z\mid\mathbf x)\)(格點計算)。橘色橢圓:encoder 的 q;藍色橢圓:最佳化後的 q(都畫 2σ)。

通常會看到: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)

  1. 組合簡單模型得到更有彈性的模型(例如高斯混合)。
  2. 有向模型允許 ancestral sampling,生成很有效率:\(\mathbf z\sim p(\mathbf z)\),\(\mathbf x\sim p(\mathbf x\mid\mathbf z;\theta)\)。
  3. log-likelihood 一般算不出來,所以學習困難。
  4. 聯合學習模型(\(\theta\))和 amortized 推論元件(\(\boldsymbol\phi\)),透過最佳化 ELBO 得到可計算性。
  5. 任何 \(\mathbf x\) 的潛在表示都可以用 \(q_{\boldsymbol\phi}(\mathbf z\mid\mathbf x)\) 推出來。

研究方向(投影片 23–26)

改進變分學習的三個方向:更好的最佳化技巧、更有表達力的近似族、替代的損失函數。

方向投影片列出的做法
EncoderAmortization(可擴展、有正則化效果,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)\)。可以證明

$$D_{\mathrm{KL}}\big(q_{\boldsymbol\phi}(\mathbf x,\mathbf z)\Vert p_\theta(\mathbf x,\mathbf z)\big) = \underbrace{D_{\mathrm{KL}}(p_{\text{data}}\Vert p_\theta)}_{\text{真正的模型誤差}} + \underbrace{\mathbb E_{p_{\text{data}}(\mathbf x)}\big[D_{\mathrm{KL}}(q_{\boldsymbol\phi}(\mathbf z\mid\mathbf x)\Vert p_\theta(\mathbf z\mid\mathbf x))\big]}_{\text{推論誤差}}$$

左邊是「−平均 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"。

常見誤解

誤解:「VAE 的 encoder 是生成時必需的」。生成只需要先驗和 decoder。encoder 是訓練(以及評估 likelihood、取特徵)時才需要的工具。
誤解:「reparameterization 是為了讓抽樣可微而做的近似」。它不是近似:兩種抽樣方式的分佈完全相同,估計量仍然不偏。它只是換一種寫法,讓梯度能穿過去。
誤解:「reparameterization 永遠比 REINFORCE 好」。它需要連續變數和可微的被積函數。函數不可微(例如階梯)時,它給出有偏差的 0 梯度。就算函數可微,導數劇烈振盪時(Demo A 的 sin(3z)),它的變異數也可能比 REINFORCE 大。
誤解:「amortized inference 給出最好的 q」。它比每點單獨最佳化差(amortization gap),只是快很多。
誤解:「KL 項只是一個正則化技巧」。它是從 likelihood 的下界推導出來的,是讓 VAE 能從先驗取樣生成的關鍵。拿掉它(β = 0)就退化成不能取樣的普通 autoencoder。
誤解:「ELBO 更高,樣本就更好」。投影片 26 明確說兩者不相關;強力 decoder 甚至可能讓潛在碼完全被忽略。

自我測驗

1. 寫出 ELBO 的兩種拆法,並說明每一項的意義。
(a) \(\mathbb E_q[\log p(\mathbf x,\mathbf z)] + H(q)\):用 q 補值後的完全觀測 log-likelihood,加上 q 的 entropy。(b) \(\mathbb E_q[\log p(\mathbf x\mid\mathbf z)] - D_{\mathrm{KL}}(q(\mathbf z\mid\mathbf x)\Vert p(\mathbf z))\):重建項減去潛在碼和先驗的距離。
2. 為什麼不能直接把 q 設成真實後驗?
\(p(\mathbf z\mid\mathbf x) = p(\mathbf x,\mathbf z)/p(\mathbf x)\),分母正是算不出來的量。能算後驗就能直接算 likelihood,不需要 ELBO。
3. 為什麼每個資料點需要不同的 φⁱ?
即使 θ 相同,真實後驗 \(p(\mathbf z\mid\mathbf x^i;\theta)\) 隨 \(\mathbf x^i\) 而不同(看到 9 的下半部和看到 1 的下半部,該猜的上半部完全不同)。
4. 為什麼 ∇θ ELBO 容易、∇φ ELBO 困難?
期望是對 \(q(\mathbf z;\boldsymbol\phi)\) 取的。θ 不影響抽樣分佈,梯度可直接推進期望;φ 會改變抽到哪些 z,梯度不能直接推進去。
5. 推導 q = N(μ, σ²) 時,∂/∂μ E_q[r(z)] 的 reparameterization 估計量。
\(z = \mu+\sigma\epsilon\),\(\mathbb E_q[r(z)] = \mathbb E_\epsilon[r(\mu+\sigma\epsilon)]\),所以 \(\partial_\mu = \mathbb E_\epsilon[r'(\mu+\sigma\epsilon)]\approx\frac1K\sum_k r'(\mu+\sigma\epsilon_k)\)。
6. 同一個問題的 REINFORCE 估計量是什麼?
\(\partial_\mu\log q(z) = (z-\mu)/\sigma^2\),所以 \(\partial_\mu\mathbb E_q[r(z)] = \mathbb E_q[r(z)(z-\mu)/\sigma^2]\approx\frac1K\sum_k r(z_k)(z_k-\mu)/\sigma^2\)。
7. 什麼情況下不能用 reparameterization?
潛在變數離散(變換是階梯函數,梯度為 0);無法把抽樣寫成固定雜訊的可微變換;或被積函數 r 不可微。
8. 什麼是 amortized inference?它的好處和代價各是什麼?
用一個網路 \(f_\lambda\)(encoder)把 \(\mathbf x\) 直接映射到 variational parameters,取代每點單獨最佳化。好處:可擴展、測試時一次 forward、有正則化效果。代價:只能用 encoder 產生得出的 q,ELBO 比每點最佳化鬆(amortization gap)。
9. 對角高斯 q = N(μ, diag σ²) 與 N(0, I) 的 KL 公式是什麼?σ → 0 時會怎樣?
\(\frac12\sum_j(\mu_j^2+\sigma_j^2-\log\sigma_j^2-1)\)。σ → 0 時 \(-\log\sigma_j^2\to\infty\),KL 爆掉,所以 encoder 不能給出確定性的點。
10. 用 Alice 和 Bob 解釋 KL 項為什麼讓 VAE 能生成。
KL 強迫 Alice 傳的訊息 \(\hat{\mathbf z}\) 的分佈長得像 \(p(\mathbf z)\)。Bob 知道 \(p(\mathbf z)\),就能自己抽出「看起來像 Alice 傳的」訊息並解碼成逼真的影像,不需要 Alice。
11. ELBO 和 log p(x) 的缺口可以拆成哪兩段?各怎麼縮小?
Approximation gap(q 的分佈族表示不了後驗,換更有彈性的族,例如 flow)和 amortization gap(encoder 給的不是族內最好的 q,可以每點最佳化、或用更大的 encoder)。
12. β-VAE 的 β 大於 1 和等於 0 各會發生什麼?
β > 1:更強的資訊瓶頸,傾向 disentangled 但重建變差,太大時潛在碼幾乎不帶資訊。β = 0:沒有 KL 項,退化成普通 autoencoder,重建最好但潛在碼分佈不受控,從先驗取樣生成效果差。

延伸閱讀