吉布斯采样(Gibbs Sampling)是一种从复杂概率分布里抽样的算法:每次只挑一个变量,固定其余变量不动,从这个变量的条件分布中随机抽一个新值,然后换下一个变量,如此轮换。跑足够多轮之后,得到的样本序列会近似服从那个原本很难直接采样的联合分布。
打个比方
想象你在一片起雾的山谷里走路,但只允许沿正东或正北方向移动。二维情况下就是:先把横坐标固定,沿纵方向抽出一个新位置;再把纵坐标固定,沿横方向抽出一个新位置;一格一格地轮换。关键是每次迈多大步子不是随便定的,而是按条件分布随机决定。走足够多步后,你的足迹会大致描出这片山谷的地形。
换成办公室版本:你想调出一台复杂混音台的理想音色,可八個旋钮的整体效果写不出公式。于是每次只动一个旋钮,其余七个纹丝不动,看看“在别的设置已定的前提下,这个旋钮拧到哪一档更合适”,然后随机选一档,再动下一个。来回几轮,整台机器的状态会越来越接近理想配置。
和相邻概念的区别
| 方法 | 每步做什么 | 关键前提 |
|---|---|---|
| 吉布斯采样 | 从某个变量的一维条件分布直接采样 | 每个条件分布都得能采样;接受率恒为 1,不必调步长 |
| Metropolis-Hastings | 提出一个完整的新点,再按接受率决定收不收 | 提议分布随便选,但步长难调,接受率低时走得极慢 |
| 坐标上升 / EM | 同样每次只更新一个变量,但取众数或期望值 | 目标是找最优点而非抽样,容易卡在局部最优 |
一句话:坐标上升是吉布斯的“贪心版”,一个取最大,一个按概率随机取;而吉布斯又是 Metropolis-Hastings 的特例——当提议分布恰好取成条件分布时,接受率恒为 1。
对从业者的意义
- 很多贝叶斯模型的后验分布写不出解析式,但只要条件分布好采样,吉布斯就能派上用场。主题模型 LDA 的经典解法(折叠吉布斯采样)、隐变量模型、缺失值插补都用它。
- 训练受限玻尔兹曼机(RBM)时的对比散度(Contrastive Divergence),本质就是跑若干步吉布斯采样。
- 坑也很明显:变量之间高度相关时,逐个轮换更新会像沿狭窄峡谷“锯齿状”缓行,混合很慢,还得丢掉预热期(burn-in)的样本。常见对策是分块采样(blocked Gibbs),或改用哈密顿蒙特卡洛(HMC)等更高效的采样器——现代概率编程工具里后者往往更常见,具体支持情况以官方文档为准。
- 它天生串行,不像神经网络训练那样容易并行。
对普通职场人,最值得带走的一句是:面对耦合很紧的复杂系统,一次只改一个变量、其余不动地反复轮换,往往比一次全动更稳——无论是调参、排查线上问题,还是复盘一场活动的各个环节。
