对于给定的概率分布p(x),我们希望能有便捷的方式生成它对应的样本。由于马氏链能收敛到平稳分布,于是一个很的漂亮想法是:如果我们
能构造一个转移矩阵为P的马氏链,使得该马氏链的平稳分布恰好是P(x),那么我们从任何一个初始状态
x0出发沿着马氏链转移,得到一个转移序列
x0,x1,x2,…xn,xn+1…,如果马氏链在第n步已经收敛了,于是我们就得到了
π(x)的样本
xn,xn+1…
细致平稳条件
马氏链的收敛性质主要由转移矩阵P决定的,所以基于马氏链做采样的关键问题是如何构造转移矩阵P,使得平稳分布恰好是我们要的分布拭P(x)。如何能做到这一点呢?我们主要使用如下的定理:马尔科夫链的细致平稳条件。
如果非周期马尔科夫链的状态转移矩阵P和概率分布
π(x)对于所有的i,j满足:
π(i)P(i,j)=π(j)P(j,i)
则称概率分布
π(x)是状态转移矩阵P的平稳分布.
证明很简单,由细致平稳条件有:
i=1∑∞π(i)P(i,j)=i=1∑∞π(j)P(j,i)=π(j)i=1∑∞P(j,i)=π(j)
用矩阵表示就是:
πP=π
所以
π(x)就是平稳分布.
Gibbs采样概述
在上一小节中,我们讲到了细致平稳条件:如果非周期马尔科夫链的状态转移矩阵P和概率分布
π(x)对于所有的
i,j满足:
π(i)P(i,j)=π(j)P(j,i)则称概率分布
π(x)是状态转移矩阵P的平稳分布。为了寻找合适的细致平稳条件,下面从二维数据开始。
假设
π(x1,x2)是一个二维联合数据分布,观察第一个特征维度相同的两个点
A(x1(1),x2(1))和
B(x1(1),x2(2)),容易发现下面两式成立:
π(x1(1),x2(1))π(x2(2)∣x1(1))=π(x1(1))π(x2(1)∣x1(1))π(x2(2)∣x1(1))
π(x1(1),x2(2))π(x2(1)∣x1(1))=π(x1(1))π(x2(2)∣x1(1))π(x2(1)∣x1(1))由于两式的右边相等,因此我们有:
π(x1(1),x2(1))π(x2(2)∣x1(1))=π(x1(1),x2(2))π(x2(1)∣x1(1))也就是:
π(A)π(x2(2)∣x1(1))=π(B)π(x2(1)∣x1(1)),观察上式再观察细致平稳条件的公式,我们发现在
x1=x1(1)这条直线上,如果用条件概率分布
π(x2∣x1(1))作为马尔科夫链的状态转移概率,则任意两个点之间的转移满足细致平稳条件!同样的道理,在在
x2=x2(2)这条直线上,如果用条件概率分布
π(x1∣x2(1))作为马尔科夫链的状态转移概率,则任意两个点之间的转移也满足细致平稳条件。那是因为假如有一点
C(x1(2),x2(1)),我们可以得到:
π(A)π(x1(2)∣x2(1))=π(C)π(x1(1)∣x2(1))
基于上面的发现,我们可以这样构造分布
π(x1,x2)的马尔可夫链对应的状态转移矩阵P:
P(A→B)=π(x2(B)∣x1(1))ifx1(A)=x1(B)=x1(1)
P(A→C)=π(x1(C)∣x2(1))ifx2(A)=x2(C)=x2(1)
P(A→D)=0else有了上面这个状态转移矩阵,我们很容易验证平面上的任意两点E,F,满足细致平稳条件:
π(E)P(E→F)=π(F)P(F→E)
二维Gibbs采样
利用上一节找到的状态转移矩阵,我们就得到了二维Gibbs采样,这个采样需要两个维度之间的条件概率。具体过程如下:
高维Gibbs采样
上面的这个算法推广到多维的时候也是成立的。比如一个n维的概率分布
π(x1,x2,...xn),我们可以通过在n个坐标轴上轮换采样,来得到新的样本。对于轮换到的任意一个坐标轴
xi上的转移,马尔科夫链的状态转移概率为
P(xi∣x1,x2,...,xi−1,xi+1,...,xn),即固定n−1个坐标轴,在某一个坐标轴上移动,具体过程如下:
Gibbs采样小结
由于Gibbs采样在高维特征时的优势,目前我们通常意义上的MCMC采样都是用的Gibbs采样。当然Gibbs采样是从M-H采样的基础上的进化而来的,同时Gibbs采样要求数据至少有两个维度,一维概率分布的采样是没法用Gibbs采样的。