Shikata Ga Nai

Private? There is no such things.

第62回|GANの構成:ジェネレータとディスクリミネータ

Hello there, ('ω')ノ

🎭 GANの主役は「G」と「D」

名称 役割 イメージ例
Generator(G) データを「生成」する側 詐欺師:うその画像を本物っぽく作る
Discriminator(D) 本物かどうか「判定」する側 鑑定士:本物と偽物を見分けようとする

この2人が競い合うことで、生成された画像の“クオリティ”がどんどん高まっていきます。


🧱 ジェネレータのしくみ(G:Generator)

ランダムなノイズから、それらしい画像を“ゼロから”作るAI

💡 入力:

  • z と呼ばれるランダムなベクトル(たとえば100個のランダムな数値)

🛠 処理内容:

  • この z をニューラルネットワークに通し、画像の形に変換します
  • よく使われるのは「転置畳み込み(Deconvolution)」と呼ばれる層構成 → 小さなノイズを、段階的に画像のサイズに引き伸ばしていきます

🎨 出力:

  • たとえば 28x28 の手書き数字画像(MNIST)や 256x256 の顔写真など

📌 Gはまだ正解を知らない状態で、“なんとなく”それっぽい画像を生成します。最初はデタラメです。


🔍 ディスクリミネータのしくみ(D:Discriminator)

入力された画像が「本物か偽物か」を見分けるAI (学習時には“正解ラベル”も与えられます)

💡 入力:

  • 本物の画像(訓練用データ)
  • Gが作った偽物の画像

🛠 処理内容:

  • 畳み込みニューラルネットワーク(CNN)を使って画像の特徴を抽出
  • その画像が「本物かどうか」を確率として出力(0〜1)

🧪 出力:

  • 1.0 に近い → 本物と判断
  • 0.0 に近い → 偽物と判断

📌 Dは、最初は精度が低いですが、Gの巧妙な画像に何度も騙されながら鍛えられます。


🔁 学習サイクル:GとDのせめぎ合い

  1. G:ノイズから画像を生成する
  2. D:本物と偽物を見分ける
  3. 損失関数をもとに、両者のネットワークを調整(誤差逆伝播)
  4. 再びGが新しい画像を生成
  5. Dがさらに賢くなる

このループを数千〜数万回繰り返すことで、画像がどんどんリアルになっていきます。


📉 損失関数の考え方(ざっくり)

  • Gの目的:Dを騙すこと → 偽物を「本物だ」と思わせたい
  • Dの目的:本物と偽物を正しく見分けたい

この「対立関係」=ゲーム理論のような構図が、GANのユニークな点です。


🏗 構成の例(シンプルなDCGAN)

Generatorの構造例(PyTorch風):

nn.Sequential(
    nn.Linear(100, 256),
    nn.ReLU(),
    nn.Linear(256, 784),
    nn.Tanh()
)

(出力サイズ:28×28画像の784ピクセル)

Discriminatorの構造例:

nn.Sequential(
    nn.Linear(784, 256),
    nn.LeakyReLU(0.2),
    nn.Linear(256, 1),
    nn.Sigmoid()
)

このように、GとDはそれぞれ異なる「ゴール」と「学習対象」を持っています。


🎯 なぜこの仕組みが画像生成に強いの?

  • 画像生成という複雑な問題を、敵対する2つの小さな問題に分けられる → 「作る」「判定する」に分業できる
  • 人間の“批評されて上達する”プロセスに近い
  • 「見たことがないのに、本物っぽい」画像が作れる(創造性がある)

✅ まとめ:GANは2人のAIが勝負して成長する!

✅ Generator(G)は画像を作る側、Discriminator(D)は見抜く側

✅ ランダムノイズを「それっぽい画像」に変換するのがGの役目

✅ 本物画像と偽物画像を判定するのがDの役目

✅ 2つのAIが競争することで、より高品質な生成が実現する

Best regards, (^^ゞ