Variational Approaches for Auto-Encoding Generative Adversarial Networksの紹介

この記事をご覧の皆様、初めまして。

私のことを知っている方も、初めまして。

クロスコンパス・インテリジェンスの芦原です。

今回、弊社でのリサーチ部門での調査結果のごく一部ですが、記事として外部に書いていくことになりました。

せっかく記事を書くので、その時それなりに新しく、何かしら読者の方が身になるものを書いていこうと思っています。

今回ですが、arxivには2017年6月15日に公開された、
「Variational Approaches for Auto-Encoding Generative Adversarial Networks」
という題名の、DeepMind社から投稿された論文について解説していきたいと思います。

この論文の目指すところをまず述べておくと
「Generative Adversarial Nets(以後GAN)と、
Variational Auto Encoder(以後VAE)をうまくつなげていく手法の提案」
ということになると思います。そこで、この論文を解説する為に
・GAN(大まかな仕組みと陥りやすい問題点)
・VAE(大まかな仕組みと陥りやすい問題点)
これらの2本の柱を紹介した上で、今回の手法について述べていこうと思います。
GANとVAEについてご存知の方は、サクサク読み飛ばしていただき、
今回の論文の解説を読んでもらえたらと思います。

まず
・GAN(大まかな仕組みと陥りやすい問題点)
についてですが、GANは2014年に、Goodfellowらが著した[1]がGANの元祖とされています。
[1]の内容からGANの大まかな仕組みを説明する為に、大雑把な図を書いていきますと

こんな絵になります。このモデルがどのように学習していくのか、ということを説明していきますと
⑴ zと名付けられた空間から、Generatorはデータを作成する
(2) Discriminatorは、Generatorから作られたデータか、実際のデータセットから来たデータかを判別する
⑶ Generatorは、作ったデータをDiscriminatorが実際のデータセットから来たデータだと間違えるように、実際のデータセットらしいデータを作成するように学習し、Discriminatorは、それに騙されないように実際のデータセットとGeneratorから作られたデータかを判別できるように学習する

ということになります。もう少しくだけて短くまとめれば

「Generatorは作ったデータが本物(実際のデータセットのデータ)であるかのような画像を作って、
Discriminatorを騙そうとし、Discriminatorは騙されないようにする」

と書いても差し支えないでしょう。そしてこれを数式の表現に持っていけるように、
さっきの言葉の一部を書き換えますと

⑴ 空間z からサンプルされたベクトルがGenerator(関数G)を通じて、Generatorから作られたデータG(z)が作られる
⑵ Discriminator(関数D)は、実際のデータセットからのサンプルxなのか、
Generatorから作られたデータG(z)なのかを判別する、具体的には、D(x)=1となるように、D(G(z))=0となるようにする(この1や0の数字が違う例もある)
(3) GeneratorがDiscriminatorを騙すように、DiscriminatorはGeneratorに騙されないように学習する。

具体的には、以下の式のような関係性になります。

上記の数式の青線部分は、Discriminatorが実際のデータセットからのサンプルxを受け取った時に、
D(x)=1となるように、オレンジ線部分は、DiscriminatorがGeneratorの作ったデータG(z)を受け取った時に、D(G(z))=0となるように、G(z)はD(G(z))=1にさせるように、学習していくことを目指すという式になります。

ではさっきのモデル図をここまで出てきた変数と照らし合わせてみますと

こんな感じになります。
GeneratorとDiscriminatorにどんなNetworkを使えば良いか、という問題についてはかなり自由度が高いですが、このGANがブームになる形を作ったのは、個人的にはRadfordらの著した[2]の貢献が大きいと感じています。彼らは、GeneratorとDiscriminatorにそれぞれ、DeconvolutionとConvolutionのモデルを用い、64×64サイズで、Generatorが部屋の間取り画像や、人の顔の画像を作る結果を示しまして、この論文の中身を踏襲したコードが日本語のブログと共にすぐに公開され[3]、私も当時感動した覚えがありました。

また、その時にIoffeらが著した手法のBatch Normalization[4]の貢献は大きく、この手法も広く認知されるきっかけになったとも感じています。

その後、2017年6月現在までにも、GANについては様々な工夫が凝らされた論文が発表され、
それらをまとめた hindupuravinash のGAN zoo (GANの動物園・・・)[5] なんてものも出ていて、
正直夥しい数のGANがあるなという印象です。今回はそのGAN zooの中身をピックアップするのは
話が逸れるのでやめておきます。

さて、ここまででGANの仕組みについて一定の理解が得られたことを期待して、このGANの学習中に度々起こる問題について言及したいと思います。とりあえずパラメータチューニングが大変なことは挙げられますが、他に大きな問題として、「mode collapse」と呼ばれる現象があります。日本語として言うならば、modeは最頻値のことで、学習するにつれて、生成する分布が最頻値に寄っていってしまう現象と考えることができます。

※ 図はhttp://jaejunyoo.blogspot.com/2017/02/unrolled-generative-adversarial-network-1.htmlより引用

正しく目標通り分布を推定できている上側に対し、下側は一点に近いところで集中してしまっています。このような現象が起きてしまうと、Generatorが作る画像がどの位置からサンプルしても同じような画像を作ってしまうことが起きたりします。これを解決する手法がGANのなかでもWasserstain GAN[6]などがありますが、今回はその論文の解説は省略いたします。いくつか日本語版の記事も上がっているので、そちらを見てみるといいかもしれません。

さて、続いては
・VAE(大まかな仕組みと陥りやすい問題点)
に関してです。これについては、AutoEncoder(以後AE)の解説がブログ、SlideShare等で大量に出回っているため、そちらを見ていただけたらと思います。
VAEは、Kingmaらの[7]が、説明も丁寧でわかりやすい論文です。
VAEでは、簡単な図は以下のような形になります。

VAEの仕組みについて理解されている方だと何となくこの図で、やっていることがわかるかもしれませんが、AEの知識だけでVAEについてはあまり知らない場合、なぜEncoderの出力が二手に分かれているのか
理解できないかもしれません。

このモデルはどのように学習していくのか、についての流れを説明したいと思います。
⑴ データセットからデータをサンプリングしてEncoderに入力する
⑵ Encoderは出力次元(多次元)に相当する潜在分布の平均と分散を出力する
⑶ 潜在分布の平均と分散から、潜在変数zをサンプリングし、zを作る
⑷ 潜在変数zをDecoderに入力し、Decoderはデータを出力する
⑸ サンプリングされたデータそのものを復元するようにEncoderとDecoderを学習し、
Encoderは復元の為の学習に加えて、仮定した事前分布に近くなるよう学習する

という形になります。VAEの方が複雑に感じるのは、
「データセットのデータにあらかじめ低次元な分布が存在することを仮定している」
という点があるのかなと思いますが、結局のところ
「通常のAEの復元誤差に加えて、潜在変数zを特定の分布になるように学習する」
ということだと理解してもらえると、実装は案外簡単にできます。

これをもう少し数式にもっていきやすい言葉に変えていきますと
⑴ データセットから(i)番目のデータx(i)をサンプリングする
⑵ Encoderは潜在分布の平均μと分散σを出力する
⑶ μとσから、zをサンプリングする
⑷ zをDecoderに入力し、Decoderはデータx(i)を復元する
⑸ x(i) を復元できるよう、Encoder と Decoder を学習する
ただし Encoder は、仮定した事前分布に近くなる制限も加える

ということになります。この時、ネットワークが学習する上で重要な式は

となります。このLを最小化することが目標になっています。さて、この式に合わせてさっきのVAEの図を書き換えてみますと

このような図になります。上記の式と照らし合わせると、Encodeする部分でqとpの分布の距離(数学的な距離ではない)が近くなるような青部分の式と、qで作られた潜在変数をDecodeしたデータとx(i)の誤差がオレンジ部分に対応しているのがわかると思います。Encoderが平均と分散を出力するのは、この青部分のKLダイバージェンスの計算が、ガウス分布を仮定した時に、平均と分散のみで計算できるところから来ているのだと考えることができます。

結局のところ、VAEでは、AEとは異なり、中間層の空間を特定の分布にする要素が入っていることになります。

このVAEですが、例えば画像のデータセットを使って行った場合などに、サイズの小さい単純な画像ならまだしも、顔の画像や、風景や、複雑な画像データを用いると、Decodeした画像がぼやけた画像になる現象に陥りやすいです。

※図はhttp://torch.ch/blog/2015/11/13/gan.htmlより引用

Qiitaの記事などでも、VAEよりGANの方がエントリが多いのは、おそらくVAEよりGANの方が画像が綺麗に作ることができているからなのかとも感じます。

さて、ここまでGANとVAEに関して大雑把に紹介してきました。
それぞれの問題点は、

・GANでは「mode collapse」の問題が起こることがあるところ
・VAEでは複雑なデータセットを用いると画像がぼやけるところ

を挙げました。
今回紹介するDeepMindの論文では、双方を組み合わせつつ、双方の問題点が起きないような方法を提案しています。

前置きが長くなりましたが、DeepMindの論文である、
「Variational Approaches for Auto-Encoding Generative Adversarial Networks」
について解説していきます。

今回の論文で提案されたモデル α-GANは以下のような形をしています。

※図はhttps://arxiv.org/pdf/1706.04987.pdfより引用

ポイントポイントで解説していきます。
大まかにわけたポイントは以下の通りです。
・Implicit Variational Distributionsにdensity ratio trickの導入
・Likelihood choiceの導入
まず、
・Implicit Variational Distributionsにdensity ratio trickの導入
について解説します。
VAEのEncode部分について考える時、KLダイバージェンスを計算することになりますが、
このKLダイバージェンスの計算は、潜在分布をガウス分布と仮定して、Encodeされた分布と、
ガウス分布との距離(数学的な距離ではない)を計算するものでした。そのKLダイバージェンスの考え方に、density ratioの考え方を導入します。

density ratioとは上記の式の考え方で、二つの確率分布を分母分子に据えて書きますが、確率密度をratio化するという考え方です(上の式の左から二番目の式)。上の式の一番右のような式のように、とある事象とその余事象で計算できる場合は、上記のように簡単な形に変形することができます。ここでのDΦはDiscriminatorがGeneratorからきたデータか、実際のデータセットからサンプルされたデータなのか計算していると考えるといいと思います。

つまり、VAEで考えるKLダイバージェンスに、このdensity ratioの考え方を使います。Encodeされた潜在変数zか、仮定された潜在空間からサンプリングされたzかをclassificationする関数Cωとして考えることによって、上の式のような近似を行っています。実際に、classificationによってKLダイバージェンスの計算を近似している例は、Makhzaniらの[8]でも使われたりしています。

次に
・Likelihood choiceの導入
の考え方を解説します。
これは簡単に言えば、Generatorがデータを作成する際に、どこからきた潜在変数zを使うかによって、誤差の算出に使用する関数を選ぶ方式です。

上の式の左側は、L1ノルムのLossとして考えることができるので、これはAEのReconstraction Lossのλ倍としてみることができます。実際のデータからのサンプルxを、EncoderによってEncodeした後の潜在変数zを、Generatorに入れて作成したデータgθ(z)に関する誤差として使用することができ、右側の式は、潜在空間からサンプリングされたzをGeneratorに入れて作成したデータgθ(z)をDiscriminatorによってリアルデータか生成されたデータか判別する誤差であり、この記事の前半で説明したGANの方式と同じです。

つまり、このLikelihood choiceによって、モデルはAEとしての再現誤差と、GANとしての誤差を学習に取り入れていることになります。

ここまでの二つのテクニックが説明されれば、モデルの図をもう一度見返した時に、どのような構造になっているかなんとなくわかってきていると思います。

ここでのCωが最初のポイントであるdensity ratioを導入したKLダイバージェンスの近似部分
L1とDΦが、二つ目のポイントであるLikelihood choiceであり、この二つのポイントから目標となる関数が導き出されます。

この式が目標となるLoss functionとなるわけですが、解説した二つのポイントの式が羅列された形なので、数式の内容については問題ないと思います。

ここまでの解説によって、α-GANの大まかな仕組みがわかったと思います。実際、論文内での実験結果を見ると、

左から順に、DCGAN[2], WGAN[6], AGE[9], α-GAN(提案手法)の順ですが、たしかに綺麗な画像は作れている印象はありました。しかし、他の手法もかなり綺麗です。(拡大してみてみても、正直私には凄まじい違いがあるとは見えませんでした・・・)

いかかでしたでしょうか。
この記事に関するフィードバックは、私のfacebookアカウントか、メールアドレスにご連絡いただけますと幸いです。
https://www.facebook.com/yuta.ashihara.3
y.ashi@xcompass.com

基本的に、これから書いていくブログは、
・一つの論文を、大体の内容がつかめるようなレベルで解説していく
・いくつかの論文をとあるテーマにそって何本か紹介する
の2通りの記事を書いていこうと思います。

また、弊社では、このように、新しい論文を読みながら、知識として蓄えていきながら、
知識のアウトプットを行っていく方を募集しています。
https://www.wantedly.com/projects/105313
特に、文系理系は問わず、論文を読み、調査する力も含めて付けていけると思いますので、
ぜひご応募ください。

また、弊社では中途採用も積極的に行っております。
https://www.wantedly.com/projects/103913
皆様のご応募お待ちしております。

参考文献・URL

[1]I. Goodfellow, J. Pouget-Abadie, M. Mirza, B. Xu, D. Warde-Farley, S. Ozair, A. Courville, and Y. Bengio. Generative adversarial nets. InAdvances in Neural Information Processing Systems,pages 2672–2680, 2014.
[2]A. Radford, L. Metz, and S. Chintala. Unsupervised representation learning with deep convolu-tional generative adversarial networks.arXiv preprint arXiv:1511.06434, 2015.
[3]https://github.com/mattya/chainer-DCGAN
[4]S. Ioffe and C.Szegedy. Batch Normalization: Accelerating Deep Network Training by ReducingInternal Covariate Shift. arXiv preprint arXiv:1502.03167, 2015.
[5]https://github.com/hindupuravinash/the-gan-zoo
[6]M. Arjovsky, S. Chintala, and L. Bottou. Wasserstein GAN.arXiv preprint arXiv:1701.07875,2017.
[7]P. Kingma and M.Welling. Auto-Encoding Variational Bayes. arXiv preprint arXiv:1312.6114, 2014.
[8]A. Makhzani, J. Shlens, N. Jaitly, I. Goodfellow, and B. Frey. Adversarial autoencoders.arXiv preprint arXiv:1511.05644, 2015.
[9]D. Ulyanov, A. Vedaldi and V. Lempitsky. It Takes (Only) Two:Adversarial Generator-Encoder Networks. arXiv preprint arXiv:1704.02304, 2017
[10]M.Rosca, B.Lakshminarayanan, D. Warde-Farley and S.Mohamed. Variational Approaches for Auto-Encoding Generative Adversarial Networks. arXiv preprint arXiv:1706.04987, 2017