JOVANA
Explore Library Glossary Getting Started Three Levels Fields How it works Mission
Join the mission
All guides

變分推論:把貝氏推論變成最佳化

ELBO、重參數化技巧、平均場及其失效模式,以及如何把變分貝氏擴展到數百萬權重、並跨輸入攤銷它。

用最佳化取代積分

變分推論挑一個可解的分布族 q(w; φ)——比方說在每個權重上各放一個獨立高斯——然後在族內搜尋那個離真實後驗最近的成員,「近」用 KL 散度來衡量。我們就這樣把一個不可能的積分,變成了對變分參數 φ 的熟悉最佳化。麻煩在於:到真實後驗的 KL 裡仍然藏著那個難解的邊際概似。解決它的東西,正是整套方法的核心物件。

把那個 KL 重新整理,就得到證據下界(ELBO):q 之下的期望對數概似,減去 q 到先驗的 KL。最大化 ELBO 會同時最小化到真實後驗的 KL,而完全不必碰那個邊際概似。把兩項讀成一場拔河:第一項把 q 拉向「擬合資料」的權重,第二項是個複雜度懲罰,把 q 拉回先驗。ELBO 就是「貝氏」與「帶正則化的最佳化」變成同一句話的地方。

\mathcal{L}(\phi)=\mathbb{E}_{q(w;\phi)}\!\left[\log p(\mathcal{D}\mid w)\right]-\mathrm{KL}\!\left(q(w;\phi)\,\|\,p(w)\right)

證據下界(ELBO):在 q 下最大化期望對數似然、同時貼近先驗,恰好等價於最小化到真實後驗的 KL 散度。

重參數化技巧

要用 SGD 最佳化 ELBO,你需要它對 φ 的梯度;但 φ 坐在一個對隨機權重取期望的式子裡——而你無法把梯度推過一個取樣步驟。重參數化技巧就是那把鑰匙:不要直接從 q 取樣 w,而是從一個無參數的分布取樣固定的雜訊 ε,再把 w 算成 φ 與 ε 的一個確定性、可微分函數。隨機性被塞進不帶梯度的 ε 裡,於是反向傳播能乾淨地流過其餘部分。

\nabla_{\phi}\,\mathbb{E}_{q(w;\phi)}\!\left[f(w)\right]=\mathbb{E}_{\epsilon\sim\mathcal{N}(0,I)}\!\left[\nabla_{\phi}\,f(\mu+\sigma\odot\epsilon)\right]

重參數化技巧:把隨機權重寫成 μ + σ⊙ε,於是梯度可以移入期望內部並回傳到 φ。

# Gaussian weight w ~ N(mu, sigma^2), reparameterized
eps = randn_like(mu)          # noise, no gradient
sigma = softplus(rho)         # keep sigma > 0
w = mu + sigma * eps          # differentiable in (mu, rho)
loss = -log_likelihood(w, batch) + kl(mu, sigma)  # one MC sample of the ELBO
負 ELBO 的一個蒙地卡羅樣本;梯度經由 w 流回 mu 與 rho。

這正是驅動變分自編碼器的同一個技巧——那裡它重參數化的是潛在編碼,這裡是權重——所以 VAE 是第一次認識它最乾淨的場所。每一步取一個雜訊樣本,就給出 ELBO 一個帶雜訊但無偏的梯度;實務上通常一個樣本就夠,因為 SGD 本來就已經在小批次上做平均了。

平均場,以及它痛在哪裡

最簡單的 q 把每個權重都當成獨立——這就是平均場近似。它便宜(每個權重兩個數字:一個均值、一個變異數),也是多數函式庫的預設值。但「獨立」是個強烈的謊言。網路裡的權重彼此高度相關,硬逼 q 因式分解會讓它系統性地低估變異數:KL(q‖p) 會懲罰「q 把質量放在後驗沒有質量之處」,於是 q 把自己縮進單一個峰裡,回報出虛假的自信。

擴展與攤銷

每一步都對整個資料集算 ELBO,在規模上是不可能的。隨機變分推論改成抽一個小批次、把它的概似項放大去估計完整總和,再對結果跑普通的隨機最佳化——正是這個想法讓 SGD 能訓練深度網路,現在拿來驅動貝氏推論。這才使變分貝氏在現代規模的資料與模型上根本變得可行。

還有第二種擴展。當你必須推論一個逐輸入的潛在變數(如 VAE)時,否則你得對每個資料點重跑一次最佳化。攤銷變分推論改成訓練單一個推論網路,把任意輸入直接映射到它的變分參數,最佳化成本只付一次、永遠重用。你用一點點精度——所謂「攤銷間隙」——換來「測試時一次前向傳遞就完成近似推論」的能力。

攤銷推斷用一個編碼器網路一次前向就輸出 q 的參數,取代逐樣本的優化——這正是 VAE 的範式。

變分自編碼器示意圖:編碼器把輸入映射到隱變量分佈,採樣後由解碼器重建輸入。

超越高斯:流式後驗

如果瓶頸在 q 的形狀,那就讓它更豐富。正規化流後驗從一個簡單的基底分布出發,把它推過一連串可逆、可微分的映射;變數變換公式精確地追蹤密度,所以你仍然算得出 ELBO。結果是一個能彎曲、能偏斜、能帶相關性的變分族——捕捉平均場丟掉的結構——代價是更多參數與更謹慎的工程。

w=f_K\circ\cdots\circ f_1(z_0),\qquad \log q_K(w)=\log q_0(z_0)-\sum_{k=1}^{K}\log\left|\det\frac{\partial f_k}{\partial z_{k-1}}\right|

歸一化流後驗把簡單的基分佈經過一連串可逆映射;每一步的對數密度都要減去一個對數雅可比行列式項。