VAEとGAN — 潜在空間と敵対的学習

データを「見分ける」のではなく「作り出す」——それが生成モデルです。その二大源流である VAE(確率的に圧縮して復元する)と GAN(偽造者と鑑定士の攻防で磨く)を、潜在空間をドラッグしながら・分布の攻防を眺めながら理解します。

1. 「見分ける」から「作る」へ — 生成モデルとは

これまで学んだ分類器は、入力 x にラベル y を割り当てる判別モデル p(y|x) でした。生成モデルはその逆向きで、データそのものの分布 p(x) を丸ごと学ぶモデルです。分布が手に入れば、そこからサンプルする=本物そっくりの新しいデータを作れることになります。

実用上の共通戦略はこうです。ガウス分布のような簡単な分布からサンプルしたベクトル z を、ニューラルネットで複雑なデータ(画像・音声…)に変換する。この z が住む空間を潜在空間と呼びます。VAE と GAN の違いは、この「変換器」をどう学習させるかにあります。

POINT — 生成モデルの本質 判別モデルは「境界線」を学び、生成モデルは「分布そのもの」を学ぶ。分布を学べたかどうかのテストが「そこからのサンプルが本物と見分けられないか」——GAN はこのテスト自体を学習の仕組みにしてしまった。

2. VAE — 確率的に圧縮して、復元する

オートエンコーダは、入力 x を低次元の z に圧縮するエンコーダと、z から x を復元するデコーダのペアでした。VAE(変分オートエンコーダ)はここに確率を持ち込みます。エンコーダは z を1点に潰すのではなく、分布 q(z|x) = N(μ, σ²) として出力し、そこからサンプルした z をデコーダに渡します。

下のデモでは、2次元の潜在空間の点 z を直接ドラッグできます。z の第1軸が「丸み」、第2軸が「傾き」に対応するようデコーダが学習済み、という設定です。z を動かすと出力が連続的に変形することを確かめてください。

VAEの潜在空間 — z をドラッグすると出力が変わる
左のパネル内をドラッグしても z を動かせます
上=VAEのブロック図。左=潜在空間(紫の点線は事前分布 N(0,I) の等高線、オレンジの粒は q(z|x) のサンプルの揺らぎ)。右=その z をデコードした出力。潜在空間のどこを突いても「それらしい」出力が出るのがVAEの持ち味です。

学習は「復元の正確さ」と「潜在空間の整地」の綱引きです。目的関数は対数尤度の下界 ELBO:

log p(x) ≥ Eq(z|x)[ log p(x|z) ] − DKL( q(z|x) ∥ p(z) ) 第1項=復元誤差を小さく。第2項=各 q(z|x) を標準正規 p(z)=N(0,I) に近づけて、潜在空間に「隙間」を作らない

KL 項のおかげで潜在空間は原点まわりに滑らかに敷き詰められ、学習後は p(z) からサンプルしてデコードするだけで新しいデータを生成できます。

一歩先へ — 再パラメータ化トリック 「分布からサンプルする」という操作は微分できず、そのままでは勾配がエンコーダまで届かない。そこで z = μ + σ ⊙ ε(ε 〜 N(0, I))と書き換える。乱数 ε を外部入力扱いにすれば、z は μ と σ の決定的な計算になり、誤差逆伝播がそのまま通る。VAEを実用にした一行のアイデア。

3. 潜在空間を歩く — 補間が「意味」を保つ理由

2つのデータ点をピクセル(画素)のまま平均すると、半透明の二重写しにしかなりません。ところが潜在空間で z を補間してからデコードすると、「中間の概念」に対応する自然な図形が現れます。スライダーで u を動かして比べてみてください。

潜在空間の補間 vs ピクセルの平均
z(u) = (1−u)·zA + u·zB をデコードすると図形がモーフィングする(中央)。ピクセルの平均(右)は二重写しになるだけ。「意味のある中間」が作れることこそ、モデルがデータの多様体を学べた証拠であり、生成の本質です。
POINT — 潜在空間は「意味の座標系」 よく整った潜在空間では、補間だけでなく「ベクトル演算」も意味を持つ(例:笑顔方向のベクトルを足す)。埋め込み表現の回で見た「意味が距離になる空間」を、生成の側から使っているとも言える。

4. GAN — 偽造者と鑑定士の腕比べ

GAN(敵対的生成ネットワーク)は尤度を一切書き下しません。代わりに2つのネットワークを競わせます。

minG maxD   Ex〜pdata[ log D(x) ] + Ez〜N(0,I)[ log(1 − D(G(z))) ] D は本物に1・偽物に0を出したい(max)。G は自分の偽物に D が1を出すよう仕向けたい(min)

下のデモは1次元版です。本物のデータは2つの山を持つ混合ガウス分布(緑)、生成器は最初は大きくズレた1つのガウス(オレンジ)。識別器は毎ステップ最適な判定カーブ(水色)を引き直し、生成器はその判定を頼りに「本物と言われる方向」へ分布を動かします。

GANの敵対的学習 — 識別器が境界を引き、生成器が本物側へ寄る
上=識別器の判定 D(x)(1に近いほど「本物」判定)。下=本物の分布(緑)と生成分布(オレンジ)、点は生成サンプル。学習が進むと分布が重なり、D は至る所で 0.5(=見分けられない)へ近づきます。モード崩壊デモでは識別器の更新をわざと遅らせています——生成器が片方の山だけに集中し、識別器に見破られては反対の山へ逃げる、という振動が起きます。

実は、生成分布 pg が固定のとき最適な識別器は解析的に書けます:

D*(x) = pdata(x) / ( pdata(x) + pg(x) ) 完璧に学習が進んで pg = pdata になると D* = 0.5 —— 鑑定士は完全にお手上げになる
注意 — GANの学習は綱渡り GANの学習は「最小値を探す」のではなく「2人ゲームの均衡点を探す」問題で、普通の勾配降下が苦手とする形。モード崩壊(一部のパターンしか作らなくなる)、発振、勾配消失が起きやすい。上のデモの生成器は1つのガウスしか表現できないため、二山を「広くカバーして平均化」するのが精一杯——モデルの表現力不足はぼやけ・取りこぼしとして現れる。

5. VAEとGAN、どちらが良い?

両者は「潜在ベクトル z をデータに変換する」点で同じ形をしていますが、学習信号がまったく違うため、得意・不得意がきれいに分かれます。

VAEGAN
学習の仕組み尤度の下界(ELBO)を最大化2つのNNのミニマックスゲーム
出力の質ぼやけがち(平均で妥協する)シャープで写実的(その分歪みも大胆)
学習の安定性安定(普通の最適化で済む)不安定(モード崩壊・発振と隣り合わせ)
潜在空間整地されていて補間・編集向き滑らかだがエンコーダがない(逆写像は別途学習)
尤度の評価近似値(ELBO)を計算できる計算できない(暗黙的な分布)
今日の主な役割拡散モデルの潜在圧縮担当(例:Stable Diffusion)超解像・蒸留・質感付与の損失として現役
一歩先へ — 二大源流のその後 2020年代の主役は次章の拡散モデルに移ったが、VAEもGANも消えてはいない。Stable Diffusion はVAEが圧縮した潜在空間の中で拡散を行い、GAN由来の敵対的損失は画像のディテール仕上げや少ステップ蒸留モデルの学習に組み込まれている。源流は今も本流に合流し続けている。

6. まとめ