吉布斯采样模拟器 返回
统计学与蒙特卡洛

吉布斯采样模拟器

使用MCMC(马尔可夫链蒙特卡洛)中的代表方法吉布斯采样,从二元正态分布生成随机数。改变目标相关系数、样本数和燃烧期参数,可以实时看到条件分布交替采样的阶梯状路径,以及样本相关性向目标值收敛的过程。

参数设置
目标相关系数 ρ
目标二元正态分布中x与y之间的相关系数
样本数 N
燃烧期后收集的链状态数
燃烧期
作为初始偏离区间而丢弃的迭代数
随机种子
相同的值将生成完全相同的结果
计算结果
样本均值 x
样本均值 y
样本相关性 ρ̂
样本标准差
收集样本数
与目标的误差
采样路径 — 阶梯状漫步

点为收集的(x,y)样本,浅色椭圆为目标相关性的等高线。连续状态的"水平→竖直"连接线显示吉布斯特有的阶梯状轨迹,标记沿着路径移动。

轨迹图 — x值随迭代次数的变化
x的边际分布直方图
理论与主要公式

$$x^{(t+1)}\sim\mathcal N(\rho\,y^{(t)},\,1-\rho^2),\qquad y^{(t+1)}\sim\mathcal N(\rho\,x^{(t+1)},\,1-\rho^2)$$

吉布斯采样是从每个变量的"在其他变量固定下的完全条件分布"中顺序采样。对于标准二元正态分布,条件分布也是正态分布,平均值为对方变量的ρ倍,方差为1−ρ²。

$$\hat\rho = \frac{\sum_t (x_t-\bar x)(y_t-\bar y)}{\sqrt{\sum_t (x_t-\bar x)^2}\,\sqrt{\sum_t (y_t-\bar y)^2}}$$

从收集样本计算的样本相关性ρ̂。样本数N越大,越接近目标ρ,蒙特卡洛误差按约1/√N的速度减小。

什么是吉布斯采样

🙋
我听说过"吉布斯采样"这个名字…但它到底是做什么的?是用来生成随机数的吧?
🎓
是的,它是一个生成满足某个概率分布的随机数的工具。如果分布公式已知(比如均匀分布或正态分布),生成随机数很容易。但涉及多个变量相互关联的复杂联合分布时,直接从公式生成就很困难了。吉布斯采样采用"变量逐个更新,每次固定其他变量从条件分布中重新采样"的迂回策略。反复进行这个操作,长期来看样本序列就会遵循目标的联合分布。
🙋
仅仅逐个更新就能靠近正确的分布吗?听起来有点神奇。
🎓
确实神奇。这是由"马尔可夫链蒙特卡洛(MCMC)"理论保证的。用条件分布交替更新的规则会产生一条马尔可夫链,其定常分布恰好就是目标的联合分布。因此只要运行足够长,产生的点就可以视为目标分布的样本。这个工具以二元正态分布为例,可以看到:x在固定y的条件下,遵循平均值为ρx、方差为1−ρ²的正态分布;y也是类似的形式。左边改变目标相关系数ρ,右上角的散点图会随之变成椭圆形。
🙋
路径图看起来像锯齿形的阶梯。这是什么意思?
🎓
那就是吉布斯采样的"视觉指纹"。每一步只能更新一个变量,对吧?当固定y采样x时,点水平移动;当固定x采样y时,点竖直移动。水平→竖直→水平…的循环,在(x,y)平面上必然形成阶梯形(之字形)的轨迹。改变ρ到±0.9试试,条件分布的宽度1−ρ²会变窄,每一步的移动就变小了,阶梯变得更细致,链的移动也变得很慢。这就是"混合性差"的表现。
🙋
还有一个"燃烧期"的参数。最开始的一些样本要丢弃,这样不浪费吗?
🎓
我理解你的想法,但这种"丢弃"是必要的。链从强制的初始点(本工具中是原点(0,0))开始,最初几十步还处于"预热中",偏离目标分布。燃烧期就是丢掉这段初期偏离的区间。如果不丢弃直接计算统计量,样本均值和样本相关性会被初始值拖累而产生偏差。相关系数ρ越强(如±0.9),预热过程越长,所以燃烧期也要设得更长。左边试试把燃烧期改为0,ρ设为0.95,你会看到误差有所恶化。
🙋
样本相关性ρ̂与目标的ρ不完全相同,这也是这个原因吗?
🎓
是的,这是蒙特卡洛方法的宿命。从有限的样本计算出来的ρ̂必然有误差。样本数N越多,ρ̂就越接近目标ρ,误差大约以1/√N的速度缩小。另外,MCMC的样本彼此相关(自相关),所以实际的"有效样本数"小于实际收集的数量,收敛会稍微慢一点。要缩小误差,基本做法就是增加样本数、设置足够长的燃烧期,这都是标准的管理方式。

常见问题

吉布斯采样是一种从多变量概率分布生成随机数(样本)的MCMC(马尔可夫链蒙特卡洛)方法。当无法从目标联合分布直接采样时,只要知道各变量的"在其他所有变量固定下的条件分布",就能执行该方法。通过逐个变量从其条件分布中重新采样,长期运行后整个链将遵循目标的联合分布。本工具以二元正态分布为例可视化了这个过程。
吉布斯采样器从任意初始值(本工具中为原点(0,0))开始,因此前几十到几百步处于"预热中"的偏离状态。燃烧期操作是丢弃这个初始偏离的区间。如果不丢弃而直接计算统计量,样本均值和样本相关性会被初始值拖累而产生偏差。相关系数ρ越强(如±0.9),链的混合耗时越长,因此需要更长的燃烧期。
吉布斯采样每一步只更新一个变量。先固定y采样x时,点水平移动;再固定x采样y时,点竖直移动。这样的水平→竖直→水平…的重复,在(x,y)平面上形成特征性的阶梯形(之字形)轨迹。相关性越强,条件分布的宽度1−ρ²越窄,每一步的移动量越小,阶梯变得更细致。这就是混合性差的表现。
吉布斯采样是蒙特卡洛方法,从有限的样本计算的样本相关性ρ̂必然存在蒙特卡洛误差。样本数越多,ρ̂越接近目标ρ,误差按约1/√N的速度缩小。此外,MCMC样本存在自相关,所以"有效样本数"少于实际采集的样本数,收敛速度略慢。要缩小误差,基本做法是增加样本数和进行足够长的燃烧。

实际应用

贝叶斯统计的参数推断:吉布斯采样在贝叶斯推理中应用最广泛。阶层模型和回归模型的事后分布通常无法解析求解,但各参数的完全条件分布通常是已知的。选择共轭先验后,条件分布会是标准分布(正态、伽马、逆伽马等),通过吉布斯采样器可以大量抽取事后分布的样本,用于估计事后均值和信用区间。古典贝叶斯软件如BUGS和JAGS正是采用这种方法。

图像处理和马尔可夫随机场:在图像去噪和区域分割中,每个像素的标签依赖于相邻像素,可用马尔可夫随机场(MRF)建模。虽然全体像素的联合分布巨大,但单个像素的条件分布仅取决于其邻域,计算轻量,与吉布斯采样契合度极高。实际上,吉布斯采样这个名字本身就是从图像复原的背景(Geman & Geman, 1984)广泛传播开来的。

主题模型(LDA)与自然语言处理:潜在狄利克雷分配法(LDA)用于从文档集合中提取隐含话题,其中每个单词的话题分配通过崩塌吉布斯采样来推断。条件概率可以仅用单词、文档、话题的计数来表示,使得在大规模文本语料库上也容易实现。

缺失数据的补完:调查数据和传感器数据中常存在缺失。数据扩充法(data augmentation)将缺失值视为未知参数,从给定观测值下的条件分布用吉布斯采样进行补完。这也是多重插补法(multiple imputation)的核心算法。

常见误解与注意事项

首先最大的误解是"样本之间独立"。吉布斯采样产生的是马尔可夫链,相邻样本之间存在强相关。尤其当目标相关系数ρ强时,条件分布的宽度1−ρ²变窄,链只能"蹑手蹑脚地"遍历分布。此时即使有N=1000个样本,其独立性换算的"有效样本量"可能仅为该数的几分之一。如果用独立样本的公式估计标准误差,会产生低估。必须检查自相关函数或有效样本量(ESS)。

其次,"只要进行燃烧期就能保证收敛"这种想法很危险。燃烧期仅用于消除初始值的影响,不能保证链真正探索了目标分布的整个空间。例如在多峰分布中,吉布斯采样器可能长期困在某个峰值,根本无法到达其他峰值。本工具的二元正态虽然单峰,但实务中的复杂模型需要从多个初始值启动多条链,检查结果是否一致(如Gelman-Rubin的R̂统计量),这是判断收敛的铁则。

最后,"吉布斯采样是万能的"这种看法是错的。吉布斯采样的前提是所有变量的完全条件分布都能实际采样。如果条件分布是非标准形式难以采样,或变量间相关性极端导致混合极其缓慢,就该考虑Metropolis-Hastings法、哈密顿蒙特卡洛(HMC)或分块吉布斯等其他方法。选择算法要根据"目标分布的结构"进行,这是关键认识。

使用指南

  1. 在-0.95~0.95范围内设置相关系数ρ,指定二元正态分布N(0,Σ)的依赖结构
  2. 在1000~50000间选择样本数n,决定吉布斯采样的迭代次数
  3. 设置燃烧期在100~5000间,除去初始值的影响后才开始采集样本
  4. 用0~1000000指定随机种子,获得可重复的结果
  5. 点击执行按钮,根据条件分布X|Y~N(ρY, 1-ρ²)和Y|X~N(ρX, 1-ρ²)进行交替采样,实时执行

具体计算例

当ρ=0.7、n=5000、燃烧期=500、种子=42时:从Y₁=0开始,按条件正态分布采样X₁~N(0.7×0, 0.51),再用X₁值采样Y₂~N(0.7×X₁, 0.51),反复迭代。收集4500个样本后,样本均值x̄≈0.02、ȳ≈0.01、样本相关性ρ̂≈0.698、样本标准差s≈0.996,与目标ρ的误差在0.2%以内。轨迹图显示前500次迭代快速到达定常分布。

实务注意事项