MCMC 是Markov Chain Monte Carlo 的简称,但在传统模拟中有一个很重要的假设是样本是独立的(independent samples),这一点在贝叶斯统计尤其是高纬度的模型中很难做到。所以MCMC的目的就是运用蒙特卡洛模拟出一个马可链(Markov chain)。

如今,概率建模风靡一时,但是当我第一次了解它时,总有一件事情困扰我。许多贝叶斯建模方法都需要计算积分,而我看到的任何工作示例似乎都使用高斯或伯努利分布,原因很简单如果您尝试使用比这更复杂的方法,它将成为分析的噩梦。将贝叶斯模型限制在“表现良好”的分布的小子集中,可能会极大地阻碍你对问题建模的能力,所以我们必须找到克服这一限制的方法。

蒙特卡洛近似

如果我不想分析计算某个讨厌的积分怎么办?可以使用蒙特卡洛近似。

我们知道,我们可以通过使用目标分布的样本值计算期望通过使用目标分布的样本值计算样本均值。为什么重要?那么,期望是什么呢?

连续随机变量的期望。同样的过程也适用于离散的情况,只要改变求和的积分。

这种估计积分的方法由中心极限定理提供了一些很好的保证。首先,这是期望的无偏估计,其次,我们可以计算估计的方差。

使用蒙特卡罗样本计算积分是非常好的,但是我们如何从目标分布中抽取样本呢?绘制高斯或均匀样本很容易,但np.random会让你失望。

画样本最简单的方法是使用逆CDF方法但这依赖于获得逆CDF函数它通常没有一个很好的解析形式只对一维随机变量有意义。

Metropolis算法是许多马尔可夫链蒙特卡洛(MCMC)采样方法的组成部分之一。当您可以访问的只是目标分布的pdf时,它使我们能够绘制样本。

MCMC方法需要注意的是我们不再采用独立样本所以我们不能保证估计的方差如何随着样本数量的增加而减少。如果样本是独立的,中心极限定理告诉我们估计值的方差将与样本数量(N)成反比地减少。对于MCMC,我们可以通过将样本数量从N调整为N_eff来对其贴现。N_eff(几乎)总是小于N,与链中样本的相关性有关。

Metropolis采样

Metropolis算法的步骤如下:

 1.从目标分布域或先前分布的域中均匀采样起点。2.在那时pdf。3.根据一些状态转换函数,从当前位置走一步,为新样本提出建议。4.计算新的pdf值。5.计算新pdf /旧pdf的值。6.如果比率大于1,请接受该步骤。7.如果比率小于1:     1.采样一个统一的随机变量。     2.如果比率大于随机样本,请接受该步骤。8.否则拒绝该建议,将当前职位作为示例添加并采取新的步骤。

请注意,在5–8中描述的过程等效于以概率为min(1,p(new)/ p(old))的伯努利概率接受样本,记住这个后面会用到……

Metropolis为何起作用?

对于任何MCMC方法,我们都希望确保一种称为详细平衡或可逆性的属性。

详细平衡

如果π满足,则π是马尔可夫链(1)的平稳分布。我们可以通过对等式两边求和来证明这一点。如果我们可以保证详细的平衡,那么我们也知道我们正在从马尔可夫链的固定分布中取样,我们将其作为目标分布。

详细平衡的思想是,由于每次转移的概率“质量”从状态i到状态j的转移与从状态j到状态i的转移是相同的,因此在链的每次转移之后,我们保持在平稳分布 。

现在,让我们展示一下Metropolis算法如何满足这一条件……

为了找到满足详细平衡的p(i,j),我们首先提出任意的“跳跃”概率q(i,j),然后仅通过接受概率为α(的“跳跃”来获得p(i,j)。i,j)。当“跳转”被拒绝时,状态保持j = i。这种“接受”的想法并不是Metropolis算法独有的,它存在于MCMC的大多数变体中。

跳跃概率推导

这取决于α是有效概率分布。因此,α的有效形式为:

Metropolis-Hastings 跳跃概率

如果跳跃概率是对称的,则可以简化为:

否则,它可以保留为完整形式,称为Metropolis-Hasting MCMC。

现在我们可以保证详细的平衡,我们可以让马尔可夫链式接管。如果马尔可夫链是遍历的(所有状态都是不可约的),那么在某个时候,该链将到达平稳分布,并且我们能够从目标分布中获取样本。

你可能还注意到,由于alpha是π(j)/π(i)的函数。这样的结果意味着目标分布无需标准化。当将Metropolis用于难以计算证据项的贝叶斯后验估计时,这特别有用。

实现的注意事项

Metropolis算法的通用版本称为“随机行走Metropolis”,其中建议的状态为当前状态,再加上均值为零且协方差矩阵为σ²I的多元高斯。σ应选择为足够使得足够多的样本被拒绝大。这是为了确保对目标分布进行良好的探索。

要注意的第二件事是老化的概念。在马尔可夫链到达平稳分布之前采集的样本应删除,因为它们在链收敛之前不能代表目标分布。确定要删除的样本数量有些困难,但通常,要删除的样本为10–20%(或有效的样本为10–100)。

Numpy代码实现

 def metropolis(pi, dims, n_samples, burn_in=0.1, var=1):    theta_ = np.random.randn(dims)*var    samples = []    while len(samples) < n_samples:        theta = theta_ + np.random.randn(dims)*varratio = pi(theta)/pi(theta_)        if np.random.rand(1) < ratio:            sample = theta            theta_ = theta            samples.append(sample)        else:            sample = theta_            samples.append(sample)    samples = np.array(samples)    return samples[int(samples*burn_in):,:]

我们可以看到这在两个高斯函数的和上的表现(注意这是一个非正态分布)。

 from scipy.stats import multivariate_normaldef make_pdf(mean1, mean2, cov1, cov2):    pdf1 = multivariate_normal(mean1, cov1)    pdf2 = multivariate_normal(mean2, cov2)    def pdf(x):        return pdf1.pdf(x) * pdf2.pdf(x)    return pdfpdf = make_pdf(    [3, 3],    [-1, -1],    np.array([[1,0.1],[0.1,1]], dtype=float),    np.array([[1,0.1],[0.1,1]], dtype=float),)samples = metropolis(pdf, 2, 1_000, 0.1)

上面的gif显示了算法是如何遍历分布的,偶尔会在分布的两种不同模式之间跳转。注意,这也突出了metropolis算法的一个弱点,它处理相对较差的多模型分布。这是由于要探索一种新模式,步骤必须足够大,以便从一种模式希望到另一种模式。这要么需要一个大的步长,要么需要一个模态紧密分布。修改如哈密顿量MCMC可以帮助解决这一问题,但一般来说,这是大多数MCMC方法的一个问题。

论文地址:https://arxiv.org/pdf/1504.01896.pdf

作者:Alexander Bailey

deephub翻译组

蒙特卡洛算法_MCMC、蒙特卡洛近似和Metropolis算法简介相关推荐

  1. MCMC、蒙特卡洛近似和Metropolis算法简介

    MCMC 是Markov Chain Monte Carlo 的简称,但在传统模拟中有一个很重要的假设是样本是独立的(independent samples),这一点在贝叶斯统计尤其是高纬度的模型中很 ...

  2. 马尔可夫链蒙特卡洛(一):Metropolis算法

    0. 引言 马尔可夫链蒙特卡洛(Markov Chain Monte Carlo,MCMC)是一类从复杂概率分布中进行采样的方法.Metropolis算法是严格意义上第一个MCMC算法,它于1953年 ...

  3. PRML第十一章读书笔记——Sampling Methods 拒绝采样/重要性采样/采样重要性重采样/数据增广IP算法、Metropolis算法/MH算法/吉布斯、切片采样、混合MC、估计配分函数

    (终于把第十章读完了,这一章应该相对轻松.但这两天状态有待调整,所以没咋认真读) 目录 11.1 Basic Sampling Algorithms P526 标准概率分布 P528 拒绝采样 P53 ...

  4. 悼念!蒙特卡洛Metropolis算法贡献者之一Arianna Rosenbluth逝世

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨陈彩娴 编辑丨AI科技评论 AI科技评论消息,洛杉矶当地时间12月28日,Metropolis算 ...

  5. 看得见的算法蒙特卡洛问题——使用蒙特卡洛算法求PI值

    看得见的算法蒙特卡洛问题--使用蒙特卡洛算法求PI值 1.什么是蒙特卡洛问题 蒙特卡洛方法(Monte Carlo method),也称统计模拟方法,是二十世纪四十年代中期由于科学技术的发展和电子计算 ...

  6. 数学建模-基本算法理解-蒙特卡洛算法

    二,蒙特卡洛算法 1.蒙特卡洛算法的来源: 基本思想使用随机数来估算计算的问题. 2.蒙特卡洛算法的基本思想: 3.蒙特卡洛优缺点: 上述图片均来自于百度文库 (觉得讲的很好,这里就不再一一赘述.) ...

  7. MCMC抽样---Metropolis算法

    MCMC抽样-Metropolis算法 马尔科夫链蒙特卡洛抽样方法可追溯到1953年N.Metropolis等人在研究原子和分子的随机性运动问题时所引入的随机模拟方法.该方法被命名为Metropoli ...

  8. 如何实现马尔可夫链蒙特卡罗MCMC模型、Metropolis算法?

    原文链接:http://tecdat.cn/?p=2687 什么是MCMC,什么时候使用它? MCMC只是一个从分布抽样的算法. 这只是众多算法之一.这个术语代表"马尔可夫链蒙特卡洛&quo ...

  9. Metropolis算法求解积分问题

    计算机图形学技术 见 计算机图形学技术 Metropolis算法有两种计算积分时的产生随机数的方法: 已知目标概率分布 p(x) ,使用蒙特卡洛方法对该目标函数进行抽样. 已知转移概率分布,给定初始概 ...

最新文章

  1. mysql如何按行数匹配_mysql – 是否可以使用MATCH AGAINST计算每行匹配的单词数
  2. 动捕技术是拯救VR体验的关键,但如何落地却已成为世界难题
  3. python画图y轴在右侧_解决python中画图时x,y轴名称出现中文乱码的问题
  4. SpringMvc 集成 shiro 实现权限角色管理-maven
  5. sql server中对xml进行操作
  6. python之moviepy库的安装与使用
  7. 深度解说阿里云 Serverless Kubernetes
  8. Ubuntu 挂载新磁盘
  9. python十个评委打分_八个评委打分,通过筛选确定最佳评委和最差评委。
  10. 【“互联网+”大赛华为云赛道】GaussDB命题攻略:支持三种开发语言,轻松完成数据库缓冲池
  11. 激活后服务器无限重启,服务器无限重启
  12. 元气森林们迈入新消费后时代
  13. 65W氮化镓Switch底座扩展坞方案
  14. Python中socket解读
  15. git生成SSH秘钥
  16. 用python实现基于自媒体数据的人群聚类分析
  17. k8s 集群之使用 nfs 网络存储挂载外部目录和文件
  18. 详解Ubuntu的网络配置
  19. Pytest框架系列——配置文件Pytest.ini
  20. uedit如何连接本机linux虚拟机,实现文件交互

热门文章

  1. Pytorch中的collate_fn函数用法
  2. 基于tensorflow 批量修改自己的图片数据集 (附代码)
  3. Win10环境下,SecureCRT连接不上虚拟机,显示连接超时Connection time out. 而且网络连接里没有网络适配器VMnet1和VMnet8,互ping也不同。...
  4. Day4:html和css
  5. Day 12:枚举值、枚举类
  6. multiprocessing手记
  7. JS特效之很牛叉的轮播图
  8. 傻瓜式硬盘重装win7系统图文加视频教程
  9. 如何解决虚拟机安装centos无法全屏显示问题!
  10. Windows Workflow Foundation 4.0