JKになりたい

何か書きたいことを書きます。主にWeb方面の技術系記事が多いかも。

DCGANで遊んだメモ(1)

GANってなんや

GAN => 敵対的生成ネットワーク

敵対的、とあるように2つの異[なった役割のネットワークが競い合う。

よく説明で使われるのは警察と偽札を作ろうとする偽造者の例。

警察は特定の紙幣を調べ、本物か偽札かを判別する。 偽造者は本物とそっくりな偽札を作ろうとする。

警察の偽札を見分ける能力があがるー>偽造者はより本物に近い偽札を作らないといけない

偽造者がより本物に近い偽札を作るー>警察は偽札を見分ける能力を高めなければいけない

というわけで、2つのネットワークがどんどん強くなっていく。 最終的には、ほぼ本物と見分けが付かない偽札を生成しないといけなくなる。。

先の例で言う警察の役割をするネットワークがDiscriminator、偽造者の役割をするネットワークがGeneratorと呼ばれる。 Generatorが訓練データと同じようなデータを生成しようとし、Discriminatorが渡されたデータが訓練データから来たものか、偽造されたものかを判別する。

図で表すとこんな感じ。

Generatorへの入力はRandom Noise。 RandomNoiseからのマッピングを学習して、偽画像を精巧にしていく。

f:id:sakata_harumi:20180506221651p:plain

原論文は 1406.2661 Generative Adversarial Networks

原論文には以下の図で学習の過程が示されている。

f:id:sakata_harumi:20180506221649p:plain1406.2661 Generative Adversarial Networks 3P 中段の図)

青線がDiscriminatorの判別関数 黒い点が訓練画像の分布。緑の画像が生成画像の分布。

(a) 最初は、訓練画像の分布と生成画像の分布は大きく異なる。 そして、Discriminatorもはっきりとした判別を出来ていない状態。

(b) Discriminatorを学習させる。 そうすると、Discriminatorは生成画像と訓練画像をはっきりと判別できるようになる

(c) Generatorがマッピングを学習していくと、生成される画像は訓練画像に近づく。

(d) 分布が等しくなると、Discriminatorは区別ができなくなる(訓練画像、生成画像どちらを渡しても出力値が0.5になる)

という過程を経て学習が進んでいく、という図。

DCGANってなんや

GeneratorとDiscriminatorの実装を畳み込みニューラルネットワークにしたもの。 複雑な画像でも学習しやすくなった。

Conditional GANってなんや

GANでは入力にランダムノイズを入れるため、生成される画像を任意のものにすることはできなかった。 そこでラベルと一緒に学習させる事で、ラベルによって生成される画像のパターンを制御する。