与传统均匀采样不同,马尔科夫链蒙特卡洛采样通过调整建议采样分布函数,逼近于目标函数。从建议分布中采样,就相当于对目标函数的采样。
- 针对特殊的采样目标函数,不断采样、训练建议采样分布,始终具有很好采样效果
- 自探索、自发现的动态调整采样点,利用前期采样点的信息,采样过程具备收敛性
- 采样效率高,克服“接受-拒绝”采样方法对于特殊目标函数、采样点不易被接受、因而采样次数增大的缺点。
上面是理想的“接受-拒绝”采样适用方法,选择某一建议分布,划分拒绝与接受。但一旦遇到以下这种情况,只有大量采样,导致执行效率特别低。也是MCMC采样能够很好克服的点,他可以很好的提高采样效率。
那么MCMC是如何提高效率的呢?如果每次采样都利用到前期的采样点反馈,会不会采样更快!
如何利用前期采样点的信息。比如利用建议分布采样出的
恰好出现在其目标分布中的高密度区域时,如果下一次抽样的Xn+1能够在附近抽取,其接受的成功率自然高。如下图所示。
但“接受-拒绝”采样方法每一次点的生成就是随机独立的、且建议函数不变,Xn的信息在下次抽样中丢失。有相当大的概率下次抽样会被拒绝。
①根据初始的建议正态分布进行抽样,x0为初始设置的均值,
是标准差,得到x‘
②假设x'符合我们预设的规则,则,作为G的均值参数,用于下一次抽样。
③相反假设x‘不满足规则,就将原x0的值赋给x1,,作为G的均值参数,用于下一次抽样。
④不断采样,构成采样的马尔科夫链条,并收敛达到稳态。
假如马尔科夫链的转移矩阵满足遍历性,那么它存在唯一的稳态分布。现在可以这样理解上面MCMC链条。我们设计一个判断规则,它能够起到转移矩阵作用,令该链条收敛到稳态分布,而这个稳态分布就是目标函数概率密度分布。达到稳态后抽取的随机值,就等同于从目标分布中采样。
MH算法的设计应用到了马尔科夫链中的“细致平稳(Detailed Balance)”概念。假设我们有一个满足遍历性的马尔科夫链,各状态均达到唯一的稳态分布S。如果转移矩阵满足下
细致平稳需注意两点
- 不是所有的稳态分布都满足细致平稳条件。下例中不满足稳态条件
- 满足细致平稳条件的状态分布达到稳态分布。证明如下。
其中对于所有转移到新状态的概率之和为1. 符合稳态条件,证明毕。
那么为了达到抽样不断收敛,需使得满足细致平稳条件。 如下
进行数学化描述。
步骤1:从旧状态中选出新状态作为候选对象
当已达到稳态处于状态下的概率为
,然后根据建议正态分布,生成新的随机值
。我们用
代表这均值参数为
时,
被抽出的概率
则代表了从处于状态
下,根据
选出下期候选状态
的概率;
步骤2:判断是否需要转移至新状态
我们定义是接受
作为
转移后状态的概率,两步相乘得到了 从处于状态
转移到状态
的概率
两个式子在细致平稳条件下相等,则有如下
值得注意的是 由于G满足正态分布,它是左右对称的。那么从采样到
,从状态
转移到状态
,与从
采样
,从状态
转移到状态
对应的概率是相等的。
即与
是相等的,两者相除抵消。
最后的问题是怎么求s,也就是 处于状态下的概率
。由于我们知道函数S(x)就等同于我们的目标概率密度分布函数pdf(x),而pdf(x)又等于我们的目标函数f(x)/C。C为f(x)与x轴围成的积分值,很难求解。
将s(i)=f(i)/C带入上式,最后得到最初的Metropolis算法A(j|i)
而后的作为Hastings参数,则进一步扩大了算法在非对称建议分布下使用的适用性。
到这里之前提到的规则就已经设计出来了。我们有了建议概率分布G,同时有转移接受规则A,就可以顺着这个规则链条达到稳态分布,完美实现从目标分布中抽取随机值。
最后引入随机概率,生成满足均匀分布的一个随机值r。比较r与A的大小,判断当前状态保留还是舍弃。
这里提供手撕的一个python版本的MCMC算法
代码待更新....
动态在哪里。就是采样点(状态)不断转移,趋于(马尔科夫)稳态的过程。
效率咋提高。有效利用上一次采样点的信息,以随机概率形式选择被接受、构建马氏转移链。
算法在干啥。利用过去的采样状态信息,训练出一个不断趋近目标函数分布的建议采样分布,实现从建议分布函数中采样,代替复杂的目标函数分布。
【数之道】马尔可夫链蒙特卡洛方法是什么?十五分钟理解这个数据科学难点_哔哩哔哩_bilibili
这两者都是为了解决针对复杂分布的积分问题。由于目标分布太过于复杂,不但解析形式的积分没法计算,连对其采样都很困难。MCMC的思路是通过构造马尔可夫链的方式,得到 *目标分布* 的 *关联* 的样本,而Importance Sampling的思路则是转而对一个简单的分布( *测试分布* )进行采样,得到 *独立* 的样本,然后在计算积分的时候对采样点分配适当的权重,从而得到对原始积分的近似解。