Generative Adversarial Nets 【GAN】
こんにちは。
今回は、2014年に発表された画像生成技術のGenerative Adversarial Nets(GAN)について簡単にまとめていきたいと思います。
以下の落合先生のフォーマットがいい感じなのでこちらに沿ってまとめていきます。
lafrenze.hatenablog.com
http://lafrenze.hatenablog.com/entry/2015/08/04/120205
これはどんなものか?
Generative Adversarial Nets(以下GAN) は2014年にIan J. Goodfellowによって考案された効率的に生成モデルを推定することができる新しいフレームワークである。
訓練データと生成データの分布が一致していくように学習していく。訓練データ(真の分布)に近い分布を求めていく。
先行研究と比べてどこがすごい?
先行研究
- Boltzmann machines (RBMs)
- Markov chain Monte Carlo (MCMC)
- …etc
- マルコフ連鎖が必要なく、勾配を計算する際にバックプロパゲーションのみが使用されること、学習中に推論が不要になり様々な関数をモデルに組み込むことが可能
- マルコフ連鎖に基づく方法では分布が不鮮明である必要があるが、このネットワークは非常にシャープで縮退した分布をも表すことが可能
マルコフ連鎖についてはまだ勉強していないのでこの辺りは割愛します。ほぼ直訳。
要は、この敵対性ネットワークを用いることで簡単に多くの拡張ができるようになった
技術や手法のポイントはどこ?
2つのモデルDiscriminatorとGeneratorを同時に敵対的に学習させる。
Discriminator
- DiscriminatorはGeneratorモデルから生成されたものか、訓練データのものかを判定することで学習
Generator
- GeneratorはDiscriminatorに偽物だとばれないように学習する。Discriminatorが間違えるようにする、訓練データの分布と生成データの分布が一致するように学習。
この論文内ではDiscriminatorとGeneratorは多層パーセプトロンで構成されており、2つのモデルの学習は誤差逆伝播法(back propagation)とドロップアウトが用いられているようです。生成モデルからのサンプルのみ順方向伝搬(forward propagation)を使用。
最終的には訓練データと生成データが見分けられなくなるまで学習するのでDiscriminatorの正解率が50%になる。
これを数式化していきます。GANの目的関数
: 期待値
訓練データ(本物)がDiscriminatorに入力されたとき
Discriminatorに訓練データが入力された際の出力
生成データ(偽物)がDiscriminatorに入力されたとき
Generatorにノイズzを入力して生成した画像
Discriminatorに生成データが入力された際の出力
Discriminatorの学習
Discriminatorの理想は訓練データが来たら1、生成データが来たら0を出力
訓練データがDiscriminatorに入力されたときにD(x)=1を出力できれば、右辺の第1項
]は最大化できる。
生成データがDiscriminatorに入力されたときにD(x)=0を出力できれば、右辺の第2項
]は最大化できる。
これを表しているのが左辺のです。Gからの生成データと訓練データの2つを正しく判定できる確率を最大化するようにDを学習するわけです。
Generatorの学習
Generatorの理想はDiscriminatorが入力された生成画像に対して1を出力(偽物画像の画像と判定)
右辺第1項は訓練画像がDiscriminatorに入力されたときの評価のため、Generatorには直接関係しないため無視する。
右辺第2項においてを出力すれば右辺第2項を最小化できます。
これを表しているのが左辺にあるです。
よって、DiscriminatorとGeneratorをこのように敵対的に学習させるということでGenerative Adversarial Netという名前がついてます。
どうやって有効だと検証した?
論文ではMNIST,TFD, CIFAR10のデータセットの画像を生成してその有効性を示しています。黄色い枠で囲われているのが訓練データで、そのほかが生成データです。
議論はある?
- この手法は高次元空間ではうまく機能しない
- DiscriminatorとGeneratorの学習をうまく同期させなくていけない
- Generatorの分布に明示的な表現がない
- Generatorが生み出す画像に多様性があまりない(モード崩壊)
次に読むべき論文は?
DiscriminatorとGeneratorに畳み込み層を用いたDCGANなどのGANの発展形を読むのが妥当かなと思います。
最後に参考にした記事を載せます。目的関数についてわかりやすく書いてあります。
qiita.com