Networksの紹介この記事をご覧の皆様、初めまして。クロスコンパスの芦原です。今回、弊社でのリサーチ部門での調査結果のごく一部ですが、記事として外部に書いていくことになりました。記事を書くので、その時それなりに新しく、何かしら読者の方が身になるものを書いていこうと思っています。Networks」という題名の、DeepMind社から投稿された論文について解説していきたいと思います。Encoder(以後VAE)をうまくつなげていく手法の提案」ということになると思います。そこで、この論文を解説する為に・GAN(大まかな仕組みと陥りやすい問題点)・VAE(大まかな仕組みと陥りやすい問題点)これらの2本の柱を紹介した上で、今回の手法について述べていこうと思います。今回の論文の解説を読んでもらえたらと思います。・GAN(大まかな仕組みと陥りやすい問題点)についてですが、GANは2014年に、Goodfellowらが著した[1]がGANの元祖とされています。[1]の内容からGANの大まかな仕組みを説明する為に、大雑把な図を書いていきますとこんな絵になります。Generatorは、作ったデータをDiscriminatorが実際のデータセットから来たデータだと間違えるように、実際のデータセットらしいデータを作成するように学習し、Discriminatorは、それに騙されないように実際のデータセットとGeneratorから作られたデータかを判別できるように学習するということになります。くだけて短くまとめれば「Generatorは作ったデータが本物(実際のデータセットのデータ)であるかのような画像を作って、Discriminatorを騙そうとし、Discriminatorは騙されないようにする」と書いても差し支えないでしょう。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]、私も当時感動した覚えがありました。Normalization[4]の貢献は大きく、この手法も広く認知されるきっかけになったとも感じています。夥しい数のGANがあるなという印象です。zooの中身をピックアップするのは話が逸れるのでやめておきます。ここまででGANの仕組みについて一定の理解が得られたことを期待して、このGANの学習中に度々起こる問題について言及したいと思います。collapse」と呼ばれる現象があります。日本語として言うならば、modeは最頻値のことで、学習するにつれて、生成する分布が最頻値に寄っていってしまう現象と考えることができます。目標通り分布を推定できている上側に対し、下側は一点に近いところで集中してしまっています。このような現象が起きてしまうと、Generatorが作る画像がどの位置からサンプルしても同じような画像を作ってしまうことが起きたりします。GAN[6]などがありますが、今回はその論文の解説は省略いたします。いくつか日本語版の記事も上がっているので、そちらを見てみるといいかもしれません。続いては・VAE(大まかな仕組みと陥りやすい問題点)に関してです。これについては、AutoEncoder(以後AE)の解説がブログ、SlideShare等で大量に出回っているため、そちらを見ていただけたらと思います。VAEは、Kingmaらの[7]が、説明も丁寧でわかりやすい論文です。VAEでは、簡単な図は以下のような形になります。VAEの仕組みについて理解されている方だと何となくこの図で、やっていることがわかるかもしれませんが、AEの知識だけでVAEについてはあまり知らない場合、なぜEncoderの出力が二手に分かれているのか理解できないかもしれません。このモデルはどのように学習していくのか、についての流れを説明したいと思います。サンプリングされたデータそのものを復元するようにEncoderとDecoderを学習し、Encoderは復元の為の学習に加えて、仮定した事前分布に近くなるよう学習するという形になります。「データセットのデータにあらかじめ低次元な分布が存在することを仮定している」という点があるのかなと思いますが、結局のところ「通常のAEの復元誤差に加えて、潜在変数zを特定の分布になるように学習する」ということだと理解してもらえると、実装は案外簡単にできます。仮定した事前分布に近くなる制限も加えるということになります。この時、ネットワークが学習する上で重要な式はとなります。この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に関して大雑把に紹介してきました。collapse」の問題が起こることがあるところ・VAEでは複雑なデータセットを用いると画像がぼやけるところを挙げました。今回紹介するDeepMindの論文では、双方を組み合わせつつ、双方の問題点が起きないような方法を提案しています。Networks」について解説していきます。α-GANは以下のような形をしています。※図はhttps://arxiv.org/pdf/1706.04987.pdfより引用ポイントポイントで解説していきます。大まかにわけたポイントは以下の通りです。trickの導入について解説します。VAEのEncode部分について考える時、KLダイバージェンスを計算することになりますが、このKLダイバージェンスの計算は、潜在分布をガウス分布と仮定して、Encodeされた分布と、ガウス分布との距離(数学的な距離ではない)を計算するものでした。ratioの考え方を導入します。ratioとは上記の式の考え方で、二つの確率分布を分母分子に据えて書きますが、確率密度をratio化するという考え方です(上の式の左から二番目の式)。上の式の一番右のような式のように、とある事象とその余事象で計算できる場合は、上記のように簡単な形に変形することができます。ここでのDΦはDiscriminatorがGeneratorからきたデータか、実際のデータセットからサンプルされたデータなのか計算していると考えるといいと思います。ratioの考え方を使います。Encodeされた潜在変数zか、仮定された潜在空間からサンプリングされたzかをclassificationする関数Cωとして考えることによって、上の式のような近似を行っています。実際に、classificationによってKLダイバージェンスの計算を近似している例は、Makhzaniらの[8]でも使われたりしています。choiceの導入の考え方を解説します。これは簡単に言えば、Generatorがデータを作成する際に、どこからきた潜在変数zを使うかによって、誤差の算出に使用する関数を選ぶ方式です。Lossのλ倍としてみることができます。実際のデータからのサンプルxを、EncoderによってEncodeした後の潜在変数zを、Generatorに入れて作成したデータgθ(z)に関する誤差として使用することができ、右側の式は、潜在空間からサンプリングされたzをGeneratorに入れて作成したデータgθ(z)をDiscriminatorによってリアルデータか生成されたデータか判別する誤差であり、この記事の前半で説明したGANの方式と同じです。choiceによって、モデルはAEとしての再現誤差と、GANとしての誤差を学習に取り入れていることになります。ここまでの二つのテクニックが説明されれば、モデルの図をもう一度見返した時に、どのような構造になっているかなんとなくわかってきていると思います。choiceであり、この二つのポイントから目標となる関数が導き出されます。functionとなるわけですが、解説した二つのポイントの式が羅列された形なので、数式の内容については問題ないと思います。ここまでの解説によって、α-GANの大まかな仕組みがわかったと思います。α-GAN(提案手法)の順ですが、たしかに綺麗な画像は作れている印象はありました。他の手法もかなり綺麗です。InterviewWantedly検索:日本語English。