xiangze's sparse blog

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

ハミモン、ゲットだぜ!

Hamilton Monte-Carlo法(Hybrid Monte-Carlo法)はMCMCによる分布関数のサンプリングを高速化させる手法の一つであり、近年StanやTheanoなど統計的解析を行うためのプログラミング言語に実装させており、注目を集めています。
今回は混合ガウス分布に対するその分布の軌跡をplotしました。

HMCの基本

基本的には通常のモンテカルロ法で扱う変数の組みxに対して同じ数の運動量変数pを用意し、ハミルトニアンHを
\( H=\frac{ p^2}{2}+V(x) \)
\( V(x) = -\log(p(x)) + C \)
と定義します。

  • 運動量の変数(p)のランダムな更新
  • 一定期間分ハミルトン方程式

\( \frac{dp}{dt}=-\frac{ \partial H}{\partial x} \)
\( \frac{dx}{dt}=\frac{ \partial H}{\partial p} \)
積分して解く(leapflog法による更新の繰り返し)

  • Metropolis Hasting法で更新されたxの値を採択するか否かを決定する。

を繰り返すという手順です。
p(x)が小さい(V(x)が大きい)領域では運動量に相当するpの値が大きくなり、大きな幅で遷移が行われ、効率的な分布が作成できると期待されます。
ただし積分がある分計算量的には1遷移あたりの計算量が通常のMCMCより大きくなる点に注意が必要です。

code

計算結果

codingとplot方法に関しては@teramonagiさんの[レプリカ交換モンテカルロ法(パラレル・テンパリング)による混合ガウス分布に従う乱数の生成 - My Life as a Mock Quant
を参考にさせていただきました。

通常のMCMC
f:id:xiangze:20140621132041p:plain
遷移のヒストグラム acceptされなかった遷移は0に集中している。
f:id:xiangze:20140621131739p:plain

Hamilton Monte-Carlo
f:id:xiangze:20140621132048p:plain
遷移のヒストグラム 通常のMCMCよりも広い範囲に広がっている(ように見える)。
f:id:xiangze:20140621232043p:plain

Reference

ほぼ同じことをかなり以前に紹介されています。参考文献の論文も有用です。

  • TheanoのHMC sample codeへの日本語注釈

http://nbviewer.ipython.org/gist/xiangze/c2719235434bee796288
TheanoではTheano.T.grad()を用いてハミルトニアン偏微分を数式として計算することが可能です。これによって確率分布関数の代入と高速な計算を両立させることが出来ます(ただし式のコンパイルに時間がかかります)。
主にTheanoの関数の説明になってしまっています。サンプルコードでは並列化が行われていないためにGPUの利点が発揮できてはいないことに注意が必要です。

パターン認識と機械学習 下 (ベイズ理論による統計的予測)

パターン認識と機械学習 下 (ベイズ理論による統計的予測)

11.5以降でハイブリッドモンテカルロが説明されています。
PRML読み会での発表資料だそうです。
http://www.slideshare.net/wk77/bishop-prml-115116wk771006061152