Pixel Recurrent Neural Networkを読んでみた

目次

初めに

大学院の研究室の論文読み会で、Pixel Recurrent Neural Networksという論文を読みました。 ICML2016のBest paper3本の内の一本で、WavenetVideo Pixel Networkの開発に影響を及ぼしたみたいなことが書いてあったので興味を持ちました。 

要約

内容はというと、最近流行りの画像生成系のお話です。

問題設定としては、自然画像を生成する様な分布を、人間に理解しやすく、大規模化が容易なモデルで学習したい。 手法としては、2次元画像のピクセルを逐次的にDeep Neural Networkで対数尤度を最大化する形式で学習するものとなっています。

この論文の貢献は、並列化しやすく、軽い自己回帰モデルを提案したこと。 そして、その手法を用いることによって、MNIST、CIFAR-10、ImageNetというデータセットにおいてこれまでのState of the artと比べて極めて高い対数尤度を達成したことだそうです。
目次に戻る

予測例

実際に学習させたモデルで、occlusionを書けた画像を入力し、隠れている部分を生成させた例が以下の通りです。
 
確かに、いい感じに補完されているかもしれない(笑)
わんちゃんが謎の生命体になっている気配がありますが。 
目次に戻る

学習の定式化

ちなみに、ここで言う対数尤度は、観測されたデータから見て、モデルがどれだけ尤もらしいかという意味での「尤度」の対数を取ったものとなっています。
 画像の対数尤度 = 各ピクセルの対数尤度の和
なので、各ピクセルにおける対数尤度を最大化するようにDeep Neural Networkを学習します。
目次に戻る

提案手法

 このためのDeep Neural Networkとして、この論文はPixel CNN, Pixel RNN(Row LSTM), Pixel RNN(Diagonal BiLSTM)を提案しています。
 今回は、2次元画像のピクセルを逐次的に処理するので、その時点で既に与えられている文脈という条件において、次のピクセルの条件付き確率を求めます。
モデルいずれも、左上の方から右に行き、端まで行ったら1つ下の段の左端に行き...という流れで走査する(その順にインデックスを付けるとする。)のですが、  提案モデル間では、この”文脈が”異なります。

3つの提案手法

頭の中で、左から下に画像を生成していくことを考えると、i番目のピクセルを生成する際にはi-1個の文脈を条件として考え、次のピクセルを予測します。
しかし、そうすると可変長の入力を処理する必要が出てきます。 それは手間がかかるということで、

 1. 近似的に予測するピクセルの近傍の固定長の文脈のみを条件として考えたものがPixel CNN。

 可変長の入力に対処するが、
 2. 全ての文脈を処理すると手間がかかりすぎる場合もあるということで、予測するピクセルの上部に有るものだけを条件として考えるのが、Pixel RNN(Row LSTM)。
3. そして、すべての文脈を考慮に入れたものが、Pixel RNN(Diagonal BiLSTM)となっています。

各ネットワークは、ConvolutionalユニットやConvolutional LSTMユニットを何層(15層ぐらい重ねてるみたいです)も重ねたFully Convolutionalな構造を持っています。すなわち、入力の空間情報を保持した形の特徴マップをもっています。そして、計算を効率的にするために、文脈として考慮しない部分の結合は省いているそうです。
目次に戻る

出力の工夫

そして、出力層は回帰かと思いきや、256クラスの多クラス分類として解いているそうです。
そうすることによって、
・画像がぼやけるなどの問題を回避できる
・分布が多峰性である場合もうまく表現できる
・0~255までのみを予測させることが出来る などの嬉しいことがあるそうです。

傍から見ると、順序関係を考慮に入れないクラス分類は情報をかなり捨てている様に思いますが、それ以上に多峰性を表現出来る利点が勝っているということなのでしょうか。 確か、ICMLのこの論文に対するレビューでもこの多峰性を上手く表現できている部分が評価されていました。
実際の出力層の様子を表現した図が以下の様になります。



なめらかな分布で、多峰性をいい感じに表現できていますね。
目次に戻る

実験結果

 最後に実験です。

MNIST, CIFAR-10(50000枚), Image Net(1,280,000枚)でそれぞれ学習を行ったそうです。 ※ImageNetは32x32や64x64にDownScaleしたものを用いたそうです。

負対数尤度は、以下の通りだそうで、先行手法に比べてかなり下がっていることが分かります。

 

 以下が、実行例です。 まず、CIFAR-10
 
 ImageNet(32x32)

 ImageNet(64x64 multiscale)
   

このmultiscaleというのは、直接64x64の画像を学習させると大域的な特徴が取れなくなってしまったことから、まず32x32を学習させて、生成させた画像を文脈として用いた上で予測させたものらしいです。

たしかに、64x64 multiscaleを見てみると、蝶とか鳥とかそれっぽいものが見える...!
目次に戻る

まとめ

 まとめると、自己回帰モデルに基づいた、画像生成アルゴリズムを並列化しやすいアルゴリズムで提案した。対数尤度でState of the artを達成。先行手法で今画像生成系では一番いい感じの画像を生成するとされるGANと同レベルに匹敵する画像を生成できた。一方、GANは定量評価が難しい一方、今回の手法は定量化が容易。しかし、この手法はピクセルごとの予測なので、実行速度が遅くなるはず。


また、今回の論文の理解に際し、PFNの得居さんのスライドを参考にさせて頂きました。
詳細まで言及されておる他、非常に分かりやすいです。

目次に戻る

5 件のコメント :

  1. この分野には全く精通していない者で恐縮ですが、質問させてください。
    最後の実験のことに関して疑問があります。この実験は、データセットの画像を学習して新しい画像を生成している実験だと解釈したのですが、それは「あるピクセルの値をその周囲のピクセルから予測して画像生成を行う」という前半部分のやっていることどう関係があるのですか??
    前半部分では、半分切れている画像の切れている部分の画像を生成してましたが、最後の実験では一から画像を生成しているようなので、どういうことかなと思いました。
    質問の説明があまり上手でなく申し訳ないですが、ぜひご回答よろしくお願いします。

    返信削除
  2. すいません、追加で質問させてください。
    ①実験の結果の負対数尤度について、まずなぜ「負」とついているのですか?
    ②また先行手法より下がっていると述べられていますが、先行手法は表中のDBMやDBN、DLGMなどの指しているのでしょうか??
    ③負対数尤度は低い方がパフォーマンスが良いのですか?
    初歩的な質問だと思いますが、よろしくお願いします!

    返信削除
  3. コメントありがとうございます。
    以下返信です。

    1. 仰るようにこれは データセットの画像を学習して新しい画像を生成している研究です。その際の学習のさせかたが、周囲のピクセルから逐次的にピクセル単位で予測を行っています。新しい画像を生成する際は、周囲のピクセルが決定されていない初期状態において、周囲のピクセルにランダムに値を割り振っていたはずです。そうすると、画像生成と、欠損した画像の補完が同じ枠組みで解けることは合理的であるかと思います。
    2. 負の対数尤度については、対数尤度は必ず負になるので、正の値にするためにマイナスをとってあげて負の対数尤度を評価指標としてもちいることも一般的であるように思います。
    3. そうですね。MNISTでは全てにおいて提案手法が勝っているわけではないですが、そのつもりで言及しています。MNISTとCIFAR-10を比べると、MNISTよりCIFAR-10のほうが複雑で難しいデータ・セットであり、MNISTでの性能を検証しているのは、先行手法と比較するためで、参考程度に見ていただければといった感じだと思います。
    4. 尤度は大きい方が良いので、マイナスをかけた負の対数尤度はその逆で小さいほうがよいですね

    返信削除
    返信
    1. ご回答ありがとうございます!!
      非常にわかりやすく、丁寧にお答えいただきありがとうございます。
      また、その日のうちの素早い返信に感動しました!

      削除