MCMC(Markov Chain Monte Carlo)是一种经典的概率分布采样方法。本文对其概念和常见算法做简单梳理。
我们常常遇到这样的问题:模型构建好之后,有一个概率 p(x) (称为目标分布),不能显式的给出其表达,只能生成一系列符合这个分布的 x 。这种问题称为“采样”。
特别地,在贝叶斯方法中,关注的是后验概率 p(x|D) 。在给定观测 D 的情况下,需要估计系统参数 x 。如果后验概率没有明确表达,或者由于多重积分难以计算,则无法直接求解 x ,但是可以生成一系列符合此概率的分布。
常见的情况是,后验概率难以明确表达。在已知观测数据x的情况下,利用 p(x|D)=p(x)⋅p(D|x)/p(D)∝p(D|x) 。对似然函数进行采样。
Monte Carlo方法:用多次随机求平均的方法来逼近一个值。实际是采样方法的核心。
举例:落球箱(模型)给定。可以通过累加每个针处的概率来计算最终的落球分布,也可以多次投球来逼近这个分布。
Markov Chain方法:用 x 的转移概率逼近平稳概率。
构建一系列 x ,后一个的取值通过前一个取值以及状态转移概率获得。Monte Carlo方法的每一个采样是独立的,而Markov Chain Monte Carlo的采样是前后关联的。
举例:已知 p(阴转晴) 和 p(晴转阴) ,则可以构建MC链获得晴天和阴天的概率。
最初的一段MC链往往混合不够充分,不符合稳态分布,不能使用。这一阶段称为burn-in。
为了降低MC链采样的相关性,有些文献采用thinning的方法:每隔N个样本接受一个。
使用这种方法,往往需要另外设置一些隐变量来帮助构建状态转移关系。
举例:最简单的神经网络,由一个显结点和一个隐结点构成。已知 p(h|v),p(v|h) ,可以构建MC链获得 p(v) 。
设计MCMC方法的一个难处,在于如何设计合理的转移概率函数,使得MC链的稳态分布等于要求的概率分布。
MCMC的另一个问题是混合速度,在这篇博客中有所讨论。
MCMC是一个大类,有许多种具体算法,以下举例几种最为著名的。
Gibbs Sampling处理这样的问题:对于一个高维随机变量 x=[x1,x2,x3] ,不能写出其各分量的联合概率 p(x) ,但是可以写出各个分量之间的条件概率。
首先任取初始值 x0 。在已知当前采样 xt 时,按照如下方法生成t+1时刻采样。
每一次采样,都尽可能利用其他分量的最新结果。Gibbs Sampling特别适用于贝叶斯网络的采样,因为该网络本身就包含一系列条件概率。
MH方法的一个优点是,即使不能写出概率密度函数 p(x) ,可以用一个和其成正比的函数 f(x) 来采样。如前所述,这在贝叶斯方法中非常方便。
首先任取初始值 x0 。在已知当前采样 xt 时,按照如下方法生成t+1时刻采样。
一种常见的情况,如果待求概率是一个后验 p(x|D) ,且其先验是高斯,则可以做如下变换:
其中 ν∼N(0,Σ) , ϵ∈[−1,+1] 是扰动步长。新样本等于当前样本和先验的加权和。另一种表达方法是
不同的 ϵ 对应的新采样的轨迹是半个椭圆圆周。椭圆的两轴分别为 xt 和 ν 。如果 ϵ=0 ,则新采样和旧采样相同(红色)。 ϵ或者θ 控制扰动幅度。
对于某些高斯过程分类器,MH方法比Gibbs Sampling快。且实现简单。缺点是 Q 的参数(例如叠加的高斯的方差,或者 ϵ )
需要手工调整。
Slice Sampling方法利用一种几何思路:根据概率密度函数曲线高度来采样,越高的地方slice越宽,采样越多。同样可以对和概率密度函数成正比的任一函数 f(x) 来进行采样。
首先任取初始值 x0 。在已知当前采样 xt 时,按照如下方法生成t+1时刻采样。
曲线越高,截取的横线越宽,x采样的概率越大。
在求曲线内部线段时,需要求 x=f−1(y) 。如果 f 的反函数不好求,可能需要用一维采样方法找出 x 。
Slice Sampling的一个优点是:不需要手工调整参数。
此方法是Slice Sampling的进化版本,不需要求 f 的反函数;同时结合了Metropolis-Hastings方法中在椭圆上采样的思想,但不再需要人工设定 θ 。
此方法要求目标概率为一后验概率,其先验为高斯,似然函数用 L 表示。
首先任取初始值 x0 。在已知当前采样 xt 时,按照如下方法生成t+1时刻采样。
在步骤6,7中, θ 的范围逐渐围绕着0缩小。新生成的候选采样逐渐接近于上一个采样 xt ,步骤4中的条件越来越容易满足。