NIPS 2016 Adversarial Training Workshop　体験記

去年参加したNIPS Adversarial Training Workshopについて書きます。
Advent Calendarに投稿するはずだったのですが忘れていました...すみません。

動画が全て上がっているので詳しく知りたい人はそれを見るといいと思います。
https://www.facebook.com/groups/675606912596390/

あとHuszarのBlogとかにももっといいまとめが上がっているのでそれもおすすめです。またGANは曖昧な部分が多かったり理解が甘くて、とんちんかんなことを書いていたりかもしれませんがそこは悪しからず。

## Adversarial Training Workshopとは

Generative Adversarial NetworksとAdversarial example関連 (virtual adversarial trainingとかも)についてのworkshopです。前者と後者は名前は似ていても結構違う気がしますが、基本的には前者、つまりGANの発表が多かったです。

Deep Generative Modelの研究で2015年がVAEの年だとしたら2016年はやはりGANの年だったのではないかなと個人的には思っています。やはりDCGANで画像が綺麗に生成できることが大きなブレークスルーだった気がします。Workshopも人は多くて人気でした。(Bayesian Deep Learningも凄い人気でしたが...) Lecunが講演するときは立ち見の人も出ていました。

WorkshopではMicrosoft、DeepMind、Googleの人とか、GANのbloggerで有名なHuszarとか会えて良かったです。

### GANとは?

GANの説明は色々な所にありますがとても分かりやすいtutorialとしてGoodfellowの説明があります。

http://www.iangoodfellow.com/slides/2016-12-04-NIPS.pdf

また論文としてはworkshopのホームページに載っている参考文献を読んどけば大体基本的なことは抑えられているはずです。

https://sites.google.com/site/nips2016adversarial/

また個人的にはHuszarのホームページはとても好きです。GANの話も多いです。Workshopの体験記も載っています。毎回とても面白いと思います。

http://www.inference.vc/my-summary-of-adversarial-training-nips-workshop/

### Workshopの講演内容

* Facebookの人の話:
GANのトレーニング手法について 最後にこれらはあくまでstop gap、つまり応急処置なのであまり盲信しないでねみたいなことを言っていました。下にまとまっています。

https://github.com/soumith/ganhacks

* Gastbyのカーネルグループ達によるMMDの話:
GMMNというMMDを最適化して分布を近づけるGANの亜種がTorontoのグループとCambridgeのグループによって提案されていて、カーネルガチ勢がそれをガチでやりましたという話です。(普通のganは分布の比を見てるけどMMDは分布の差を見てるという点でちょっと違います、でもGANと同様minimaxなformulationができます)

* Microsoftのグループのf-GANの話:
GANのロスをf divergenceの変分近似を使って拡張するという話です。下にスライド。

http://www.nowozin.net/sebastian/blog/nips-2016-generative-adversarial-training-workshop-talk.html

* Bi-GAN or ALIの話:
結構昔に出ていたので大分前の話に聞こえてしまいました。違う所が同じ時期に出したので一応どっちともがつけたアルゴリズムの名前が使われています。zからxだけではなくxからzの写像も学習しようよという話。

* Lecunの話: 
Energy BasedなGANとその動画の応用について。下にスライドがあります。

https://www.facebook.com/groups/675606912596390/

* 講演者のDiscussion:　
英語早くてあまり聞き取れなかったのですが、Lecunが圧倒的に喋っていた気がします。

### どういう話が最近GANだと多いのか？

去年、一気に研究が増えたので正直把握しきれていないのですが大体分けると次のような感じになると思います。(ちょくちょく重複している部分もあります)

* モデル拡張系の話

多分もっとあるのですがの下のツイートの画像が今までのモデルを大体網羅してる気がします。Info GANあたりまではモデルの拡張系の話は本質的に面白い気がします。

https://twitter.com/ch402/status/793535193835417601

* 評価系の話

GANの評価基準の話は今かなり混沌としています。
少なくとも去年のICLRでそれまで使われていたカーネル密度推定法による対数尤度評価をGANで使うことは否定されたので、最近使っている人はいないです。(それまではそれが主流だったはずです。)

GANはミニマックス問題でかつバッチ学習してるせいで少なくともトレーニングしているときのlossを見るだけでは学習が進んだが判断できません。つまり評価もできないということです。

最近は各自が勝手な評価をやっている印象があります。
何を持って評価とするかですが、汎用的な評価として使うならば生成された分布と元の分布の距離を測ることになるでしょう。
(勿論、目的が他にあれればその指標を使えばいいわけですが)
一応、例としてinception scoreを使った手法、色んな人に聞く、MMDを使った評価、annealed importance samplingを発展させたもの...などがあります。
個人的に前者二つを使うことはどうかなと思うのですが(というのも画像以外のタスクで使えないし、分布の距離を測るという目的から外れているので)、偉い人達が言っているので最初の指標は結構使っている人がいる気がします。

* GANのlossを使った応用系の話

セグメーテーション、圧縮した画像の復元、マルチモーダル画像の変換、セキュリティの話とか... 題名にGANが入っていなくてもGANのlossを使っている研究も多くあって、NIPS、ICLRだけではなく画像処理系の学会などにたくさん出ている気がします。正直、全然把握できていないです...

* 普通の機械学習タスクへの応用

半教師の分類とか教師なしクラスタリングとか一般的なタスクでもstate of the artを出しているはずです。2016年、2017年のICLR論文とか去年のNIPSとかでもちょくちょく見ました。

* GANのフォーミュレーション(ロス、モードを抜けたい)系の話

ここも評価同様、何が正しくて何が正しくないのか混沌としている気がします。GANの研究に貢献するという意味ではfundamaentalで重要なところなので今年のICLRとかにも論文が結構出ています。自分はb-GANというロス系の発表をしたのですが、この枠組みに入ります。

* ちょっと変わり種

強化学習との関連の話や、サンプリングしてくるべき元の分布の研究、離散にしたなどたくさんあると思います...

### 個人的な感想

GANが去年流行るのはDCGANが一昨年の最後にあったので凄い自然な流れだったとは思うのですが、今年はどうなるんでしょうか...　
自分達の上げたarxivの論文(??)がまだ正式に発表してすらないのに6回ぐらい引用されていて分野として狂気を感じざるをえない....早く成仏させたい。