WGANの論文読んでTensorflowで実装する その1

前回、間違えてUnrolledGANの論文を読んでしまった。
このWGANというのが本当は読もうと思った論文。正直UnrolledGANを先に読んでなかったらWGANの理解が深まらなかったと思う。読んでてよかった

という訳で論文はここからどうぞ

[1701.07875] Wasserstein GAN

あとコードも先に置いておく

github.com

WGANという名前が付いてるから、このWが重要になってくる。WはWassersteinの略。わずさーなのかわっさーなのか英語がカスなので読み方がわからん・・・

Wassersteinというのは論文ではEarth Mover (EM) distanceとも呼ばれる。distanceだから距離を表すもの。この距離をGANに使ったらいい感じになったってことなのか?と読み始めに思った。

今まで自分が読んだGANはどれも GeneratorとDiscriminatorの学習速度のバランスが悪いから何とかする、というのだった。両モデルにバッチ正規化層を追加したり、学習方法を変更したりとか、、

WGANはざっくりいうと、バランスを調整するためのバッチ正規化といったトリックを使う必要がなく、単なるMLPを用いたGANでもEarth Mover (EM) distanceを使うことで学習が崩壊せずに上手く行くぜってことが書いてある。

ス、スゲー!!!わずか論文3ページ目でこのインパクト・・・。続きが知りたくなるやんけ

それで何でEarth Mover (EM) distanceが出てくるんだよってなる。ここで生成モデリングについて考える。

f:id:Owatank:20180620145145p:plain

{ \displaystyle P_{r} }を「知りたい目的のデータの分布」とする。

{ \displaystyle P_g }をこの{ \displaystyle P_r }に近づける、もとい形状が似るようにしたい。どうするか・・・

{ \displaystyle P_g }がパラメータ{ \displaystyle \boldsymbol{\theta_g} }で作られているとしたら、{ \displaystyle \boldsymbol{\theta_g} }の値を変えてやれば形状が変わったり、軸 { \displaystyle a } も別のところに移動できるはず

じゃあパラメータの値を上げたり下げたりするとして、どっちの操作をすればいいのか。パラメータが3つの値から成ってたら、一つ目の値は今より小さくして、二つ目の値は今より大きくして、、という決定をどうすればいいかわからない。

今パラメータ{ \displaystyle \boldsymbol{\theta_g} }が持つ値を全て今より大きくしたとき、{ \displaystyle P_g }{ \displaystyle P_r }近づいているのか、遠のいているのか、その情報が得られれば、「パラメータを大きくしたら{ \displaystyle P_r }に遠のいたから下げよう」といったことができそうだ

近いってどう数値として表すか・・・シンプルだと
f:id:Owatank:20180620151857p:plain

関数 { \displaystyle f } と関数 { \displaystyle g } の二つがあったとして、この二つが近いとしたら { \displaystyle f } がとる値の± { \displaystyle \varepsilon } した範囲(赤の部分 { \displaystyle V_\varepsilon }{ \displaystyle \varepsilon }は小さい正の数)に関数{ \displaystyle g }のとる値が入っていれば、{ \displaystyle \varepsilon }が小さい値であるほど赤の範囲は狭くなるからより二つの関数が「近い」といえるはず。

| { \displaystyle f(x) - g(x) } | { \displaystyle < \varepsilon \ (\varepsilon}は小さい正の数)

{ \displaystyle x }がとる区間を指定してその区間で上が成り立てばいい

| { \displaystyle f(x) - g(x) } |みたいに距離を使えば二つの分布が似ているかどうかがわかりそうだ(∩^ω^∩)

だから EM距離を使うぜ といった話になるんだな。多分・・・

話は戻って、論文では EM距離がすごいんだぜーというのを説明するためにEM距離含めて分布が近いかどうかを教えてくれる距離を4つ紹介している

せっかくなので一つずつ見ていく

まず前提として { \displaystyle \chi } をコンパクトな集合とする。有界閉集合ならコンパクトだけど、コンパクトは後なんか被覆が云々で言えたような・・・
論文だと 例として [0,1] の閉区間とかーって書いてある。うん、、
{ \displaystyle Prob(\chi) }{ \displaystyle \chi }上での確率測度(probability measure)とする。{ \displaystyle Prob(\chi) }が確率測度といえるための条件満たしてるぜってことでいいかな

1. Total Variation (TV) distance

{ \displaystyle \delta (\mathbb{P_r}\ ,\ \mathbb{P_g})\ = \ \sup_{A \in \Sigma} |\mathbb{P_r}(A) - \mathbb{P_g}(A)| }

{ \displaystyle \Sigma }{ \displaystyle \chi }でのボレル集合とする、と書いてある。 え何それは・・・
話を聞いたら、 { \displaystyle \chi }という集合の中で、{ \displaystyle Prob(\chi) }でその値を知りたいもの全部を含めた集合ってことでいいらしい。

その認識で考えれば、絶対値の差をとってるし、sup(上限)を選べってあるから

f:id:Owatank:20180620161837p:plain


こんな感じかな。(図ではボレル集合を一つの範囲でしか取らなかったけど)

確率の値での差を取るから、もし二つの分布が一致してたらTV距離は最大で0、一致してなかったら最大で1を取るから、 この距離は小さい方が近いってことを表してくれるのか。

2. The Kullback-Leibler (KL) divergence

{ \displaystyle KL (\mathbb{P_r}\ ||\ \mathbb{P_g})\ = \int log (\frac{P_r (x)}{P_g (x)})P_r (x) d \mu (x) }

KLダイバージェンスについては解説の記事が沢山あるから省くけど、{ \displaystyle P_r }{ \displaystyle P_g }が似てると、logの部分は log1 になってく、つまり 0に近づいていくので距離としては値が小さいほど二つが似ていることになる。分母の{ \displaystyle P_g }が 0 をとったらその・・・計算できないというか・・possibly infiniteと書いてあった。

ダイバージェンスという単語は電話レンジが云々のアニメで知ってた。
でも「距離」の紹介なのに「ダイバージェンス」っておかしくね?って思うんですが、距離 { \displaystyle d }

  1. { \displaystyle d(x,y) \geqq 0 }
  2. { \displaystyle d(x,y) = d(y,x) }
  3. { \displaystyle d(x,y) \leqq d(x,z) + d(z,y) }

この3つの条件を満たしていれば{ \displaystyle d }を距離と(正確には{ \displaystyle d(x,y)}をxとyの距離)いえる世の中のルールらしい
ダイバージェンスは二つ目を満たしてないから距離とは言えないとか
ところで距離の公理を初めて知った時、三角不等式が点列の収束を調べるときに使うものと知ったんですが、高校時代ナニコレ?と思ってたものがすげー役割を持ってたって思うと興奮した

3. Jensen-Shannon (JS) divergence

{ \displaystyle JS (\mathbb{P}_r\ ,\ \mathbb{P}_g)\ = KL (\mathbb{P}_r \ ||\ \mathbb{P}_m ) + KL (\mathbb{P}_g \ ||\ \mathbb{P}_m ) }
{ \displaystyle \mathbb{P}_m = \frac{\mathbb{P}_r + \mathbb{P}_g }{2} }

ジェンセ・・イェンセン・・論文でも他3つの距離と比べて説明少ないんだけど、{ \displaystyle P_m }の分母が2になってるから無限大になるのは回避できそう?

4. Earth-Mover (EM) distance or Wassterstein-1

{ \displaystyle W(\mathbb{P}_r\ ,\ \mathbb{P}_g) = \inf_{\gamma \in \Pi (\mathbb{P}_r\ ,\ \mathbb{P}_g)} \mathbb{E}_{(x,y) \sim \gamma} [ || x\ - \ y || ] }

これが今回の主役のEM距離だけど、式がむずそう
まず、 { \displaystyle \Pi ( \mathbb{P}_r \ ,\  \mathbb{P_g} ) }は同時分布{ \displaystyle \gamma(x,y) }の集合を表すそうだ

論文ではどうやらtranspoted、日本語だと輸送がうんぬんと言っている。これも話を聞いてみたら
f:id:Owatank:20180620173817p:plain
二つの分布をそれぞれ四角のブロックの集まりで表す。
{ \displaystyle P_g }がもつブロックを、{ \displaystyle P_r }の方に移すとする。{ \displaystyle P_r }と重なっていないブロックを移していけば、いつかは{ \displaystyle P_r }と同じ形になる

ここで移し方には、初期の分布の設定にもよるけど、沢山のパターンがあると思う。
ブロックを移すにも時間がかかる。EM距離は求めたい時の分布の位置状態で、ブロックの移す時間が一番少ない、最小コストの値を二つの分布の「近さ」として与えてくれる。

{ \displaystyle P_g }の右端にあるブロックを{ \displaystyle P_r }の左端の方に移したら、移すのにめっちゃ時間がかかってもったいない。

つまりブロックの輸送を開始する時点で、二つの分布が似ていれば、もともとブロックの移すコストも少なくなるはずだろってことか。発想がすげえ・・・

地味にこのEM距離はコンパクトな集合においてだけ使えるといったものじゃなくて、コンパクトじゃない集合においても使えるらしい。その時不思議な結果が出るとか何とか・・・

論文ではこの4つの距離を紹介したあと、この4つの距離を使ってシンプルな{ \displaystyle P_r } ([0,1]の一様分布 )を{ \displaystyle P_g }で近づけていく実験をしてた。
結果としては EM距離は以外は、二つの分布がぴったり重なる時と重ならない時で値が TV距離だと 1と0、 JSダイバージェンスだとlog2と0、といったように極端な結果を出していた。

論文の実験図だとこんなん

f:id:Owatank:20180620180633p:plain

左がEM距離の値、右がJSダイバージェンスの値
{ \displaystyle P_g }のパラメータ{ \displaystyle \theta }を0に近づけていくのがゴールで、EM距離はパラメータ{ \displaystyle \theta }が0に近づいていくほど、徐々に小さくなっていくのに対して、右のJSダイバージェンスでは、{ \displaystyle \theta }=0以外では { \displaystyle log2 }の値を取り続ける。

よくスイカ割りするじゃないですか。目隠しして歩いてスイカにたどり着くとして、1歩歩くごとにその地点からゴールまでの距離を教えてくれる人が

「ゴール以外は全部{ \displaystyle log2 }と教えてくれる人」と、「ゴールからあと{ \displaystyle K }メートル(ゴールに近くほどKが小さい)と教えてくれる人」だったらどっちのが嬉しいっていったら自分は後者。スイカ割りしたことないけど

きっと生成モデリングにおいても、{ \displaystyle \theta }がある「距離」が小さくなる方向に収束していくにつれて、{ \displaystyle \theta }から作られる{ \displaystyle P_g }が目的の分布{ \displaystyle P_r }に近づいていけるなら、それが嬉しいパラメータの修正の仕方なんだろう

だからEM距離はすごいんだぜー というのがわかったけど、どうやら上のEM距離の定義式のまんまGANの目的関数として使うのは厳しいらしい。ええ・・・
長くなったので分ける

この論文読む前に志賀浩二先生の「位相への30講」を読んでいなかったらほぼ即死だった・・・

でもこの論文で「測度」の公理なり、ちょいちょい見ていた「加法族」の意味なり知ることができてよかった(∩^ω^∩)
測度論はフーリエか何かの勉強で「オイラーの公式が成り立つことを詳しく知るには「測度論」について調べることをオススメする」みたいな文章があって単語だけ覚えてたんだけど、こんなとこで会うとは思わなんだ・・・
ちょいちょい意味が繋がるのは嬉しい