GANってなんや
GAN => 敵対的生成ネットワーク
敵対的、とあるように2つの異[なった役割のネットワークが競い合う。
よく説明で使われるのは警察と偽札を作ろうとする偽造者の例。
警察は特定の紙幣を調べ、本物か偽札かを判別する。 偽造者は本物とそっくりな偽札を作ろうとする。
警察の偽札を見分ける能力があがるー>偽造者はより本物に近い偽札を作らないといけない
偽造者がより本物に近い偽札を作るー>警察は偽札を見分ける能力を高めなければいけない
というわけで、2つのネットワークがどんどん強くなっていく。 最終的には、ほぼ本物と見分けが付かない偽札を生成しないといけなくなる。。
先の例で言う警察の役割をするネットワークがDiscriminator、偽造者の役割をするネットワークがGeneratorと呼ばれる。 Generatorが訓練データと同じようなデータを生成しようとし、Discriminatorが渡されたデータが訓練データから来たものか、偽造されたものかを判別する。
図で表すとこんな感じ。
Generatorへの入力はRandom Noise。 RandomNoiseからのマッピングを学習して、偽画像を精巧にしていく。
原論文は 1406.2661 Generative Adversarial Networks
原論文には以下の図で学習の過程が示されている。
(1406.2661 Generative Adversarial Networks 3P 中段の図)
青線がDiscriminatorの判別関数 黒い点が訓練画像の分布。緑の画像が生成画像の分布。
(a) 最初は、訓練画像の分布と生成画像の分布は大きく異なる。 そして、Discriminatorもはっきりとした判別を出来ていない状態。
(b) Discriminatorを学習させる。 そうすると、Discriminatorは生成画像と訓練画像をはっきりと判別できるようになる
(c) Generatorがマッピングを学習していくと、生成される画像は訓練画像に近づく。
(d) 分布が等しくなると、Discriminatorは区別ができなくなる(訓練画像、生成画像どちらを渡しても出力値が0.5になる)
という過程を経て学習が進んでいく、という図。
DCGANってなんや
GeneratorとDiscriminatorの実装を畳み込みニューラルネットワークにしたもの。 複雑な画像でも学習しやすくなった。
Conditional GANってなんや
GANでは入力にランダムノイズを入れるため、生成される画像を任意のものにすることはできなかった。 そこでラベルと一緒に学習させる事で、ラベルによって生成される画像のパターンを制御する。