← 機械学習テキスト 一覧

🎓 レベル:発展 | 重要度:A(必須)

📎 前提:表現学習と埋め込み(埋め込み) | 数理:欠測データ・EMアルゴリズム(ELBO・統計)・ベイズ推定・MAP推定(統計)

要点(BLUF)


1. オートエンコーダ:圧縮して復元するだけのネットワーク

オートエンコーダ(Autoencoder, AE)は、入力 xx自分自身に写すよう学習するニューラルネットです。ただし途中にボトルネック(入力より低次元の層)を挟みます。

x    エンコーダ fϕ    z    デコーダ gθ    x^x \;\xrightarrow{\;\text{エンコーダ } f_\phi\;}\; z \;\xrightarrow{\;\text{デコーダ } g_\theta\;}\; \hat{x} LAE(ϕ,θ)=1Ni=1Nxigθ ⁣(fϕ(xi))2\mathcal{L}_{\text{AE}}(\phi,\theta) = \frac{1}{N}\sum_{i=1}^{N} \bigl\| x_i - g_\theta\!\bigl(f_\phi(x_i)\bigr) \bigr\|^2

要するに:「自分を再現できる範囲で、できるだけ情報を絞れ」という制約で、データの本質的な低次元構造を zz に押し込む仕組みです。ラベルは要りません(自己教師あり)。

PCA の非線形版という見方

エンコーダ・デコーダをともに線形にして二乗誤差を使うと、オートエンコーダは 主成分分析と次元削減(PCA)の張る部分空間と本質的に同じものを学習します(厳密には主成分が張る部分空間に一致。軸が直交・順序付きになるとは限りません)。

そこに非線形の活性化関数を入れた瞬間、PCA では捉えられない曲がった多様体(manifold)に沿った圧縮ができるようになります。これが「オートエンコーダ=非線形 PCA」と呼ばれる理由です。

⚠️ なぜ生成に使えないのか

オートエンコーダは圧縮は得意でも生成は苦手です。理由は潜在空間の構造にあります。

graph LR
    subgraph AE["オートエンコーダの潜在空間(穴だらけ)"]
        a1["訓練点"]:::pt
        a2["訓練点"]:::pt
        a3["訓練点"]:::pt
        hole["この辺りは未訓練=穴"]:::hole
    end
    subgraph VAE["VAEの潜在空間(連続・構造化)"]
        v1["N0Iに沿って密に充填"]:::full
    end
    AE -->|"確率モデル化+KL正則化で穴を埋める"| VAE
    classDef pt fill:#cde,stroke:#358
    classDef hole fill:#fdd,stroke:#a33,stroke-dasharray:4
    classDef full fill:#dfd,stroke:#383

つまり「サンプリングして新しいデータを作る」には、潜在空間そのものに事前分布という地図を入れる必要がある。それが VAE の出発点です。


2. VAE の発想:潜在変数を確率モデルにする

VAE(Variational Autoencoder)は、データ生成を次の潜在変数モデルとして定義します。

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

要するに:「まず標準正規から zz を引き、それをデコーダに通して xx を作る」という生成過程を仮定し、その尤度 pθ(x)p_\theta(x) を最大化したい、という枠組みです。

なぜそのまま学習できないのか

問題は2つあります。

  1. 周辺尤度の積分が解けないpθ(xz)p(z)dz\int p_\theta(x\mid z)p(z)\,dzzz が高次元だと積分不能。
  2. 事後分布が解けない:学習に必要な「xx を見たとき zz がどこにいたか」を表す事後分布
pθ(zx)=pθ(xz)p(z)pθ(x)p_\theta(z\mid x) = \frac{p_\theta(x\mid z)\,p(z)}{p_\theta(x)}

は、分母 pθ(x)p_\theta(x) が解けない以上、そのままでは計算不能

そこで「真の事後 pθ(zx)p_\theta(z\mid x) を、扱いやすい分布 qϕ(zx)q_\phi(z\mid x) で近似する」という 変分推論 の発想を持ち込みます。この qϕq_\phi こそがエンコーダです。VAE では通常、

qϕ(zx)=N ⁣(z; μϕ(x), diag(σϕ2(x)))q_\phi(z\mid x) = \mathcal{N}\!\bigl(z;\ \mu_\phi(x),\ \mathrm{diag}(\sigma_\phi^2(x))\bigr)

と置きます。要するに:エンコーダは「xx を1点 zz に潰す」のではなく「xx に対応する潜在のガウス分布(平均 μ\mu と分散 σ2\sigma^2)」を出力します。ここが普通のオートエンコーダとの決定的な違いです。


3. ELBO(変分下界)の導出と2項の解釈

学習で最大化するのは対数尤度 logpθ(x)\log p_\theta(x) ですが、これは解けません。代わりに下から押さえる量=変分下界 ELBO を最大化します。

恒等式から下界へ

logpθ(x)\log p_\theta(x) は次のように厳密に分解できます(qϕq_\phi で期待を取る恒等式)。

logpθ(x)=Eqϕ(zx) ⁣[logpθ(x,z)qϕ(zx)]ELBO(ϕ,θ)  +  KL ⁣(qϕ(zx)pθ(zx))0\log p_\theta(x) = \underbrace{\mathbb{E}_{q_\phi(z\mid x)}\!\left[\log \frac{p_\theta(x,z)}{q_\phi(z\mid x)}\right]}_{\text{ELBO}(\phi,\theta)} \;+\; \underbrace{\mathrm{KL}\!\bigl(q_\phi(z\mid x)\,\big\|\,p_\theta(z\mid x)\bigr)}_{\ge 0}

KL ダイバージェンスは常に非負なので、第2項を捨てれば

  logpθ(x)    ELBO(ϕ,θ)  \boxed{\;\log p_\theta(x) \;\ge\; \text{ELBO}(\phi,\theta)\;}

が言えます。これが「ELBO は尤度の下界」という意味です。しかも捨てた第2項は「近似事後 qϕq_\phi と真の事後 pθ(zx)p_\theta(z\mid x) のズレ」なので、ELBO を上げることは、間接的にこのズレを縮めることでもある(qϕq_\phi が真の事後に近づく)。

この恒等式そのものと、Jensen の不等式による一般的な導出は変分推論/EM の枠組みそのものです。詳しくは 欠測データ・EMアルゴリズム(統計)を参照。VAE は「E ステップを閉じた式で解く代わりに、エンコーダ qϕq_\phi で**償却(amortize)**して全データ共通の関数として学ぶ」点が EM との差分です。

2項への分解(ここが VAE の本体)

ELBO は pθ(x,z)=pθ(xz)p(z)p_\theta(x,z)=p_\theta(x\mid z)\,p(z) を代入して整理すると、次の2項に綺麗に分かれます。

ELBO(ϕ,θ)=Eqϕ(zx) ⁣[logpθ(xz)](A) 再構成項    KL ⁣(qϕ(zx)p(z))(B) KL正則化項\text{ELBO}(\phi,\theta) = \underbrace{\mathbb{E}_{q_\phi(z\mid x)}\!\bigl[\log p_\theta(x\mid z)\bigr]}_{\text{(A) 再構成項}} \;-\; \underbrace{\mathrm{KL}\!\bigl(q_\phi(z\mid x)\,\big\|\,p(z)\bigr)}_{\text{(B) KL正則化項}}
graph TB
    elbo["ELBO(最大化したい)"]:::root
    a["(A)再構成項 Eq「log pθ「x|z」」"]:::termA
    b["(B)KL正則化項 マイナス KL「qφ「z|x」 || N0I」"]:::termB
    elbo --> a
    elbo --> b
    a -.->|"上げると"| ar["zから元のxをうまく復元できる"]:::note
    b -.->|"上げる「KLを下げる」と"| br["潜在を事前分布N0Iに寄せる=穴を埋める"]:::note
    classDef root fill:#eef,stroke:#338,font-weight:bold
    classDef termA fill:#dfd,stroke:#383
    classDef termB fill:#ffd,stroke:#aa3
    classDef note fill:#f7f7f7,stroke:#999

(A) 再構成項 Eqϕ[logpθ(xz)]\mathbb{E}_{q_\phi}[\log p_\theta(x\mid z)]xx をエンコードして得た zz から、デコーダがどれだけ元の xx を復元できるか」。デコーダ出力を分散固定のガウス pθ(xz)=N(x;gθ(z),σ2I)p_\theta(x\mid z)=\mathcal{N}(x;\,g_\theta(z),\,\sigma^2 I) と置くと、logpθ(xz)=12σ2xgθ(z)2+const\log p_\theta(x\mid z) = -\frac{1}{2\sigma^2}\|x-g_\theta(z)\|^2 + \text{const} となり、最大化=二乗再構成誤差の最小化に一致します。ここが普通のオートエンコーダと同じ部分。

(B) KL正則化項 KL(qϕ(zx)p(z))-\mathrm{KL}\bigl(q_\phi(z\mid x)\,\|\,p(z)\bigr) 「エンコーダが出す潜在分布 qϕ(zx)q_\phi(z\mid x) を、事前分布 N(0,I)\mathcal{N}(0,I) にどれだけ近づけるか」。これが潜在空間の穴を埋める力です。各入力の潜在分布をみな原点付近の標準正規へ寄せるので、潜在空間全体が N(0,I)\mathcal{N}(0,I) で密に覆われ、どこをサンプリングしてもデコーダが訓練済みになる。

事前・近似事後がともに対角ガウスなら、この KL は閉じた式になります(実装で誤差逆伝播に乗せやすい)。

KL(N(μ,σ2I)N(0,I))=12j=1d(μj2+σj2logσj21)\mathrm{KL}\bigl(\mathcal{N}(\mu,\sigma^2 I)\,\|\,\mathcal{N}(0,I)\bigr) = \frac{1}{2}\sum_{j=1}^{d}\Bigl(\mu_j^2 + \sigma_j^2 - \log \sigma_j^2 - 1\Bigr)

要するに:VAE の損失は「うまく復元せよ(A)」と「潜在を標準正規に揃えよ(B)」の綱引き。(A) だけなら普通のオートエンコーダ(穴だらけ)、(B) を入れることで初めて生成可能な連続潜在空間が手に入ります。学習では ELBO-\text{ELBO} を損失として最小化します。


4. 再パラメータ化トリック:サンプリングを微分可能にする

ELBO の (A) には zqϕ(zx)z \sim q_\phi(z\mid x)サンプリングが入っています。ここが最大の技術的障害です。

なぜ素朴なサンプリングでは勾配が流れないか

ELBO をエンコーダのパラメータ ϕ\phi で微分したい。しかし期待

Eqϕ(zx)[logpθ(xz)]\mathbb{E}_{q_\phi(z\mid x)}\bigl[\log p_\theta(x\mid z)\bigr]

は、ϕ\phi期待を取る分布そのものに入っています。zzqϕq_\phi から「引く」操作(乱数サンプリング)は離散的・確率的で、ϕ\phi について微分が定義できない。計算グラフ上ではサンプリングノードで勾配が切れてしまい、ϕ\nabla_\phi がエンコーダまで逆伝播しません。誤差逆伝播法は連続で微分可能な合成関数にしか勾配を流せないからです。

解決:乱数を外に追い出す

そこで、zz を「ϕ\phi に依存する部分」と「ϕ\phi に依存しない乱数 ε\varepsilon」に分離します。

z=μϕ(x)+σϕ(x)ε,εN(0,I)z = \mu_\phi(x) + \sigma_\phi(x) \odot \varepsilon, \qquad \varepsilon \sim \mathcal{N}(0, I)

(\odot は要素ごとの積。ε\varepsilon を引いて μ,σ\mu,\sigma で線形変換すれば、zz は確かに N(μϕ,σϕ2)\mathcal{N}(\mu_\phi,\sigma_\phi^2) に従う。)

graph LR
    x["入力 x"] --> enc["エンコーダ fφ"]
    enc --> mu["平均 μφ「x」"]
    enc --> sig["標準偏差 σφ「x」"]
    eps["乱数 ε 〜 N0I(外部から注入)"] --> rep
    mu --> rep["再パラメータ化 z = μ + σ ⊙ ε"]
    sig --> rep
    rep --> z["潜在 z"]
    z --> dec["デコーダ gθ"]
    dec --> xhat["再構成 x_hat"]
    classDef stoch fill:#fdd,stroke:#a33
    classDef det fill:#def,stroke:#37a
    class eps stoch
    class enc,dec,rep det

ポイントは乱数 ε\varepsilonϕ\phi と無関係な固定分布になったこと。これで期待は ε\varepsilon について取られ、ϕ\phi は微分可能な決定的関数 z=gϕ(x,ε)z=g_\phi(x,\varepsilon) の中だけに現れます。

ϕEqϕ[logpθ(xz)]=EεN(0,I)[ϕlogpθ ⁣(xμϕ(x)+σϕ(x)ε)]\nabla_\phi\, \mathbb{E}_{q_\phi}\bigl[\log p_\theta(x\mid z)\bigr] = \mathbb{E}_{\varepsilon \sim \mathcal{N}(0,I)}\Bigl[\nabla_\phi \log p_\theta\!\bigl(x \mid \mu_\phi(x)+\sigma_\phi(x)\odot\varepsilon\bigr)\Bigr]

期待と微分が交換でき、右辺はミニバッチの ε\varepsilon サンプルでモンテカルロ推定(通常1サンプルで十分)。これで勾配がデコーダ → zzμϕ,σϕ\mu_\phi,\sigma_\phi → エンコーダと端まで流れる

要するに:「乱数で揺らす」操作をネットのに押し出し、ネット内部は決定的にしておくことで、サンプリングを含む目的関数を普通の逆伝播で学習できるようにする——それが再パラメータ化トリックです。これが無いと VAE は学習できません。


5. 生成と補間:連続な潜在空間の恩恵

KL 項のおかげで潜在空間が N(0,I)\mathcal{N}(0,I) で密に充填されるので、学習後はエンコーダを使わずに生成できます。

zN(0,I),x^=gθ(z)z \sim \mathcal{N}(0, I), \qquad \hat{x} = g_\theta(z)

事前分布から zz を引いてデコーダに通すだけ。潜在空間が連続なので、

これは穴だらけのオートエンコーダには無い、VAE 固有の性質です。


6. ⚠️ よくある誤解・落とし穴

(1) オートエンコーダと VAE の違いは「層が深いかどうか」ではない 本質的な違いは決定的か確率的かです。オートエンコーダは xzx \mapsto z を1点に潰す決定的写像。VAE はエンコーダが分布μ,σ\mu,\sigma)を出し、潜在を確率変数として扱う。「正則化された AE」ではなく「潜在変数モデルの変分推論」が VAE の正体です。

(2) KL 項は「ただの正則化ペナルティ」ではない 重み付きの罰則項として後付けしたものではなく、ELBO の導出から必然的に出てくる項です。役割は2つ:(i) 潜在を事前分布へ寄せて潜在空間を連続化・充填する、(ii) 近似事後 qϕq_\phi を真の事後へ近づける。両方が「サンプリング可能性」を担保します。

(3) なぜ VAE の生成画像はぼやけるのか 主因は2つ。

GAN(敵対的生成ネットワーク)が鋭い画像を出すのは、MSE のような「平均を取る尤度」ではなく、識別器による「本物らしさ」で訓練するため。VQ-VAE や拡散モデル(拡散モデル)はこのぼやけ問題への別解です。

(4) 後方崩壊(posterior collapse)に注意 デコーダが強力すぎると、zz を使わなくても xx を再現できてしまい、エンコーダが qϕ(zx)N(0,I)q_\phi(z\mid x) \approx \mathcal{N}(0,I)潰れて潜在情報を運ばなくなる現象。こうなると KL 項はほぼ 0 だが、どの入力も同じ平均的な像にデコードされる(潜在が死ぬ)。KL 項に重みを付ける(β を小さく/KL アニーリング)などで緩和します。

(5) ELBO を上げても尤度の真値は分からない ELBO はあくまで下界。logpθ(x)=ELBO+KL(qϕpθ(zx))\log p_\theta(x) = \text{ELBO} + \mathrm{KL}(q_\phi \| p_\theta(z\mid x)) なので、ギャップ(第2項)が大きいと ELBO は真の尤度を大きく下回る。モデル比較で ELBO を尤度の代理にするときはこの点に注意が必要です。


まとめ


対応するシミュレーション

simulations/autoencoder_reconstruction.py:手書き数字(64次元)を、小さな潜在コード(ボトルネック)に圧縮してから復元します。潜在次元を2→8→16→32と増やすほど復元が元画像に近づくこと(再構成誤差 13.4→0.6)を可視化し、オートエンコーダが「本質だけ残す圧縮」であることを示します。ここでは線形=PCAで再構成していますが、エンコーダ/デコーダをニューラルネットにすれば非線形圧縮になり、潜在を確率分布として扱うと VAE になります(主成分分析と次元削減)。

ボトルネックで圧縮→復元(潜在次元と再構成)

関連ノート