Improved Variational Inference with Inverse Autoregressive Flowを読んだのでメモ
はじめに
Improved Variational Inference with Inverse Autoregressive Flowを読んだのでメモ.
変分推定
論文に章立ててあるのと復習も含め何度も書くことが重要かなということでおさらい.
観測変数を,潜在変数をとし,同時分布をとする.データセットが与えられた時,以下の周辺尤度の最大化をしたいというのが目標.
一般的には上のような周辺尤度は解析的に計算困難な場合が多い.そこで解決策の一つとしてで表される推論モデルと呼ばれるものを導入し,変分下限を最適化することが考えられる.すなわちある観測に対し以下の周辺対数尤度の変分下限を最適化する.
はに関するモデルパラメータを表す.さらに式変形を行えば,
として書き換えることができる.この式を最適化する方法は数多く存在していて,VAEのreparameterizationなどはその一例.ここで注意としては,一般的に潜在変数が多変数のモデルにおいてはのように分解できることを仮定としておく.
変分下界を最適化する上で必要な性質としては(1)が効率的に計算できること(2)そこから効率的にサンプリングできることの二つがあげられる.例えば,が高次元の場合,効率的に計算するために並列計算できることが望ましく,実践的にはを等方性のガウス分布などに制限することが多い.ただし,は真の分布に一致できるような柔軟性が必要でもある.
flow
散々勉強したけど今一度.flowは前述したように計算効率と分布の柔軟性を兼ね備えたを得る方法で,変数変換を何度も用いることで単純な分布を複雑な形にしようというもの.つまり初期の分布を球面ガウス分布などで考えて,のように変数変換を行っていくというもの.この時変数変換された確率密度は公式によって以下の形で与えられる.
flowの問題点の一つとして変数変換の関数に強い制約があることがあげられる.
Inverse Autoregressive Transformations
この論文では自己回帰モデルのガウス版を変数変換に使ったflowを考える.
今自己回帰モデルにおける変数をとし,ガウス分布のパラメータをと表す.自己回帰の構造から,の時にはに依存関係がないためが成り立つ.(これはヤコビアンが三角行列になることを意味している).
上記のようなモデルからサンプリングを行うには,とすればreparameterizationにより,としてサンプリングすることができる.ただし,基本的に変分推論においては事後分布からのサンプリングが必要となるため上記のサンプリングが効率に行えたところであまり嬉しさはない.ここで嬉しいのは逆変換がとして記述が可能なことで,このように逆変換が簡単にかけることはnormalizing flowの文脈においてはとても嬉しい.ここではこのような自己回帰モデルの逆変換をinverse autoregressive flowと呼ぶ.
上記二つの性質から,reparameterizationをすれば分布の計算で必要なヤコビアンの行列式の対数は
として計算ができることがわかる.
Inverse Autoregressive Flow
ここではモデルの全体像を見る.基本的にはinverse autoregressive transformationをnormalizing flowに適用する.処理の流れは論文中のAlgorithm 1とFigure 2によくまとまっている.まず標準正規分布からをサンプリングし,初期の潜在変数を
と計算する.ただし,はEncoderNNの出力として得られる.その後の潜在変数を
として計算していく.ここでのはEncoderNNとは別なAutoregressiveNNから計算される.ここではが対角成分0の三角行列となるようにすることでニューラルネットに自己回帰としての性質を持たせる.結果としては対角成分にを持つ三角行列となるため,番目のflowにおける行列式はとして計算ができる.以上から,flowにより得られる確率密度はが標準ガウス分布であることに注意すれば
として計算される.
ちなみに実験的な部分として,計算の安定性からautoregressiveNNの出力をとし,として分散を計算する.さらに潜在変数はとして計算するといいらしい.あと自己回帰の要請を満たすためにautoregressiveNNはMADEなどを使ったとのこと.
個人的に悩んだところとして目的関数である変分下限のがどこから得られるのかわからなかった.例えばオリジナルのVAEだとそもそもになっていてで条件付けられてなく,標準正規分布としている.この論文ではもモデルから得られて,との違いはどっち向きに流すかだけ.すなわちとのどっちの処理から得られた潜在変数かという感じ.Figure 3を見ればなんとなくわかる.
まとめ
だいぶflow-based modelが見えてきたかなというところ.あともう2本くらい読んだら一旦この辺の勉強は終了かな.