MCMC 梅特罗波利斯采样器 返回
统计与贝叶斯模拟器

MCMC 梅特罗波利斯采样器 — 接受率与自相关

用梅特罗波利斯-黑斯廷斯方法从一维任意分布中采样。改变建议方差 σ,同时观察迹线、直方图、自相关如何变化,直观理解链的混合性。

参数设置
样本数 N
建议方差 σ_prop
目标分布类型

0:单峰高斯 N(0, 1) / 1:双峰混合 0.4·N(−2, 0.5²) + 0.6·N(2, 0.7²)

磨合期长度

随机数由线性同余法 (LCG) 生成,种子固定为 42,相同设置始终复现同一条链。

计算结果
估计均值 μ̂
估计标准差 σ̂
接受率
有效样本数 ESS
样本链、直方图与自相关

上=迹线 x_t(蓝)/中=直方图(绿)与真实密度(黄线)/下=自相关 ρ_k(滞后 1–50)

理论与主要公式

梅特罗波利斯-黑斯廷斯方法从高斯建议分布 $q$ 抽出候选 $x'$,并以接受概率 $\alpha$ 决定是否接受。当 $q$ 对称时建议比 $q(x|x')/q(x'|x)$ 相消,只剩下目标密度比。

建议:

$$x' \sim \mathcal{N}(x_t, \sigma_\text{prop}^2)$$

接受概率:

$$\alpha = \min\!\left(1, \frac{\tilde p(x')}{\tilde p(x_t)}\right)$$

更新规则($u \sim U(0,1)$):

$$x_{t+1} = \begin{cases} x' & (u < \alpha) \\ x_t & (\text{其他}) \end{cases}$$

$\tilde p(x)$ 不必归一化,只需提供密度的形式。对一维高斯目标,使接受率约为 44% 的 $\sigma_\text{prop}$ 最优。

什么是 MCMC 梅特罗波利斯采样器?

🙋
明明只是想从一个分布里取样,为什么要用马尔可夫链这么复杂的方法?直接生成随机数不行吗?
🎓
大致来说,复杂分布、尤其是归一化常数(让积分等于 1 的那个分母)算不出来的分布,根本没法直接采样。贝叶斯后验就是典型例子。梅特罗波利斯-黑斯廷斯方法巧妙的地方在于:它只用到 $p(x')/p(x)$ 这个比值,归一化常数会自动消掉,只要知道密度的形状就够了。你把"目标分布类型"切到 1(双峰混合),观察直方图怎么慢慢填满两个峰。
🙋
我把 σ_prop 调成 0.1 之后,迹线变成几乎一条直线,直方图也只覆盖了一个峰。是模拟器坏了吗?
🎓
没坏,这是 MCMC "混合 (mixing)" 问题的经典表现。σ_prop 太小,链每步只能挪一点点,要翻越双峰之间的山谷需要上千步。看接受率卡片,多半超过 95%——但这只是"几乎全接受却几乎没动"。反过来把 σ_prop 拉到 5,大部分提案被拒绝,链就卡在原地。让接受率落在 30%–50% 之间的 σ_prop 才是合适的。
🙋
那只要 σ_prop 调对就能完美采样了?
🎓
还有一个坑:相邻样本是相关的,所以 N=2000 个样本携带的信息少于 2000 个独立样本。这就是"有效样本数 (ESS)",看下面的自相关条形图,它衰减到 0 越快,ESS 越大。CAE 不确定性量化里通常先决定需要多少 ESS,再决定链长。你把 σ_prop 调离最优值,会发现 ESS 卡片的数字快速下降,体会一下这种感觉。

常见问题

这是满足"细致平衡条件 p(x) q(x'|x) α(x,x') = p(x') q(x|x') α(x',x)"前提下最大的接受概率,从而保证目标分布 p(x) 就是马尔可夫链的平稳分布。当建议分布 q 对称时,建议比项 q(x'|x)/q(x|x') 相消,只剩下密度比——这正是 MCMC 即使在归一化常数未知时也能工作的关键。
Roberts、Gelman 与 Gilks (1997) 对高斯目标下的随机游走梅特罗波利斯做了渐近分析,证明使有效样本数最大化的最优接受率在高维下趋于 0.234,一维下约为 0.44。接受率高得多意味着步长太小、混合差;低得多则拒绝过多,链停滞。实际工程中可以把目标设为 0.2–0.5 来调节 σ_prop。
如果两峰之间山谷的密度非常低,跳到该区域的提案几乎都被拒绝,链实际上无法跨过山谷。常用补救包括:增大 σ_prop 让步长足够跨过山谷;从多个不同初值并行运行多条链;或采用并行调温 / 副本交换 MCMC,通过高温链让山谷变浅。
观察迹线图,直到链看起来在一个稳定水平上小幅波动即可。本工具默认磨合 200 步,对内置目标足够;分布复杂或初值不好时需要更长。常用的定量诊断包括多链 Gelman-Rubin R-hat,以及把磨合长度取为自相关时间的若干倍。

现实世界中的应用

贝叶斯推断与参数估计:MCMC 是从后验 $p(\theta|D) \propto p(D|\theta)p(\theta)$ 中采样的主力方法,尤其当边际似然无法解析积分时。无论是从实验数据反推材料的弹性常数后验,还是校准气候模型参数,Stan、PyMC、emcee 等主流贝叶斯库的核心都是梅特罗波利斯类算法及其后代 (HMC、NUTS)。

统计力学与伊辛模型:Metropolis 等人 (1953) 发明这个算法的初衷正是为了从统计力学中的玻尔兹曼分布 $p \propto e^{-E/kT}$ 采样。它至今仍是研究自旋系统相变、合金有序-无序转变、蛋白质折叠等平衡态系综的默认方法。

CAE 不确定性量化:当有限元输入参数 (材料常数、边界条件、几何公差) 服从概率分布时,可用 MCMC 抽样应力峰值、固有频率等输出的后验。相比 FORM/SORM,MCMC 能处理复杂的失效区域和多模态分布;现代工作流通常结合代理模型 (克里金、高斯过程) 以降低计算成本。

机器学习与概率编程:潜变量模型、混合模型、分层贝叶斯模型这类似然多模态的模型,常用 MCMC 训练。典型应用包括:主题模型 (LDA) 的折叠吉布斯采样、贝叶斯神经网络权重的后验采样、强化学习中的策略后验评估。

常见误解与注意事项

最常见的误解是认为接受率越高链就越好。本模拟器把 σ_prop 调到 0.1,接受率会超过 95%,但链几乎没动,样本质量反而最差。反之 σ_prop=5 时接受率掉到 10% 左右,频繁被拒绝,链同样卡死。一维下目标是 40%–50%,多维下 20%–30%;本工具默认 σ_prop=1.0 对内置双峰目标已接近最优。

第二个陷阱是把样本数 N 当成有效样本数。MCMC 样本 $x_1, x_2, \ldots, x_N$ 彼此相关,并非独立。如果自相关时间 $\tau=20$,N=2000 的链实际信息量只相当于约 100 个独立样本。本工具的 ESS 卡片就给出这个简化估计。论文中只写 "运行 N=10000 步" 是不够的,必须报告 ESS 和多链 $\hat R$ 等诊断指标。

最后,不要以为舍弃磨合期就等于收敛。磨合只能消除初值影响,并不能证明链已经探索了整个目标。对多峰分布而言,被困在某个峰里的链会呈现非常平稳的迹线,却完全错过其他峰。实务上要并行运行多条不同初值的链,确认 $\hat R$ 接近 1,同时目视检查迹线和直方图——本工具展示的正是这些诊断信息。