DRAGANでいらすとや画像を生成してみる

“How to train your DRAGAN"というタイトルの論文で、 変なタイトルだなぁ..と思っていたが、 このタイトルの元ネタとして、アメリカの3DCGアニメがあるのを知った。
(日本名はヒックとドラゴンというらしい。この名前も初耳)

www.youtube.com

このDRAGANを使って以下のようないらすとや画像を生成したというのが本記事の主旨。
この生成画像は非常に綺麗。

f:id:yusuke_ujitoko:20170602003311p:plain

この記事自体はお蔵入り予定だったが,
本日リリースされたchainerのGANライブラリの中に,
決して有名でないDRAGANが入っていて驚き,
この記事を公開する意味もなくはないか,と気持ちを改め,
これを機に成仏させることにした.

この論文の概要

  • GANでは目的関数がnon-convexなので局所的なナッシュ均衡点に到達してしまい失敗する →non-convexぽくないようにすればよい。
  • DRAGANを提案
    • 訓練データの周りの領域においてのみ,勾配に制約をかけることで上記の問題を緩和
    • 実験により有効性を実証

以下で論文の内容をサクッと紹介する。
前回あまりにもそのまま書き下してしまったので省略気味に。

提案手法(ざっくり)

  • 最近ではリプシッツ性の制約を加えたGANが提案されている
    • LS-GAN(weight decayにより制約をかける)
    • WGAN(weight clippingにより制約をかける)
    • WGAN-gp(gradient penaltyにより制約をかける)

でもこの制約は厳しすぎて,Generatorの表現力を抑えてしまう.
そこで、Dの目的関数にペナルティ項として, {\lambda \mathbb{E} \mathbb{E} (|| \nabla_{x} D_{\theta}(x + \delta) -1 ||_{2} -1)^{2} }を加える。

これにより,訓練データ近くのデータに限り、勾配がほぼ1に近づく. 勾配を1に近づけることにより、Dの目的関数を線形に近づけて、鞍点を減らすことを目的にしている。 ホントかどうかわからないが、実験によればmode collpseが減ったのでうまく行く方法である、という主張が書いてある。

提案アルゴリズムの実装

この論文では理論の説明の前に、DRAGAN実装の説明が来ていた。
DRAGANのアルゴリズムは以下のようなもの。
f:id:yusuke_ujitoko:20170530000517p:plain

Vanilla GANとの大きな違いはDiscriminatorの更新方法である。
Dの目的関数に注目すると,目的関数にはペナルティ項が加わっている。
この項の効果は,
訓練データの周りの局所領域のみ の勾配をなるべく1に近づけるというもの.

その他のポイントとしては以下のようなものがある.

  • ノイズ入り訓練データのミニバッチを作る際には、C=0.5とした以下の式を使う. f:id:yusuke_ujitoko:20170530002648p:plain:h20
  • OptimizerにはAdamを用いる。
    また、{\lambda}は10とする。
  • BatchNormalizationを使っていない。
    BatchNormalizationを施すとミニバッチ内のサンプル同士を関連付けてしまうことになり、
    局所的な制約をつけるという方針に影響を与えてしまう。これを避けたい。

DRAGANによる画像生成

MNIST画像

まずはMNIST画像を試した。 G:2層MLP、D:2層MLPという構成のもと行った。

f:id:yusuke_ujitoko:20170602000649p:plain f:id:yusuke_ujitoko:20170602000724g:plain f:id:yusuke_ujitoko:20170602000859p:plain

いらすとや画像生成(MLPベース;上と同じ構造)

f:id:yusuke_ujitoko:20170602001350p:plain

f:id:yusuke_ujitoko:20170602001433p:plain

いらすとや画像生成(DCGANベース)

f:id:yusuke_ujitoko:20170602003311p:plain f:id:yusuke_ujitoko:20170602003343g:plain f:id:yusuke_ujitoko:20170602003643p:plain