MADE: Masked Autoencoder for Distribution Estimationを読んだのでメモ
はじめに
MADE: Masked Autoencoder for Distribution Estimationを読んだのでメモ.flow-basedな生成モデルが面白かったのでその一種であるautoregressive flowも勉強したいと思いとりあえず読んで見た.
お気持ち
この論文ではAutoregressive models(自己回帰モデル)の計算コスト問題に着目している.自己回帰モデルは数式的に扱いやすい形でテストデータに対して正確にを計算することが可能だが1ピクセルずつ生成していくためニューラルネット以上に計算コストがかかる場合がある.そこでAutoencoder(自己符号化器)を使ってシンプルな形で記述したいというのがこの論文の気持ち.
Masked Autoencoders
ここでは次元の2値データを考える.そのような場合に,基本的な自己符号化器の目的関数を考えると以下のようなクロスエントロピーで表される.
ただし,は再構成されたデータ.自己符号化器の問題点は隠れ層の次元が入力の次元以上になると,データのコピーが起こり完璧に再構成してしまうということ.これはデータ分布を捉えることができていないことを意味しており,上記の対数尤度関数が正確でないことを意味する.すなわち上記の関数を用いて自己符号化器で分布を推定することはできないことを意味している.
そこでここでは自己符号化器に分布を推定する能力を持たせることを考える.そこでまずはデータ分布を以下の形で記述する.
ただし,.ここで元々のクロスエントロピーに代入すると,
となる.これはの推定結果がのみに依存すれば自己符号化器がデータの分布を表現することができることを意味している.ちなみに上記のような,前の系列から現在の状態を推定していくようなモデルを自己回帰モデルという.
次に上記のような自己回帰性を持った自己符号化器の構成方法考える.とにかく注意するのはがと関係を持たないようにすること.すなわち推定結果との間にcomputational path(いい日本語が思いつかなかった)を持たないようにする.そうするために,自己符号化器の重みをマスクしてそのようなコネクションの重みを0にしてしまおうというのがアイディア.式で記述すると,
となる.はencoderとdecoderを重み行列で,はバイアス項.はReLU等の活性化関数とsigmoid関数を表す.また,今回のアイディアの中心であるはマスクを表す. 自己回帰性を満たす自己符号化器を作るために,まず隠れ層における各ユニットに1からD-1までの整数値を割り振り,層目の各ユニットが接続可能な入力のユニット数を(つまりを満たす最大の整数)とする.この時,の関係から各重みに対するマスクは以下で与えらえる.
要は現在参照しているユニットの最大接続数が入力のユニットに割り振られた番号より大きければ1を,それ以外は0を持つようなマスクを作りますということ.最大接続数が系列におけるインデックスに相当する,すなわちとなっているため,自己回帰の要請を満たすようなマスクになっていることがわかる.(論文ではdecodeする際のにおける定式化も書いているが基本は同じなので割愛.)
マスクはグラフ理論における隣接行列と同じ性質を持つため,のように行列積を取ればは入力から出力までのパスの数を表すことになる.このを用いれば自己回帰の要請を満たしているかが確認可能で,もしならとなっている必要がある.なので,行列積をように書き下してやれば, と表される.そのため,ならばとを同時に満たすことはないため自己回帰の要請を満たしていることが証明される.
このマスクを使った自己符号化器は各ユニットにを与えてやるだけで構成可能で,この論文における実験では1からD-1までの値を一様にサンプリングすることで決めたらしい.また,自然に多層構造にも拡張ができる(論文にはちゃんと立式してあるがくどくなるので割愛.マスクの条件文をl層とl-1層目での比較に置き換えるのみ).
まとめ
マスク次第でかなり性能にばらつきが出そうだけどうどうだろうか.実験読めば書いてあるかもしれないけど今後何かに使うわけではないので今回はスルーでいいやという感じ.