🎓 レベル:発展 | 重要度:A(必須)
📎 前提:表現学習と埋め込み(埋め込み) | 数理:欠測データ・EMアルゴリズム(ELBO・統計)・ベイズ推定・MAP推定(統計)
要点(BLUF)
- オートエンコーダは「入力をいったん低次元の潜在 に圧縮し、そこから元に戻す」ネットワーク。再構成誤差を最小化するだけで、生成には使いにくい(潜在空間が穴だらけ)。
- VAE は潜在変数を確率分布として扱い、事後分布 を近似する を学習する。最大化する目的は変分下界 ELBOで、「再構成項 − KL正則化項」の2項に分かれる。
- 鍵は再パラメータ化トリック 。サンプリングを微分可能にして誤差逆伝播で勾配を流す。結果、潜在空間が連続・構造化され、そこからサンプリングして生成・補間ができる。
1. オートエンコーダ:圧縮して復元するだけのネットワーク
オートエンコーダ(Autoencoder, AE)は、入力 を自分自身に写すよう学習するニューラルネットです。ただし途中にボトルネック(入力より低次元の層)を挟みます。
- エンコーダ :入力を潜在表現 ()に圧縮する。
- デコーダ :潜在 から入力を復元する。
- 損失:再構成誤差(多くは二乗誤差)を最小化する。
要するに:「自分を再現できる範囲で、できるだけ情報を絞れ」という制約で、データの本質的な低次元構造を に押し込む仕組みです。ラベルは要りません(自己教師あり)。
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)は、データ生成を次の潜在変数モデルとして定義します。
- :事前分布。「潜在はこういう形に分布していてほしい」という地図。標準正規を置くのが普通。
- :デコーダ(生成器)。潜在 から観測 を生む条件付き分布。ニューラルネットでパラメータ化する。
要するに:「まず標準正規から を引き、それをデコーダに通して を作る」という生成過程を仮定し、その尤度 を最大化したい、という枠組みです。
なぜそのまま学習できないのか
問題は2つあります。
- 周辺尤度の積分が解けない: は が高次元だと積分不能。
- 事後分布が解けない:学習に必要な「 を見たとき がどこにいたか」を表す事後分布
は、分母 が解けない以上、そのままでは計算不能。
そこで「真の事後 を、扱いやすい分布 で近似する」という 変分推論 の発想を持ち込みます。この こそがエンコーダです。VAE では通常、
と置きます。要するに:エンコーダは「 を1点 に潰す」のではなく「 に対応する潜在のガウス分布(平均 と分散 )」を出力します。ここが普通のオートエンコーダとの決定的な違いです。
3. ELBO(変分下界)の導出と2項の解釈
学習で最大化するのは対数尤度 ですが、これは解けません。代わりに下から押さえる量=変分下界 ELBO を最大化します。
恒等式から下界へ
は次のように厳密に分解できます( で期待を取る恒等式)。
KL ダイバージェンスは常に非負なので、第2項を捨てれば
が言えます。これが「ELBO は尤度の下界」という意味です。しかも捨てた第2項は「近似事後 と真の事後 のズレ」なので、ELBO を上げることは、間接的にこのズレを縮めることでもある( が真の事後に近づく)。
この恒等式そのものと、Jensen の不等式による一般的な導出は変分推論/EM の枠組みそのものです。詳しくは 欠測データ・EMアルゴリズム(統計)を参照。VAE は「E ステップを閉じた式で解く代わりに、エンコーダ で**償却(amortize)**して全データ共通の関数として学ぶ」点が EM との差分です。
2項への分解(ここが VAE の本体)
ELBO は を代入して整理すると、次の2項に綺麗に分かれます。
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) 再構成項 「 をエンコードして得た から、デコーダがどれだけ元の を復元できるか」。デコーダ出力を分散固定のガウス と置くと、 となり、最大化=二乗再構成誤差の最小化に一致します。ここが普通のオートエンコーダと同じ部分。
(B) KL正則化項 「エンコーダが出す潜在分布 を、事前分布 にどれだけ近づけるか」。これが潜在空間の穴を埋める力です。各入力の潜在分布をみな原点付近の標準正規へ寄せるので、潜在空間全体が で密に覆われ、どこをサンプリングしてもデコーダが訓練済みになる。
事前・近似事後がともに対角ガウスなら、この KL は閉じた式になります(実装で誤差逆伝播に乗せやすい)。
要するに:VAE の損失は「うまく復元せよ(A)」と「潜在を標準正規に揃えよ(B)」の綱引き。(A) だけなら普通のオートエンコーダ(穴だらけ)、(B) を入れることで初めて生成可能な連続潜在空間が手に入ります。学習では を損失として最小化します。
4. 再パラメータ化トリック:サンプリングを微分可能にする
ELBO の (A) には のサンプリングが入っています。ここが最大の技術的障害です。
なぜ素朴なサンプリングでは勾配が流れないか
ELBO をエンコーダのパラメータ で微分したい。しかし期待
は、 が期待を取る分布そのものに入っています。 を から「引く」操作(乱数サンプリング)は離散的・確率的で、 について微分が定義できない。計算グラフ上ではサンプリングノードで勾配が切れてしまい、 がエンコーダまで逆伝播しません。誤差逆伝播法は連続で微分可能な合成関数にしか勾配を流せないからです。
解決:乱数を外に追い出す
そこで、 を「 に依存する部分」と「 に依存しない乱数 」に分離します。
( は要素ごとの積。 を引いて で線形変換すれば、 は確かに に従う。)
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
ポイントは乱数 が と無関係な固定分布になったこと。これで期待は について取られ、 は微分可能な決定的関数 の中だけに現れます。
期待と微分が交換でき、右辺はミニバッチの サンプルでモンテカルロ推定(通常1サンプルで十分)。これで勾配がデコーダ → → → エンコーダと端まで流れる。
要するに:「乱数で揺らす」操作をネットの外に押し出し、ネット内部は決定的にしておくことで、サンプリングを含む目的関数を普通の逆伝播で学習できるようにする——それが再パラメータ化トリックです。これが無いと VAE は学習できません。
5. 生成と補間:連続な潜在空間の恩恵
KL 項のおかげで潜在空間が で密に充填されるので、学習後はエンコーダを使わずに生成できます。
事前分布から を引いてデコーダに通すだけ。潜在空間が連続なので、
- 補間:2つのデータの潜在 を線形補間した をデコードすると、途中で破綻せず滑らかに変化する中間像が得られる(顔の表情が連続的に変わる等)。
- 潜在の意味づけ:軸が解釈可能な方向に整理されることがある(β-VAE などはこの「もつれの解きほぐし=disentanglement」を狙って KL を強める)。
これは穴だらけのオートエンコーダには無い、VAE 固有の性質です。
6. ⚠️ よくある誤解・落とし穴
(1) オートエンコーダと VAE の違いは「層が深いかどうか」ではない 本質的な違いは決定的か確率的かです。オートエンコーダは を1点に潰す決定的写像。VAE はエンコーダが分布()を出し、潜在を確率変数として扱う。「正則化された AE」ではなく「潜在変数モデルの変分推論」が VAE の正体です。
(2) KL 項は「ただの正則化ペナルティ」ではない 重み付きの罰則項として後付けしたものではなく、ELBO の導出から必然的に出てくる項です。役割は2つ:(i) 潜在を事前分布へ寄せて潜在空間を連続化・充填する、(ii) 近似事後 を真の事後へ近づける。両方が「サンプリング可能性」を担保します。
(3) なぜ VAE の生成画像はぼやけるのか 主因は2つ。
- 再構成項の尤度モデル:デコーダを分散固定ガウスにすると再構成項は MSE になり、複数のもっともらしい高周波ディテール(髪の毛・輪郭の細部)を平均してしまう。MSE は「平均を取れば安全」なので、シャープさが失われ平均的・ぼけた像になる。
- 潜在の確率的な揺らぎ:同じ でも がガウスで揺れるため、デコーダはその揺れに対してロバストな(=細部を捨てた)出力を学びがち。
GAN(敵対的生成ネットワーク)が鋭い画像を出すのは、MSE のような「平均を取る尤度」ではなく、識別器による「本物らしさ」で訓練するため。VQ-VAE や拡散モデル(拡散モデル)はこのぼやけ問題への別解です。
(4) 後方崩壊(posterior collapse)に注意 デコーダが強力すぎると、 を使わなくても を再現できてしまい、エンコーダが に潰れて潜在情報を運ばなくなる現象。こうなると KL 項はほぼ 0 だが、どの入力も同じ平均的な像にデコードされる(潜在が死ぬ)。KL 項に重みを付ける(β を小さく/KL アニーリング)などで緩和します。
(5) ELBO を上げても尤度の真値は分からない ELBO はあくまで下界。 なので、ギャップ(第2項)が大きいと ELBO は真の尤度を大きく下回る。モデル比較で ELBO を尤度の代理にするときはこの点に注意が必要です。
まとめ
- オートエンコーダは「圧縮 → 復元」で非線形 PCA 的に低次元構造を学ぶが、潜在空間が穴だらけで生成に使えない。
- VAE は潜在を確率モデルにし、解けない事後分布をエンコーダ で変分近似。最大化対象は ELBO = 再構成項 − KL正則化項。
- 再パラメータ化トリック が、サンプリングを含む目的を微分可能にして学習を成立させる。
- KL 項が潜在空間を事前分布で充填するので、 からサンプリングして生成・補間が可能になる。
- 弱点はぼやけ(MSE 的尤度の平均化)と後方崩壊。これらを GAN・拡散モデルが別の原理で克服していく。
対応するシミュレーション
simulations/autoencoder_reconstruction.py:手書き数字(64次元)を、小さな潜在コード(ボトルネック)に圧縮してから復元します。潜在次元を2→8→16→32と増やすほど復元が元画像に近づくこと(再構成誤差 13.4→0.6)を可視化し、オートエンコーダが「本質だけ残す圧縮」であることを示します。ここでは線形=PCAで再構成していますが、エンコーダ/デコーダをニューラルネットにすれば非線形圧縮になり、潜在を確率分布として扱うと VAE になります(主成分分析と次元削減)。
