面白いデータを探して

適当に書く。間違えていたら教えてください。

Adversarial Learningってなんだ

最近ホットらしいけどよくわからないAdversarial Learning(日本語だと「敵対的学習」とか「敵対性学習」とか呼ばれるらしい)についてわかったことをまとめる。 今回はGAN[1]について。 最適化手法、パラメータのアップデートなんかについては後日追記予定。

Ganerative Adversarial Nets(GAN)とは

たくさんの画像サンプルを与えると、自動で似た画像を作ってくれるよというもの。 この論文を超有名にした理由は、提案したGeneratorとDiscriminatorという2つのネットワークを使った新しいアーキテクチャが、既存の画像生成モデルと比較してもかなりの精度を持っているから。 GANを発展させたモデルとして, 日々新しいモデルが発表され続けており、画像生成だけではなく自然言語処理ビッグデータ解析にまで応用されているすごいやつ。 論文の著者はlan Goodfellow (Deep Learningという超有名な本の著者)。

GANのアーキテクチャの概要

f:id:netres:20180619093531p:plain
GANのアーキテクチャ

小難しい数式の前に簡単にアーキテクチャの概要から。

GANのアーキテクチャは2つのニューラルネットワークを持っている。 1つはGenerator、もう2つはDiscriminator。 Generatorはノイズ(何らかの分布に従う乱数)を入力として、そこから画像を生成するネットワーク。 Discriminatorは画像を入力として、それが本物の写真なのか、Generatorが生成した偽物の画像なのかを判別するネットワーク。 GeneratorはDiscriminatorをだまそうとするするように学習し、Discriminatorは画像を正しく判別するように学習する。 そうすると、Generatorが本物の写真と遜色ない写真を出せるようになるというもの。

目的関数

Generatorについて、Generatorへある分布p_z(z)からサンプリングしたノイズzを入力したとき、出力される画像をG(z)と表す。 また、Discriminatorについてある画像xが入力されたときの出力(xが本物である確率)をD(x)と表す。 このとき、GAN全体の目的関数は次のようになる。

 \displaystyle \min_G \max_D V(D, G) = \mathbb{E}_{x \sim p_{data}(x)} [\log D(x)] + \mathbb{E}_{z \sim p_z(z)} [\log ( 1- D(G(z)))]

 V(D, G)の第1項はDiscriminatorが本物の写真を正しく判断できているか、第2項はDiscriminatorがGeneratorから来た画像を正しく判断できているかを表している。 したがって、Discriminatorはこの値を大きく、Generatorはこの値を小さくしようとする。

このようなmin-max gameを行うことでGANは本物の画像に近い画像を生成できるようになる。

値の更新

f:id:netres:20180619094005p:plain

上がGANの学習アルゴリズム。 上半分でDiscriminatorの更新を、下半分でGeneratorの更新を行っている。

生成した画像

mnistを学習した場合の画像生成例。 かなりそれっぽい画像が生成できている。

f:id:netres:20180617201511p:plain

参考

[1] Goodfellow, Ian, et al. "Generative adversarial nets." Advances in neural information processing systems. 2014.

その他

記事の内容にミスなどありましたら, 教えていただけると助かります。 6/19 誤っていた画像差し替え、値の更新について追記