GANとは
Generative Adversarial Network / 敵対的生成ネットワーク
偽物を作る生成器と、本物・偽物を見分ける識別器を競わせながら学習させる生成モデルの枠組み
ひとことで言うと
偽札を作る係と、偽札を見破る係を競わせながら鍛えることで、本物そっくりの画像を作れるようにする仕組み。
概要
GAN(敵対的生成ネットワーク)は、ランダムなノイズから偽のデータを作り出す生成器(Generator)と、入力されたデータが本物か生成器が作った偽物かを判定する識別器(Discriminator)という2つのニューラルネットワークを、互いに競わせながら同時に学習させる生成モデルの枠組み。 生成器は識別器を騙せるようなより本物らしいデータを作ろうと学習し、識別器は生成器が作った偽物を正しく見破ろうと学習するため、両者が競い合ううちに生成器の出力がしだいに本物に近づいていく。 画像生成、画風変換、超解像(低解像度画像の高解像度化)など幅広い用途で高品質な結果を生み出し、2014年の発表以降、生成モデル研究の中心的な手法の1つとして発展してきた。 2020年代に入り、拡散モデルが学習の安定性と生成品質の面で優位に立ち、画像生成の主流はGANから拡散モデルへと移りつつある。
背景
従来の生成モデルは、生成したいデータの確率分布を明示的に仮定してモデル化する必要があり、複雑な分布を精密に表現することが難しかった。 GANは、識別器という「審査役」を用意し生成器と競わせることで、複雑な分布を陽に仮定せずデータの生成方法を学習できる枠組みとして考案された。
歴史
2014年: Ian Goodfellowらが論文「Generative Adversarial Networks」でGANを提案。 2015年: DCGAN(畳み込み層を用いたGAN)が発表され、画像生成の安定性が向上。 2018-2019年: StyleGANなど、高解像度かつ高品質な顔画像生成モデルが登場。 2020年代: 拡散モデルの台頭により、画像生成分野での主導的地位は徐々に変化。
アーキテクチャ
生成器は、低次元のランダムノイズベクトルを入力として受け取り、逆畳み込み層などを通じて画像などの高次元データを出力する。 識別器は、本物のデータまたは生成器が作った偽データを入力として受け取り、それが本物である確率を出力する2値分類器として機能する。 学習では、識別器が本物と偽物を正しく分類できるよう更新する一方、生成器は識別器に偽物を本物と誤認させられるよう更新する、ミニマックス形式の目的関数を最適化する。
コード例
PyTorchでのシンプルなGeneratorとDiscriminator
import torch.nn as nn
generator = nn.Sequential(
nn.Linear(100, 256), nn.ReLU(),
nn.Linear(256, 784), nn.Tanh(),
)
discriminator = nn.Sequential(
nn.Linear(784, 256), nn.LeakyReLU(0.2),
nn.Linear(256, 1), nn.Sigmoid(),
)利点
- 1回の順伝播で生成が完了するため、拡散モデルと比べて生成速度が速い
- 高解像度かつ精細な画像を生成できることが実証されている
- 画風変換や超解像など、画像処理の幅広い応用タスクに適用されてきた実績がある
欠点
- 生成器と識別器のバランスが崩れやすく、学習が不安定になりモード崩壊(生成結果の多様性が失われる現象)を起こしやすい
- 学習の収束を客観的に評価する明確な指標が乏しく、収束判定が難しい
- 近年は拡散モデルと比べて生成品質や学習の安定性で見劣りする場面が増えている
比較
関連用語
よくある質問
モード崩壊とは?
生成器が識別器を騙しやすい少数のパターンばかりを出力するようになり、生成結果の多様性が失われてしまう現象。GANの学習における代表的な課題の1つ。
GANは今も使われている?
画像生成の最先端では拡散モデルが主流になっているが、リアルタイム性が求められる用途や、特定の画風変換・超解像タスクなどでは引き続き活用されている。
参考文献
- Research PaperGenerative Adversarial Networks