GAN (Generative Adversarial Networks)

  • ひとことでいうと、未知の画像を生成するモデル。
  • 学習方法DとGの二人プレイの、Minimaxアルゴリズム
  • なので、Generaive Adversarial

ネットワーク構造

  • G:Generator
    • 例えるなら、偽札を作る悪人
  • D:Discriminator
    • 例えるなら、偽札を暴きたい警察
  • z:ノイズベクトル
    • 例えるなら、偽札の原料
  • x:本物のデータ (学習データ)
    • 例えるなら、本物の札束
  • G(z):Generatorが生成した偽のデータ
    • 例えるなら、偽札
  • m: ミニバッチサイズ

モデル

  • Generator: 画像を生成するモデル
    • あるノイズから画像を生成する
      • Generatorは、入力されたノイズベクトルzから本物のデータxの確率分布に近い偽データG(z)を生成できるよう学習する。
      • Generatorが本物のデータxと全く同じ確率分布の偽データを生成できれば、Discriminatorを完全に騙すことができるわけだが、それではxと同一のデータしか生成できないGeneratorになってしまう。
      • GANでは学習データに存在しないデータを生成するのが目的となるので、Generatorには学習データと同質の新しいデータを生成する生成過程を学習させる。
    • 入力: ノイズ
    • 出力: 画像
  • Discriminator: 画像が機械で生成されたか判定するモデル
    • いわゆる分類問題を解く
      • 本物であれば1を出力し、偽物であれば0を出力する二値分類
    • 入力: 画像
    • 出力: 器械で生成されたかどうかの分類

損失関数

Generator

  • 完全にGeneratorがDiscriminatorを騙すことができれば、 $D(G(z))$ は全て1になるので、
  • $log(1-1) = log(0)$ となり、損失はマイナス無限大まで小さくなる
  • 他方、GeneratorがDiscriminatorを騙せなければ、 $D(G(z))$ は全て0になるので、
  • $log(1-0) = log(1)$ となり、損失は大きくなる(0に近づく)

Discriminator

  • 本物のデータxをDiscriminatorで識別した誤差と、偽データG(z)を識別した誤差の和

目的関数

  • GeneratorとDiscriminatorの2つの損失関数を合わせて、

  • GAN全体の学習目標として目的関数に定式化すると以下のようになる↓

    • 左の項は本物データの確率分布 $P_data$ に従うXのサンプルを使った期待値
    • 右の項はノイズのデータの確率分布 $P$ に従うZのサンプルを使った期待値
    • Dは見分けたいのでMAXを、Gは欺きたいのでMINを引数にとる
  • V: value function

  • D and G play the following two-player minimax game

わかりやすい解説

学習の推移

  • 青の破線: D(x)
  • 緑の線:
  • 下の黒線: x = G(z)の写像

TODO:

探索アルゴリズム

  • Minimax法
  • αβ法

REFERENCES:

  • https://qiita.com/hakubisin104/items/64662d19fa7ae41a87aa
  • https://blog.negativemind.com/2019/06/22/generative-adversarial-networks/
  • https://www.slideshare.net/KCSKeioComputerSocie/large-scale-gan-training-for-high-fidelity-natural
  • https://www.webcyou.com/?p=6997