xiangze's sparse blog

機械学習、ベイズ統計、コンピュータビジョンと関連する数学について

Tokyo.stanの感想

stan開発者の一員であるBetancourtさんを招いたTokyo.stanを聴きにいきました。
Michael Betancourt's Stan Lectureを開催しました - StatModeling Memorandum
自分はstanを余り使いこなせていないのですが、主にアルゴリズムと実装に関する感想を書きます。


HMCの説明をされている中で推定されるべき事後分布の関数の等高線を回るようにサンプルしているという説明が非常に明快でした。事後分布の勾配である"重力"に対して直交する方向に運動量が存在すれば分布の極大値にとどまらずにその周囲を回るようにサンプリングがされます。ニュートン力学そのものです。
f:id:xiangze:20160607023234p:plain
赤が勾配、青が運動量

最適化問題は山を登るか(下る)ような勾配系の問題としてイメージできますが、MCMCは分布を推定するので相空間を等エネルギー面に沿ってぐるぐる回るハミルトン系の要素があると効率的にサンプリングできるという直感的理解になるかと思います。

今までHMCでは位置によらずに運動エネルギーがランダムに与えられ、分布の裾の部分では位置エネルギーが高い分そうエネルギーが大きく、幅広く動けるようになることから広い範囲を動いてサンプリングできると理解していたのですが、上記の説明のほうがHMCの特性をよりよく表しているように思いました。
http://xiangze.hatenablog.com/entry/2014/06/21/234930

また同じような事後分布を推定したい場合でも Centered Parameterizationとnon-Centered Parameterizationと階層モデルを使い分けるとサンプリングの効率が変わるというのを説明されていて非常に興味深かったです。*1
http://www.econ.upf.edu/~omiros/papers/val7.pdf
双方を混ぜる方法も提唱されているらしいです。
http://www.lindonslog.com/mathematics/mcmc-interweaving-parameterization-efficiency/
http://www.tandfonline.com/doi/abs/10.1198/jcgs.2011.203main

以下は個人的な質問の回答も含まれますが英語力が不足しているので余り自身がありません。

Riemannian HMCはstanにも実装され使えるようになるそうなのですが、やはり曲率の計算が大変であるということと問題によって得意不得意があるということでした*2 

言語としての完全性を重視しているとのことなのでHMC,NUTSの枠組みでは扱えない離散変数のMetropolis-Hasting法によるサンプリングはpymcのようには実装しないということと理解しました*3

またstanは強い型付けの言語であり、それに比べるとpymcはfragile(脆弱)というご意見でした。pymcではpython,theanoで出来ることはなんでも出来るので言語としての境があいまいになってしまうということなのでしょう。コンパイル時にエラーがでないのもつらいときがあります。
GPUに関しても使えるハードウェアが制限されるのはよろしくないというなかなか厳しいご意見でした。

自動変分ベイズに関しても質問したのですが自分の英語力が不足していて忘れてしまいました。

*1:pathologic(病的)な分布のサンプリングに有効とのことでしたが、説明では微分不可能な部分がある関数をサンプリングする際にtraceplotが一点に滞留していてニューラルネットの最適化などで特異点近傍にはまってしまっている場合に似ているなと思いましたが、深い関連はないかもしれませn。

*2:個人的には同様にdeeplearning系のライブラリで自然勾配学習法の実装をあまり知らないので似たような感じなのかと思いました。自然勾配学習法や類似手法の評価は http://arxiv.org/pdf/1301.3584v7.pdf

*3:使いたい場合には伊東先生の発表http://www.slideshare.net/hirokito/dealing-with-latent-discrete-parameters-in-stan のようにincrement_log_probを使って累積していきます