「偽札職人と警察官のいたちごっこ」——GANはこの競争の仕組みでリアルな画像を生み出します。生成AIブームの原点となった技術の仕組みと、現在の位置づけを解説します。
GANとは?敵対的生成ネットワークの仕組みと応用事例

AIを知りたい
AIが画像を「生成」できるようになったきっかけの一つが「GAN」だと聞いたのですが、どんな技術ですか?

AIエンジニア
GAN(Generative Adversarial Network)は2つのニューラルネットワークを競わせて学習させる画期的な手法です。2014年にIan Goodfellowが提案しました。「敵対的」という名前の通り、生成するネットワークと見破るネットワークが互いに切磋琢磨することで、本物そっくりのデータを生成できるようになります。

AIを知りたい
2つのネットワークが競うというのはどういうことですか?

AIエンジニア
Generator(生成器)はノイズから偽のデータを生成し、Discriminator(識別器)はそのデータが本物か偽物かを判定します。Generatorは「Discriminatorを騙せるような精巧な偽物」を作ろうとし、Discriminatorは「見破る精度」を上げようとします。このいたちごっこで両方が進化します。
GAN(敵対的生成ネットワーク)とは、Generator(生成器)とDiscriminator(識別器)の2つのネットワークを敵対的に学習させることで、本物のようなデータを生成する深層学習モデルです。
2014年にIan Goodfellowによって提案され、「機械学習の過去10年で最も面白いアイデア」とYann LeCunに評されました。画像生成、スタイル変換、超解像など幅広い応用があります。
GANの学習プロセス

AIを知りたい
具体的にどうやって学習が進むのですか?

AIエンジニア
学習は交互に行います。まずDiscriminatorを学習:本物データに「本物」、生成データに「偽物」というラベルで識別精度を上げます。次にGeneratorを学習:Discriminatorを騙せるようなデータを生成するよう更新します。この2ステップを何万回も繰り返します。

AIを知りたい
うまく学習するのは難しそうですね。

AIエンジニア
はい、GANの学習は非常に不安定なことで有名です。主な問題はモード崩壊(同じような画像ばかり生成する)と学習の不均衡(片方が強くなりすぎる)です。これらを解決するために様々な改良版GANが提案されてきました。
代表的なGANの種類

AIを知りたい
GANにはどんな種類がありますか?

AIエンジニア
たくさんの変種があります。DCGANは畳み込みを使った安定した画像生成。Pix2Pixは画像から画像への変換(例:白黒→カラー)。CycleGANはペアデータなしでスタイル変換(馬→シマウマ等)。StyleGANは超高品質な顔画像生成で話題になりました。

AIを知りたい
StyleGANの生成した顔画像って本物と見分けがつかないんですか?

AIエンジニア
はい、人間では見分けがほぼ不可能なレベルです。NVIDIAが開発したStyleGAN2/3は1024×1024の高解像度の顔画像を生成でき、thispersondoesnotexist.comというサイトで有名になりました。一方でディープフェイク問題としても注目され、悪用防止が重要な課題です。
| GAN変種 | 年 | 特徴 | 用途 |
|---|---|---|---|
| DCGAN | 2015 | 畳み込みベース | 安定した画像生成 |
| Pix2Pix | 2016 | 条件付き画像変換 | 白黒→カラー等 |
| CycleGAN | 2017 | ペアデータ不要 | スタイル変換 |
| StyleGAN | 2018 | スタイル制御 | 高品質顔生成 |
| BigGAN | 2018 | 大規模学習 | 多様な画像生成 |
GANと拡散モデルの関係

AIを知りたい
最近は拡散モデル(Diffusion Model)の方が主流だと聞いたのですが。

AIエンジニア
確かに画像生成の主流は拡散モデルに移りつつあります。Stable DiffusionやDALL-E 3は拡散モデルベースです。拡散モデルはGANより学習が安定し、多様性も高い画像を生成できます。ただしGANは生成速度が速いという利点があり、リアルタイム処理には依然として有利です。

AIを知りたい
GANを学ぶ意味はまだありますか?

AIエンジニア
はい。GANは生成モデルの基礎概念を理解する上で非常に重要です。Discriminatorによるフィードバック学習のアイデアは、RLHFなど強化学習を使ったAIの品質向上にも通じています。また超解像やスタイル変換など特定分野ではGANが今でも最適解の場合があります。
まとめ
GANはGeneratorとDiscriminatorの敵対的学習による画期的な生成モデルです。画像生成、スタイル変換、超解像など幅広い応用があり、StyleGANでは人間と見分けがつかないレベルの画像生成を実現しました。現在は拡散モデルが台頭していますが、GANの考え方は生成AI全般を理解する上での基礎知識として重要です。
関連記事
- 拡散モデル(Diffusion Model)とは?画像生成AIの核心技術を解説
- Stable Diffusionとは?画像生成AIの仕組みとローカル環境構築
- CNNとは?畳み込みニューラルネットワークの仕組みと応用
KerasでGANの基本構造を実装してみよう
ランダムなノイズから画像を生成するGenerator(生成器)と、本物か偽物かを見分けるDiscriminator(識別器)を組み合わせたGANの最小構成です。
import numpy as np
from tensorflow.keras import layers, models, optimizers
LATENT_DIM = 100 # ノイズの次元数
IMG_SHAPE = (28, 28, 1)
# --- 生成器:ノイズ → 画像 ---
def build_generator():
model = models.Sequential([
layers.Dense(256, input_dim=LATENT_DIM),
layers.LeakyReLU(0.2),
layers.BatchNormalization(),
layers.Dense(512),
layers.LeakyReLU(0.2),
layers.BatchNormalization(),
layers.Dense(np.prod(IMG_SHAPE), activation="tanh"),
layers.Reshape(IMG_SHAPE),
])
return model
# --- 識別器:画像 → 本物/偽物 ---
def build_discriminator():
model = models.Sequential([
layers.Flatten(input_shape=IMG_SHAPE),
layers.Dense(512),
layers.LeakyReLU(0.2),
layers.Dense(256),
layers.LeakyReLU(0.2),
layers.Dense(1, activation="sigmoid"),
])
model.compile(loss="binary_crossentropy",
optimizer=optimizers.Adam(0.0002, 0.5),
metrics=["accuracy"])
return model
# --- GAN全体の組み立て ---
discriminator = build_discriminator()
generator = build_generator()
# GAN学習時は識別器の重みを固定
discriminator.trainable = False
gan_input = layers.Input(shape=(LATENT_DIM,))
fake_img = generator(gan_input)
validity = discriminator(fake_img)
gan = models.Model(gan_input, validity)
gan.compile(loss="binary_crossentropy",
optimizer=optimizers.Adam(0.0002, 0.5))
print("Generator output shape:", generator.output_shape)
print("Discriminator output shape:", discriminator.output_shape)
# Generator output shape: (None, 28, 28, 1)
# Discriminator output shape: (None, 1)
GANの学習は「生成器が識別器を騙そうとし、識別器が見破ろうとする」という敵対的なゲームです。両者のバランスが崩れるとモード崩壊(同じ画像ばかり生成)が起きるため、LeakyReLUやBatchNormalizationなどの安定化テクニックが重要になります。
