MCMC
2022-10-18

 

前置知识

  1. PDF:概率密度函数

  2. CDF:累积概率密度函数

  3. 示性函数(Indicator function)

    (1)IX(x)=I{xX}={1xX0xX

    示性函数有如下性质:示性函数的期望等于下标事件发生的概率

    (2)EI{xX}=1P{xX}+0P{xX}=P{xX}
  4. 指数分布

    (3)f(x)=θeθx(x>0)F(x)=1eθx(x>0)
  5. 高斯分布

    (4)P(x)=ϕ(x)=12πσe(xμ)22σ2

 

MCMC简介

蒙特卡罗法(Monte Carlo method)是通过从概率模型随机抽样然后进行近似数值计算的方法。马尔可夫链蒙特卡罗法(Markov Chain Monte Carlo, MCMC),则是以马尔可夫链为概率模型的蒙特卡罗法。MCMC构建一个马尔可夫链,使其平稳分布就是要进行抽样的分布,首先基于该马尔可夫链进行随机游走,产生样本的序列,之后使用该平稳分布的样本进行近似数值计算。

MCMC包含MH(Metropolis-Hastings)算法和吉布斯抽样算法。

MCMC可用于概率分布的估计、定积分的近似计算、最优化问题求解等问题。

 

蒙特卡罗法

随机抽样

蒙特卡罗法要解决的问题是:假设概率分布已知,通过抽样获得概率分布的随机样本,然后使用随机样本对概率分布的特征进行分析。例如,通过计算样本均值,从而估计总体期望。

因此,蒙特卡洛法的核心是随机抽样

一般的蒙特卡罗法包括:直接抽样、接受-拒绝抽样、重要性抽样。后两者适合于概率密度函数复杂,不能直接抽样的情况。

直接抽样(逆采样)

对于均匀分布,一般可以使用线性同余发生器生成(0,1)之间的伪随机数。那么,对于其它分布,将其采样转换为(0,1)均匀分布进行采样。转换的方法为:

  1. 确定待采样分布的概率密度函数:f(x),待采样的随机变量为:x

  2. 假设(0,1)均匀分布的随机变量为:z

  3. 求该概率密度函数的累积概率密度函数:F(x)

  4. 由于0z10F(x)1,因此可以定义z=F(x),解得:x=G(z)

    所以,通过均匀分布采样得到z,带入G(z)即可得到x

    下图以指数分布进行映射示例:

    逆采样

 

接受-拒绝采样

接受决绝

假设p(x)不可以直接抽样。可以找一个可以直接抽样的分布,称为建议分布。假设q(x)是建议分布的概率密度函数,并且kq(x)>p(x),k>0。定义接受-拒绝算法如下:

输入:待抽样概率密度函数p(x),满足条件的kq(x)

输出:随机样本x1,x2,,xn,其中,n为参数

步骤:

  1. q(x)中抽样,得到样本x

  2. 从(0,1)均匀分布中抽样,得到u

  3. 如果up(x)kq(x),则将x作为抽样样本,否则,回到步骤1

  4. 直到得到n个随机样本,结束。

重要性采样

函数f(x)在分布p(x)下的期望也可以写为:

(5)Ep[f(x)]=xf(x)p(x)dx=xf(x)p(x)q(x)q(x)dx=xf(x)w(x)q(x)dx=Eq[f(x)w(x)]w(x)

重要性采样(Importance Sampling)是通过引入重要性权重,将分布p(x)f(x)的期望变为在分布q(x)f(x)w(x)的期望,从而可以近似为:

(6)f^N=1N(f(x(1))w(x(1))++f(x(N))w(x(N)))x(1),x(2),,x(N)q(x)

案例:f(x)N(0,1),使用采样方法求P(X>8)的概率。

解答:如果直接从f(x)中采样,只有极少数的点会大于8,因此考虑使用重要性采样法求解。

定义g(x)N(8,1),将目标问题进行如下转换:

(7)P(X>8)=Ef[Ix>8]=RIx>8f(x)dx=RIx>8f(x)g(x)g(x)dx=RIx>812πex2212πe(x8)2212πe(x8)22dx=RIx>8e328x12πe(x8)22dx

定义w(x)=Ix>8e328x。此时,可以将原问题转为函数w(x)关于概率分布g(x)期望的问题。接下来,可以从g(x)中进行采样,得到样本序列x1,x2,,xN,将采样点带入w(x),可以得到对概率的估计值:

(8)P(X>8)1Ni=1NIxi>8e328xi

 

应用

期望计算

假设有随机变量xX,其概率密度函数为p(x)f(x)为定义在X上的函数,目标是求函数f(x)关于密度函数p(x)的数学期望Ep(x)[f(x)]。针对该问题,蒙特卡罗法通过如下步骤进行解决:

  1. 按照概率分布p(x)独立地抽取n个样本x1,x2,,xn

  2. 计算函数f(x)的样本均值f^n

    (9)f^n=1ni=1nf(xi)
  3. 根据大数定律,当样本容量足够大时,样本均值以概率1收敛于数学期望:

    (10)f^nEp(x)[f(x)],n
  4. 综上述,数学期望的近似值为:

(11)Ep(x)[f(x)]1nnf(xi)

 

积分计算

假设有一个函数h(x),目标是计算该函数的积分:Xh(x)dx

如果将h(x)分解为一个函数f(x)和一个概率密度函数p(x)乘积的形式,那么有:

(12)Xh(x)dx=Xf(x)p(x)dx=Ep(x)[f(x)]

因此,函数h(x)的积分可以表示为函数f(x)关于概率密度函数p(x)的期望。而数学期望又可以通过样本均值进行估算。于是,可以通过样本均值近似计算积分,即:

(13)Xh(x)dx=Ep(x)[f(x)]1ni=1nf(xi)

马尔可夫链

基本定义

给定一个随机变量序列X={X0,X1,,Xt,}Xt表示时刻t的随机变量,该随机变量在不同时刻的取值集合相同,即状态空间相同,表示为S。随机变量可以是离散的,也可以是连续的。

如果随机变量的状态仅依赖于前一个状态,即:

(14)P(XtX0,X1,,Xt1)=P(XtXt1),t=1,2,

该性质称为马尔可夫性

具有马尔可夫性的随机序列X={X0,X1,,Xt,}称为马尔可夫链,或马尔科夫过程。条件概率分布P(XtXt1)称为马尔可夫链的转移概率分布

若转移概率分布P(XtXt1)t无关,即:

(15)P(Xt+sXt1+s)=P(XtXt1),t=1,2,;s=1,2,

则称该马尔可夫链为时间齐次的马尔可夫链。本文的马尔可夫链都是时间齐次的。

离散状态马尔可夫链

转移概率矩阵和状态分布

若马尔可夫链在时刻t1处于状态j,在时刻t移动到状态i,将转移概率记作:

(16)pij=P(Xt=iXt1=j),i=1,2,;j=1,2,pij0ipij=1

马尔可夫链的转移概率pij可由矩阵表示,即:

(17)P=[p11p12p13p21p22p23p31p32p33]pij0ipij=1

考虑马尔可夫链X={X0,X1,,Xt,}在时刻t(t=0,1,2,)的概率分布,称为时刻t状态分布,记作:

(18)π(t)=[π1(t)π2(t)]πi(t)tiP(Xt=i)

对于初始分布π(0),其向量通常只有一个分量为1,其余为0,表示马尔可夫链从一个具体状态开始。

马尔可夫链X在时刻t的状态分布,可以由时刻t1的状态分布以及转移概率分布决定:

(19)π(t)=Pπ(t1)

这是因为(对时刻t状态为i进行推导,其余状态类似):

(20)πi(t)=P(Xt=i)=jP(Xt=iXt1=j)P(Xt1=j)=jpijπj(t1)

假设有三个状态,那么转移公式为:

(21)[p11p12p13p21p22p23p31p32p33][π1(t1)π2(t1)π3(t1)]=[π1(t)π2(t)π3(t)]

马尔可夫链在时刻t的状态分布,可以通过递推得到。由上述公式:

(22)π(t)=Pπ(t1)=P(Pπ(t2))=P2π(t2)

通过递推得到:

(23)π(t)=Ptπ(0)

其中,Pt称为t步转移概率矩阵,表示时刻0从状态j出发,时刻t到达状态it步转移概率:

(24)Pijt=P(Xt=iX0=j)

平稳分布

对马尔可夫链X={X0,X1,,Xt,},其状态空间为S,转移概率矩阵为P=(pij),如果存在状态空间S上的一个分布:

(25)π=[π1π2]

使得:

(26)π=Pπ

则称π为马尔可夫链X={X0,X1,,Xt,}的平稳分布。

直观上,如果马尔可夫链的平稳分布存在,那么以该分布为初始分布,然后进行随机状态转移,之后任何一个时刻的状态分布都是平稳分布。

 

连续状态马尔可夫链

将离散状态马尔可夫链中的转移概率矩阵替换为转移核,其它概率类似,不再赘述。

 

马尔可夫链性质

  1. 不可约

    从任意状态出发,当经过充分长时间后,可以到达任意状态。

  2. 非周期

    不存在一个状态,从该状态出发,再返回该状态,经历的时间呈周期性。

  3. 正常返

    对其中任意一个状态,从其它任意一个状态出发,当时间趋于无穷时,首次转移到这个状态的概率不为0。

  4. 遍历定理

    如果马尔可夫链是不可约、非周期且正常返的,则该马尔可夫链有唯一平稳分布。

    满足相应条件的马尔可夫链,当时间趋于无穷时,其状态分布接近于平稳分布。(注:可以理解为首先初始化一个状态分布,然后通过无数次迭代转移,最后状态分布趋于平稳分布)。

  5. 可逆马尔可夫链

    如果对马尔可夫链,满足:

    (27)πjP(Xt=iXt1=j)=πiP(Xt1=jXt=i),i,j=1,2,

    或者简写为(此式称为细致平衡方程):

    (28)πjpij=πipji

    则称该马尔可夫链为可逆的马尔可夫链。

  6. (定理)满足细致平衡方程的状态分布π,就是该马尔可夫链的平稳分布,即Pπ=π,证明如下:

    (29)Pπi=jpijπj=jpjiπi=πijpji=πi,i=1,2,

马尔可夫链蒙特卡罗法

基本步骤

马尔可夫链蒙特卡罗法的基本步骤如下:

  1. 在随机变量x的状态空间S上构造一个满足遍历定理的马尔可夫链,使其平稳分布为目标分布p(x)

  2. 从状态空间的某一点x0出发,用构造的马尔可夫链进行随机游走,产生样本序列x0,x1,x2,,xt,

  3. 应用马尔可夫链的遍历定理,确定正整数mnm<n,前m个样本处于燃烧期,被丢弃掉。得到样本集合xm+1,xm+2,,xn,求得函数f(x)的均值(遍历均值)

    (30)E^f=1nmi=m+1nf(xi)

需要考虑的几个重要问题:

  1. 如何定义马尔可夫链,保证马尔可夫链蒙特卡罗法的条件成立;
  2. 如何确定收敛步数m,保证样本抽取的无偏性;
  3. 如何确定迭代步数n,保证遍历均值计算的精度。

 

Metropolis-Hastings 算法

马尔可夫链

假设要抽样的概率分布为p(x),M-H算法采用转移核为p(x,x)的马尔可夫链:

(31)p(x,x)=q(x,x)α(x,x)q(x,x)α(x,x)

建议分布q(x,x)为另一个马尔可夫链的转移核,并且是不可约的,同时是一个容易抽样的分布。

接受分布α(x,x)定义如下:

(32)α(x,x)=min{1,p(x)q(x,x)p(x)q(x,x)}

那么,转移核p(x,x)可以写为:

(33)p(x,x)={q(x,x),p(x)q(x,x)p(x)q(x,x)q(x,x)p(x)p(x),p(x)q(x,x)<p(x)q(x,x)

转移核为p(x,x)的马尔可夫链上的随机游走以如下方式进行:

  1. 假设时刻t1状态为x,即xt1=x

  2. 按建议分布q(x,x)抽样产生一个候选状态x

  3. 按照接受分布α(x,x)抽样决定是否接受x:接受概率为α(x,x),拒绝概率为1α(x,x)。具体地,从区间(0,1)上均匀分布抽取一个随机数u,决定时刻t的状态:

    (34)xt={x,uα(x,x)x,u>α(x,x)

    如果接受,则时刻t转移到x,否则,仍停留在状态x

 

可以证明,转移核为p(x,x)的马尔可夫链是可逆马尔可夫链(满足遍历定理),其平稳分布就是p(x),即要抽样的目标分布。

证明过程:

  1. 如果x=x,显然p(x)p(x,x)=p(x)p(x,x)成立

  2. 如果xx,则

    (35)p(x)p(x,x)=p(x)q(x,x)min{1,p(x)q(x,x)p(x)q(x,x)}=min{p(x)q(x,x),p(x)q(x,x)}=p(x)q(x,x)min{p(x)q(x,x)p(x)q(x,x),1}=p(x)q(x,x)α(x,x)=p(x)p(x,x)

    因此,p(x)p(x,x)=p(x)p(x,x)也成立,该马尔可夫链为可逆马尔可夫链。

  3. p(x)p(x,x)=p(x)p(x,x)可知:

    (36)p(x)p(x,x)dx=p(x)p(x,x)dx=p(x)p(x,x)dx=p(x)

    根据平稳分布的定义,p(x)是马尔可夫链的平稳分布。

 

建议分布

建议分布q(x,x)有多种可能的形式,以下介绍常用的两种。

  1. 对称式

    假设建议分布是对称的,即对任意的xx,有:

    (37)q(x,x)=q(x,x)

    如果选择该分布,也可称为Metropolis算法。此时,接受分布α(x,x)可以简化为:

    (38)α(x,x)=min{1,p(x)p(x)}

    Metropolis选择的一个特例是q(x,x)取条件概率分布p(xx),定义为多元正态分布,其均值为x,其协方差矩阵是常数矩阵。

    Metropolis选择的特点是当xx接近时,q(x,x)的概率值高,否则q(x,x)的概率值低。状态转移在附近点的可能性更大

     

  2. 独立抽样

    假设q(x,x)与当前状态x无关,即q(x,x)=q(x),建议分布的计算按照q(x)独立抽样进行。

    独立抽样实现简单,但是收敛速度可能较慢,通常选择接近目标分布p(x)的分布作为建议分布q(x)

 

满条件分布

马尔可夫链蒙特卡罗法的目标分布通常是多元联合概率分布p(x)=p(x1,x2,,xk)x=(x1,x2,,xk)Tk维随机变量。如果条件概率分布p(xIxI)中所有k个变量都出现,其中xI={xi,iI},xI={xi,iI},IK={1,2,,k},那么这种条件概率分布为满条件概率分布。

满条件概率分布有以下性质,对任意的x,xX和任意的IK,有:

(39)p(xIxI)=p(x)p(x)dxIp(x)p(xIxI)p(xIxI)=p(x)p(x)

在MH算法中,可以利用该性质简化计算,提高计算效率。具体地,p(xIxI)p(xIxI)p(x)p(x)更容易计算。

 

MH算法步骤

输入:待抽样的目标分布p(x),函数f(x),建议分布q(x)

输出:p(x)的随机样本xm+1,xm+2,,xn,函数样本均值fmn

参数:收敛步数m,迭代步数n

步骤:

  1. 任意选择一个初始值x0

  2. i=1,2,,n循环执行

    a) 设状态xi1=x,按照建议分布q(x,x)随机抽取一个候选状态x

    b) 计算接受概率

    (40)α(x,x)=min{1,p(x)q(x,x)p(x)q(x,x)}

    c) 从区间(0,1)中按均匀分布随机抽取一个数u

    uα(x,x),则状态xi=x,否则,状态xi=x

  3. 得到样本集合xm+1,xm+2,,xn,计算

    (41)fmn=1nmi=m+1nf(xi)

吉布斯抽样

基本原理

吉布斯抽样是MH算法的特殊情况,多用于多元变量联合分布的抽样和估计。其基本做法是,从联合概率分布定义满条件概率分布,依次对满条件概率分布进行抽样,得到样本的序列。

假设多元变量的联合概率分布为p(x)=p(x1,x2,,xk)。吉布斯抽样从一个初始样本x(0)=(x1(0),x2(0),,xk(0))T出发,不断迭代,每次迭代得到联合分布的一个样本x(i)=(x1(i),x2(i),,xk(i))T。最终,得到抽样样本序列x(0),x(1),,x(n)

在每次迭代中,依次对k个随机变量中的一个变量进行抽样。例如,在第i次迭代中,对第j个变量进行随机抽样,那么抽样的分布是满条件概率分布p(xjxj(i))

假设在第i1步得到样本(x1(i1),x2(i1),,xk(i1))T,在第i步,首先对第一个变量按照以下满条件概率分布随机抽样:

(42)x1(i)p(x1x2(i1),x3(i1),,xk(i1))x2(i)p(x2x1(i),x3(i1),,xk(i1))x3(i)p(x3x1(i),x2(i),x4(i1),xk(i1))xj(i)p(xjx1(i),,xj1(i),xj+1(i1),,xk(i1))xk(i)p(xkx1(i),x2(i),,xk1(i))

于是得到第i步的整体样本x(i)=(x1(i),x2(i),,xk(i))T

 

吉布斯抽样是单分量MH算法的特殊情况。定义建议分布是当前变量xj(j=1,2,,k)的满条件概率分布:

(43)q(x,x)=p(xjxj)

这时,接受概率α=1

(44)α(x,x)=min{1,p(x)q(x,x)p(x)q(x,x)}=min{1,p(xj)p(xjxj)p(xjxj)p(xj)p(xjxj)p(xjxj)}=1

这里用到p(xj)=p(xj)p(xj)=p(xj)

转移核就是满条件概率分布:

(45)p(x,x)=p(xjxj)

吉布斯抽样对每次抽样的结果都接受,没有拒绝,这一点和一般的MH算法不同。

这里,假设满条件概率分布p(xjxj)不为0,即马尔可夫链是不可约的。

 

吉布斯抽样算法步骤

输入:目标概率分布的密度函数p(x),函数f(x)

输出:p(x)的随机样本xm+1,xm+2,,xn,函数样本均值fmn

参数:收敛步数m,迭代步数n

步骤:

(1) 初始化样本x(0)=(x1(0),x2(0),,xk(0))T

(2) 对步数i进行循环

设第i1次迭代的样本为x(i1)=(x1(i1),x2(i1),,xk(i1))T,则第i次迭代进行如下几步操作:

(1) 由满条件概率分布p(x1x2(i1),,xk(i1))抽取x1(i)

(j) 由满条件概率分布p(xjx1(i),,xj1(i),xj+1(i1),,xk(i1))抽取xj(i)

(k) 由满条件概率分布p(xkx1(i),,xk1(i))抽取xk(i)

得到第i次迭代值x(i)=(x1(i),x2(i),,xk(i))T

(3) 得到样本集合

(46){x(m+1),x(m+2),,x(n)}

(4) 计算

(47)fmn=1nmi=m+1nf(x(i))

吉布斯抽样示例

假设要采样的是二维正态分布N(μ,Σ),其中:

(48)μ=(μ1,μ2)=(5,1)Σ=(σ12ρσ1σ2ρσ1σ2σ22)=(1114)ρ=0.5

首先,需要求状态转移满条件分布:

(49)P(x1x2)=N(μ1+ρσ1/σ2(x2μ2),(1ρ2)σ12)P(x2x1)=N(μ2+ρσ2/σ1(x1μ1),(1ρ2)σ22)

证明:已知

(50)f(x1,x2)=12πσ1σ21ρ2exp{12(1ρ2)[(x1μ1σ1)22ρ(x1μ1σ1)(x2μ2σ2)+(x2μ2σ2)2]}f(x2)=12πσ2exp{(x2μ2)22σ22}

因此:

(51)f(x1x2)=12πσ11ρ2exp{12(1ρ2)σ12[x1μ1σ1σ2ρ(x2μ2)]2}

确定了目标分布的满条件分布,接下来可以使用吉布斯抽样得到样本:

  1. 采样一个初始状态:(x1(0),x2(0)),设燃烧期样本数为m,需要得到的样本数为n

  2. for i in range(1, m+n):

    x1(i)P(x1x2(i1))

    x2(i)P(x2x1(i1))

  3. 得到样本集合{(x1(m+1),x2(m+1)),(x1(m+2),x2(m+2)),,(x1(m+n),x2(m+n))}

 

参考文档

  1. 李航 《统计学习方法》
  2. 第十九课 马尔可夫链蒙特卡罗法 (julyedu.com)
  3. 蒙特卡罗算法 - 知乎 (zhihu.com)
  4. (1 封私信 / 62 条消息) 如何理解蒙特卡洛方法的接受拒绝采样? - 知乎 (zhihu.com)
  5. 使用蒙特卡洛计算定积分(附Python代码) - Ji-Huan Guan (guanjihuan.com)
  6. (145条消息) MCMC方法与示例禾雨辰子的博客-CSDN博客_mcmc方法
  7. 你一定从未看过如此通俗易懂的马尔科夫链蒙特卡罗方法(MCMC)解读(上) - 知乎 (zhihu.com)
  8. 你一定从未看过如此通俗易懂的马尔科夫链蒙特卡罗方法(MCMC)解读(下) - 知乎 (zhihu.com)
  9. (144条消息) python实现Metropolis采样算法实例_David-Chow的博客-CSDN博客
  10. Monte Carlo笔记-2:MCMC,附简易python代码 - simplex - 博客园 (cnblogs.com)
  11. 用Python实现马尔可夫链蒙特卡罗 - 知乎 (zhihu.com)
  12. 如何快速理解马尔科夫链蒙特卡洛法? - 知乎 (zhihu.com)
  13. 机器学习中的数学-07讲-常见的采样方法4 (重要性采样1)哔哩哔哩bilibili
  14. Markov Chain Monte Carlo (MCMC) — Computational Statistics in Python 0.1 documentation (duke.edu)