Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

ハミルトニアンモンテカルロ(HMC)法

ハミルトニアンモンテカルロ(Hamiltonian Monte Carlo: HMC)法 は、ハミルトニアン力学(古典力学)のシミュレーション手法をMCMCに応用したアルゴリズムである。事後分布の勾配(対数密度の勾配)を利用して効率的にサンプリングする。

  • 元々は Hybrid Monte Carlo と呼ばれていた(Duane et al., 1987)。格子QCDの計算のために開発された

  • Neal (2011) が統計学向けに整理し、現在ではStan、PyMC、NumPyroなどの主要なベイズ推定フレームワークの核となっている

MH法の問題点とHMCの動機

メトロポリス・ヘイスティング(MH)法のランダムウォーク提案には、次の構造的な問題がある:

  1. 提案の方向がランダム: 提案 θ′=θ+ε,  ε∼N(0,s2I)\theta' = \theta + \varepsilon,\; \varepsilon \sim \mathcal{N}(0, s^2 I) は事後分布の形状を無視しているため、密度の低い方向へも同じ確率で提案してしまう

  2. ステップサイズのジレンマ: 小さいと受理率は高いが探索が遅く、大きいと棄却されやすくなる

  3. 高次元での性能劣化: 次元が上がると受理率が急激に低下し、実用的な時間で収束しなくなる

HMCは、事後分布の 勾配情報 を使って、密度の高い方向へ提案を導くことでこれらの問題を解決する。

ハミルトニアン力学のアナロジー

HMCは、古典力学における ハミルトニアン力学 とのアナロジーで構成されている。

古典力学MCMCにおける対応
位置 qqパラメータ θ\theta
運動量 pp補助変数(ランダムに導入)
ポテンシャルエネルギー U(q)U(q)負の対数事後分布 −log⁡p(θ∣y)-\log p(\theta \mid y)
運動エネルギー K(p)K(p)12p⊤M−1p\frac{1}{2} p^\top M^{-1} p
ハミルトニアン H(q,p)H(q, p)U(q)+K(p)U(q) + K(p)

ハミルトニアン(全エネルギー)はポテンシャルエネルギーと運動エネルギーの和として定義される:

H(θ,p)=U(θ)+K(p)=−log⁡p(θ∣y)+12p⊤M−1pH(\theta, p) = U(\theta) + K(p) = -\log p(\theta \mid y) + \frac{1}{2} p^\top M^{-1} p

ここで MM は質量行列(mass matrix)であり、通常は単位行列や対角行列が使われる。

ハミルトンの運動方程式は

dθdt=∂H∂p=M−1p,dpdt=−∂H∂θ=−∇θU(θ)=∇θlog⁡p(θ∣y)\frac{d\theta}{dt} = \frac{\partial H}{\partial p} = M^{-1} p, \qquad \frac{dp}{dt} = -\frac{\partial H}{\partial \theta} = -\nabla_\theta U(\theta) = \nabla_\theta \log p(\theta \mid y)

であり、運動量 pp の更新に事後分布の対数密度の勾配 ∇θlog⁡p(θ∣y)\nabla_\theta \log p(\theta \mid y) が使われる。これが「密度の高い方向へ導かれる」仕組みである。

ハミルトニアン力学の重要な性質

HMCの正当性は、ハミルトニアン力学の以下の性質に基づいている:

1. エネルギー保存

ハミルトンの運動方程式に正確に従えば、H(θ,p)H(\theta, p) は時間発展を通じて保存される。すなわち

H(θ(t),p(t))=H(θ(0),p(0))∀tH(\theta(t), p(t)) = H(\theta(0), p(0)) \quad \forall t

これにより、ハミルトニアン力学に従って提案された点はMH法の受理確率が常に1になる(後述の数値積分による誤差を除けば)。

2. 体積保存(シンプレクティック性)

ハミルトニアンの時間発展は体積を保存する:

∣det⁡∂(θ′,p′)∂(θ,p)∣=1\left| \det \frac{\partial (\theta', p')}{\partial (\theta, p)} \right| = 1

これにより、MH法の受理確率におけるヤコビアンの補正項が不要になる。

3. 可逆性(時間反転対称性)

p→−pp \to -p の変換で時間発展が反転する。この性質は詳細つり合い条件の保証に使われる。

リープフロッグ積分法

ハミルトンの運動方程式は一般に解析的に解けないため、数値積分で近似する。HMCでは リープフロッグ(leapfrog)積分法 が使われる。

ステップサイズ ε\varepsilon で LL ステップ分の時間発展を行う:

リープフロッグ積分は以下の性質を持ち、HMCの正当性を保証する:

  • 可逆性: p→−pp \to -p とすれば元の状態に戻る

  • 体積保存: ヤコビアンの行列式が1

  • エネルギー近似保存: ε\varepsilon が小さいほど、HH の変化が小さい(誤差は O(ε3)O(\varepsilon^3) オーダー)

なお、オイラー法や修正オイラー法では体積保存性が崩れるため、リープフロッグが選ばれる。

HMCアルゴリズム

エネルギーが完全に保存されれば H(θ′,p′)=H(θ(t),p)H(\theta', p') = H(\theta^{(t)}, p) となり r=1r = 1 となるが、数値積分の誤差によりわずかに HH が変化するため、MHの受理・棄却ステップが必要である。これにより数値誤差があってもサンプリングの正当性が保証される。

Pythonによる実装

2次元正規分布からのサンプリング

まず簡単な例として、目標分布が2次元正規分布である場合を考える。目標分布を

p(θ)=N(θ  |  (00),  (10.80.81))p(\theta) = \mathcal{N}\left(\theta \;\middle|\; \begin{pmatrix} 0 \\ 0 \end{pmatrix},\; \begin{pmatrix} 1 & 0.8 \\ 0.8 & 1 \end{pmatrix}\right)

とする。正規分布の場合、ポテンシャルエネルギーとその勾配は解析的に求まる:

U(θ)=12θ⊤Σ−1θ,∇U(θ)=Σ−1θU(\theta) = \frac{1}{2} \theta^\top \Sigma^{-1} \theta, \qquad \nabla U(\theta) = \Sigma^{-1} \theta
acceptance rate = 0.994
posterior mean  = [ 0.0012916  -0.00399892]
posterior cov   =
[[1.11486393 0.91625932]
 [0.91625932 1.11725158]]
<Figure size 1500x400 with 3 Axes>

ベイズ線形回帰への適用

より実践的な例として、ベイズ線形回帰モデル

yi∼N(β0+β1xi,  σ2)y_i \sim \mathcal{N}(\beta_0 + \beta_1 x_i,\; \sigma^2)

に対して、事前分布 β0,β1∼N(0,102)\beta_0, \beta_1 \sim \mathcal{N}(0, 10^2)、σ\sigma は既知としてHMCで事後分布をサンプリングする。

acceptance rate = 0.999
真値: beta_0=2.0, beta_1=-1.5
事後平均: beta_0=1.927, beta_1=-1.523
事後標準偏差: beta_0=0.103, beta_1=0.056
<Figure size 1500x400 with 3 Axes>

MH法との比較

同じ問題に対してランダムウォークMH法とHMCを比較する。

MH  acceptance rate = 0.644
HMC acceptance rate = 0.994
<Figure size 1200x1000 with 4 Axes>

ハイパーパラメータの影響

HMCの性能はステップサイズ ε\varepsilon とステップ数 LL に大きく依存する。

パラメータ小さすぎると大きすぎると
ε\varepsilon(ステップサイズ)探索が遅い(MHと同様)エネルギー保存が崩れ、受理率が低下
LL(ステップ数)提案が近すぎる計算コストが増大、U-turnする

ε\varepsilon と LL の調整は経験的に行う必要があり、この問題を自動化したのがNUTSである。

<Figure size 1200x1000 with 4 Axes>

NUTS: No-U-Turn Sampler

NUTS (No-U-Turn Sampler) はHoffman & Gelman (2014) が提案したHMCの拡張であり、HMCの2つのハイパーパラメータを自動調整する:

ステップ数 LL の自動決定

リープフロッグの軌跡が「U-turn」(元の位置に戻り始める)を検出した時点で自動的に停止する。具体的には、バイナリツリーを構築し、木の両端の状態 (θ−,p−)(\theta^-, p^-) と (θ+,p+)(\theta^+, p^+) が

(θ+−θ−)⋅p−<0or(θ+−θ−)⋅p+<0(\theta^+ - \theta^-) \cdot p^- < 0 \quad \text{or} \quad (\theta^+ - \theta^-) \cdot p^+ < 0

を満たしたときに停止する(U-turn条件)。

ステップサイズ ε\varepsilon の自動調整

ウォームアップ期間(burn-in)において、目標受理率(通常 0.65 前後)を達成するように dual averaging で ε\varepsilon を適応的に調整する。

NUTSは現在のStan、PyMC、NumPyroなどの主要なベイズ推定フレームワークでデフォルトのサンプラーとして採用されている。

HMCの限界と注意点

  • 勾配が必要: ∇θlog⁡p(θ∣y)\nabla_\theta \log p(\theta \mid y) が計算できないモデル(例:離散パラメータ)には適用できない。Stanなどでは自動微分(autodiff)で勾配を計算している

  • 質量行列の調整: パラメータ間のスケールが大きく異なる場合、質量行列 MM を事後分布の共分散行列の推定値に合わせることで性能が向上する

  • 多峰分布: HMCはエネルギー障壁を越えにくいため、多峰分布のサンプリングには注意が必要

  • 次元の呼び: 高次元でもMH法よりははるかに効率的だが、次元が非常に高い場合はそれでも困難になりうる

まとめ

MH法(ランダムウォーク)HMCNUTS
勾配の利用不要必要必要
提案の効率低い(ランダム)高い(勾配誘導)高い(勾配誘導)
ハイパーパラメータステップサイズε\varepsilon, LL自動調整
高次元での性能劣化が激しい良好良好
実装簡単中程度複雑(フレームワーク推奨)

参考文献

Neal, R. M. (2011). MCMC using Hamiltonian dynamics. In Handbook of Markov Chain Monte Carlo (Chapter 5). Chapman & Hall/CRC.

HMCの包括的な解説。理論的背景から実装上の注意点まで詳細に述べられている

Hoffman, M. D., & Gelman, A. (2014). The No-U-Turn Sampler: Adaptively setting path lengths in Hamiltonian Monte Carlo. Journal of Machine Learning Research, 15, 1593–1623.

NUTSの原論文。HMCのハイパーパラメータ自動調整の標準的手法

Betancourt, M. (2017). A conceptual introduction to Hamiltonian Monte Carlo. arXiv preprint.

微分幾何学の观点からHMCを解説した論文。概念的な理解に優れている