ココアのお勉強ブログ

技術職の一般人です。趣味でコード書いたりソフト触ったり。

Generative Adversarial Nets(GAN)についてまとめた

GANについて落合フォーマットというものを利用してまとめました。

論文 : https://arxiv.org/pdf/1406.2661.pdf

 

どんなもの?

Generative Adversarial Nets(GAN)は2014年にIan Goodfellowによって考案され効率的に生成モデルを訓練させるためのモデリング手法。

訓練データを学習してそれらのデータと同じような新しいデータを生成するモデルを生成モデルと呼ぶ。

言い換えると訓練データの分布と生成データの分布が一致するように学習していくようなモデル。

・目標としては真の分布と近いモデル分布を求める。

f:id:hotcocoastudy:20190224042726p:plain

GANの目標(画像はhttps://www.slideshare.net/masa_s/gan-83975514より)

 

先行研究と比べてどこがすごい?

先行研究として以下が挙げられます。

制限付きボルツマンマシン(RBM)やディープボルツマンマシン(DBM)はマルコフ連鎖モンテカルロ法によって推定するがこの量と勾配はすべての場合について扱いにくい。また、計算コストも高い。

論文には(おそらく)登場しないが生成モデルとしては以下のものもある。

math-eng.com

  • 変文オートエンコーダ(VAE)

qiita.com

hotcocoastudy.hatenablog.jp

自己回帰モデルの学習が遅い問題と変分オートエンコーダの輪郭がぼやけやすい問題をカバーできる。

f:id:hotcocoastudy:20190224035908p:plain

生成モデルの種類(画像はhttps://www.slideshare.net/KCSKeioComputerSocie/large-scale-gan-training-for-high-fidelity-natural?qid=90eac717-f0ea-4985-a199-11a725747176&v=&b=&from_search=3より)

 

技術や手法のキモはどこ?

GANではGeneratorDiscriminatorの2つのネットワークがある。

Generatorは訓練データと同じようなデータを生成しようとする。

Discriminatorはデータが訓練データから来たものか、それとも生成モデルから来たものかを識別する。

最終的には、Generatorは訓練データと同じようなデータを生成できるようになることが期待される。

このような状態では、訓練データと生成データを見分けることができなくなるため、discriminatorの正答率は50%になる。

f:id:hotcocoastudy:20190224053813p:plain

GANの概念図

この論文ではGeneratorもDiscriminatorもどちらも基本的には多層パーセプトロンで、ドロップアウトを使って学習させている。

VAEでは確率分布を定義して生成モデルを考えてあるが、GANでは暗黙的な生成モデルとして考える。ただし尤度を測れなくなるので以下の密度比を使う。

f:id:hotcocoastudy:20190224042440p:plain

モデルの分布と新の分布の密度比

次に数式を見る。

  • G : Generator
  • D : Discriminator
  • x : 訓練データ
  • z : ノイズ

とする。

Gはノイズzを入力としてデータを生成する。

f:id:hotcocoastudy:20190224043427p:plain

Generator(画像はhttps://www.slideshare.net/masa_s/gan-83975514より)

D(x)は、そのデータが訓練データである確率を表す。確率なのでスカラー

Dは訓練データと生成データに対して正しくラベル付けを行う確率を最大化しようとする。

 

Gを学習するための目的関数は

f:id:hotcocoastudy:20190224043750p:plain

Gを学習するための目的関数

よってGはpdataとpgのJS距離を近づけるため、この目的関数を最小化するように学習する。

適切なGが得られないと最適なDは学習できないため目的関数を交互に最適化することを考える。

f:id:hotcocoastudy:20190224044106p:plain

目的関数を交互に最適化(画像はhttps://www.slideshare.net/masa_s/gan-83975514より)

まとめると以下のようになる。

f:id:hotcocoastudy:20190224043550p:plain

GANの目的関数(画像はhttps://www.slideshare.net/KCSKeioComputerSocie/large-scale-gan-training-for-high-fidelity-natural?qid=90eac717-f0ea-4985-a199-11a725747176&v=&b=&from_search=3より)

このような枠組みで学習する生成モデルをGANsと呼ぶ。

GeneratorとDiscriminatorの関係は紙幣の偽造者と警察の関係によく例えられる。偽造者は本物の紙幣とできるだけ似ている偽造紙幣を造る。警察は本物の紙幣と偽造紙幣を見分けようとする。

偽装者はできるだけ本物の紙幣に近い偽装紙幣を作り出すことで、警察の目を騙そうとするし、逆に警察も目利きスキルを上げてより本物の紙幣か偽物の紙幣かを見抜こうとする。

GANではGeneratorはできるだけ本物(オリジナル)に近い画像を生成し、Discriminatorはそれが本物の画像か否かを判定するような構造になっている。Generative Adversarial Nets(GAN)が敵対生成ネットワークという呼び名になっているのも、この競い合いのことを言っている

 

論文ではDをkステップ更新してGを更新する(ただしk=1とする場合が多い)と書かれている。

f:id:hotcocoastudy:20190224044716p:plain

論文一部抜粋

 

どうやって有効だと検証した?

Goodfellow et al.の実験結果を見てみる。

黄色い枠で囲まれている画像は訓練データで、それ以外は生成された画像。

訓練データによく似た画像を生成できている様子が分かる。

f:id:hotcocoastudy:20190224045400p:plain

論文より一部引用

 

議論はある?

論文では主に明示的なpg(x)の表現がないことと、トレーニング中にDとGをうまく同期させる必要があること(Dを更新せずにGを過度にトレーニングしてはいけない)と書いてある。

 

またネットを調べるとGANには

  • 収束性
  • Mode collapse
  • 勾配消失

の問題があるらしい(これらの問題は互いに関係している)。

f:id:hotcocoastudy:20190224050430p:plain

GANの収束性について(画像はhttps://www.slideshare.net/masa_s/gan-83975514より)

なので学習が不安定で高解像度を生成することが難しい。CNNを利用しても高解像度生成は難しいとのこと。

 

次に読むべき論文は?

大体どのサイト、どの参考書を読んでもGANを説明したらDeep Convolutional GAN(DCGAN)みたいな流れだったので次に読むべきはDCGANの論文かなと思った。

https://arxiv.org/pdf/1511.06434.pdf

f:id:hotcocoastudy:20190224050902p:plain

DCGAN(画像はhttps://www.slideshare.net/masa_s/gan-83975514より)

 

参考/引用サイト

https://arxiv.org/pdf/1406.2661.pdf

www.slideshare.net

www.slideshare.net

elix-tech.github.io

qiita.com

36.hateblo.jp

qiita.com

qiita.com

Chainerで作るコンテンツ自動生成AIプログラミング入門