MCMC
The Big Picture
假如你在没有任何统计数据支撑的情况下,想知道中国的人口地理重心,该怎么办?按照MCMC的观点,应该这样:
- 随便去一个地方xt,数一数方圆1公里的人口数量π(xt)
- 再以一定概率从xt去另一个地方\(x_\),数一数人口\(\pi(x_)\),但只以一定概率α保留它
- 重复以上过程很多次,获得很多个旅行记录
- 以人口为权重,对这些记录的地理位置进行加权求和
这里前3步即MCMC的过程,最后一步是使用样本点对分布参数进行的估计,其中α可利用Markov的平稳条件得到。
Monte Carlo
Monte Carlo模拟简称MC。早期的MC都是用来解决一些不太好解决的求和和积分问题,例如,特定概率密度函数下的期望求解任务。例如: θ=∫baf(x)dx
这个积分如果难解的话可以使用采样多个点的形式来进行估计: b−ann−1∑i=0f(xi)
同时,如果x在[a,b]之间不是均匀的,则需要引入一个x的概率分布p(x),原积分表达式可以写为: θ=∫baf(x)dx=∫baf(x)p(x)p(x)dx≈1nn∑i=1f(xi)p(xi)
上述即为MC的一般形式。但这里还有一个问题,即如何根据p(x)获得基于该分布的n个x样本,尤其是如果p(x)的概率分布非常复杂,那么就需要采用别的手段实现x的采样,一种可行的方式是接受-拒绝采样。
接受-拒绝采样分为以下步骤:
- 考虑找到一个方便采样的函数q(x),以及一个常量k,使得p(x)总在kq(x)的下方(这里需要进行试算函数q(x)的具体参数)。
- 采样q(x)得到一个样本z1。
- 从均匀分布(0,kq(z1))中采样得到一个值u。如果u在图中灰色区域则拒绝样本z1,否则则接受。
- 得到n个接受的样本点为z1,z2,…zn。
这样MC的最终结果可表示为: θ≈1nn∑i=1f(zi)p(zi)
从上面的接受-拒绝采样看,对于一个复杂的p(x),想找到一个合适的q(x)和常数k是非常困难的,所以有后续使用Markov链进行采样的方法。
MCMC
如果能构造一个转移矩阵为P的马氏链,使得马氏链的平稳分布刚好是p(x),如果马氏链在第n步开始收敛,那么可以获得xn,xn+1,…这些步骤的样本,可作为原始分布的采样。
马尔科夫链的采样过程如下:
- 输入马尔科夫链的状态转移矩阵P,设定状态转移次数阈值n1,需要样本数n2。
- 从任意简单概率分布采样得到初始状态值x0。
- 重复n1+n2步,从条件概率分布P(x|xt)中采样得到样本xt,那么后面n2个样本即为平稳分布对应的样本集。
但是,对于一个概率平稳分布π,一般是很难找到对应的马尔科夫链的状态转移矩阵P的。
MCMC正是为了应对上面找不到P的问题。MCMC先随机选择了一个矩阵Q,显然,它很难满足细致平稳条件,即有π(i)Q(i,j)≠π(j)Q(j,i)。 MCMC对上式进行了简单的改造,引入了一个α(i,j)函数,使得: π(i)Q(i,j)α(i,j)=π(j)Q(j,i)α(j,i)
这样,转移矩阵就有了一个新的表示: P(i,j)=Q(i,j)α(i,j)
其中的α(i,j)非常类似于接受-拒绝采样中的采样条件,所以被成为接受率。
总的MCMC过程如下:
- 选定任意一个马尔科夫链状态转移矩阵Q,平稳分布π(x),设定状态转移次数阈值n1、需要样本个数n2。
- 从任意简单概率分布得到初始状态x0。
- for t = 1 to n1+n2:
- 从条件概率分布Q(x|xt)中采样得到样本x∗。
- 从均匀分布采样u∼uniform[0,1]。
- 如果\(u<\alpha(x_t,x_)=\pi(x_)Q(x_,x_t)\),则接受转移\(x_{t+1}=x_\),否则不接受转移,即xt+1=xt。
Metropolis-Hastings又对MCMC在循环的第三步进行了改进,原有αi,j可能是一个非常小的结果,导致绝大多数采样都被拒绝,马尔科夫链的收敛速度会很慢。具体办法是对循环第三步进行了调整,将α(i,j)的计算调整为: $$ \alpha(x_t,x_)=\min \lbrace\frac{\pi(x_)Q(x_,x_t)}{\pi(x_t)Q(x_t,x_)},1\rbrace $$