也谈MCMC方法与Gibbs抽样
来源:互联网 发布:exo light软件 编辑:程序博客网 时间:2024/05/17 00:13
个人博客传送门:点击打开链接
MCMC,即传说中的Markov Chain Mento Carlo方法。其主要用于统计推理中进行模拟抽样,尤其在贝叶斯推理中有着非常广泛的应用。如算法模型的后验参数估计问题,很多情况下其后验概率分布没有确定性的解析解,或者解析解计算起来非常复杂,便可以通过MCMC模拟抽样,根据大数定律,参数的期望便可以通过对抽样样本的求均值来评估。
山人第一次见到MCMC兄还是在研究僧阶段,那时候以Latent Direichlet Allocation(LDA)为代表的Blei先生的一系列主题模型算法还很火,甚至你还能看见Andrew Ng的身影。于是导师欣然的把其另一篇层次主题模型的论文,Hierarchical LDA(hLDA)甩给我们,拍着我们的肩膀,语重心长的说,好好干,会很有前景的。于是我的MCMC初体验是这样的: What the hell? 于是直到现在还对MCMC念念不忘。好吧,是耿耿于怀。最近又看见Quora上有人讨论MCMC和Gibbs抽样,再看时,发现虽然有一两年未看,脑部神经元还是不停的工作,现在理解起来竟然清晰许多。 MCMC是Markov Chain和Mento Carlo两个概念的组合,我们不妨分而治之,先看看各自的含义。
I-Markov Chain
即马尔科夫链,这哥么大家肯定不会陌生,还记得Hidden Markov Model么(Baum-Welch算法会推导了么:( )马尔科夫链的一个重要属性就是无记忆性。其表示的随机过程,在一个状态空间里游走且未来的状态只与当前的状态有关,而与之前的状态均无关。这种无记忆性便称之为马尔科夫性。
其状态之间的转移概率矩阵如下:
假设在状态
如果一个非周期马氏链具有概率转移矩阵
这里还有一点山人刚开始时也是非常模糊。就是很多算法中提到,当经过了burn-in阶段,状态分布稳定以后开始取样计算概率分布,当时就想,既然都稳定了,
II-Monte Carlo
说完了马尔科夫再来说说蒙特卡洛方法吧,其名子来源于摩纳哥的蒙特卡洛赌场,是一种通过模拟抽样求积分的方法。一个经典的应用便是计算圆周率。这个名叫“hit and miss"的实验过程为:假设有一个单位长度为1的正方形区域,再以正方形的中心为圆心,单位长度为半径画一个正方形的内切圆。有一个随机数发射器随机的往正方形区域里发射。当经过N多次以后,圆周率可以估算为(hawaii.edu):
大学微积分中我们学过常见函数求积分的方法,如
应用到贝叶斯推理中,如果我们能够通过抽样的方式从参数变量的联合分布中抽取到足够多的样本数据,我们便可以通过贝叶斯参数估计等方法求得其近似值。但往往参数的联合分布各个变量并非独立,且很复杂。尤其如LDA等主题生成模型里,要对联合分布抽样几乎是不可能的。有么有可能通过某种控制变量法,对条件概率进行抽样,借用马尔科夫链中条件概率转移矩阵达到稳定状态后的概率分布就是其变量的联合分布下的样本点呢?
III-MCMC类方法
于是,为了避免构造一个复杂繁琐的联合分布函数来进行蒙特卡洛抽样,MCMC类方法神兵天降。通过构造一个状态转移概率矩阵,那末当其到达稳定状态时,分布便是所求的联合概率分布。而联合分布函数的样本点则是每一次状态转移时自然产生的。这么牛掰的想法当然不是山人想到的,一个叫着Metropolis的哥么在1953年研究粒子系统的平稳性质便提出来了。而目前我们常用的一个叫着Metropolis-Hastings算法便是在其基础上的一个改进。
1 细致平稳条件
我们在前面提到了,我们可以通过构造一个状态转移概率矩阵,使得其平稳状态下的概率分布就是我们想要的分布。但不是随意构造一个状态转移概率矩阵就能满足的。那需要什么样的条件呢?细致平稳条件就是这样一个充分条件。如果非周期马氏链的转移概率矩阵
一般的MCMC采样算法的接受率通过和一个Uniform[0,1]分布采样的值u作比较,如果接受率大于这个值,则接受这次转移,从i转移到j状态,反之则保持原i状态。但是我们在实际应用中使用这个方法时发现,很多情况下接受率普遍很低,导致马氏链状态转移缓慢,最终收敛的速度非常慢。为了解决这个问题,我们还是采用类似等式(6)的方法,分子分母的接受率同步增大。
2 Gibbs抽样
当变量状态多,且维度比较高时,MH算法的接受率仍然差强人意。要是每次都接受该多好啊。那什么样的情况下,我从
即,从A到B和从B到A的转移是直接满足细致平稳条件的。因此我们不需要等式(6)中的接受率来帮忙,即接受率为1.图中假设初始状态为A,则从A到下一个概率转移矩阵分别为:
3 收敛条件的判断
我们都知道当概率状态转移稳定时,其分布便是所要求的联合概率分布。但我们不可能通过如等式(2),(3)的方法来每转换一步就求其概率分布,比较是否改变。主要原因有二,其一是不可把所有变量间的转移概率都找到,其二矩阵计算耗时耗力。常见的方法便是通过burn-in的方法,多跑几次。也有通过计算当前状态下的联合分布可能性函数,然后根据Autocorrelation Function(ACF)的变化速率来判断迭代是否收敛。
So long, and thanks for all the fish.
参考
[1] PRML读书会第十一章 Sampling Methods
[2] LDA-math-MCMC 和 Gibbs Sampling
[3] Burn-In is Unnecessary
[4] One Long Run in MCMC
[5] What-are-Markov-Chain-Monte-Carlo-methods-in-laymans-terms
[6] MCMCAlgorithmsBeta_Distribution
- 也谈MCMC方法与Gibbs抽样
- MCMC与Gibbs Sampling
- 抽样,mcmc, Metropolis-Hastings,Gibbs Sampling
- 随机抽样方法正太分布 MC, MCMC, Gibbs采样 原理&实现(in R)
- Gibbs抽样方法详解
- 独立抽样(MCMC方法)
- 随机采样方法整理与讲解(MCMC、Gibbs Sampling等)
- 随机采样方法整理与讲解(MCMC、Gibbs Sampling等)
- 随机采样方法整理与讲解(MCMC、Gibbs Sampling等)
- 随机采样方法整理与讲解(MCMC、Gibbs Sampling等)
- 随机采样方法整理与讲解(MCMC、Gibbs Sampling等)
- 随机采样方法整理与讲解(MCMC、Gibbs Sampling等)
- 随机采样方法整理与讲解(MCMC、Gibbs Sampling等)
- 随机采样方法整理与讲解(MCMC、Gibbs Sampling等)
- 马尔科夫蒙特卡洛方法 (MCMC)+ Gibbs采样 原理干货
- 随机采样方法整理(MCMC、Gibbs Sampling等)
- LDA的Gibbs抽样详细推理与理解
- LDA -Gibbs抽样
- (八十四)字符函数库cctype
- Volley请求Cookie超时/Token认证失效的处理
- 全面解析Linux 内核 3.10.x - 内存管理 - 内存模型
- 倍增法LCA hdu2586 How far away ?
- Apache FTPClient操作“卡死”问题的分析和解决
- 也谈MCMC方法与Gibbs抽样
- view绘制流程
- 北大OJ3302
- 创建第一个scrapy项目
- openjudge 二叉树
- Dia作图过程中添加latex格式字符方法
- (八十五)?: 运算符
- static 修饰全局变量、局部变量和函数的区别
- PV操作与信号灯例子