Markov Chain Monte Carlo 和 Gibbs Sampling算法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Markov Chain Monte Carlo 和 Gibbs Sampling算法相关的知识,希望对你有一定的参考价值。


​Welcome To My Blog​

一.蒙特卡洛模拟

蒙特卡洛模拟(Monte Carlo Simulation)是随机模拟的别名,关于随机模拟的一个重要的问题就是:给定一个概率分布p(x),如何生成它的样本?
一般而言,均匀分布Uniform(0,1)的样本容易生成,而常见的概率分布(连续或离散)都可以基于均匀分布的样本生成,例如正态分布可以通过Box-Muller变换得到.
但是像p(x,y,z)这样甚至更高维度分布的样本很难生成,而MCMC(Markov Chain Monte Carlo)和Gibbs Sampling算法就是解决这个问题的.让我们从马尔科夫链(Markov Chain)说起

二.马尔科夫链

马尔科夫链(Markov Chain),简称马氏链,

定义:

Markov


含义:当前所处状态只和前一个状态有直接联系

非周期马氏链的引出

  • 对于一个有限状态马氏链,如果状态i是经过有限步转移后迟早要返回的状态,则称状态i是常返态.(即若i→j,则j→i;换句话说,从i能到j,一定可以从j到i,i是常返态,j也是常返态;常返态’链’上的状态是常返态),不是常返态的状态称为过渡态(如果k是过渡态,则从k出发后无法再回到k)
  • 如果马氏链中任何两个状态互通(互通的两个状态是常返态),则称马氏链为不可约的
  • 一个有限马氏链按照互通关系所分成的子集中的状态要么是常返的,称为常返类;要么是过渡的,称为过度类.
  • 一个有限马氏链至少有一个常返类和若干个过渡类(对于每一个状态都有入边和出边,所以至少有一个常返类)

    对于非周期马氏链来说,对于它的任意状态i,从状态i出发,可以有非负条路径返回i,在每条路径走过的步数为 (path1,path2,…), 这些path之间的最大公约数是1. eg:(path1=5,path2=9,path3=10)

马氏链的收敛定理

Markov


对于2.和3.两条:

Markov


这个定理非常重要,所有的MCMC方法都是建立在这个定理基础上的(定理的证明非常麻烦,书上也没有给出)

马氏链的任何两个状态相通的含义是:存在一个n,使得P^n的任意元素大于零

由马氏链的收敛定理,我们可以这样做,从马氏链的某个状态出发,按照转移概率矩阵转移,假设第n步后马氏链收敛,则在第n+1步,n+2步…n+j步…所处的状态就是马氏链平稳分布π的样本

三.Metropolis-Hastings算法

虽然马氏链能收敛,但是收敛后的分布不一定是我们想要的,如果让收敛后的分布就是我们希望的分布呢?
马尔科夫链蒙特卡洛方法(MCMC:Markov Chain Monte Carlo)方法就是解决这一问题的
马尔科夫链蒙特卡洛方法被评为二十世纪的十大算法之一

下面介绍原版算法的改进算法:Metropolis-Hastings算法:

Metropolis-Hastings算法是一种马尔科夫蒙特卡洛(MCMC)方法,用于在难以直接采样时从某一概率分布中抽取随机样本序列。得到的序列可用于估计该概率分布或计算积分(如期望值)等。Metropolis-Hastings算法一般用于从多变量(尤其是高维)分布中采样

主要使用如下定理:

Markov


细致平稳条件的直观理解:开始位于状态i,从状态i跳转到状态j的概率等于开始位于状态j,从状态j跳转到状态i的概率

细致平稳条件只是马尔科夫链收敛的充分条件,不是必要条件

一般而言,马氏链对应的概率转移矩阵P不满足细致平稳条件,可以构造出细致平稳条件的等式:

Markov


α(i,j)称为接受率,表示接受从状态i转移到状态j的概率

Markov


但是,α(i,j)或者α(j,i)往往很小,接受转移的概率小会使采样的次数过多,遍历马氏链所有的状态需要非常长的时间,进而导致样本收敛到平稳分布需要非常长的时间

可以把构造出的细致平稳等式两边同时放大一下,将α(i,j),α(j,i)中较大的那个扩成1,也即:

Markov


这个式子是说,当α(i,j)是较大的那一个则取1,当α(i,j)是较小的那一个则取另一个

Metropolis-Hastings算法采样流程

(from Wikipedia)
其中:
A(x’|x)即上面说的接受率α(i,j)=α(x_t+1=j|x_t=i)
g(x’|x_t)即上面说的P_ij=P((x_t+1=j|x_t=i))

Markov


每次从分布g(x’|x_t)中随机产生一个状态x’,再从Uniform(0,1)中随机产生一个数u,如果u大于接受率A(x’|x),认为t+1时刻的状态为x’,即x_(t+1)=x’

采样流程中并没有给出具体的g(x’|x_t)分布也没有给出迭代次数,这些都是自己调整的,比如可以使用高斯分布或者其他方便产生样本的分布

四.Gibbs Sampling

吉布斯采样(Gibbs Sampling)
吉布斯采样是MCMC的一种,用于获得样本序列,这个样本序列构成了马尔科夫链,每个样本之间是相关的,不是独立的!当样本构成的马氏链收敛后,马氏链的平稳分布便能拟合含有多个多变量的分布,比如近似一个很难直接采样的联合概率分布,前提是得知道每个变量的条件概率
吉布斯采样是一种随机算法(使用随机数),常用于贝叶斯推理(因为贝叶斯网络含有条件概率的集合),作为随机算法,它是用于统计推理的确定性算法(如EM算法:expectation-maximization algorithm)的一种替代方法
再回到之前Metropolis-Hastings算法,由于有接受率的存在,并不能保证每次的采样结果都被接收,所以会导致收敛前采样次数的增加,而吉布斯采样就能保证每次采样的结果可以使用.

吉布斯采样流程

Markov

注意事项:
1. 初始化的值可以随机给定,或者根据EM算法给定
2. 实际上没有必要着重处理初始值,因为一般都是直接忽略前面的样本的(叫作:burn-in period),毕竟需要跳转足够多的次数后马氏链才收敛,
3. 联合分布的参数通过将k个样本的参数平均后近似
4. 举个例子:直接忽略前1000个样本,之后每100个样本拿出一个,比如取出第1100,1200,1300,….2000个样本做平均,因为连续采出的样本不独立
5. 在采样的早期,常用模拟退火来减少随机游走行为 (i.e. the tendency to move slowly around the sample space, with a high amount of autocorrelation between samples, rather than moving around quickly, as is desired).

参考:
靳志辉,LDA数学八卦
田宝玉,信息论基础


以上是关于Markov Chain Monte Carlo 和 Gibbs Sampling算法的主要内容,如果未能解决你的问题,请参考以下文章

论文笔记 Bayesian Probabilistic Matrix Factorizationusing Markov Chain Monte Carlo (ICML 2008)

Monte Carlo Integration

Monte-Carlo Dropout

python inefficient_monte_carlo.py

python monte_carlo_integration2.py

Experiment 22 - Monte Carlo Simulation