ハミルトニアンモンテカルロ法は提案分布q(Ucandi|Ui-1) として、Ui-1に運動量Pを与えて一定の時刻後の位置をUcandiとする

 

よく使われるリープフロッグ法 (Pが運動量、pが事後確率とする)

・多変量正規分布からサンプリングする P0~Nv(P0|0,I)

 

・U0=Ui-1として運動量を以下のように更新する

 P1=P0+1/2 * ε*∇log(p(u0))

 

・下記の更新式をJ=1、2、3、、、L-1に関して計算する

 Uj=Uj-1+εPj  …Uj-1に運動量一回分を足してUjとする

  Pj+1=Pj+ε*∇log(p(uj))   …運動量もUjに応じて更新する

 

・j=L-1のUとPを最終候補とする

 

最終UとPについてはMCMC法と同じく、min(1,r)>rand()で決定する

 

function leapflog (gradiant, P0初期値, U0初期値, L, e)

 U=U0

 P=P0+0.5*e*grad(U)

 for i in 1:L-1

  U+=eP

  P+=e *grad(U)

 end

 U+=eP

 P+=0.5*e*grad(U)

end