文章目录
近期在学习MCMC(Markov Chain Monte Carlo)算法,但是看了网上的博客发现,大家都是在讲如何什么是马尔科夫链,如何构造马尔科夫链。这对于一个做工程的学生来说很不友好,相比于严谨的证明,我们更想知道这个算法是为了解决什么问题,应该如何使用。
- 在这篇文章里面,我梳理了MCMC算法的发展之路 。
我们常常用期望值来估计一些未知的参数,然而期望值的积分有时候很难算,此时就出现了蒙特卡洛方法求取近似数值解。但是蒙特卡洛遇到了采样难的问题,因此出现了各种采样的方法,MCMC就是其中之一。
怎么计算期望
对于一个随机变量 X X X而言,它可以取许多许多数值,但是取到每个数值是有一定概率的。取到某些值的概率比较大,取到某些值的概率比较小,取到每个值的概率画成一张图就是概率密度图。通常,我们也会用随机变量的期望 E ( x ) E(x) E(x)来描述这个随机变量的性质,期望 E ( x ) E(x) E(x)的计算公式如下:
E ( X ) = ∫ x p ( x ) d x E(X) = \int xp(x)dx E(X)=∫xp(x)dx
如果这时候存在一个关于随机变量的函数 g ( x ) g(x) g(x),实际上 Y = g ( x ) Y=g(x) Y=g(x)也是个随机变量。此时期望 E ( Y ) = E [ g ( x ) ] E(Y)=E[g(x)] E(Y)=E[g(x)]可以用如下公式计算:
E ( Y ) = E [ g ( x ) ] = ∫ g ( x ) p ( x ) d x E(Y) = E[g(x)] = \int g(x)p(x)dx E(Y)=E[g(x)]=∫g(x)p(x)dx
其中, p ( x ) p(x) p(x)是随机变量 X X X的概率密度函数。
在这里,期望是一个积分的形式,当这个积分难以写出显式解(表达式)的时候,就可以用蒙特卡洛模拟的方法去近似计算这个积分值,从而计算出期望。
用蒙特卡洛方法计算期望(积分)
蒙特卡洛方法给出的计算积分的方法是:生成一系列服从 p ( x ) p(x) p(x)分布的 x i x_i xi,然后算出一系列 g ( x i ) g(x_i) g(xi),然后用这些值的平均值近似代替我想要的积分值。这篇博客里面写了证明,用公式描述就是:
E ( Y ) ≈ 1 N Σ i = 1 N g ( x i ) w h e r e x i ∼ p ( x ) E(Y) \approx \frac{1}{N}\Sigma_{i=1}^{N}g(x_i) \\ where \ x_i \sim p(x) E(Y)≈N1Σi=1Ng(xi)where xi∼p(x)
那么问题来了,应该怎么取服从 p ( x ) p(x) p(x)分布的 x i x_i xi呢?这里的 p ( x ) p(x) p(x)是概率密度函数(Probability Density Function, PDF),实际上如果能把概率密度函数写成概率分布函数(Cumulative Distribution Function, CDF)就方便了,CDF实际上就是PDF的积分。举个例子:
假设我们要取服从正态分布 N ( 0 , 1 ) \mathcal{N}(0,1) N(0,1)的100个样本 [ x 1 , . . . , x 100 ] [x_1,...,x_{100}] [x1,...,x100]。已知其PDF,由PDF计算出CDF如下图: