MCMC方法整理与理解

首先感谢大神的整理
http://www.cnblogs.com/xbinworld/p/4266146.html
这篇博客从这几点引入,并介绍了MCMC方法

  1. 蒙特卡洛数值积分
  2. 均匀分布,Box-Muller 变换
  3. Monte Carlo principle
  4. 接受-拒绝抽样(Acceptance-Rejection sampling)
  5. 重要性抽样(Importance sampling)
  6. 马尔科夫链,马尔科夫稳态
  7. MCMC——Metropolis-Hasting算法
  8. MCMC——Gibbs Sampling算法

下面是我对这方面知识的学习过程

1, 蒙特卡洛数值积分

如果我们要求f(x)的积分,如而f(x)的形式比较复杂积分不好求,则可以通过数值解法来求近似的结果。常用的方法是蒙特卡洛积分:
∫ a b f ( x ) q ( x ) q ( x ) d x \int_a^b {\frac{f(x)}{q(x)}q(x)\quad}{\rm d}x abq(x)f(x)q(x)dx
这样把q(x)看做是x在区间内的概率分布,而把前面的分数部门看做一个函数,然后在q(x)下抽取n个样本,当n足够大时,可以用采用均值来近似:
因此只要q(x)比较容易采到数据样本就行了。随机模拟方法的核心就是如何对一个概率分布得到样本,即抽样(sampling)。下面我们将介绍常用的抽样方法。

[注]关于上述公式的推导和理解

刚开始很难理解,为什么 ∫ a b f ( x ) d x = ∫ a b f ( x ) q ( x ) q ( x ) d x \int_a^b {f(x)}{\rm d}x=\int_a^b {\frac{f(x)}{q(x)}\quad}q(x){\rm d}x abf(x)dx=abq(x)f(x)q(x)dx
而且可以用q(x)的概率分布去近似f(x)的概率分布,这里其实运用到了蒙特卡洛求定积分的期望法,蒙特卡洛求定积分比较好理解的是投点法,期望法的推导如下:
首先我们设 g ∗ ( x ) = f ( x ) q ( x ) g^*(x) = {\frac{f(x)}{q(x)}\quad} g(x)=q(x)f(x),其中 q ( x ) q(x) q(x)为任意一组相互独立且同分布的随机变量 { X i } \lbrace X_i\rbrace {Xi} X i X_i Xi [ a , b ] [a,b] [a,b]上服从分布律 q ( x ) q(x) q(x),那么 q ( x ) q(x) q(x)是随机变量 X X X的PDF(或PMF), g ∗ ( x ) g^*(x) g(x)是关于 x x x的函数,根据LOTUS(law of the unconscious statistician)那么

命题(随机变量的函数的期望规则)设随机变量 X X X的PMF为 p x ( x k ) p_x(x_k) px(xk),又设 g ( x ) g(x) g(x) x x x的函数,则 g ( X ) g(X) g(X)的期望
E [ g ( x ) ] = ∑ k g ( x k ) p x ( x k ) E[g(x)] = \sum_kg(x_k)p_x(x_k) E[g(x)]=kg(xk)px(xk)
推论1 期望和方差的性质
E [ a X + b ] = a E [ x ] + b E[aX+b] = aE[x]+b E[aX+b]=aE[x]+b
D [ a X + b ] = a 2 D [ x ] D[aX+b] = a^2D[x] D[aX+b]=a2D[x]
推论2 方差的计算公式
D [ X ] = E [ X 2 ] − E [ X ] 2 D[X] = E[X^2] - E[X]^2 D[X]=E[X2]E[X]2
推论3 矩的计算公式
E [ ( X − E [ X ] ) n ] = ∑ k ( x − E [ X ] ) n p x ( x k ) E[(X-E[X])^n] = \sum_k(x-E[X])^np_x(x_k) E[(XE[X])n]=k(xE[X])npx(xk)

PDF:概率密度函数(probability density function), 在数学中,连续型随机变量的概率密度函数(在不至于混淆时可以简称为密度函数)是一个描述这个随机变量的输出值,在某个确定的取值点附近的可能性的函数。
PMF : 概率质量函数(probability mass function), 在概率论中,概率质量函数是离散随机变量在各特定取值上的概率。
CDF : 累积分布函数 (cumulative distribution function),又叫分布函数,是概率密度函数的积分,能完整描述一个实随机变量X的概率分布。

E [ g ∗ ( x ) ] = ∫ a b g ∗ ( x ) q ( x ) d x = ∫ a b f ( x ) d x = I E[g^*(x)] = \int_a^b g^*(x)q(x){\rm d}x = \int_a^b {f(x)}{\rm d}x = I E[g(x)]=abg(x)q(x)dx=abf(x)dx=I
由强大数定理
P ( lim ⁡ N → + ∞ 1 N ∑ i = 1 n g ∗ ( X i ) = I ) = 1 P(\lim_{N \to +\infty} {\frac{1}{N}\quad}\sum_{i=1}^ng^*(X_i) = I) = 1 P(N+limN1i=1ng(Xi)=I)=1
若选
I ‾ = 1 N ∑ i = 1 n g ∗ ( X i ) \overline{I} = {\frac{1}{N}\quad}\sum_{i=1}^ng^*(X_i) I=N1i=1ng(Xi)
I ‾ \overline{I} I依概率1收敛到I。平均值法就用 I ‾ \overline{I} I作为I的近似值。


上面是理论部分,下面是实现的过程
假设要计算的积分有如下形式
I = ∫ a b f ( x ) d x I = \int_a^b {f(x)}{\rm d}x I=abf(x)dx
f ( x ) f(x) f(x) [ a , b ] [a,b] [a,b]内可积,任意选择一个有简便办法可以进行抽样的概率密度函数 q ( x ) q(x) q(x),使其满足以下条件

  1. f ( x ) ≠ 0 f(x) ≠ 0 f(x)̸=0时, q ( x ) ≠ 0 q(x) ≠0 q(x)̸=0 ( a ≤ x ≤ b ) (a≤x≤b) (axb)
  2. ∫ a b q ( x ) d x = 1 \int_a^b {q(x)}{\rm d}x = 1 abq(x)dx=1

如果记
g ∗ ( x ) = { f ( x ) q ( x ) , q ( x ) ≠ 0 0 , q ( x ) = 0 g^*(x) = \begin{cases}{\frac{f(x)}{q(x)}\quad}, & \text{$q(x) ≠ 0$} \\ 0, & \text{$q(x) = 0$}\end{cases} g(x)={q(x)f(x),0,q(x)̸=0q(x)=0
那么原积分式可以写成
I = ∫ a b g ∗ ( x ) q ( x ) d x I = \int_a^b g^*(x)q(x){\rm d}x I=abg(x)q(x)dx
因而求积分的步骤是:

  1. 产生服从分布律 q ( x ) q(x) q(x)的随机变量 X i ( i = 1 , 2 , ⋯ , N ) X_i (i=1,2,⋯,N) Xi(i=1,2,,N)
  2. 计算均值
    I ‾ = 1 N ∑ i = 1 n g ∗ ( X i ) \overline{I} = {\frac{1}{N}\quad}\sum_{i=1}^ng^*(X_i) I=N1i=1ng(Xi)
    并用它作为I的近似值,即 I ≈ I ‾ I≈\overline{I} II

如果 a , b a,b a,b为有限值,那么 q ( x ) q(x) q(x)可取作为均匀分布:
q ( x ) = { 1 b − a , q ( x ) ≠ 0 0 , o t h e r w i s e q(x) = \begin{cases}{\frac{1}{b-a}\quad} &,\text{$q(x) ≠ 0$} \\ 0 &,\text{$otherwise$}\end{cases} q(x)={ba10,q(x)̸=0,otherwise
此时原来的积分式变为
I = ( b − a ) ∫ a b g ( x ) 1 b − a d x I = (b-a) \int_a^b {g(x){\frac{1}{b-a}\quad}}{\rm d}x I=(ba)abg(x)ba1dx
具体步骤如下:

  1. 产生服从分布律 q ( x ) q(x) q(x)的随机变量 X i ( i = 1 , 2 , ⋯ , N ) X_i (i=1,2,⋯,N) Xi(i=1,2,,N)
  2. 计算均值
    I ‾ = b − a N ∑ i = 1 N g ∗ ( X i ) \overline{I} = {\frac{b-a}{N}\quad}\sum_{i=1}^Ng^*(X_i) I=Nbai=1Ng(Xi)
    并用它作为I的近似值,即 I ≈ I ‾ I≈\overline{I} II

自此,结束对蒙特卡洛数值积分的理解



2. 均匀分布,Box-Muller 变换

均匀分布很好理解,一般可以表示为X~Uniform[a,b],计算机中的random方法就可以生成[0,1]区间内的随机数,这些随机数总体上服从均匀分布,Box-Muller 变换是通过均匀分布生成正态分布的随机变量。

Box-Muller 变换
如果随机变量 U1,U2 独立且U1,U2∼Uniform[0,1]
Z 0 = − 2 ln ⁡ U 1 cos ⁡ ( 2 π U 2 ) Z_0 = \sqrt{-2\ln U_1}\cos(2\pi U_2) Z0=2lnU1 cos(2πU2)
Z 1 = − 2 ln ⁡ U 1 sin ⁡ ( 2 π U 2 ) Z_1 = \sqrt{-2\ln U_1}\sin(2\pi U_2) Z1=2lnU1 sin(2πU2)
Z 0 , Z 1 Z_0,Z_1 Z0,Z1服从标准正态分布,即 Z 0 Z_0 Z0 Z 1 Z_1 Z1都服从标准正态分布, ( Z 0 , Z 1 ) T (Z_0,Z_1)^T (Z0,Z1)T服从二元标准正态分布

[注]Box-Muller 变换的推导证明过程

PS:刚看完上面蒙特卡洛积分的推导过程,先歇一歇,看看代码去,明天补上0 0

[注]随机数生成算法

先来看一下对随机数的定义

在计算物理学中,随机数被准确地分成了三类:真随机数、准随机数、伪随机数。其中书上的定义为
1)真随机数:产生的数不可预计,也不可能重复产生两个相同的真随机数序列。真随机数只能通过某些随机的物理过程来产生,如放射性衰变、电子设备的热噪声等。
2)准随机数:其随机数序列不具备随机性质,仅仅是用它来处理问题能够得到正确的结果。
3)伪随机数:通过某种数学公式或者算法产生的数值序列。虽然在数学意义上伪随机数是不随机的,但是如果能够通过统计检验,可以当成真随机数使用。

PRNG(Pseudo-random number generator),伪随机数发生器

  1. 梅森旋转算法
  2. 线性同余法

QRNG(Quasi-random number generator),准随机数发生器

  1. Halton序列
  2. Sobol序列
  3. Latin超立方体序列

伪随机数和准随机数的区别,伪随机数在小样本的情况下均匀分布的差异性很大,同样,维数灾难(curse of dimensionality)是另一个造成差异性的原因。准随机数就是生成一个不具备随机性质但是满足均匀分布的样本,用准随机数的蒙特卡罗方法叫做拟蒙特卡罗,在tensorflow的tfp.mcmc.sample_halton_sequence方法中,警告当样本维数不确定的时候,准随机数是完全确定的并且通常具有显着的负自相关。

Warning: The sequence elements take values only between 0 and 1. Care must be taken to appropriately transform the domain of a function if it differs from the unit cube before evaluating integrals using Halton samples. It is also important to remember that quasi-random numbers without randomization are not a replacement for pseudo-random numbers in every context. Quasi random numbers are completely deterministic and typically have significant negative autocorrelation unless randomization is used.

3. Monte Carlo principle(蒙特卡洛原则)

Monte Carlo principle就是上文中对蒙特卡洛数值积分的过程。

4. 接受-拒绝抽样(Acceptance-Rejection sampling)

4、5的内容可以在我的这篇博客中找到(拒绝采样、重要性采样
但是,在高维的情况下,Rejection Sampling 会出现两个问题,第一是合适的 q 分布比较难以找到,第二是很难确定一个合理的 k 值。这两个问题会导致拒绝率很高,无用计算增加。

5. 重要性抽样(Importance sampling)

同样,可惜的是,在高维空间里找到一个这样合适的 q 非常难。即使有 Adaptive importance sampling 和 Sampling-Importance-Resampling(SIR) 的出现,要找到一个同时满足容易采样并且与原样本近似的提议分布,往往是不存在的!

6. 马尔科夫链,马尔科夫稳态

马尔科夫链的剋荣可以在我这篇博客中找到马尔科夫决策过程
在马尔科夫的转移概率矩阵中,任意初始概率分布开始都会收敛到稳定的结果,这个就是马尔科夫收敛定理。

马氏链的收敛定理
如果一个非周期的马尔科夫链具有状态转移矩阵 P P P,且他的任意两个状态是连通的,那么 lim ⁡ N → + ∞ P i j n \lim_{N \to +\infty}P_{ij}^n limN+Pijn存在且与 i i i无关,记 lim ⁡ N → + ∞ P i j n = π ( j ) \lim_{N \to +\infty}P_{ij}^n = \pi(j) limN+Pijn=π(j),我们有

  1. lim ⁡ N → + ∞ P n = [ π ( 1 ) π ( 2 ) … π ( j ) … π ( 1 ) π ( 2 ) … π ( j ) … … … … … … π ( 1 ) π ( 2 ) … π ( j ) … … … … … … ] \lim_{N \to +\infty}P^n = \begin{bmatrix}\pi(1) & \pi(2)& \dots& \pi(j)& \dots \\ \pi(1) & \pi(2)& \dots& \pi(j)& \dots \\ \dots & \dots& \dots& \dots& \dots \\ \pi(1) & \pi(2)& \dots& \pi(j)& \dots \\\dots & \dots& \dots& \dots& \dots \\\end{bmatrix} N+limPn=π(1)π(1)π(1)π(2)π(2)π(2)π(j)π(j)π(j)
  2. π ( j ) = ∑ i = 0 ∞ π ( i ) P i j \pi(j) = \sum_{i=0}^∞\pi(i)P_{ij} π(j)=i=0π(i)Pij
  3. π \pi π π P = π \pi P = \pi πP=π的唯一非负解,其中
    π = [ π ( 1 ) π ( 2 ) … π ( j ) … ] , ∑ i = 0 ∞ π ( i ) = 1 \pi = \begin{bmatrix} \pi(1) & \pi(2)& \dots& \pi(j)& \dots \end{bmatrix},\sum_{i=0}^∞\pi(i) = 1 π=[π(1)π(2)π(j)]i=0π(i)=1
    π \pi π称为马尔科夫链的平稳分布

[注1]要求图是联通的(没有孤立点),同时不存在一个联通的子图是没有对外的出边的(就像黑洞一样)。
这个马氏链的收敛定理非常重要,所有的 MCMC(Markov Chain Monte Carlo) 方法都是以这个定理作为理论基础的。
[注2]马尔可夫链的极限分布性质决定了MCMC是无偏估计(unbiased estimation),即采样数趋于无穷时会得到求解目标数学期望的真实值,这将MCMC与其替代方法,例如变分贝叶斯估计(variational Bayesian inference)相区分,后者计算量通常小于MCMC但无法得到无偏估计。

7. MCMC——Metropolis-Hasting算法

对于给定的概率分布p(x),我们希望能有便捷的方式生成它对应的样本。由于马氏链能收敛到平稳分布, 于是一个很的漂亮想法是:如果我们能构造一个转移矩阵为P的马氏链,使得该马氏链的平稳分布恰好是p(x), 那么我们从任何一个初始状态x0出发沿着马氏链转移, 得到一个转移序列 x0,x1,x2,⋯xn,xn+1⋯,, 如果马氏链在第n步已经收敛了,于是我们就得到了 π(x) 的样本xn,xn+1⋯。
这个绝妙的想法在1953年被 Metropolis想到了,为了研究粒子系统的平稳性质, Metropolis 考虑了物理学中常见的波尔兹曼分布的采样问题,首次提出了基于马氏链的蒙特卡罗方法,即Metropolis算法,并在最早的计算机上编程实现。Metropolis 算法是首个普适的采样方法,并启发了一系列 MCMC方法,所以人们把它视为随机模拟技术腾飞的起点。 Metropolis的这篇论文被收录在《统计学中的重大突破》中, Metropolis算法也被遴选为二十世纪的十个最重要的算法之一。
我们接下来介绍的MCMC 算法是 Metropolis 算法的一个改进变种,即常用的 Metropolis-Hastings 算法。由上一节的例子和定理我们看到了,马氏链的收敛性质主要由转移矩阵P 决定, 所以基于马氏链做采样的关键问题是如何构造转移矩阵P,使得平稳分布恰好是我们要的分布p(x)。如何能做到这一点呢?我们主要使用如下的定理。

定理:[细致平稳条件]
如果非周期的马氏链的转移矩阵 P P P和分布 π ( x ) \pi(x) π(x)满足
π ( i ) P i j = π ( j ) P j i , for all i,j \pi(i)P_{ij} = \pi(j)P_{ji}, \text{for all i,j} π(i)Pij=π(j)Pjifor all i,j
π ( x ) \pi(x) π(x)是马氏链的平稳分布,上式被成为细致平稳条件(detailed balance condition)

假设我们已经有一个状态转移矩阵Q马氏链 ( q ( i , j ) ) (q(i,j)) (q(i,j))表示从状态 i i i转移到状态 j j j的概率,也可以写成 q ( j ∣ i ) q(j|i) q(ji)或者 q ( i → j ) q(i→j) q(ij),显然,通常情况下
p ( i ) q ( i , j ) ≠ p ( j ) q ( j , i ) p(i)q(i,j)≠p(j)q(j,i) p(i)q(i,j)̸=p(j)q(j,i)
也就是细致平稳条件不成立,所以 p ( x ) p(x) p(x)不太可能是这个马氏链的平稳分布。我们可否对马氏链做一个改造,使得细致平稳条件成立呢?譬如,我们引入一个 α ( i , j ) α(i,j) α(i,j),我们希望
p ( i ) q ( i , j ) α ( i , j ) = p ( j ) q ( j , i ) α ( j , i ) p(i)q(i,j)α(i,j) = p(j)q(j,i)α(j,i) p(i)q(i,j)α(i,j)=p(j)q(j,i)α(j,i)
取什么样的 α ( i , j ) α(i,j) α(i,j)以上等式能成立呢?最简单的,按照对称矩阵,我们可以取
α ( i , j ) = p ( j ) q ( j , i ) α(i,j) = p(j)q(j,i) α(i,j)=p(j)q(j,i)
α ( j , i ) = p ( i ) q ( i , j ) α(j,i) = p(i)q(i,j) α(j,i)=p(i)q(i,j)
于是, p ( i ) q ( i , j ) α ( i , j ) = p ( j ) q ( j , i ) α ( j , i ) p(i)q(i,j)α(i,j) = p(j)q(j,i)α(j,i) p(i)q(i,j)α(i,j)=p(j)q(j,i)α(j,i)就成立了,所以有
p ( i ) q ( i , j ) α ( i , j ) = p ( j ) q ( j , i ) α ( j , i ) p(i)q(i,j)α(i,j) = p(j)q(j,i)α(j,i) p(i)q(i,j)α(i,j)=p(j)q(j,i)α(j,i)
其中 Q ′ ( i , j ) = q ( i , j ) α ( i , j ) , Q ′ ( j , i ) = q ( j , i ) α ( j , i ) Q\prime(i,j) = q(i,j)α(i,j),Q\prime(j,i) = q(j,i)α(j,i) Q(i,j)=q(i,j)α(i,j)Q(j,i)=q(j,i)α(j,i)
于是我们把原来具有转移矩阵 Q Q Q的一个很普通的马氏链,改造为了具有转移矩阵 Q ′ Q\prime Q的马氏链,而 Q ′ Q\prime Q恰好满足细致平稳条件,由此马氏链 Q ′ Q\prime Q的平稳分布就是 p ( x ) p(x) p(x)
在改造 Q Q Q的过程中引入的 a ( i , j ) a(i,j) a(i,j)称为接受率,物理意义可以理解为在原来的马氏链上,从状态 i i i q ( i , j ) q(i,j) q(i,j)的概率转跳到状态 j j j的时候,我们以 α ( i , j ) α(i,j) α(i,j)的概率接受这个转移,于是得到新的马氏链 Q ′ Q\prime Q的转移概率为 q ( i , j ) α ( i , j ) q(i,j)α(i,j) q(i,j)α(i,j)
终于,通过上述的推导,对Metropolis-Hasting算法的跳转接受率有了正确的认识。
MCMC采样算法
MCMC采样算法
MCMC采样算法

8. MCMC——Gibbs Sampling算法

  • 2
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值