采样方法【2】——MCMC

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)
证明:
zp(z)T(z,z)=zp(z)T(z,z)=p(z)zp(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个被拒绝。


采样方法【2】——MCMC_第1张图片

我们可以通过检验Metropolis链是否满足细致平衡方程来判定它是否收敛到要求的不变分布。首先一个充分条件是对于所有的 za zb ,满足 q(za|zb)>0 ,这是为了确保各态遍历性;其次,考虑链中的一对连续值 (z,z) ,不失一般性的,假设 p(x)p(x)

  • x x ,根据算法的评判标准,这个转移一定会成功,即前向联合概率【细致平衡方程的左边】为: p(x)q(x|x)
  • x x ,成功的概率只有 p(x)/p(x) ,所以转移到 x 的概率为:
    p(x|x)=p(x)p(x)q(x|x)=p(x)p(x)q(x|x)
    即反向联合概率【细致平衡方程的右边】为 p(x)p(x|x)=p(x)q(x|x) 等于左边。最后一个等式成立的原因是Metropolis算法要求建议分布要对称

注:

  • 选择建议分布要在接受率和收敛速度之间做一个平衡。移动步长小的接受率高,收敛速度慢;移动步长大的接受率低,收敛速度快——因为步长小的很容易移动到一个候选样本 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的区别,但如果上面的算法能看懂,这个也是差不多的,只不过判定标准变了。


采样方法【2】——MCMC_第2张图片

可以把 p(x)/q(x|xi) 看成是重要性比,那么判定标准就是重要性比之比。
所以MH算法的转移核为:
KMH(xi+1|xi)=q(xi+1|xi)A(xi,xi+1)+δ(xi+1xi)r(xi)
r(xi)=Xq(x|xi)(1A(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 遵从某种模拟退火的机制使得 limiTi=0
看伪代码,跟M-H算法也是大同小异


采样方法【2】——MCMC_第3张图片

5. 循环核和混合核

MCMC一个很有用的性质它可以组合不同的采样器,比如说,转移核 K1,K2 都定义了相同的不变分布 p(x) ,那么它们的循环核【cycle kernel】 K1K2 混合核【mixture kernel】 vK1+(1v)K2,0v1 定义的分布也收敛于 p(x)

  • 混合核具有能集成全局建议分布探索全部状态空间和局部建议分布探索局部空间细节的优点【global and local proposals】。这个性质在目标分布有很多“尖峰”时很有用:可以用全局建议分布锁定“尖峰”,然后用局部建议分布【如random walk】探索每个“尖峰”周围的状态空间。一般算法如下:

    采样方法【2】——MCMC_第4张图片
  • 循环核允许我们将一个多变量的状态向量分割成块,每个块单独更新。如果相关的变量被分到同一个块里面,那么收敛的速度将会加快。对于一个分块MCMC采样器,假设总共有M个块, xi+1j={xi+11,...,xi+1j1,xij+1,...,xiM} ,则循环核定义为:
    KMHCycle(xi+1|xi)=j=1MKMH(xi+1j|xi+1j)
    下面即将要讲的Gibbs sampling就是循环核的一种,它采用全条件分布。循环核的一般算法如下【又有一些notation的差别,不过应该不影响理解,见谅见谅】:

    采样方法【2】——MCMC_第5张图片

6.Gibbs sampling

Gibbs Sampling其实是每次只对一个维度的变量进行采样,固定住其他维度的变量,然后迭代,可以看做是M-H的特例,它的接受率一直是1,即它的建议分布是:

q(x|xi)={p(xj|xij),0,ifxj=xijotherwise

相应的接受概率为:
A(xi,x)=min{1,p(x)q(xi|x)p(xi)q(x|xi)}=min{1,p(x)p(xij|xij)p(xi)p(xj|xj)}=min{1,p(xj)p(xj|xj)p(xj|xj)p(xij)p(xij|xij)p(xj|xj)}=min{1,1}=1

最后一个等式成立是因为 xj=xij ——每一步除了一个维度,其他维度的分量都是固定的。
这样子接受概率恒等于1,所以Gibbs Sampling的算法伪代码可以简化:


采样方法【2】——MCMC_第6张图片

对于维度等于2的情况,Gibbs采样就是data augmentation算法,与EM算法密切相关。
Gibbs采样经常应用到有向无环图【DAG】中,在 采样方法【1】中中有讲到,DAG模型可以分解成一些条件概率的积,即
p(x)=jp(xj|xpa(j))

那么对于某个节点 xj 它的全条件分布就是:
p(xj|xj)=p(xj|xpa(j))kch(j)p(xk|xpa(k))
ch(j) 代表节点 xj 的儿子节点。也就是说,我们只需要考虑节点的父母、儿子和儿子的父母这些节点。这些节点统称为节点 xj 马尔可夫毯【Markov Blanket】,即下图中的蓝色节点

采样方法【2】——MCMC_第7张图片

7. 切片采样【Slice Sampling】

前面讲Metropolis算法的时候提到,步长的大小影响到了接受率和收敛速度。切片抽样是这样子解决这个问题的,先看下面的图:


采样方法【2】——MCMC_第8张图片

8. Hybrid Monte Carlo

你可能感兴趣的:(采样方法【2】——MCMC)