MCMC详解1——蒙特卡洛方法

MCMC是一种随机采样方法,用来处理一些复杂运算的近似求解。在HMM、LDA等模型中都有重要应用。
下一篇 MCMC详解2——MCMC采样、M-H采样、Gibbs采样



MCMC( Markov Chain Monte Carlo)马尔科夫蒙特卡洛方法,从名称上包含蒙特卡洛方法与马尔科夫链两部分,本文先总结蒙特卡洛方法。

1,蒙特卡洛方法

最早的蒙特卡洛方法都是为了求解一些不太好求解的求和或者积分问题。
MCMC详解1——蒙特卡洛方法
θ=abf(x)dx\theta=\int_{a}^{b}f(x)dx

以上积分是不是很像是连续型数据的概率分布函数?我们这里将他看做一个普通的积分就可以了,如果它真的是,此时f(x)f(x)就是其概率密度函数,那么θ\theta应该为1,不过这里我们将其视为一个用来求解的复杂函数即可。

如果我们很难求出f(x)的原函数,那么这个积分就很难求得。但是我们可以用蒙特卡洛方法求近似值,公式如下:
θ=abf(x)dx=abf(x)p(x)p(x)dx1ni=0n1f(xi)p(xi)\theta=\int_{a}^{b}f(x)dx=\int_{a}^{b}\frac{f(x)}{p(x)}p(x)dx\approx\frac{1}{n}\sum_{i=0}^{n-1}\frac{f(x_i)}{p(x_i)}
突然看这个公式会有点懵,我们一步步分析。

1)如果用x0x_0表示f(x)f(x)上的所有值,来近似表示,那么积分结果为:
(ba)f(x0)(b-a)f(x_0)

2)方法1)显然过于粗糙,我们从区间[a,b]中选取n个样本点xix_i,用他们的均值来表示f(x)f(x)的值,那么积分结果为:
bani=0n1f(xi)\frac{b-a}{n}\sum_{i=0}^{n-1}f(x_i)

3)以上方法都有一个假设:x在区间[a,b]上是均匀分布,这显然是不合理的。f(x)比较复杂,我们假设x在区间[a,b]上符合一个概率密度函数p(x),可以得到如下近似计算公式。
θ=abf(x)dx=abf(x)p(x)p(x)dx1ni=0n1f(xi)p(xi)\theta=\int_{a}^{b}f(x)dx=\int_{a}^{b}\frac{f(x)}{p(x)}p(x)dx\approx\frac{1}{n}\sum_{i=0}^{n-1}\frac{f(x_i)}{p(x_i)}

注:
1)我们假设p(x)p(x)的存在,完全就是为了得到近似积分。这里是近似值,如果p(x)p(x)是均匀分布,就变成了方法2),当然如何f(x)f(x)真的是均匀分布的,结果仍然为1,等式成立。
2)我们没法直接求f(x)f(x)的积分,只能通过假设x的概率密度函数符合p(x)p(x)的情况来计算。这里已经把近似概率分布p(x)p(x)放到了分母的位置,考虑了概率密度分布p(x)的影响,那么积分的式子就是f(xi)p(xi)\frac{f(x_i)}{p(x_i)}基于p(x)p(x)的期望,那么,我们可以用均值近似,然后转化成采集多个符合p(x)p(x)的样本,求相应均值的方案。

所以,只要我们知道了概率密度函数p(x),那么就能得到积分的近似结果(一般p(x)p(x)是可以假设符合某种分布的)。

结论:蒙特卡洛方法将连续积分问题转化为了基于概率密度函数多次采样求期望的问题。

显然这个时候,求解问题的关键就是获得符合概率分布P的样本集,那么如何从概率密度函数p(x)p(x)上进行采样,得到n个样本呢?

对于常见的均匀分布uniform(0,1)是非常容易采样的,一般通过线性同余发生器可以很方便的生成(0,1)之间的伪随机数样本。其他常见的概率分布都可以通过均匀分布的样本转换得到。但是很多时候我们的概率分布并不是常见的分布,如何采样呢?

2,拒绝-接受采样

MCMC详解1——蒙特卡洛方法
步骤:
1)首先设置一个可采样的分布q(x)q(x)(比如高斯分布),以及一个常量k,使得p(x)p(x)总在kq(x)kq(x)的下方。

2)采样得到q(x)q(x)的一个样本,然后从均匀分布(0,kq(z0))(0,kq(z0))中采样,得到一个值u,如果u落在了灰色区域,则拒接这次抽样,否则接受这个样本z0z_0,重复以上过程,得到n个样本,然后利用蒙特卡洛方法求解.

注:
可能有些同学不太理解为什么从均匀分布(0,kq(z0))(0,kq(z_0))中采样,落在灰色区间就拒绝,否则就接受呢?其实这是概率密度函数的概念问题,p和q都是概率密度函数,其下的面积是概率,一个区域的面积可以表示概率分布,从均匀分布(0,kq(z0))(0,kq(z_0))中采样,其实就是在一定程度上表示该样本点z0z_0存在p内的概率大小,虽然一个点对于连续型数据分布来讲没有意义,但是在这条线段上的概率大小是可以表示的。

通过拒接—接受采样,可以解决p(x)p(x)分布不是常见分布的时候,获得样本集,用蒙特卡洛方法求和的目的。但是很多时候该方法不能满足我们的需求得到:
1)一些高维的数据分布,找一个合适的q(x)q(x)kk比较困难。
2)对于二维分布我们只能得到其条件分布,却很难得到二维分布的一般形式。比如q(x,y)q(x,y),拒绝-接受采样只能改变一个纬度得到条件概率,而马尔科夫链可以有效的找到复杂概率分布的采样样本集。

(本文参考了刘建平老师的博客,加入了一些自己的一些理解,有兴趣的可以去拜读原文)

下一篇 MCMC详解2——MCMC采样、M-H采样、Gibbs采样