みんなのAI
機械学習AI論文
読み込み中…

学ぶ

🏅マイ実績

Ch.21

GAN基礎:生成と識別の対決

GAN: 作って見分ける対決

偽札の作り手と鑑定士が互いに腕を上げるイメージです。

本物の写真とノイズで作った偽物が識別器に入り、本物 / 偽物に分かれます。まず作る側(G)と見分ける側(D)だけ区別してみてください。

学習の流れ

  1. ① 本物の写真: 学習データから 本物サンプル xxx を 1 つ取り出します。
  2. ② ランダムなノイズ: どんな絵を作るか決める ノイズ zzz を無作為に選びます。
  3. ③ 生成器の仕事: ノイズ zzz を 偽物サンプル x^\hat{x}x^ に変えます。
  4. ④ 識別器の判定: xxx と x^\hat{x}x^ を見て 本物 / 偽物 を見分けます。
  5. ⑤ 交互に学習: G と D が順番に少しずつ更新されます。
GAN(Generative Adversarial Network)は、何かを創り出す 生成器(Generator, GGG) と、本物か偽物かを見抜く 識別器(Discriminator, DDD) が終わりなく競い合いながら成長する革新的な仕組みです。天才偽造犯とベテラン鑑識官の息詰まる頭脳戦のようです。偽造犯はより精巧な偽物を作り、鑑識官は見抜き技術を限界まで高めます。この緊張した ミニマックス の綱渡りの先に、人間の目では本物と区別できない創造物が生まれることがあります。本章では GAN の数学、ミニマックスゲーム、マンネリ化の モード崩壊 を豊富な例とともに掘り下げます。

数式の読み方(GAN)

一言で: GGG が 偽物を作り、DDD が 本物か偽物か を当てます。
min⁡Gmax⁡DV(D,G)=Ex∼pdata[log⁡D(x)]+Ez∼p(z)[log⁡(1−D(G(z)))]\min_G \max_D V(D,G)=\mathbb{E}_{x\sim p_{data}}[\log D(x)] + \mathbb{E}_{z\sim p(z)}[\log(1-D(G(z)))]minG​maxD​V(D,G)=Ex∼pdata​​[logD(x)]+Ez∼p(z)​[log(1−D(G(z)))]
GGG (生成器): ノイズ zzz から 新しい偽物サンプルを作ります。
DDD (識別器): 入力が 本物である確率を 0〜1 で出します。
min⁡Gmax⁡D\min_G \max_DminG​maxD​: GGG と DDD は 逆方向に有利なスコアを取ろうとします。だから 交互に学習します。
V(D,G)V(D,G)V(D,G): 両者が競う 目的関数の名前です。下の 左項と右項の和です。
Ex∼pdata[⋅]\mathbb{E}_{x\sim p_{data}}[\cdot]Ex∼pdata​​[⋅] (左項): 本物データ xxx を何度も引き、log⁡D(x)\log D(x)logD(x) の 平均です。本物で識別器を鍛えます。
log⁡D(x)\log D(x)logD(x): D(x)D(x)D(x) が 1 に近いほど大きくなります。本物 xxx に 「本物」と高い点数を付けたい意図です。
Ez∼p(z)[⋅]\mathbb{E}_{z\sim p(z)}[\cdot]Ez∼p(z)​[⋅] (右項): ノイズ zzz から G(z)G(z)G(z) を作り、log⁡(1−D(G(z)))\log(1-D(G(z)))log(1−D(G(z))) の 平均です。偽物の側です。
G(z)G(z)G(z): そのときの zzz で作った 偽物 1 枚です。
log⁡(1−D(G(z)))\log(1-D(G(z)))log(1−D(G(z))): 偽物を 偽物と見るほど (D(G(z))D(G(z))D(G(z)) が 0 に近いほど) 大きくなります。生成器は 識別器を騙すほど有利です。
D(x)D(x)D(x) まとめ: 入力が 0(偽)〜1(本) の 本物らしさです。
本物サンプルxランダムなノイズzG 生成器x̂D 識別器本物偽物競争 · 真偽判定・敵対的損失
要点: ノイズ zzz が生成器に入り、偽物サンプルを作り、識別器が真偽を競い合います。

GAN: 生成器と識別器

1. GAN の核心構造: 生成器と識別器の激しい対決
GAN は二つのネットワークが互いに勝とうとしながら成長する独特の構造です。生成器(GGG) は偽物を本物らしく作り、識別器(DDD) は真偽を鋭く判定します。
* 比喩: 贋作画家(生成器)と鑑定士(識別器)が互いの腕を磨き合う関係です。
2. ミニマックス(Minimax)ゲーム
核心の目的関数は次のとおりです。
min⁡Gmax⁡DV(D,G)=Ex[log⁡D(x)]+Ez[log⁡(1−D(G(z)))]\min_G \max_D V(D, G) = \mathbb{E}_{x}[\log D(x)] + \mathbb{E}_{z}[\log(1 - D(G(z)))]minG​maxD​V(D,G)=Ex​[logD(x)]+Ez​[log(1−D(G(z)))]
* 識別器(DDD)は最大化: 本物 xxx では D(x)→1D(x)\to 1D(x)→1、偽物 G(z)G(z)G(z) では D(G(z))→0D(G(z))\to 0D(G(z))→0。
* 生成器(GGG)は最小化: D(G(z))→1D(G(z))\to 1D(G(z))→1 になるよう偽物を作り、後項を小さくします。
3. 潜在ノイズ zzz
生成器への指示として渡す乱数ベクトルを 潜在ノイズ(zzz) と呼びます。
* 比喩: 粘土の塊の形が少し変わるだけで、仕上がりの表情や色が変わるイメージです。
4. モード崩壊(Mode Collapse)
生成器が多様性を失い、一度識別器を騙した一種類のサンプルだけを無限に複製する現象です。
* 比喩: キムチチゲだけで満点を取った店が、一年間メニューをそれだけにするようなものです。
5. 条件付き GAN(cGAN)
条件(yyy)—クラスやテキスト—を zzz と一緒に入れ、「猫を描いて」「スケッチを彩色して」など生成を制御します。

重要性

1. 生成型 AI の出発点
分類が「犬です」と答えるなら、GAN は 存在しない犬の絵を描く 側です。画像・音声など現代の生成革命の骨格です。
2. 鮮明でリアルなディテール
平均に寄るモデルと違い、厳しい識別器を通るため シャープ な質感を出しやすいです。
3. データ拡張
少数の雪の夜道写真から大量の合成データを作るなど、希少データを増やす技術として重要です。

使い方

ステップ1: 正規化と tanh
ピクセルを [−1,1][-1,1][−1,1] に揃えます。生成器が tanhtanhtanh で出力するなら、本物画像も同じ範囲に合わせます。
ステップ2: BCE とラベルスムージング
真偽の 二値クロスエントロピー(BCE) を使い、過信を抑える ラベルスムージング(例: 0.90.90.9)も有効です。
ステップ3: 交互学習
GGG と DDD を同時に強く更新しません。DDD を kkk 回、その後 GGG を更新するなど 交互 が基本です。
ステップ4: 安定化と FID
モード崩壊を目視確認し、FID で本物と偽物の分布の近さを評価します。

まとめ

一言まとめ: GAN は、ノイズ zzz から本物らしいサンプルを作る生成器と、それを見抜く識別器の競争です。
重要点: 安定性、バランス、多様性が性能を左右します。
次へ: 条件付きGANなどの拡張へ自然につながります。

解法のヒント

まずはこの一行だけ: 生成器 GGG がノイズ zzz で 偽物を作り、識別器 DDD が 本物 / 偽物を見分けます。先に 誰が作るか・誰が見分けるか を確認し、必要なら ミニマックス、交互更新、モード崩壊を足します。
数値が出たら: 展開長は (高さ)×(幅)(RGB なら ×3)、パッチ格子(CLS なし)は (H/p)×(W/p)(H/p)\times(W/p)(H/p)×(W/p)、全結合 1 層の重みはおおよそ din×doutd_{\mathrm{in}}\times d_{\mathrm{out}}din​×dout​ です。
例 (展開) — GAN グレースケール 28×2828\times2828×28 の ddd → 784

例 (パッチ格子) — 224×224224\times224224×224, パッチ 16×1616\times1616×16, CLS なし → 142=14^2=142= 196
例 (概念) — GAN の生成器の役割?
② ノイズ zzz から偽物生成 → 2

例 (計算) — RGB 32×3232\times3232×32 3 チャンネルの展開 ddd? → 3072

例 (応用) — 識別器が強すぎる?
① G/D 更新のバランス
定義 — モード崩壊はほぼ同じサンプルばかり出す現象。→ その説明を選ぶ

真偽 — 条件付き GAN はラベル・条件を使える。→ 1