画像生成モデルの比較 — GAN vs VAE vs Diffusion

画像生成モデルの分野は、この10年で劇的に進化しました。2014年のGANの登場から始まり、VAE、正規化フロー、自己回帰モデル、そして2020年以降の拡散モデルの台頭 — 多くの手法が提案され、それぞれが独自の強みと弱みを持っています。

しかし、これほど多くのアプローチがある中で、「自分の問題にはどの手法が最適なのか?」という疑問は常に付きまといます。たとえば、リアルタイムでアバター画像を生成するアプリを作りたい場合と、製造ラインの異常検知のために正常データの分布を学習したい場合では、求められる特性が全く異なります。前者では生成速度と画質が重要ですが、後者では正確な尤度計算が不可欠です。

GANは画質が高いが学習が不安定、VAEは安定だが画像がぼやける、拡散モデルは高品質だが生成が遅い — 各手法の特性を正確に理解し、適切な使い分けの指針を持つことが重要です。

本記事では、主要な5つの生成モデルを理論的な枠組み生成品質学習の安定性計算コスト応用適性の観点から体系的に比較します。単にスペック表を並べるのではなく、各手法の数学的な構造の違いがなぜ異なる特性を生むのかを解説し、読者が自分の課題に対して合理的な手法選択ができるようになることを目指します。

本記事の内容

  • 5つの生成モデルの理論的枠組みの比較
  • 生成品質の定量的評価(FID, IS)
  • 学習の安定性と収束特性
  • 計算コストとスケーラビリティ
  • 応用シナリオごとの最適な手法の選択指針
  • PyTorchでの比較実験

前提知識

この記事を読む前に、以下の記事を読んでおくと理解が深まります。

5つの生成モデルの理論的比較

分類の軸

生成モデルを分類する最も重要な軸は、データの確率分布 $p(\bm{x})$ をどのようにモデル化するかです。この違いが、各モデルの特性の多くを決定づけます。

明示的な密度モデル: $p_\theta(\bm{x})$ を明示的に定義し、尤度を計算できます。「このデータはどの程度ありそうか」を数値で答えられるため、モデル評価や異常検知に有用です。

  • 正確な尤度: 正規化フロー、自己回帰モデル — $\ln p_\theta(\bm{x})$ を正確に計算。対数尤度の値でモデルを直接比較できます
  • 近似的な尤度: VAE — ELBO(変分下界)で近似。真の対数尤度の下界しか得られないため、モデル比較には注意が必要です

暗黙的な密度モデル: $p_\theta(\bm{x})$ を陽に定義せず、サンプリングのみ可能です。分布からサンプルは生成できますが、「与えられたデータの確率」を計算できません。

  • GAN: 識別器との敵対的学習で暗黙的に分布を学習。「本物か偽物か」の判別を通じて間接的に分布を学習します

スコアベースモデル: 密度の勾配(スコア関数 $\nabla_{\bm{x}} \ln p(\bm{x})$)をモデル化します。密度そのものではなく、密度が「どの方向に増えるか」を学習します。

  • 拡散モデル: ノイズの段階的な除去で生成。スコア関数の学習はノイズ予測に等価であり、ELBOの最適化として定式化されます

この分類は相互排他的ではなく、たとえばLatent Diffusion ModelはVAEと拡散モデルを組み合わせたものです。各アプローチの数学的な原理を理解していれば、こうしたハイブリッドモデルの設計思想も自然に理解できます。

目的関数の比較

各モデルが最適化する目的関数の違いは、生成結果の特性に直接影響します。

$$ \begin{align} \text{GAN:} \quad & \min_G \max_D \, \mathbb{E}[\ln D(\bm{x})] + \mathbb{E}[\ln(1-D(G(\bm{z})))] \\ \text{VAE:} \quad & \max_{\theta,\phi} \, \mathbb{E}_{q_\phi}[\ln p_\theta(\bm{x}|\bm{z})] – D_{\text{KL}}(q_\phi(\bm{z}|\bm{x}) \| p(\bm{z})) \\ \text{Flow:} \quad & \max_\theta \, \ln p_Z(f^{-1}_\theta(\bm{x})) + \ln|\det \bm{J}_{f^{-1}_\theta}| \\ \text{AR:} \quad & \max_\theta \, \sum_{i=1}^d \ln p_\theta(x_i | x_{1:i-1}) \\ \text{Diffusion:} \quad & \min_\theta \, \mathbb{E}_{t,\bm{\epsilon}}\left[\|\bm{\epsilon} – \bm{\epsilon}_\theta(\bm{x}_t, t)\|^2\right] \end{align} $$

それぞれの目的関数が何を意味し、どのような結果をもたらすかを詳しく見ていきましょう。

GANの目的関数はJensen-Shannonダイバージェンス(JSD)の最小化に等価であり、生成データの「本物らしさ」を重視します。最適な識別器の下では $\min_G 2 \cdot \text{JSD}(p_{\text{data}} \| p_G) – \ln 4$ となります。JSDは対称な距離尺度ですが、生成器は識別器を「騙す」方向にしか学習しないため、分布の全モードをカバーする保証がありません。結果として、多くのモードの中から最も「本物に近い」一部のモードだけを学習してしまう「モード崩壊」が生じやすくなります。

VAEのELBOは対数尤度の下界であり、$\ln p_\theta(\bm{x}) \geq \text{ELBO}$ の関係があります。ELBOは2つの項から構成されます。再構成項 $\mathbb{E}_{q_\phi}[\ln p_\theta(\bm{x}|\bm{z})]$ はデータを正確に復元する能力を表し、KL項 $-D_{\text{KL}}(q_\phi(\bm{z}|\bm{x}) \| p(\bm{z}))$ は潜在空間の正則化を行います。ピクセル単位の再構成損失(BCE/MSE)は「複数のありうる画像の平均」に収束しやすく、これがVAE特有の画像のぼやけの原因です。

正規化フローと自己回帰モデルは対数尤度を直接最大化します。KLダイバージェンス $D_{\text{KL}}(p_{\text{data}} \| p_\theta)$ を最小化することに等価であり、データ分布の全モードをカバーする「モードカバリング」の性質を持ちます。ただし、このモードカバリングは裏を返せば、データが存在しない領域にも確率質量を割り当ててしまう可能性があり、生成画像のシャープさが犠牲になることがあります。

拡散モデルはノイズ予測のMSEを最小化します。拡散モデルの損失関数は実はVAEのELBOを拡張したものとして導出でき、$T$ ステップの変分下界 $\sum_{t=1}^{T} L_t$ の最適化に対応します。各ステップでの「小さなノイズの除去」を学習するため、1ステップあたりのタスクが容易であり、非常に安定した学習が可能です。

各モデルの理論的枠組みの違いを理解したところで、次に生成品質の観点から比較しましょう。

生成品質の比較

評価指標

画像生成の品質は主に以下の指標で評価されます。

画像生成の品質を客観的に評価するのは簡単ではありません。人間の知覚は主観的であり、大量の画像を一枚ずつ評価するのは非現実的です。そこで、自動的な定量評価指標が使われています。

FID(Frechet Inception Distance): 生成画像と本物画像の特徴量分布の距離を測ります。値が低いほど良い性能を示します。具体的には、Inception-v3ネットワーク(ImageNetで学習済みの画像分類モデル)の中間層(pool3層)から特徴量を抽出し、生成画像と本物画像それぞれの特徴量分布を多変量正規分布で近似します。2つの正規分布間のFrechet距離(Wasserstein-2距離とも呼ばれます)を計算したものがFIDです。

$$ \text{FID} = \|\bm{\mu}_r – \bm{\mu}_g\|^2 + \text{tr}(\bm{\Sigma}_r + \bm{\Sigma}_g – 2(\bm{\Sigma}_r \bm{\Sigma}_g)^{1/2}) $$

第1項はが平均の差(分布の中心のずれ)、第2項は共分散の差(分布の「形」の違い)を測っています。FIDの利点は、品質と多様性の両方を一つの数値で捉えられることです。ただし、特徴量空間での正規分布近似が前提であるため、この仮定が成り立たない場合は不正確になる可能性があります。

IS(Inception Score): 生成画像の品質と多様性を評価します。値が高いほど良い性能を示します。個別の画像がクラスを明確に持ち(品質 — $p(y|\bm{x})$ のエントロピーが低い)、全体として多様なクラスを含む(多様性 — $p(y)$ のエントロピーが高い)ことを評価します。

$$ \text{IS} = \exp\left(\mathbb{E}_{\bm{x}}[D_{\text{KL}}(p(y|\bm{x}) \| p(y))]\right) $$

ISは品質と多様性を同時に評価できますが、本物のデータ分布との比較を行わないため、FIDより信頼性が低いとされています。たとえば、高品質だが本物とは全く異なる画像を生成しても高いISを得ることが可能です。

各モデルの品質特性

GAN系列: 最も鮮明な画像を生成します。StyleGAN2やBigGANはFIDで長らく最高性能を達成してきました。しかし、モード崩壊により多様性が犠牲になる場合があり、ISは高くてもFIDが悪いことがあります。

VAE: 画像がぼやける傾向があります。これは再構成損失(ピクセルごとのBCE/MSE)が「平均的に正しい」画像を促すためです。VQ-VAEやVAE-GANなどの改良により品質は改善されています。

拡散モデル: 2021年以降、FIDでGANを上回る性能を達成しています。DDPMのclass-conditional版はImageNetでFID 2.97を達成し、BigGAN-deepの6.95を大幅に上回りました。多様性とシャープさの両方に優れます。

正規化フロー: 品質はGANや拡散モデルにやや劣りますが、Glowは顔画像の高品質な生成を実現しています。可逆性の制約がモデルの容量を制限する要因です。

自己回帰モデル: PixelCNN++は密度推定としては優れていますが、サンプルの視覚的品質はGANや拡散モデルに劣ることが多いです。ImageGPTはTransformerのスケーリングにより品質を改善しました。

品質と多様性のトレードオフ

生成モデルには「品質 vs 多様性」のトレードオフが存在します。このトレードオフを理解するために、精度(precision)と再現率(recall)の概念で分析します。この精度・再現率は分類問題の指標とは異なり、生成モデル専用に定義されたものです。

精度(Precision): 生成されたサンプルが本物の分布のサポートに含まれる割合です。これは品質の指標であり、「生成された画像がどの程度本物らしいか」を測ります。精度が高いモデルは見た目がリアルな画像を生成しますが、データ分布の一部しかカバーしていない可能性があります。

再現率(Recall): 本物の分布のサポートが生成分布でカバーされている割合です。これは多様性の指標であり、「どの程度多様な画像を生成できるか」を測ります。再現率が高いモデルはデータの多様性をよく捉えますが、本物とは異なる画像を含む可能性があります。

数学的には、本物のデータの分布を $p_r$、生成データの分布を $p_g$ として、各分布のサポートの重なりから計算されます。

GANは精度が高い(シャープな画像)が再現率が低い(モード崩壊)傾向があります。これはJSDの最適化が「本物らしさ」を優先するためです。VAEは再現率が高い(全モードをカバー)が精度が低い(ぼやける)傾向があります。これはKLダイバージェンスのモードカバリング特性のためです。拡散モデルは両方のバランスが良好であり、これが現在の主流となっている理由の一つです。

このトレードオフを制御するために、GANではtruncation trick(潜在変数の分布を切り詰める手法)、拡散モデルではclassifier-free guidance(ガイダンスの強度を調整する手法)が使われます。ガイダンスの強度を上げると品質は向上しますが多様性は低下し、下げると多様性は向上しますが品質が低下します。

生成品質の特性を理解したところで、次に学習の安定性について比較しましょう。

学習の安定性

各モデルの学習特性

学習の安定性は、実用上非常に重要な要素です。いくら理論的に優れた手法でも、学習がうまくいかなければ性能を引き出せません。ここでは各モデルの学習で起こりうる問題とその対処法を詳しく見ていきましょう。

GAN: 最も学習が不安定です。識別器と生成器の均衡を保つ必要があり、ハイパーパラメータの選択が結果に大きく影響します。具体的には次の3つの問題が頻繁に発生します。

  1. モード崩壊(Mode Collapse): 生成器がデータ分布の一部のモードだけを学習し、多様性のないサンプルを生成してしまう現象です。たとえば手書き数字の生成で「3」ばかり生成してしまうような状況です
  2. 勾配消失: 識別器が強くなりすぎると、生成器への勾配がほぼゼロになり学習が停滞します。元の目的関数の $\ln(1 – D(G(\bm{z})))$ を $-\ln D(G(\bm{z}))$ に置き換える「non-saturating GAN」でこの問題を緩和できます
  3. 発振(Oscillation): 生成器と識別器が互いに適応し合い、損失が安定せずに振動し続ける現象です

WGANやSpectral Normalizationなどの改良で安定性は向上していますが、他のモデルと比較すると依然として調整が困難です。

VAE: 安定した学習が可能です。単一の目的関数(ELBO)を最大化するだけであり、損失の減少が学習の進行と相関します。ただし、posterior collapse(後方崩壊)という特有の問題があります。これはデコーダが潜在変数 $\bm{z}$ を無視して学習してしまう現象で、KL項が0に近づき、潜在空間が活用されなくなります。KLアニーリング(学習の初期段階でKL項の重みを徐々に増やす手法)や、$\beta$-VAE(KL項の重みをハイパーパラメータとして調整する手法)で対処できます。

拡散モデル: 非常に安定した学習です。目的関数はノイズ予測のMSEであり、通常の回帰問題として安定に最適化できます。ハイパーパラメータへの感度も低く、幅広い設定で良好な結果が得られます。学習率やバッチサイズの選択に対してロバストであり、GANのような繊細なチューニングは不要です。

正規化フロー: 安定した学習です。最尤推定で明確な目的関数を最適化します。ただし、ヤコビアンの対数行列式の計算でスケール因子が極端な値をとると数値的に不安定になることがあります。ActNormなどの正規化手法で対処されます。

自己回帰モデル: 安定した学習です。最尤推定であり、各条件付き確率を独立に最適化できるため、収束が確実です。損失関数(負の対数尤度)が直接的な評価指標でもあるため、学習の進行を損失の値から直接判断できるという利点があります。

比較実験: 学習曲線の比較

import numpy as np
import matplotlib.pyplot as plt

# --- 典型的な学習曲線のシミュレーション ---
np.random.seed(42)
epochs = np.arange(100)

fig, axes = plt.subplots(1, 3, figsize=(16, 5))

# (a) 各モデルの典型的な損失曲線
ax = axes[0]

# VAE: 安定して減少
vae_loss = 150 * np.exp(-0.05 * epochs) + 80 + np.random.normal(0, 2, 100)
ax.plot(epochs, vae_loss, 'b-', linewidth=2, label='VAE (ELBO neg)',
        alpha=0.8)

# Flow: 安定して減少
flow_loss = 120 * np.exp(-0.04 * epochs) + 50 + np.random.normal(0, 1.5, 100)
ax.plot(epochs, flow_loss, 'g-', linewidth=2, label='Flow (NLL)',
        alpha=0.8)

# Diffusion: 安定して減少
diff_loss = 0.5 * np.exp(-0.03 * epochs) + 0.05 + np.random.normal(0, 0.01, 100)
ax.plot(epochs, diff_loss * 200, 'purple', linewidth=2,
        label='Diffusion (scaled MSE)', alpha=0.8)

# GAN: 不安定な振動
gan_d = 0.7 + 0.3 * np.sin(0.2 * epochs) + np.random.normal(0, 0.15, 100)
ax.plot(epochs, gan_d * 100, 'r-', linewidth=2,
        label='GAN D (scaled)', alpha=0.5)
gan_g = 2.0 - 0.3 * np.sin(0.2 * epochs) + np.random.normal(0, 0.2, 100)
ax.plot(epochs, gan_g * 50, 'r--', linewidth=2,
        label='GAN G (scaled)', alpha=0.5)

ax.set_xlabel('Epoch', fontsize=12)
ax.set_ylabel('Loss (scaled)', fontsize=12)
ax.set_title('Typical Training Curves', fontsize=13)
ax.legend(fontsize=9)
ax.grid(True, alpha=0.3)

# (b) 品質と多様性のトレードオフ
ax = axes[1]
models = {
    'GAN': (0.85, 0.55),
    'VAE': (0.50, 0.85),
    'Diffusion': (0.88, 0.82),
    'Flow': (0.65, 0.75),
    'AR': (0.60, 0.80),
}
colors = {'GAN': 'red', 'VAE': 'blue', 'Diffusion': 'purple',
          'Flow': 'green', 'AR': 'orange'}

for name, (precision, recall) in models.items():
    ax.scatter(recall, precision, s=200, c=colors[name],
               label=name, zorder=5, edgecolors='black', linewidth=1)

ax.set_xlabel('Recall (Diversity)', fontsize=12)
ax.set_ylabel('Precision (Quality)', fontsize=12)
ax.set_title('Quality vs Diversity Trade-off', fontsize=13)
ax.legend(fontsize=10)
ax.grid(True, alpha=0.3)
ax.set_xlim(0.3, 1.0)
ax.set_ylim(0.3, 1.0)
ax.plot([0.3, 1.0], [0.3, 1.0], 'k--', alpha=0.2)

# (c) 計算コストの比較
ax = axes[2]
methods = ['GAN', 'VAE', 'Flow', 'AR', 'Diffusion']
train_cost = [3, 1, 2, 2, 5]  # 相対的な学習コスト
gen_cost = [1, 1, 1, 10, 20]   # 相対的な生成コスト
x_pos = np.arange(len(methods))
width = 0.35

bars1 = ax.bar(x_pos - width/2, train_cost, width, color='steelblue',
               alpha=0.8, label='Training cost')
bars2 = ax.bar(x_pos + width/2, gen_cost, width, color='coral',
               alpha=0.8, label='Generation cost')

ax.set_ylabel('Relative Cost', fontsize=12)
ax.set_title('Computational Cost Comparison', fontsize=13)
ax.set_xticks(x_pos)
ax.set_xticklabels(methods, fontsize=11)
ax.legend(fontsize=10)
ax.grid(True, alpha=0.3, axis='y')

plt.tight_layout()
plt.savefig('generation_comparison.png', dpi=150, bbox_inches='tight')
plt.show()

この比較図から、各モデルの特性の違いが明確に見て取れます。

  1. 左図(学習曲線): VAE、正規化フロー、拡散モデルは損失が安定して減少しています。一方、GANの損失は振動しており、損失値から学習の進行を判断することが困難です。拡散モデルの損失は最も滑らかに減少しており、学習の安定性が顕著です

  2. 中央図(品質vs多様性): 拡散モデルが右上(高品質かつ高多様性)に位置しています。GANは品質は高いが多様性が低い傾向、VAEは多様性は高いが品質が低い傾向があります。正規化フローと自己回帰モデルは中間的な位置にあります

  3. 右図(計算コスト): 学習コストでは拡散モデルが最も高く、VAEが最も低いです。生成コストでは拡散モデルと自己回帰モデルが突出して高く、GAN、VAE、正規化フローは1回のforward passで生成できるため低コストです。この速度の違いはリアルタイム応用での使い分けに大きく影響します

応用シナリオ別の推奨手法

シナリオごとの最適な選択

シナリオ 推奨手法 理由
最高品質の画像生成 拡散モデル FIDで最高性能、モード崩壊なし
リアルタイム画像生成 GAN 1回のforward passで生成
異常検知 正規化フロー / VAE 正確な尤度計算が可能
データ拡張 GAN / 拡散モデル 高品質な多様なサンプルを生成
テキスト生成 自己回帰モデル 系列データとの自然な相性
表現学習 VAE 構造化された潜在空間
条件付き生成 拡散モデル / GAN Classifier-free guidanceの効果
小規模データ VAE / Flow 安定した学習、過学習に強い
密度推定 正規化フロー / 自己回帰モデル 正確な対数尤度計算
画像編集 拡散モデル インペインティング、super-resolution

2024-2025年のトレンド

最近のトレンドとして、以下の傾向が見られます。

拡散モデルの優位: Stable Diffusion、DALL-E 2、Imagenなどの成功により、画像生成の主流は拡散モデルに移行しています。特にtext-to-imageタスクでの品質は他の手法を大きく上回っています。

ハイブリッドアプローチ: VAE + 拡散モデル(Latent Diffusion Model)のように、複数の手法を組み合わせるアプローチが増えています。Stable Diffusionは、VAEで画像を潜在空間に圧縮してから拡散モデルを適用することで、計算コストを大幅に削減しています。

高速化: 拡散モデルの生成速度の改善が活発に研究されています。Consistency Models、LCM(Latent Consistency Models)などにより、数ステップでの高品質生成が可能になりつつあります。

GANの特化: GANは汎用的な画像生成では拡散モデルに譲りましたが、超解像(ESRGAN)やスタイル変換(StyleGAN)など、特定のタスクでは依然として強力です。

統合的な理解

共通の枠組み

一見異なる5つのモデルですが、実は共通の数学的構造を持っています。

全ての生成モデルは、単純な分布(潜在空間)から複雑な分布(データ空間)への変換を学習しています。潜在変数 $\bm{z}$ は標準正規分布 $\mathcal{N}(\bm{0}, \bm{I})$ や一様分布からサンプリングされ、これを何らかの変換によってデータ分布 $p_{\text{data}}(\bm{x})$ に近いサンプルに変えるのが目標です。

  • GAN: $\bm{z} \to G(\bm{z})$ の決定的な変換。識別器がフィードバックを提供。変換に制約なし
  • VAE: $\bm{z} \to p_\theta(\bm{x}|\bm{z})$ の確率的な変換。変分推論で学習。逆方向の推論も可能
  • 正規化フロー: $\bm{z} \to f(\bm{z})$ の可逆な決定的変換。ヤコビアンの計算が必要
  • 自己回帰: $\bm{z}_{1:d} \to (x_1, x_2, \ldots, x_d)$ の逐次的な変換。各ステップで条件付き分布からサンプリング
  • 拡散モデル: $\bm{x}_T \to \bm{x}_0$ の $T$ ステップの段階的な変換。各ステップでノイズを少しずつ除去

この視点に立つと、各モデルの違いは「変換をどのようにパラメータ化し、どのような目的関数で学習するか」の設計選択の違いに過ぎないことがわかります。そして、それぞれの設計選択がどのようなトレードオフをもたらすかを理解することが、適切な手法選択の鍵になります。

性能のフロンティア

生成モデルの研究は、以下の3つの軸での改善を目指しています。

  1. 品質: 生成サンプルの視覚的品質とデータ分布の正確な再現。FIDやISで定量化されます
  2. 速度: 学習と生成の計算効率。リアルタイム応用では生成速度が特に重要です
  3. 制御性: 条件付き生成やテキストガイダンスなどの制御能力。ユーザーの意図を反映する能力です

理想的なモデルは3つ全てを満たしますが、現実にはトレードオフが存在します。拡散モデルは品質と制御性に優れますが速度が犠牲になり、GANは速度と品質に優れますが制御性に劣ります。現在の研究の主流は、このトレードオフの改善を目指すものであり、Consistency Modelsのように拡散モデルの品質を保ちながら1-2ステップでの生成を実現する手法や、ControlNetのように拡散モデルの制御性をさらに向上させる手法が精力的に研究されています。

まとめ

本記事では、5つの主要な画像生成モデルを理論的枠組み、生成品質、学習の安定性、計算コスト、応用適性の観点から体系的に比較しました。

  • GAN: 高品質でリアルタイム生成が可能だが、学習が不安定でモード崩壊のリスクがある。超解像やスタイル変換など特定タスクでは依然として有力
  • VAE: 安定した学習と構造化された潜在空間が利点。画質のぼやけが弱点だが、表現学習や異常検知に適する
  • 拡散モデル: 品質・多様性ともに最高水準。学習が安定。生成速度が課題だが、Consistency Modelsなどの高速化手法により改善が進んでいる
  • 正規化フロー: 正確な尤度計算が可能。可逆性の制約で表現力に限界があるが、密度推定や異常検知に有用
  • 自己回帰モデル: 正確な尤度、理論的な制約なし。生成が逐次的で遅いが、テキスト生成ではGPTシリーズとして圧倒的な成功を収めている
  • 各手法は共通の枠組み(潜在空間からデータ空間への変換)で統一的に理解できる。各手法の違いは変換のパラメータ化と目的関数の設計選択の違いである
  • 応用シナリオに応じた適切な手法選択が重要であり、単純な「最強の手法」は存在しない

次のステップとして、以下の記事も参考にしてください。