L5.1 20 分鐘閱讀 2026年9月

L5.1 當那個要加總的量算不出來,可以退到哪裡?

本篇重用M5.0保險為什麼存在:Convex Function 與 Jensen 不等式·M5.1用錯的機率表下注一年會多輸多少:KL Divergence 與 Cross-Entropy·M1.3快篩陽性:Bayes 與 Posterior

起點:一個多出來的變數

要怎麼替「這個模型有多符合資料」打一個分數? 給了一個乾淨的分數:把模型給實際資料的機率取對數。那一篇悄悄用掉一個前提——pθ(x)p_\theta(x) 要算得出來

很多有用的模型都不滿足它,而且理由都一樣:模型裡有一個你沒看到的變數

  • 一堆點看起來分成幾群,但每個點屬於哪一群沒有寫在資料上。
  • 一張圖片背後有一組「內容編碼」,但資料只有像素。
  • 一段語音背後有一串音素狀態,但錄音只有波形。

把那個看不到的變數叫 zz。模型是 pθ(x,z)=pθ(z)pθ(xz)p_\theta(x,z)=p_\theta(z)\,p_\theta(x\mid z)——聯合機率通常很好寫,因為它就是「先抽一個 zz,再依 zz 生出 xx」這個故事。但你要的分數需要的是 xx 的邊際機率:

pθ(x)=pθ(z)pθ(xz)dz.p_\theta(x)=\int p_\theta(z)\,p_\theta(x\mid z)\,\mathrm dz .

這個積分幾乎總是沒有封閉解。 兩個群集的時候它只是兩項相加,還好;但 zz 是一串 TT 個離散狀態時是 KTK^T 項,zz 是一個 6464 維的連續向量時是一個 6464 維積分。而每一步梯度下降都要算一次。

一個要對所有可能的隱藏狀態加總的量算不出來,
但我們其實只需要它變大——
有沒有一個算得出來、而且保證不會高估它的替身?

課堂提問Q1

造一個 logpθ(x)\log p_\theta(x) 的下界。有兩條路:一條用 Jensen 不等式,三行就到;另一條繞得遠一點,但會順便算出那個下界差了多少。兩條走一次,然後說明為什麼第二條才是這一篇真正的主角。

先想一想,再展開看整理後的答案

第一條路(Jensen)。 引進任何一個 zz 上的分布 q(z)q(z),只要它在 pθ(z)p_\theta(z) 有質量的地方都有質量:

logpθ(x)=logq(z)pθ(x,z)q(z)dz=logEq ⁣[pθ(x,z)q(z)]    Eq ⁣[logpθ(x,z)q(z)].\log p_\theta(x)=\log\int q(z)\frac{p_\theta(x,z)}{q(z)}\mathrm dz =\log\mathbb E_{q}\!\left[\frac{p_\theta(x,z)}{q(z)}\right] \;\ge\;\mathbb E_{q}\!\left[\log\frac{p_\theta(x,z)}{q(z)}\right].

最後一步是 Jensen(保險為什麼存在:Convex Function 與 Jensen 不等式):log\log 是凹的,所以 logEElog\log\mathbb E\ge\mathbb E\log。右邊那個量就是 ELBO(evidence lower bound):

F(q,θ)=Eq(z)[logpθ(x,z)logq(z)].\mathcal F(q,\theta)=\mathbb E_{q(z)}\big[\log p_\theta(x,z)-\log q(z)\big].

它算得出來——裡面只有聯合機率(好寫)和 qq(你自己選的),沒有積分不掉的東西。三行結束。

但這條路只告訴你「\ge」,沒告訴你差多少。 而「差多少」正是你最需要知道的:如果差距是 0.0010.001,最大化 ELBO 就幾乎等於最大化 log-likelihood;如果差距是 55 而且會隨 θ\theta 亂跑,那最大化 ELBO 可能把你帶到完全錯的地方。

第二條路(直接算差)。 不用不等式,寫一個恆等式。注意 pθ(x,z)=pθ(x)pθ(zx)p_\theta(x,z)=p_\theta(x)\,p_\theta(z\mid x),代進 ELBO:

F(q,θ)=Eq ⁣[logpθ(x)pθ(zx)q(z)]=logpθ(x)Eq ⁣[logq(z)pθ(zx)],\mathcal F(q,\theta)=\mathbb E_q\!\left[\log\frac{p_\theta(x)\,p_\theta(z\mid x)}{q(z)}\right] =\log p_\theta(x)-\mathbb E_q\!\left[\log\frac{q(z)}{p_\theta(z\mid x)}\right],

也就是

  logpθ(x)=F(q,θ)+KL(q(z)pθ(zx)).  \boxed{\;\log p_\theta(x)=\mathcal F(q,\theta)+\mathrm{KL}\big(q(z)\,\big\Vert\,p_\theta(z\mid x)\big).\;}

這是一個等式,不是不等式。 它比第一條路多給了三件事:

  1. 下界成立的理由變成 KL0\mathrm{KL}\ge0,Jensen 只是這件事的一個影子。
  2. 鬆緊有了名字:ELBO 差 log-likelihood 多少,完全等於你選的 qq真後驗 pθ(zx)p_\theta(z\mid x) 多遠。
  3. 緊的條件是可判斷的q=pθ(zx)q=p_\theta(z\mid x) 時等號成立,此時 ELBO 精確等於 log-likelihood。

第三點會在第三節直接變成一個演算法。

那個差真的就是 KL

先把等式當成一個可以驗的宣稱。

設定:兩個成分的一維 Gaussian 混合,p(z=1)=0.7p(z=1)=0.7μ0=1.0\mu_0=-1.0μ1=1.5\mu_1=1.5σ=1\sigma=1。這個模型小到 logp(x)\log p(x) 可以精確算出來(兩項相加),所以 ELBO 的每一分鬆緊都看得見。

x=0.5x=0.5。真後驗是 p(z=1x)=0.8134p(z=1\mid x)=0.8134,而 logp(x)=1.5691\log p(x)=-1.5691。讓 qq 是一個 q(z=1)=rq(z=1)=r 的伯努利,掃 rr

  r = 0.0500   ELBO = -2.9758   gap = 1.4067   KL(q‖p(z|x)) = 1.4067
  r = 0.2000   ELBO = -2.4530   gap = 0.8840   KL           = 0.8840
  r = 0.5000   ELBO = -1.8186   gap = 0.2495   KL           = 0.2495
  r = 0.8134   ELBO = -1.5691   gap = 0.0000   KL           = 0.0000   ← q = 真後驗
  r = 0.8000   ELBO = -1.5697   gap = 0.0006   KL           = 0.0006
  r = 0.9500   ELBO = -1.6507   gap = 0.0816   KL           = 0.0816

換三個不同的 xx、兩個不同的 rr,逐位仍然吻合:

  x = -2.0   r = 0.3   gap = 0.830826   KL = 0.830826
  x = -2.0   r = 0.6   gap = 2.201990   KL = 2.201990
  x =  0.0   r = 0.3   gap = 0.132907   KL = 0.132907
  x =  0.0   r = 0.6   gap = 0.004070   KL = 0.004070
  x = +2.0   r = 0.3   gap = 3.050125   KL = 3.050125
  x = +2.0   r = 0.6   gap = 1.421288   KL = 1.421288

下界的鬆緊不是一個模糊的「近似誤差」,它有一個名字:你猜的後驗離真後驗的 KL。

第一張表裡有一列特別值得停:r=0.8r=0.8 比最佳的 0.81340.8134 偏了 1.6%1.6\%,但 ELBO 只掉了 0.00060.0006,也就是相對誤差 0.04%0.04\%。原因是 KL 在最小值附近是二次的(和 要怎麼替「這個模型有多符合資料」打一個分數? 第三節那個 O(1/n)O(1/n) 同一個理由):偏了 δ\delta,代價是 O(δ2)O(\delta^2)

這件事是整個變分方法能用的根本原因。 真後驗算不出來、只能用一個受限的家族去近似——但只要近似「大致對」,下界就已經很緊了。反過來,r=0.05r=0.05 那一列(偏得離譜)掉了 1.411.41,那就不是小事。

EM:交替把兩個東西抬起來

第二節的等式對任何 qq 都成立。把它當成一個有兩組變數的最佳化問題——qqθ\theta——立刻得到一個演算法:輪流固定一個、最大化另一個。

  • E-step:固定 θ\theta,對 qq 最大化 F\mathcal F。由等式,logpθ(x)\log p_\theta(x) 不含 qq,所以最大化 F\mathcal F 等於最小化 KL(qpθ(zx))\mathrm{KL}(q\Vert p_\theta(z\mid x)),答案是 q=pθ(zx)q=p_\theta(z\mid x),而此時 ELBO 精確等於 log-likelihood
  • M-step:固定 qq,對 θ\theta 最大化 F\mathcal Fqq 固定時 F=Eq[logpθ(x,z)]+const\mathcal F=\mathbb E_q[\log p_\theta(x,z)]+\text{const},而聯合機率是好寫的,所以這一步通常有封閉解。

實測。n=500n=500 筆從上面那個混合抽出來的資料,故意從一個很差的起點(μ=(0.2,0.2)\mu=(-0.2,0.2)π=(0.5,0.5)\pi=(0.5,0.5))開始:

  init        ELBO = -1119.412                       log-lik = -1094.282
  iter 1   E 後 ELBO = -1094.282 (= log-lik -1094.282)   M 後 ELBO =  -998.819   mu = -0.113, +0.966
  iter 2   E 後 ELBO =  -978.036 (= log-lik  -978.036)   M 後 ELBO =  -949.100   mu = -0.271, +1.268
  iter 3   E 後 ELBO =  -923.753 (= log-lik  -923.753)   M 後 ELBO =  -906.253   mu = -0.594, +1.475
  iter 4   E 後 ELBO =  -898.532 (= log-lik  -898.532)   M 後 ELBO =  -894.940   mu = -0.762, +1.517
  iter 5   E 後 ELBO =  -893.098 (= log-lik  -893.098)   M 後 ELBO =  -891.803   mu = -0.854, +1.500
  iter 6   E 後 ELBO =  -890.823 (= log-lik  -890.823)   M 後 ELBO =  -890.030   mu = -0.919, +1.475
  真值 mu = -1.000, +1.500

三件事直接從表上讀得出來。

一,每一個 E 後的 ELBO 精確等於當時的 log-likelihood1094.282-1094.282978.036-978.036923.753-923.753…,一位小數都不差)。這就是「E-step 把 KL 壓成零」的實測。

二,ELBO 從頭到尾單調不減1119.41094.3998.8978.0-1119.4\to-1094.3\to-998.8\to-978.0\to\dots。兩種 step 都在最大化同一個 F\mathcal F,所以它只能上升。

三,log-likelihood 也單調不減,而且這是推論不是巧合:E 後 F=logp\mathcal F=\log p;接下來的 M-step 讓 F\mathcal F 上升;而 logpF\log p\ge\mathcal F 恆成立。所以下一輪 E 後的 logp\log p 一定不低於這一輪。

E-step 把下界頂到天花板,M-step 把天花板抬高;兩步都在推同一個量,所以它不會倒退。

但要注意這個保證有多弱。 單調不減不等於收斂到全域最佳——上表跑到第六輪 μ\mu(0.919,+1.475)(-0.919,+1.475),還在往真值 (1.0,+1.5)(-1.0,+1.5) 爬;而換一個更糟的起點,EM 可以停在一個把兩個成分都放在同一個地方的局部解。這是 同一張地圖從不同地方出發:損失曲面與初始化 那件事在機率模型上的版本,初始化一樣重要。

展開細節為什麼 M-step 常常有封閉解,而直接對 log p 做梯度下降沒有

直接最大化 logpθ(x)=logzpθ(z)pθ(xz)\log p_\theta(x)=\log\sum_z p_\theta(z)p_\theta(x\mid z) 時,那個 log\log 卡在加總的外面,微分會產生一個帶分母的式子,把所有成分耦合在一起。

M-step 最大化的是 Eq[logpθ(x,z)]=zq(z)[logpθ(z)+logpθ(xz)]\mathbb E_q[\log p_\theta(x,z)]=\sum_z q(z)\big[\log p_\theta(z)+\log p_\theta(x\mid z)\big]——log\log 在加總裡面。於是每個成分的參數各自獨立,而且如果 pθ(xz)p_\theta(x\mid z) 是指數族,那就是一個加權的最大似然,有封閉解。以 Gaussian 混合為例:

μkiqi(k)xiiqi(k),πk1niqi(k).\mu_k\leftarrow\frac{\sum_i q_i(k)\,x_i}{\sum_i q_i(k)},\qquad \pi_k\leftarrow\frac1n\sum_i q_i(k).

也就是「用後驗當權重的加權平均」。上表的 M-step 就是這兩行。

值得注意的是:這個好處不是免費的。ELBO 把 log\log 搬進加總裡,代價正是那個 KL\mathrm{KL} 項——你換掉的是「精確但難算」,換來的是「好算但有一個已知大小的缺口」。

後驗也算不出來的時候

EM 假設 E-step 做得到,也就是真後驗 pθ(zx)p_\theta(z\mid x) 寫得出來。zz 是離散且不多的時候可以(上面就是),但 zz 是一個連續向量、pθ(xz)p_\theta(x\mid z) 是一個神經網路的時候,後驗完全沒有封閉形式。

這時候退一步:不要求 qq 等於後驗,只在一個可參數化的家族裡找最近的那個。而且不要對每個 xx 各解一次最佳化,改成訓練一個網路 qϕ(zx)q_\phi(z\mid x) 直接把 xx 映到那個 qq 的參數(這叫 amortized inference——把每個資料點的推論成本攤提到一次訓練裡)。整個目標變成對 θ\thetaϕ\phi 同時做梯度上升:

F(ϕ,θ)=Eqϕ(zx)[logpθ(xz)]重建:z 要能還原 xKL(qϕ(zx)pθ(z))編碼:z 不能離先驗太遠.\mathcal F(\phi,\theta)=\underbrace{\mathbb E_{q_\phi(z\mid x)}\big[\log p_\theta(x\mid z)\big]}_{\text{重建:}z\text{ 要能還原 }x} -\underbrace{\mathrm{KL}\big(q_\phi(z\mid x)\,\Vert\,p_\theta(z)\big)}_{\text{編碼:}z\text{ 不能離先驗太遠}} .

(這只是把 ELBO 裡的 logpθ(x,z)logq\log p_\theta(x,z)-\log q 重新分組,不是新的東西。)

兩項的拉鋸很好讀:第一項要 zz 帶足夠的資訊去還原 xx,第二項要 zz 的分布貼著先驗。而第二項可以被壓到零——如果 pθ(xz)p_\theta(x\mid z) 強到不需要 zz 就能生出 xx,那最省事的解是讓 qϕ(zx)q_\phi(z\mid x) 完全不看 xx、直接等於先驗。這叫 posterior collapse:ELBO 看起來還不錯,但 zz 什麼都沒學到。

這件事在上面那個混合模型裡就能量出來——把兩個成分的距離慢慢縮小,zz 能承載的資訊量(也就是那個 KL 項在 xx 上的期望)跟著塌:

  |μ₁-μ₀| = 4.00    E_x[KL(p(z|x) ‖ p(z))] = 0.556150 nats
  |μ₁-μ₀| = 2.00                             0.291858
  |μ₁-μ₀| = 1.00                             0.094910
  |μ₁-μ₀| = 0.50                             0.025576
  |μ₁-μ₀| = 0.20                             0.004182
  |μ₁-μ₀| = 0.05                             0.000262
  |μ₁-μ₀| = 0.00                             0.000000

注意它掉得多快:距離減半,資訊量掉到四分之一以下(0.55620.29190.09490.02560.5562\to0.2919\to0.0949\to0.0256)。也就是說,「zz 有用」和「zz 完全沒用」之間沒有一段平坦的過渡帶——一旦訓練往「不靠 zz」的方向走一點,那個方向的回報就更小,於是走得更遠。這是一個正回饋,而正回饋通常需要外力才停得下來,實務上的對策(KL 退火、在 KL 項上設下界、削弱 decoder)全都是在提供那個外力。

注意KL(qp)\mathrm{KL}(q\Vert p) 這個方向會挑一個 mode 就停

變分法用的是 KL(qp)\mathrm{KL}(q\Vert p)(把你猜的放在前面),這個順序不是隨便選的——它是第二節那個恆等式自然給出的,也是唯一一個期望對 qq 取、因而抽得出樣本的方向。但它有一個系統性的偏好。

實測:目標 pp0.5N(2,0.52)+0.5N(2,0.52)0.5\,\mathcal N(-2,0.5^2)+0.5\,\mathcal N(2,0.5^2)(雙峰,標準差 2.06162.0616),用單一 Gaussian qq 去逼近:

  最小化 KL(q‖p) :mu = +1.9998   sigma = 0.5004   值 0.6931
  最小化 KL(p‖q) :mu = -0.0000   sigma = 2.0616   值 0.7236

前者挑了一個峰、寬度精確等於那個峰的寬度(0.50040.5004 對真值 0.50.5),另一個峰整個放棄(它付的代價正好是 ln2=0.6931\ln 2=0.6931,也就是丟掉一半質量)。後者把兩個峰一起蓋住,標準差 2.06162.0616 剛好是真實分布的標準差,但中間那塊機率其實是零的區域被它填滿了。

兩個方向各自在避免不同的災難:KL(qp)\mathrm{KL}(q\Vert p) 罰的是「qq 有質量但 pp 沒有」(所以它不敢跨過空隙),KL(pq)\mathrm{KL}(p\Vert q) 罰的是「pp 有質量但 qq 沒有」(所以它不敢漏掉任何一塊)。用錯的機率表下注一年會多輸多少:KL Divergence 與 Cross-Entropy 的不對稱性在這裡不是一個技術細節,它直接決定你會得到哪一種錯誤。

實務上的後果:用 ELBO 訓練出來的模型,傾向低估真實分布的散佈。這在生成的時候看得見——樣本偏保守、偏典型。

拖動 qq,看下界和那塊 KL 一起動

互動 demo:一次走半步:E-step 把縫補成精確的 0,M-step 把貼好的下界往上推。

回到情境:這套東西什麼時候可靠

這一切依賴什麼。

一,聯合機率 pθ(x,z)p_\theta(x,z) 要好寫。整個方法的立足點就是「聯合好寫、邊際難算」;如果連聯合都寫不出來,ELBO 沒有著力點。

二,qq 的家族要罩得住真後驗的形狀。上面的 Remark 已經量過代價:家族不夠時,缺口不只是變大,它還會往特定方向偏。而且這個缺口是看不見的——你能算 ELBO,但算不出 logpθ(x)\log p_\theta(x),所以你無從得知自己差多遠。

三,「ELBO 變大」不等於「模型變好」。因為 logp=F+KL\log p=\mathcal F+\mathrm{KL},ELBO 上升可能是 logp\log p 上升,也可能只是 qq 變準了。比較兩個不同架構的 ELBO 尤其危險:缺口大小不同,比較的不是同一個東西。

ELBO 是一個你算得出來的量,logpθ(x)\log p_\theta(x) 是一個你想要的量,而兩者的差是一個你通常量不到的量——這三句話要一起記。

先消化一下

想一想

第二節的實測裡,r=0.8r=0.8 的 ELBO 是 1.5697-1.5697,而最佳的 r=0.8134r=0.81341.5691-1.5691。這個「偏了 1.6%1.6\% 只掉 0.04%0.04\%」最好的解釋是:

想一想

EM 的實測表裡,每一個 E 後的 ELBO 都精確等於當時的 log-likelihood。為什麼?

想一想

一個團隊比較兩個不同架構的 VAE,A 的 ELBO 是 95.2-95.2、B 是 97.8-97.8,結論「A 的 log-likelihood 比較高」。這個結論:

想一想

下列哪一句不對

參考文獻

  1. Jordan, M., Ghahramani, Z., Jaakkola, T. & Saul, L. An Introduction to Variational Methods for Graphical Models. Machine Learning 37, 1999.(把 ELBO 與 EM 放在同一個變分框架下的經典整理。)
  2. Kingma, D. & Welling, M. Auto-Encoding Variational Bayes. ICLR 2014.(amortized inference 與重參數化技巧,本篇第四節那個目標函數的出處。)
  3. Blei, D., Kucukelbir, A. & McAuliffe, J. Variational Inference: A Review for Statisticians. JASA 112, 2017.(KL\mathrm{KL} 方向的不對稱性、mean-field 近似的偏差,以及變分法與 MCMC 的取捨。)