MCMC,即Markov Chain Monte Carlo,在采样方法【1】中介绍的方法在高维的情况下都有局限性,相比之下,MCMC的可应用范围就大了很多——它利用马尔克夫链的某些性质来探索概率分布状态空间,从而产生样本,而且这些性质会使MCMC花更多的时间在重要的区域上探索。
与拒绝采样和重要性采样一样,MCMC也需要一个建议分布,但是MCMC的建议分布是依赖于当前状态的条件分布,所以从建议分布采样的样本构成了一条马尔可夫链。
接下来先介绍一些马尔可夫链的基本定义。
1. Markov Chain
马尔可夫链描述了一种状态序列,每个状态值取决于前面的几个状态。马尔可夫链是具有马尔可夫性质的随机变量的一个数列。这些变量的范围,即它们所有可能取值的集合,被称为“状态空间”,通常用 X 表示。一阶马尔可夫链的定义如下:
p(zm+1|z1,z2,...zm)=p(zm+1|zm)
即当前状态只与前一个状态有关,
Tm(zm,zm+1)≡p(zm+1|zm) 叫做
转移概率/转移核【transition probability/transition kernel】,如果每一个m的转移概率都一样,则称这个马尔可夫链是
齐次【homogeneous】马尔可夫链。
如果对于每一个m,齐次马尔可夫链的边缘概率分布
p∗(z)=p(zm+1)=∑zmT(zm,zm+1)p(zm) 不变,则称这个分布相对于这条马尔可夫链是
不变的【invariant】,或者说平稳的【stationary】——它的一个充分非必要条件是转移概率满足
细致平衡【detailed balance】:
p∗(z)T(z,z′)=p∗(z′)T(z′,z)
证明:
∑z′p∗(z′)T(z′,z)=∑z′p∗(z)T(z,z′)=p∗(z)∑z′p(z′|z)=p∗(z)
满足细致平衡的马尔可夫链也称是
可逆的【reversible】
细致平衡条件的好处,就是我们能控制马尔可夫链收敛到我们指定的分布 p∗(z) .
为了能用马尔可夫链进行采样,马尔可夫链必须满足上面所有这些性质,而且,对于任意的初始化,当
m→∞ 时,
p(zm) 必须向要求的不变分布
p∗(z) 收敛,这个性质也叫做
各态遍历性【ergodicity】,对应的不变分布叫做
均衡分布【equilibrium distribution】
接下来先介绍最简单的Metropolis算法。为了不使notation太复杂,不失一般性的,这里只用 p(z) ,而不用 p~(z) 【 p(z)=p~(z)/Zp , p~(z) 通常可以直接代入求解知道它的值,但是 Zp 一般是不知道的】。
2. Metropolis算法
最简单的探索状态空间的方法当然是随机游走【random walk】,但是这样的效率通常不高。设计MCMC算法的一个核心目标就是避免随机游走。
Metropolis算法要求建议分布是对称的,即 q(za|zb)=q(zb|za) ,算法每一步从当前建议分布产生一个候选样本 z∗ ,如果候选样本的概率密度比当前状态高,则保留候选样本,即
zm+1={z∗,zm,with probability min{1, p(z∗)/p(zm)}otherwise
小于1的情况可以通过产生一个(0,1)之间的随机数
μ ,如果
min{1,p(z∗)/p(zm)}>μ ,则保留候选样本。
如果想要从马尔可夫链中挑选独立的样本,那么可以每隔M个选一个,只要M足够大,采集的样本可以近似看成是独立的。
下图展示了一个应用Metropolis算法从高斯分布采样的例子,椭圆代表one standard-deviation contour,建议分布是标准误差为0.2的各向同性【协方差为常数乘以单位矩阵】高斯分布,被接受的步骤用绿线表示,被拒绝的步骤用红线表示,总共有150个候选样本,其中43个被拒绝。
我们可以通过检验Metropolis链是否满足细致平衡方程来判定它是否收敛到要求的不变分布。首先一个充分条件是对于所有的
za ,
zb ,满足
q(za|zb)>0 ,这是为了确保各态遍历性;其次,考虑链中的一对连续值
(z,z′) ,不失一般性的,假设
p(x′)≥p(x)
注:
- 选择建议分布要在接受率和收敛速度之间做一个平衡。移动步长小的接受率高,收敛速度慢;移动步长大的接受率低,收敛速度快——因为步长小的很容易移动到一个候选样本 z∗ 使得 p(z∗)≈p(zm) ,候选样本很大概率会被接受。当用Gaussian centred on the current state作建议分布时,用目标高斯分布的最小标准差最合适。
- 任意的椭圆对称分布,如高斯函数都能形成一个Metropolis链
- Metropolis算法有时也被叫做random walk Metropolis-Hastings method;接下来开始介绍Metropolis-Hastings method,很多MCMC算法都可以看成是它的特例。
3. Metropolis-Hastings Algorithm
以下简称M-H算法
它的基本思想跟Metropolis是一样的,唯一的不同是它不要求建议分布是对称的,而且对于一般的M-H算法,它的建议分布可以是任意条件分布。直接贴伪代码吧,有一些notation的区别,但如果上面的算法能看懂,这个也是差不多的,只不过判定标准变了。
可以把
p(x∗)/q(x∗|xi) 看成是重要性比,那么判定标准就是重要性比之比。
所以MH算法的转移核为:
KMH(xi+1|xi)=q(xi+1|xi)A(xi,xi+1)+δ(xi+1−xi)r(xi)
r(xi)=∫Xq(x∗|xi)(1−A(xi,xi+1))dx∗
收敛性质的检验也和Metropolis算法的基本一致。
4. 模拟退火MCMC求最大值
如果我们要求分布p(x)的最大值,最简单的想法也是可以用M-H算法采样到一些样本,然后用样本中的最大值来估计p(x)的最大值。然而这种方法往往很低效,因为随机产生的样本往往不会出现在全局最大值的近邻。于是,有一种方法是采用模拟退火的想法,模拟一个非齐次的马尔可夫链,在第i次迭代它不再是逼近p(x),而是与p(x)的 1/Ti 次方成正比,即:
pi(x)∝p1/Ti(x)
Ti 遵从某种模拟退火的机制使得
limi→∞Ti=0
看伪代码,跟M-H算法也是大同小异
5. 循环核和混合核
MCMC一个很有用的性质它可以组合不同的采样器,比如说,转移核 K1,K2 都定义了相同的不变分布 p(x) ,那么它们的循环核【cycle kernel】 K1K2 和混合核【mixture kernel】 vK1+(1−v)K2,0≤v≤1 定义的分布也收敛于 p(x) 。
6.Gibbs sampling
Gibbs Sampling其实是每次只对一个维度的变量进行采样,固定住其他维度的变量,然后迭代,可以看做是M-H的特例,它的接受率一直是1,即它的建议分布是:
q(x∗|xi)={p(x∗j|xi−j),0,ifx∗−j=xi−jotherwise
相应的接受概率为:
A(xi,x∗)=min{1,p(x∗)q(xi|x∗)p(xi)q(x∗|xi)}=min{1,p(x∗)p(xij|xi−j)p(xi)p(x∗j|x∗−j)}=min{1,p(x∗−j)p(x∗j|x∗−j)p(x∗j|x∗−j)p(xi−j)p(xij|xi−j)p(x∗j|x∗−j)}=min{1,1}=1
最后一个等式成立是因为
x∗−j=xi−j ——每一步除了一个维度,其他维度的分量都是固定的。
这样子接受概率恒等于1,所以Gibbs Sampling的算法伪代码可以简化:
对于维度等于2的情况,Gibbs采样就是data augmentation算法,与EM算法密切相关。
Gibbs采样经常应用到有向无环图【DAG】中,在 采样方法【1】中中有讲到,DAG模型可以分解成一些条件概率的积,即
p(x)=∏jp(xj|xpa(j))
那么对于某个节点
xj 它的全条件分布就是:
p(xj|x−j)=p(xj|xpa(j))∏k∈ch(j)p(xk|xpa(k))
ch(j) 代表节点
xj 的儿子节点。也就是说,我们只需要考虑节点的父母、儿子和儿子的父母这些节点。这些节点统称为节点
xj 的
马尔可夫毯【Markov Blanket】,即下图中的蓝色节点
7. 切片采样【Slice Sampling】
前面讲Metropolis算法的时候提到,步长的大小影响到了接受率和收敛速度。切片抽样是这样子解决这个问题的,先看下面的图:
8. Hybrid Monte Carlo