很多時候我們知道一個機率密度長什麼樣(用 Bayes 算出後驗),但不知道怎麼從它抽樣。Beta-Binomial 那種共軛先驗很罕見,真實的後驗通常是奇形怪狀的。
Metropolis–Hastings (M-H) 演算法解這個問題。一個迴圈:
- 從目前位置 xt,提議一個附近的新位置 y∼N(xt,σq2I)
- 計算接受率 α=min(1,p(xt)p(y))
- 以機率 α 接受新位置:xt+1=y;否則留在原地 xt+1=xt
為什麼這樣能對:規則設計上滿足 detailed balance — 機率密度高的地方比較容易停下,停留時間比例最終會等於目標機率比例。
🎮 動手試試
- 切到 單峰常態、按開始。看軌跡很快聚到峰附近,白點累積出鐘形雲。
- 切到 雙峰,看軌跡在兩個峰之間「跳島」。如果提議步長 σ 太小、可能很久才跳一次。這就是 mode-collapse 問題的早期版本。
- 切到 香蕉形,把提議步長拉到 1.5 — 接受率會掉很多(提議跑出可行區域)。再拉到 0.2 — 接受率高但步太碎,要很久才能走完整個香蕉。「step size 怎麼調」是 MCMC 的核心工程。
- 切到 甜甜圈,看軌跡沿著高密度的環走,內部低密度區域幾乎沒人去。
💡 接受率的「黃金值」
實務上,2D-3D 的 random-walk M-H 接受率調到 ~25–40% 通常效果最好(Roberts–Gelman–Gilks 1997 的著名結果,高維是 0.234)。太高表示步太小、樣本太相關;太低表示步太大、提議常被拒絕。
觀察右上的「接受率」— 你可以靠拉步長把它推向那個範圍。
🚀 在現實中
- Bayes 後驗推論 — Stan、PyMC、JAGS 都靠 MCMC 取樣後驗
- 物理模擬 — 統計物理裡的 Monte Carlo(Ising model、Boltzmann distribution)
- 生成模型 — Diffusion models 反向過程其實是一種 Langevin MCMC
- HMC / NUTS(PyMC 預設)是 M-H 的升級版,用梯度引導提議方向,接受率高得多
留言 0
留言載入中…