Mímisbrunnr知恵の泉

← ベイズ統計 一覧

🎓 レベル:発展 | 重要度:B(標準)

📎 前提:確率的変分推論と再パラメータ化 | 関連:オートエンコーダとVAE(機械学習)

要点(BLUF)

1. VAE は変分推論である

VAE は、各データ xx潜在変数 zz から生成されたとみる確率モデルです。

p(z)=N(0,I),pθ(xz)=デコーダ(NN),qϕ(zx)=N(μϕ(x),σϕ(x)2)=エンコーダ(NN)p(z)=\mathcal N(0,I),\qquad p_\theta(x\mid z)=\text{デコーダ(NN)},\qquad q_\phi(z\mid x)=\mathcal N(\mu_\phi(x),\sigma_\phi(x)^2)=\text{エンコーダ(NN)}

zz の事後 p(zx)p(xz)p(z)p(z\mid x)\propto p(x\mid z)p(z) は NN デコーダのせいで解析的に解けません。そこで変分推論qϕ(zx)q_\phi(z\mid x) で事後を近似し、ELBO を最大化します(変分推論の考え方)。VAE の新しさは、qϕq_\phi を各 xx ごとに最適化する代わりに、x(μϕ(x),σϕ(x))x\mapsto(\mu_\phi(x),\sigma_\phi(x)) を1つのエンコーダ NN で出すこと(償却推論 / amortized inference)。これで大量データに一気にスケールします。

2. ELBO の2項分解:再構成 − 正則化

VAE の ELBO(1データ点)は、logp(x,z)=logp(xz)+logp(z)\log p(x,z)=\log p(x\mid z)+\log p(z) を入れて整理すると、解釈の良い2項に分かれます。

ELBO(x)=Eqϕ(zx)[logpθ(xz)]再構成項:x をうまく復元KL(qϕ(zx)p(z))正則化項:z を事前へ寄せる\mathrm{ELBO}(x)=\underbrace{\mathbb E_{q_\phi(z\mid x)}\big[\log p_\theta(x\mid z)\big]}_{\text{再構成項:}x\text{ をうまく復元}}-\underbrace{\mathrm{KL}\big(q_\phi(z\mid x)\,\|\,p(z)\big)}_{\text{正則化項:}z\text{ を事前へ寄せる}}

この「再構成 − 正則化」は、ベイズの「尤度 × 事前」の対数版そのもの。VAE は ELBO を θ,ϕ\theta,\phi について同時に勾配上昇し、勾配は再パラメータ化 z=μϕ(x)+σϕ(x)εz=\mu_\phi(x)+\sigma_\phi(x)\varepsilon で流します。

3. コード:KL 正則化項の閉形式

VAE の KL 項は、ガウスの変分事後 N(μ,σ2)\mathcal N(\mu,\sigma^2) と標準正規事前 N(0,1)\mathcal N(0,1) の間なので、閉形式で書けます(だから VAE では KL をモンテカルロせず解析式で計算)。

KL(N(μ,σ2)N(0,1))=12(σ2+μ21logσ2)\mathrm{KL}\big(\mathcal N(\mu,\sigma^2)\,\|\,\mathcal N(0,1)\big)=\tfrac12\big(\sigma^2+\mu^2-1-\log\sigma^2\big)
import numpy as np
from scipy import stats

def kl_closed(mu, s):  return 0.5*(s**2 + mu**2 - 1 - np.log(s**2))
def kl_mc(mu, s, N=2000000, seed=0):
    rng = np.random.default_rng(seed); z = rng.normal(mu, s, N)
    return np.mean(stats.norm(mu, s).logpdf(z) - stats.norm(0, 1).logpdf(z))

print("KL(N(μ,σ²) || N(0,1)) の 閉形式 vs モンテカルロ:")
for (mu, s) in [(0.0, 1.0), (1.0, 1.0), (0.0, 0.5), (2.0, 0.3)]:
    print(f"  μ={mu}, σ={s}: 閉形式={kl_closed(mu, s):.4f}  MC={kl_mc(mu, s):.4f}")

出力:

KL(N(μ,σ²) || N(0,1)) の 閉形式 vs モンテカルロ:
  μ=0.0, σ=1.0: 閉形式=0.0000  MC=0.0000
  μ=1.0, σ=1.0: 閉形式=0.5000  MC=0.5009
  μ=0.0, σ=0.5: 閉形式=0.3181  MC=0.3183
  μ=2.0, σ=0.3: 閉形式=2.7490  MC=2.7497

出力の意味:閉形式とモンテカルロが一致します。μ=0,σ=1\mu=0,\sigma=1qq が事前と同じ)で KL =0=0 が最小——KL 項は「潜在をなるべく標準正規へ寄せろ」という正則化として働きます。μ\mu が事前 00 から離れる・σ\sigma11 から外れるほど罰が増える。VAE はこの解析的 KL のおかげで、正則化項の勾配を低分散・低コストで計算でき、再構成項だけ再パラメータ化サンプルで推定します。

4. ベイズVIとVAEの対応

ベイズ変分推論VAE
近似する事後 p(θD)p(\theta\mid D)潜在の事後 p(zx)p(z\mid x)
変分分布 qϕ(θ)q_\phi(\theta)エンコーダ qϕ(zx)q_\phi(z\mid x)(NN・償却)
尤度 p(Dθ)p(D\mid\theta)デコーダ pθ(xz)p_\theta(x\mid z)(NN)
ELBO =Eq[logp(D,θ)logq]=\mathbb E_q[\log p(D,\theta)-\log q]ELBO == 再構成 - KL
再パラメータ化(確率的変分推論と再パラメータ化同じ trick で誤差逆伝播
flowchart LR
  X["データ x"] --> E["エンコーダ q(z|x)<br/>=変分分布"]
  E --> Z["z = μ+σ·ε(再パラメータ化)"]
  Z --> D["デコーダ p(x|z)<br/>=尤度"]
  D --> R["再構成項"]
  E --> K["KL(q(z|x)||p(z))<br/>=正則化項"]
  R --> L["ELBO = 再構成 − KL"]
  K --> L

要するに、第6章で学んだ変分推論は、深層生成モデルの中核技術と同じ数理です。詳しい NN 構造・実装は機械学習サイトの オートエンコーダとVAE に譲ります(フレームワーク API は要最新確認)。

まとめ(Phase 6)

第6章では、事後を最適化で近似する変分推論を学びました——ELBO と KL の分解(変分推論の考え方)、平均場と CAVI の分散過小評価(平均場近似と座標上昇法)、再パラメータ化による確率的 VI(確率的変分推論と再パラメータ化)、そして VAE との同一構造(本ノート)。MCMC(第4章)が「厳密だが遅い」のに対し、VI は「速いが近似」。両輪が揃いました。次章では、これらの計算法を道具に、回帰・一般化線形モデルをベイズで組み立てます。

⚠️ よくある誤解

関連ノート