4. 方差缩减技术一

在上一节中我们看到,朴素蒙特卡洛估计高维积分时,误差以 O(N-1/2) 的速度下降,与维数无关——这既是它的优点,也是它的软肋:当被积函数在积分域内高度不均匀、概率质量集中在极小区域时,均匀撒点会把绝大多数样本浪费在几乎不贡献结果的区域。重要性采样(Importance Sampling, IS)正是针对这一痛点最直接的方差缩减手段。

从"均匀撒点"到"按需撒点"

设我们要估计积分 I = ∫ f(x) dx。朴素蒙特卡洛把它写成 I = Ep[f(X)/p(X)],其中 p 是均匀分布(或某个基准分布)。重要性采样的核心思想是:引入一个提议分布 q(x),把积分改写为

I = ∫ f(x) dx = ∫ [f(x)/q(x)] · q(x) dx = E_q[ f(X)/q(X) ],  X ~ q

于是估计量变为 ÎIS = (1/N) Σi=1N f(xi)/q(xi),其中 xi 从 q 中抽取。只要 q(x) > 0 在所有 f(x) ≠ 0 的地方成立(支撑覆盖条件),这个估计就是无偏的。关键在于:q 的选择不改变期望,却彻底改变方差。若 q 在 f 绝对值大的区域放置更多样本,权重 w(x)=f(x)/q(x) 的波动就会变小,方差随之下降。

最优提议分布的推导

估计量的方差为 Varq[f(X)/q(X)] = ∫ f²(x)/q(x) dx − I²。第二项与 q 无关,因此只需最小化 ∫ f²(x)/q(x) dx。由柯西–施瓦茨不等式(或变分法)可得,当

q*(x) = |f(x)| / ∫|f(t)| dt

时方差达到下界 0(对非负 f 而言)。这个结论极具启发性:最优提议分布正比于被积函数的绝对值。也就是说,理想情况下样本应当按"贡献大小"分配,贡献越大的区域采样越密。但 q* 本身含有未知的归一化常数 ∫|f|dt,恰恰是我们想求的积分,因此 q* 无法直接使用——这构成了重要性采样的根本张力:最优分布依赖答案,我们只能用近似分布去逼近它。

实践中常用的近似策略包括:用被积函数的主部(如高斯型被积函数用同中心、同协方差的高斯提议)、用 Laplace 近似在众数点做二阶展开、或用自适应迭代逐步修正 q。判断近似好坏的标准不是"q 像不像 f",而是权重 w 的波动是否被压平。

有效样本量:方差缩减的量化标尺

当 q 与 f 偏离较大时,少数样本会携带极大权重,估计量虽然无偏,但单次实现可能严重偏离真值。此时需要诊断工具。定义归一化权重 w̃i = wi / Σj wj,有效样本量(ESS)为

ESS = 1 / Σ w̃_i²  =  (Σ w_i)² / Σ w_i²

ESS 的取值范围是 [1, N]。若所有权重相等,ESS = N,说明每个样本都"满额"贡献;若某个权重独占鳌头,ESS 趋近 1,意味着 N 个样本实际只相当于一两个有效样本。工程上常把 ESS/N < 0.1 视为提议分布严重失配的警报,需要重新设计 q 或改用重采样、退火等补救手段。ESS 与方差的关系是:权重方差越大,ESS 越小,估计量的实际误差越大。

被积函数 f(x) 与提议分布 q(x) 的匹配 x 密度 f(x) q(x) 样本按 q 抽取,尖峰区更密 权重分布 → 有效样本量 ESS 情形 A:q 匹配良好,权重均匀 ESS ≈ N 情形 B:q 失配,权重悬殊 ESS ≪ N 设计目标:让 q(x) ∝ |f(x)| 的近似成立 → 权重 w=f/q 波动最小 → ESS 接近 N,方差最小

面向高维尾部概率积分的提议分布设计

考虑一个典型任务:估计标准正态向量 X ∈ Rd(d=50)落入尾部区域的概率 P(‖X‖² > c),取 c 使该概率约为 10-6。写成积分形式,被积函数为 f(x) = 1{‖x‖² > c} · φ(x),其中 φ 为标准正态密度。朴素蒙特卡洛需要约 108 个样本才能期望命中约 100 次,且命中样本的权重全为 1,方差极大。

按最优分布 q* ∝ |f| 的指引,我们应把提议分布设计成"截断在尾部区域的正态分布"。具体做法:取提议 q 为以原点为中心、协方差放大为 σ²I 的正态分布,并条件化在 ‖x‖² > c 上(可用拒绝采样或对半径做逆变换采样实现)。σ 的选取使 q 的质量集中在球壳附近。此时权重 w(x) = φ(x)/q(x) 在球壳上近似为常数,权重波动被显著压平。

一个可操作的实现片段(Python 伪代码,参数为教学示例设定):

import numpy as np
d, c, N = 50, 90.0, 20000
sigma = 1.6                      # 提议分布尺度,示例取值
# 从截断正态提议中采样:先采半径平方,再随机定向
r2 = np.random.chisquare(d, N) * sigma**2
mask = r2 > c
r2 = r2[mask]
dirs = np.random.randn(len(r2), d)
dirs /= np.linalg.norm(dirs, axis=1, keepdims=True)
X = np.sqrt(r2)[:, None] * dirs
# 权重:目标密度 / 提议密度(含截断归一化常数,示例中按数值积分估计)
logw = -0.5*np.sum(X**2, axis=1) - (-0.5*np.sum(X**2, axis=1)/sigma**2)
w = np.exp(logw)
est = w.mean()
ess = w.sum()**2 / np.sum(w**2)

需要说明的是,上述代码中的 σ=1.6、c=90、N=20000 均为教学示例参数,实际运行结果会随随机种子与实现细节变化;读者应把它当作可复现的实验骨架,而非实测结论。运行后重点观察两个量:估计值 est 是否稳定落在 10-6 量级附近,以及 ESS 是否达到数千以上。若 ESS 只有几十,说明 σ 选得偏离球壳,需要调参。

与朴素蒙特卡洛的效率对比

在同一任务上,朴素 MC 的估计量方差约为 p(1−p)/N(p 为尾部概率),相对标准差 ≈ √((1−p)/(Np))。当 p=10-6、N=106 时,相对标准差约 100%,几乎不可用。而设计良好的重要性采样把权重波动压到很小,达到相同相对精度所需的样本量可下降两到三个数量级。衡量效率的常用指标是方差比 Var朴素/VarIS,它直接给出"省了多少倍样本"。

设计提议分布时的三条实用准则:① 支撑覆盖——q 在 f 非零处必须为正,否则估计有偏;② 尾部不能太轻——q 的尾部若比 f 更薄,会出现权重爆炸;③ 用 ESS 做在线诊断,ESS/N 低于 0.1 就应调整 q,而不是盲目加大 N。
常见误区:认为"q 越接近 f 越好"就随意用 f 的未归一化形式做提议。若 q 与 f 成比例但归一化常数估计不准,权重虽平但估计量可能有偏;此外,高维下 q 与 f 的"接近"极难判断,务必以 ESS 和多次独立重复的估计稳定性作为验收依据,而非只看单次结果。

小结:重要性采样把"在哪里采样"从被动变为主动,其理论最优解 q* ∝ |f| 指明了方向,而 ESS 提供了判断提议分布是否合格的量化标尺。在高维尾部概率这类朴素 MC 几乎失效的场景中,一个经过 ESS 校验的提议分布往往能把计算成本降低几个数量级,这也是后续自适应重要性采样与序贯蒙特卡洛方法的共同起点。