🎨 ⚔️ 🧠

GAN とその派生モデルをイチから理解する

敵対的生成ネットワークの仕組みから派生モデルまで徹底図解

📜 前提:GAN以前の画像生成モデル

GAN(2014年)が登場する前にも画像を生成するモデルはあった。
その流れを知ると、GANの革新性がわかる。

画像生成モデルの進化

1
VAE(変分オートエンコーダ)── 2013年

画像を「潜在空間」に圧縮して、そこからデコーダで画像を生成する。
学習は安定しているが、生成画像がぼやけやすい

2
GAN(敵対的生成ネットワーク)── 2014年

2つのNNを「競争」させて学習する全く新しいアプローチ。
VAEよりもシャープで鮮明な画像を生成できる。ただし学習が不安定。

3
拡散モデル(Diffusion Model)── 2020年〜

画像にノイズを段階的に加え、逆にノイズを除去する過程を学習。
Stable Diffusion, DALL-Eなど。現在の主流。GANより学習が安定+高品質

🟣 VAE(変分オートエンコーダ)── GANの前に理解しておこう

VAEはGANより先に登場した生成モデル。GANとの違いを理解するために先に押さえておこう。

まずオートエンコーダ(AE)とは?

📦
たとえ話:荷物の圧縮と復元
引っ越しのとき、部屋の全ての家具を1つのダンボールに無理やり詰め込む(エンコーダ=圧縮)。
新居でそのダンボールから元の部屋を復元する(デコーダ=復元)。

学習の目標:「入力と出力が同じになる」ように圧縮・復元の方法を覚える。

オートエンコーダの構造

入力画像
🐱
エンコーダ
圧縮
潜在
変数
ボトルネック
デコーダ
復元
出力画像
🐱

入力 → 小さなベクトルに圧縮 → そこから元を復元。
学習目標:入力と出力をできるだけ同じにする

AEからVAEへ:何が変わった?

🎲
VAEの核心:潜在空間に「確率分布」を使う
普通のオートエンコーダ → 入力を1つの固定された点に圧縮する。
VAE → 入力を「平均と分散を持つ確率分布」に圧縮する。

確率分布になっているから、そこからランダムにサンプリングすると
毎回少しずつ違う画像が生成できる → 「生成モデル」として使える!

AE vs VAE の違い

VAEの弱点:
✅ 学習は安定しているが、生成画像がぼやけやすい
✅ 理由:「入力と出力の差」を小さくする学習をするので、無難な平均的な画像になりがち
✅ この弱点を解決したのがGAN → 「鮮明で本物そっくり」な画像を生成できる

⚔️ GAN(2014年)── 敵対的生成ネットワークの基本

Ian Goodfellowが提案。2つのNNを「対戦」させるという画期的なアイデア。

GAN = Generative Adversarial Network(敵対的 生成 ネットワーク)

🎨
たとえ話:贋作師と鑑定士
贋作師(Generator=生成器):偽物の絵を描いて鑑定士を騙そうとする
鑑定士(Discriminator=識別器):本物か偽物かを見破ろうとする

この2人が互いに競い合いながら上達する
贋作師は「鑑定士に見破られない絵」を描けるようになり、
鑑定士は「より巧妙な偽物」も見破れるようになる。

最終的に、贋作師の絵が本物と区別がつかないレベルに達するのが理想。

GANの基本構造

ランダムノイズ
z(乱数ベクトル)
🎲
🎨 Generator
(生成器)
ノイズから画像を生成
偽物画像
🖼️
Fake
偽物🖼️
or
本物📷
🔍 Discriminator
(識別器)
本物か偽物かを判定
本物:95%
偽物:5%

学習の流れ

1
Discriminatorを学習させる

本物の画像を見せて「本物」と判定させ、Generatorの偽画像を見せて「偽物」と判定させる。
正しく見分ける力を鍛える

2
Generatorを学習させる

Generatorが偽画像を作り、Discriminatorに「本物」と判定させようとする。
Discriminatorを騙せなかったら → Generatorの重みを更新してもっと上手に描けるようにする。
(この時Discriminatorの重みは固定)

3
①②を交互に繰り返す

Discriminatorが強くなる → Generatorも強くならないと騙せない → 互いにレベルアップ。
最終的にDiscriminatorが「本物か偽物かわからない(50%:50%)」になったら 学習完了

GANの学習を「テスト」でたとえる

📝
VAEとの学習方法の違い
VAE:先生が「正解の画像」と「あなたの画像」をピクセルごとに比較して採点する。
→ 「正解に近い無難な回答」=ぼやけた画像になりがち。

GAN:先生(Discriminator)が「この画像は本物か偽物か?」とパッと見の印象で判定する。
→ ピクセルの一致ではなく「本物っぽさ」を追求 → シャープで鮮明な画像になる。
GANの特徴まとめ:
Generator(生成器)Discriminator(識別器)の2つのNNで構成
✅ 2つが敵対的に(adversarial)学習する → 名前の由来
✅ VAEよりもシャープで鮮明な画像を生成
✅ 提案者:Ian Goodfellow(2014年)
✅ 入力はランダムノイズ(潜在変数 z)

弱点:
モード崩壊(mode collapse):Generatorが同じ画像ばかり生成してしまう
学習が不安定:GeneratorとDiscriminatorのバランスが崩れやすい
❌ 生成する画像の種類を指定できない(何が出るかはランダム)

🔄 VAE vs GAN ── 根本的な違い

VAEGAN
2013 2014
構造 エンコーダ + デコーダ Generator + Discriminator
学習方法 入力と出力の差を最小化
+ 潜在空間の正則化
2つのNNの対戦
(敵対的学習)
画質 ぼやけやすい シャープで鮮明 ✅
学習の
安定性
安定 ✅ 不安定
(モード崩壊のリスク)
潜在空間 整理されている ✅
連続的で補間が可能
整理されていない
隙間が多い場合がある
🍳
たとえ話:料理で比較
VAE=レシピ通りに作る。失敗しにくいけど、無難な味になりがち。
GAN=審査員(D)に「美味しいか不味いか」だけ判定してもらいながら料理人(G)が改良する。
→ レシピなしで独創的で美味しい料理ができるけど、たまに大失敗する。

🔵 DCGAN(2016年)── GANにCNNを導入

元祖GANのGeneratorとDiscriminatorは単純な全結合層だった。
DCGANはCNNを導入して画像生成の品質を大幅に向上させた。

DCGANの3つのルール

1
プーリング層を使わない

代わりにストライド付き畳み込みで縮小・拡大する。
ネットワーク自身が「どう縮小するか」を学習できる。

2
バッチ正規化(Batch Normalization)を使う

各層の出力を正規化して学習を安定させる。
(ただしGeneratorの出力層とDiscriminatorの入力層は除く)

3
活性化関数を使い分ける

Generator:中間層はReLU、出力層はtanh
Discriminator:全層LeakyReLU

DCGANのGenerator構造

ノイズ z
100次元
全結合
4×4×1024
TransConv
8×8×512
TransConv
16×16×256
TransConv
32×32×128
出力画像
64×64×3

小さいノイズ → Transposed Convolutionで段階的に拡大 → 画像を生成

DCGANのポイント:
Deep Convolutional GAN = CNNを導入したGAN
✅ 3つのルールで学習を安定化
✅ G検定では「3つのルール」が頻出 → プーリング不使用、BN使用、活性化関数の使い分け

🏷️ Conditional GAN(2014年)── 「何を作るか」を指定する

元祖GANの弱点:ランダムノイズから画像を作るので何が出るかわからない
「猫を作れ」「犬を作れ」と指定できない

🏷️
たとえ話:注文できるレストラン
GAN=シェフのおまかせ料理。何が出てくるかわからない。
Conditional GAN=メニューから注文できる。「パスタをください」と条件を指定

GAN vs Conditional GAN

Conditional GANのポイント:
✅ GeneratorとDiscriminatorの両方に条件(ラベル)を入力する
✅ 条件はクラスラベル(猫、犬…)、テキスト、画像なども使える
✅ Pix2PixやCycleGANなど多くの派生モデルの基盤

🔄 Pix2Pix(2017年)── 画像から画像への変換

🎨
ひとことで言うと
この画像を、こう変換して」というペア画像を使って学習する画像変換モデル。
Conditional GANの一種で、条件として「入力画像」を使う。

Pix2Pixの使用例

✏️ → 📷
線画 → 写真風
⬛ → 🌈
白黒 → カラー
🗺️ → 🛰️
地図 → 航空写真
🌞 → 🌙
昼 → 夜
Pix2Pixの制約: 学習にペアになった画像データ(入力と正解のセット)が必要。
例えば「線画とそれに対応する写真」のペアが大量に必要 → データ収集が大変
→ この問題を解決したのが CycleGAN。

🔁 CycleGAN(2017年)── ペアなしで画像変換

🐴
たとえ話で理解する
「馬の写真100枚」と「シマウマの写真100枚」があるけど、
同じ馬とシマウマのペアは1枚もない

Pix2Pix → 「この馬の写真がこのシマウマになる」という対応付けが必要 → 無理
CycleGAN → 対応付けなしで「馬っぽさ → シマウマっぽさ」の変換法則を自動で学ぶ → できる!

CycleGANの仕組み:サイクル一貫性

馬 🐴
ドメインA
── GA→B ──→
シマウマ 🦓
(偽物)
── GB→A ──→
馬 🐴
(復元)
馬 → シマウマに変換 → もう一度馬に戻す → 元の馬と同じになるべき!
これが「Cycle Consistency(サイクル一貫性)
往復して元に戻ることで、意味のある変換だけを学ぶ
シマウマ 🦓
ドメインB
── GB→A ──→
馬 🐴
(偽物)
── GA→B ──→
シマウマ 🦓
(復元)

※ Generator 2つ + Discriminator 2つ = 合計4つのNNを使う

Pix2Pix vs CycleGAN:
Pix2Pix → ペアデータが必要。1対1の対応が必要。
CycleGAN → ペアデータ不要。2つのグループの画像があればOK。

覚え方:Cycle = A→B→A と一周することで変換の質を保証する。

📈 ProGAN(2018年)& StyleGAN(2019年)── 超高解像度の顔画像

ProGAN:段階的に解像度を上げて学習する

🪜
たとえ話:絵の描き方
いきなり細密画を描くのは難しい。
まずざっくりした下書き(低解像度)を描いて、
そこから徐々に細部を描き足していく(高解像度に)方がうまくいく。

ProGANの学習プロセス

4×4
Phase 1
8×8
Phase 2
16×16
64×64
256×256
1024×1024
最終 🎉

低解像度から始めて、段階的に層を追加しながら高解像度を学習

StyleGAN:ProGAN + スタイル制御

💇
たとえ話:着せ替え人形
ProGANは「高解像度の顔を作れる」けど、細かい制御ができなかった。
StyleGANは「この人の顔の形 + あの人の髪型 + その人の肌色」のように
異なる特徴(スタイル)を組み合わせて制御できるようにした。

StyleGANの核心:スタイルの階層的制御

粗いスタイル
(低解像度の層)
→ 顔の形、ポーズ、髪型の大まかな形 → 「全体の雰囲気」
中間スタイル
(中間層)
→ 目の形、鼻の形、髪色 → 「顔のパーツ」
細かいスタイル
(高解像度の層)
→ 肌の質感、シワ、そばかす → 「細部のディテール」

各レベルに別々のスタイル情報を注入 → 細かい制御が可能

StyleGANの技術的ポイント:
✅ ノイズzを直接Generatorに入れるのではなく、Mapping Networkで変換してからスタイルとして注入
AdaIN(Adaptive Instance Normalization)でスタイルを各層に適用
NVIDIAが開発。「実在しない人の顔」を生成して話題に
✅ StyleGAN2、StyleGAN3と進化を続けている

🔎 SRGAN / ESRGAN ── 超解像に特化したGAN

🔍
ひとことで言うと
低解像度の画像を高解像度に変換するためのGAN。
犯罪捜査ドラマの「画像を拡大して鮮明に!」を実現するイメージ。

SRGAN(2017年)が元祖で、ESRGAN(2018年)は改良版。
「E」= Enhanced(強化版)。

SRGANの仕組み

低解像
🖼️
Generator
ResNetベース
+ アップサンプリング
高解像(偽)
🖼️✨
Discriminator
本物の高解像画像
と見分ける
ESRGANの改良点:
✅ Batch Normalizationを除去(アーティファクト防止)
RRDB(Residual-in-Residual Dense Block)というより複雑な構造に
Relativistic Discriminatorで学習安定化
✅ より自然でリアルなテクスチャを生成

🏁 全体まとめ ── GAN系モデルの系譜

VAE(2013)
エンコーダ・デコーダ型生成モデル
↓ 画質の向上を目指して
GAN(2014)
Generator vs Discriminator
敵対的学習で鮮明な画像
↓ 派生モデルが続々登場
DCGAN
CNN導入
3つのルール
cGAN
条件付き生成
Pix2Pix
画像変換
(ペア必要)
CycleGAN
画像変換
(ペア不要)
ProGAN
段階的に
高解像度化
StyleGAN
スタイル制御
NVIDIA開発
SRGAN
ESRGAN
超解像特化
G検定で問われるポイント:

モデル覚えるキーワードひとこと
VAE2013 潜在空間、確率分布、ぼやける エンコーダ・デコーダ型生成
GAN2014 Generator、Discriminator、敵対的学習、Ian Goodfellow 贋作師 vs 鑑定士
DCGAN2016 CNN導入、3つのルール Pool不使用/BN/活性化関数
cGAN2014 条件付き、ラベル指定 注文できるレストラン
Pix2Pix2017 画像変換、ペアデータ必要 線画→写真
CycleGAN2017 ペア不要、サイクル一貫性 馬↔シマウマ
ProGAN2018 段階的に解像度向上 下書き→清書の順で学習
StyleGAN2019 スタイル制御、NVIDIA、AdaIN 着せ替え人形
SRGAN2017 超解像、低→高解像度 画像の高画質化