🎓 レベル:発展 | 重要度:A(必須)
📎 前提:マルコフ連鎖と定常分布 | 関連:ギブスサンプリング | ベイズ:メトロポリスヘイスティングス
要点(BLUF)
- メトロポリス・ヘイスティングス(MH)法:目的分布 を定常分布に持つ連鎖を、提案分布 と受理確率で組み立てる汎用 MCMC。
- 受理確率 が詳細釣り合いを満たし、 を定常分布にします。比に効くので規格化定数が不要。
- 標準正規を目標にランダムウォーク MH でサンプルし、平均 ・標準偏差 ・裾確率 が理論と一致します。
1. アルゴリズム
サンプルしたい目的分布 (規格化されていなくてよい)に対し:
- 現在地 から、提案分布 で候補 を生成
- 受理確率を計算:
- 確率 で へ移動、確率 で に留まる
- 現在地を記録して1へ
提案が対称(、ランダムウォークなど)なら が消えて (メトロポリス法)。「目的密度が高い方へは必ず動き、低い方へは確率的に動く」だけです。
flowchart TD
A["現在地 x から候補 x' を提案 q(x'|x)"] --> B["受理確率 α を計算"]
B --> C{"乱数 u < α ?"}
C -->|"はい"| D["x' へ移動"]
C -->|"いいえ"| E["x に留まる"]
D --> F["現在地を記録"]
E --> F
F --> A
2. なぜ π が定常分布になるか(詳細釣り合い)
MH の遷移核 は**詳細釣り合い(detailed balance)**を満たします:
「 から への確率の流れ」と「逆向きの流れ」が各ペアで釣り合う、という条件。これを満たせば両辺を で和(積分)して
すなわち 、 が定常分布になります(マルコフ連鎖と定常分布)。受理確率 の比の形は、まさにこの詳細釣り合いを成立させるよう逆算されたものです。実際 は で対称——だから流れが釣り合います。
肝心なのは、 に現れるのは比 だけなので、 の規格化定数(積分して1にする定数)が約分されて要らないこと。ベイズの事後分布のように規格化定数が計算困難な分布でもサンプルできる——これが MCMC が推論に不可欠な理由です(ベイズ)。
3. 実装:標準正規をランダムウォークMHで
目的 (標準正規、規格化定数は無視)、提案は対称な 。
import numpy as np
# 乱数シードを固定
rng = np.random.default_rng(41)
def target_logpdf(x):
return -0.5 * x**2 # 標準正規の対数密度(規格化定数なし)
n = 200_000
step = 2.0 # 提案の歩幅
x = 0.0
samples = np.empty(n)
accept = 0
for i in range(n):
x_prop = x + rng.normal(0, step)
log_alpha = target_logpdf(x_prop) - target_logpdf(x) # log(π(x')/π(x))
if np.log(rng.random()) < log_alpha: # 受理判定
x = x_prop; accept += 1
samples[i] = x
burn = 2000 # バーンイン除去
s = samples[burn:]
print(f"受理率 = {accept/n:.3f}")
print(f"標本平均 = {s.mean():.4f} (目標 0)")
print(f"標本標準偏差 = {s.std():.4f} (目標 1)")
print(f"標本 P(X>1.96) = {(s>1.96).mean():.4f} (目標 0.025)")
出力:
受理率 = 0.500
標本平均 = -0.0016 (目標 0)
標本標準偏差 = 1.0006 (目標 1)
標本 P(X>1.96) = 0.0250 (目標 0.025)
出力の意味:受理率 0.500 で、規格化定数を一切使わずに標準正規からサンプルできています。標本平均 、標準偏差 、上側裾確率 (正規の理論値そのもの)。連鎖を歩いた軌跡の頻度が、見事に目標分布を再現しました。受理確率の比 だけで動いている点が MH の本質です。
4. 提案の歩幅とチューニング
提案の歩幅 step は効率を大きく左右します。
- 小さすぎる:受理率は高いが、ちょこちょこ動くだけで空間を探索できない(自己相関大)。
- 大きすぎる:遠くを提案しすぎて棄却ばかり、その場に留まる(受理率激低)。
- 目安:1次元なら受理率 0.44、高次元なら 0.234 付近が最適とされます(ロバーツらの結果)。
歩幅は試行錯誤か適応的 MCMC で調整します。受理率・自己相関・有効標本サイズ(収束診断と実装の注意)を見ながらチューニングするのが実務です。
数式の直観的意味
MH は「目的分布の地形を、確率的に登り降りする探索」です。密度が高い(標高が高い)方へは必ず登り、低い方へも比の確率で降りる——だから山頂(モード)に居座らず、谷(裾)も適切な頻度で訪れる。受理確率の比 が「降りる勇気」を制御し、これが正確に詳細釣り合いを満たすよう設計されているので、長時間の滞在頻度が に一致する。規格化定数が要らないのは「比を取れば全体の定数倍が消える」から——「絶対的な確率」ではなく「相対的な確率の比」だけで歩ける、というのが MCMC が高次元・複雑分布で勝つ核心です。
⚠️ よくある誤解・落とし穴
- 「受理率は高いほど良い」ではない:高すぎ(歩幅小)は探索不足で自己相関が悪化。0.2〜0.5 が目安。
- 「規格化定数が要る」ではない:比に効くので不要。これが MH の最大の利点。
- 「棄却したら記録しない」ではない:棄却時も現在地をもう一度記録します(留まる)。記録しないと分布が歪みます。
- 「バーンイン不要」ではない:初期の過渡は定常分布に達していないので捨てます(収束診断と実装の注意)。
- 「サンプルは独立」ではない:MCMC サンプルは自己相関します。独立サンプル換算は有効標本サイズで測ります。
- 「対称提案でないと使えない」ではない:非対称でも の比を入れれば OK(それが「ヘイスティングス」の一般化)。
対応シミュレーション参照
本文のランダムウォーク MH(標準正規目標・default_rng(41)、受理率0.50)。推論応用はベイズへ。
関連ノート
- マルコフ連鎖と定常分布(前提・詳細釣り合いと定常分布)
- ギブスサンプリング(次のトピック・受理率100%の特殊形)
- 収束診断と実装の注意(歩幅チューニングと診断)
- メトロポリスヘイスティングス(ベイズ・推論への応用)
- 第6章 マルコフ連鎖モンテカルロ 目次
- シミュレーション・モンテカルロ法 全体目次