Mímisbrunnr知恵の泉

← 情報理論 一覧

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

📎 前提:KLダイバージェンス | 関連:ベイズ統計・機械学習(変分推論・VAE)

要点(BLUF)

ELBO(q)=Eq[logp(x,z)]Eq[logq(z)]=logp(x)D(qp(zx))\mathrm{ELBO}(q) = \mathbb E_q[\log p(x,z)] - \mathbb E_q[\log q(z)] = \log p(x) - D\big(q\,\|\,p(z\mid x)\big)

1. なぜ ELBO か

ベイズ推論では事後 p(zx)=p(x,z)p(x)p(z\mid x)=\frac{p(x,z)}{p(x)} が欲しいですが、証拠 p(x)=p(x,z)dzp(x)=\int p(x,z)\,dz の積分が高次元で計算困難なことが多い。そこで近似分布 q(z)q(z) を持ち込み、qq を事後にできるだけ近づけます。近さを KL で測ると D(qp(zx))D(q\|p(z\mid x)) ですが、これには未知の p(zx)p(z\mid x) が含まれる。式変形すると

logp(x)=Eq[logp(x,z)logq(z)]ELBO(q)+D(qp(zx))0\log p(x) = \underbrace{\mathbb E_q[\log p(x,z)-\log q(z)]}_{\mathrm{ELBO}(q)} + \underbrace{D\big(q\,\|\,p(z\mid x)\big)}_{\ge 0}

左辺は qq に依らない定数。よって ELBO を上げれば KL が下がる(和が一定だから)。ELBO は同時尤度と近似分布だけで計算でき、事後分布を知らなくても評価できます。これが変分推論を実行可能にする鍵です。

2. ELBO の2つの読み方

ELBO は2通りに分解でき、それぞれ直観を与えます。

ELBO(q)=Eq[logp(xz)]再構成(当てはまり)D(q(z)p(z))事前からのずれの罰則\mathrm{ELBO}(q) = \underbrace{\mathbb E_q[\log p(x\mid z)]}_{\text{再構成(当てはまり)}} - \underbrace{D\big(q(z)\,\|\,p(z)\big)}_{\text{事前からのずれの罰則}}

第1項は「qq が選ぶ zz でデータをどれだけうまく説明できるか」(再構成)、第2項は「qq が事前 p(z)p(z) からどれだけ離れたか」の罰則。当てはまりと事前への近さのトレードオフで、これは AIC/MDL(情報量規準_AICとMDL)の「当てはまり vs 複雑さ」と同じ構図です。変分オートエンコーダ(VAE)の損失はまさにこの形。

3. コード:ELBO が事後平均で最大・対数証拠の下界(底 e, nat)

共役ガウス(事前 μN(0,1)\mu\sim\mathcal N(0,1)、尤度 xN(μ,1)x\sim\mathcal N(\mu,1)、観測 x=2x=2)で真の事後が解析的に分かるので、ELBO を近似平均 mm について評価し、事後平均で最大かつ常に logp(x)\log p(x) 以下になることを確かめます。

import numpy as np
from scipy.stats import norm
# 事前 N(0,1), 尤度 N(mu,1), 観測 x=2。真の事後は解析的(共役)
x_obs=2.0; sig2=1.0; tau0=1.0
s_post=1/(1/tau0+1/sig2)                 # 事後分散
mu_post=s_post*(0/tau0 + x_obs/sig2)     # 事後平均
log_evidence=norm.logpdf(x_obs,0,np.sqrt(tau0+sig2))  # log p(x)
print(f"真の事後 N(mu={mu_post:.3f}, var={s_post:.3f}), log p(x)={log_evidence:.4f} nat")

# 近似 q=N(m, s_post) の平均 m を変えて ELBO を計算
def elbo(m, s):
    rng=np.random.default_rng(0)
    mu=rng.normal(m,np.sqrt(s),2000000)  # q からサンプリングして期待値を近似
    lp = norm.logpdf(x_obs,mu,1) + norm.logpdf(mu,0,1) - norm.logpdf(mu,m,np.sqrt(s))
    return lp.mean()

print(f"{'q平均 m':>8}{'ELBO':>12}{'log p(x)-ELBO(=KL)':>22}")
for m in [0.0,0.5,1.0,mu_post,1.5]:
    e=elbo(m,s_post)
    print(f"{m:>8.3f}{e:>12.4f}{log_evidence-e:>22.4f}")
print(f"-> ELBO は m=事後平均{mu_post:.3f} で最大(KL最小=0)、常に log p(x) 以下")

出力:

真の事後 N(mu=1.000, var=0.500), log p(x)=-2.2655 nat
   q平均 m        ELBO    log p(x)-ELBO(=KL)
   0.000     -3.2642                0.9987
   0.500     -2.5149                0.2494
   1.000     -2.2655                0.0000
   1.000     -2.2655                0.0000
   1.500     -2.5161                0.2506
-> ELBO は m=事後平均1.000 で最大(KL最小=0)、常に log p(x) 以下

出力の意味:近似分布の平均 mm を真の事後平均 1.01.0 に合わせたとき ELBO が最大 2.2655-2.2655 となり、これは対数証拠 logp(x)=2.2655\log p(x)=-2.2655一致(このとき近似が事後と完全一致するので KL=0=0)。mm をずらすと ELBO は下がり、logp(x)ELBO\log p(x)-\mathrm{ELBO} がちょうど KL0\ge0 になっています(m=0m=00.9990.999m=1.5m=1.50.2510.251)。ELBO は常に対数証拠以下の「下界」で、その差が近似の悪さ(KL)。だから ELBO を最大化すれば、証拠を知らなくても自動的に近似が事後に近づく——変分推論が成り立つ理由が数値で見えます。一般には事後と qq が一致しないので ELBO <logp(x)<\log p(x) のままですが、その差を最小にする qq が最良の近似です。

4. 数式の直観的意味

変分推論は「難しい積分(証拠 p(x)p(x))を、最適化に置き換える」発想です。ELBO はその橋で、情報理論的には「データの記述長(logp(x)-\log p(x))を、近似モデルで上から抑える符号長」とも読めます(無歪み符号化とKraft不等式 の交差エントロピー的な見方)。KL(KLダイバージェンス)の非対称性がここで効いていて、変分推論は D(qp)D(q\|p)(事後を qq で覆う向き)を使うため、近似 qq は事後の一つのモードに集中しがち(mode-seeking)。これは最尤で使う D(pq)D(p\|q) とは逆向きで、近似の性格が変わります。EM アルゴリズム・平均場近似・VAE・確率的変分推論といった実装と応用はベイズ統計・機械学習分野に委ね、ここでは「ELBO 最大化=KL 最小化=証拠の下界」という情報理論の核心だけを押さえます。

⚠️ よくある誤解

対応シミュレーション

関連ノート