我们在做机器学习、深度学习或自然语言处理等项目时,经常采用什么方法采样呢?大家马上会想到吉布斯 Gibbs 采样,今天我们来分享一种比较实用的采样方法:马尔可夫蒙特卡罗方法,吉布斯采样是其中的一种。

Markov chain Monte Carlo methods中的 Markov chain 是因为这些方法生成的序列都是马尔科夫链,每个值都只和自己前后几个值有关; Monte Carlo是因为这些方法是用随机化的方法解决确定性问题,从已知概率分布中采样出一系列符合这个分布的样本。

要弄懂MCMC的原理,我们首先得搞清楚蒙特卡罗方法和马尔科夫链的原理。个人总结如图一所示。

图一:马尔可夫蒙特卡罗MCMC方法

1. 蒙特卡罗方法

蒙特卡罗方法是很宽泛的一类计算方法,依赖重复的随机采样去获得数值结果。

(原文:Monte Carlo methods is a broad class of computational algorithms that rely on repeated random sampling to obtain numerical results。)

其本质是使用随机性去解决确定性的问题。

主要用于解决三种问题:**优化,数值积分,从概率分布中采样。**原则上,蒙特卡罗方法可以用来解决任何具有概率解释的问题。根据大数定律,某一随机变量的期望可以用该变量的样本的经验均值(即样本均值)来近似。

当变量的概率分布参数化时(参数确定下来时),数学家们经常使用**马尔可夫链蒙特卡罗(MCMC)采样器 。其核心思想是设计一个具有给定平稳概率分布的马尔科夫链模型。**根据遍历理论,用MCMC采样器的随机状态的经验测度来近似平稳分布。

1.1 蒙特卡罗概念及引入

蒙特卡罗方法就是生成样本,即蒙特卡罗采样。即根据某已知分布的概率密度函数f(x)f(x)f(x),产生服从此分布的样本XXX。最早的蒙特卡罗方法都是为了解决一些求和或者积分问题。比如积分:

也就是说,我们最上面的均匀分布也可以作为一般概率分布函数p(x)p(x)p(x)在均匀分布时候的特例。那么我们现在的问题转到了如何求出分布p(x)p(x)p(x)对应的若干个样本来。

1.2 概率分布采样

上一节我们讲到蒙特卡罗方法的关键是得到 xxx的概率分布,那如何基于常见概率分布$$取得样本集 xxx呢

1.3 接受-拒绝采样

对于概率分布不是常见的分布,一个可行的办法是采用接受-拒绝采样来得到该分布的样本。 既然 p(x)p(x)p(x)太复杂在程序中没法直接采样,那么我设定一个程序可采样的分布 q(x)q(x)q(x)比如高斯分布,然后按照一定的方法拒绝某些样本,以达到接近 p(x)p(x)p(x)分布的目的,其中q(x)q(x)q(x)叫做 proposal distribution。


1.4 蒙特卡罗方法缺陷

使用接受-拒绝采样,我们可以解决一些概率分布不是常见的分布的时候。但是接受-拒绝采样也只能部分满足我们的需求,在很多时候我们还是很难得到我们的概率分布的样本集。比如:

1)对于一些二维分布p(x,y),有时候我们只能得到条件分布p(x|y) 和p(y|x) 的和,却很难得到二维分布p(x,y) 一般形式,这时我们无法用接受-拒绝采样得到其样本集。

2)对于一些高维的复杂非常见分布p(x1,x2,…,xn),我们要找到一个合适的q(x)和 k 非常困难。

蒙特卡罗法的缺陷
通常的蒙特卡罗方法可以模拟生成满足某个分布的随机向量,但是蒙特卡罗方法的缺陷就是难以对高维分布进行模拟。对于高维分布的模拟,最受欢迎的算法当属马尔科夫链蒙特卡罗算法(MCMC)。

2.马尔科夫链方法

2.1 马尔科夫链定义


某一时刻状态转移的概率只依赖于它的前一个状态,我们只要能求出系统中任意两个状态之间的转换概率,这个马尔科夫链模型就能确定。每一个状态都以一定的概率转化到下一个状态,这个状态概率转化图可以用矩阵的形式表示。这就是我们常说的马尔科夫链模型状态转移矩阵。

那么马尔科夫链模型的状态转移矩阵和我们蒙特卡罗方法需要的概率分布样本集有什么关系呢?

2.2 马尔科夫链模型状态转移矩阵的性质

实验得出:从不同初始概率分布开始,代入状态转移矩阵,最终状态概率分布趋于同一个稳定的概率分布, 也就是说马尔科夫链模型的状态转移矩阵收敛到的稳定概率分布与我们的初始状态概率分布无关。

这个性质对离散状态、连续状态都成立。

2.3 基于马尔科夫链采样

2.4 马尔科夫链采样小结

如果假定我们可以得到马尔科夫链状态转移矩阵,那么我们就可以用马尔科夫链采样得到我们需要的样本集,进而进行蒙特卡罗模拟。但是一个重要的问题是,随意给定一个平稳分布π\piπ,如何得到它所对应的马尔科夫链状态转移矩阵PPP呢?这是个大问题。我们绕了一圈似乎还是没有解决任意概率分布采样样本集的问题。

幸运的是,MCMC采样通过迂回的方式解决了上面这个大问题,下面将讨论MCMC采样,以及改进版: M-H采样和Gibbs采样。

3 MCMC采样

MCMC方法包含了一类用于从特定概率分布中采样的算法。

它们是通过构建一个自身的分布接近它的平稳分布的马尔科夫链,这个马尔科夫链就是被采样的分布的一组采样值,这需要观察这个马尔科夫链一些步骤才能完成,且观察的步骤越多,得到的采样值的分布就越接近于想要的分布。

By constructing a Markov chain that has the desired distribution as its equilibrium distribution, one can obtain a sample of the desired distribution by observing[clarification needed] the chain after a number of steps. The more steps there are, the more closely the distribution of the sample matches the actual desired distribution.

MCMC方法最初是被用于计算多维积分的数值近似值。

MCMC方法从一个连续随机变量中,以和已知函数成比例的概率密度生成一组采样样本,这组样本就可以用于计算这个变量的期望和方差。

3.1 马尔科夫链的细致平稳条件

那么如何使这个等式满足呢?下面我们来看MCMC采样如何解决这个问题。

3.2 MCMC采样

好了,现在我们来总结下MCMC的采样过程。

3.3 M-H采样

M-H采样是Metropolis-Hastings采样的简称,这个算法首先由Metropolis提出,被Hastings改进,因此被称之为Metropolis-Hastings采样或M-H采样。M-H采样解决了我们上一节MCMC采样接受率过低的问题。

3.4 M-H采样总结

M-H采样完整解决了使用蒙特卡罗方法需要的任意概率分布样本集的问题,因此在实际生产环境得到了广泛的应用。

但是在大数据时代,M-H采样面临着两大难题:

Gibbs采样解决了上面两个问题,因此在大数据时代,MCMC采样基本是Gibbs采样的天下。

MCMC方法从一个连续随机变量中,以和已知函数成比例的概率密度生成一组采样样本,这组样本就可以用于计算这个变量的期望和方差。

3.5 吉布斯Gibbs采样基础概念

吉布斯采样就是一种MCMC方法,用于在直接采样联合分布很困难时,生成某特定多参数的概率分布的一组近似观测值。

联合分布不被明确知道或者联合分布很难直接采样每个变量的条件分布已知且容易采样时,吉布斯采样适用。

吉布斯采样是一种用于统计推断的方法,尤其是贝叶斯推断 。它是一种随机化算法(即使用随机数的算法),是用于统计推断的确定性算法(如EM算法)的替代品

最初的吉布斯采样是Metropolis–Hastings 算法的一个特例。但后来得到扩展,它可以被看成是一个通用的用于通过依次采样每一个变量从一组变量中采样的框架,而且可以把M-H算法,甚至更高级的算法比如 slice sampling切片采样, adaptive rejection sampling 自适应拒绝采样,合并进来实现采样过程的一些步骤。

这组生成的近似观测值可以用于近似联合概率分布;也可以去近似某个变量的边缘分布;或者近似其中部分变量的联合分布;或者计算某个变量的期望。
就像其他MCMC算法一样,吉布斯采样生成的一组近似观测值是一个马尔科夫链,即每个观测值只和附近几个值有相关性。所以如果要采样出完全独立的观测值,需要特别注意这一点。而且一般来自马尔科夫链开端的那些样本不能很好的表示原概率分布,会被去掉。而且采样值的马尔可夫链越长越有利于逼近原分布。

吉布斯采样依次从每个变量的分布中生成一个实例,基于其他变量的当前值。可以证明,这样生成的采样值序列是一个马尔科夫链,并且这个马尔科夫链的平稳分布就是我们想要采样的那个后验分布。

对于从多变量的联合分布中采样出一个向量(所有变量是向量的分量),从条件分布中采样比做积分算边缘概率简单得多。

The point of Gibbs sampling is that given a multivariate distribution it is simpler to sample from a conditional distribution than to marginalize by integrating over a joint distribution.

吉布斯采样尤其适用于采样贝叶斯网络的后验分布,因为一般贝叶斯网络就是用一组条件分布描述的。

Gibbs sampling is particularly well-adapted to sampling the posterior distribution of a Bayesian network, since Bayesian networks are typically specified as a collection of conditional distributions.

3.6 多维吉布斯Gibbs采样实现

3.7 吉布斯Gibbs采样小结

由于Gibbs采样在高维特征时的优势,目前我们通常意义上的MCMC采样都是用的Gibbs采样。当然Gibbs采样是从M-H采样的基础上的进化而来的,同时Gibbs采样要求数据至少有两个维度,一维概率分布的采样是没法用Gibbs采样的,这时M-H采样仍然成立。

有了Gibbs采样来获取概率分布的样本集,有了蒙特卡罗方法来用样本集模拟求和,他们一起就奠定了MCMC算法在大数据时代高维数据模拟求和时的作用。

梳理资料主要来自以下链接、大学教材以及一些博客文章,在这里就不一一感谢!
https://www.cnblogs.com/pinard/p/6625739.html

原文链接
https://zhuanlan.zhihu.com/p/392917306

马尔可夫蒙特卡罗 MCMC 原理及经典实现相关推荐

  1. 《统计学习方法(第2版)》李航 第19章 马尔可夫蒙特卡罗法 MCMC 思维导图笔记 及 课后全部习题答案(步骤详细, 包含Metropolis算法,吉布斯算法代码实现)第十九章

    思维导图: 19.1 用蒙特卡罗积分法求: ∫−∞∞x2exp⁡(−x22)dx\int_{-\infty}^{\infty} x^{2} \exp \left(-\frac{x^{2}}{2}\ri ...

  2. 隐马尔可夫模型 HMM 原理及实现

    简介 隐马尔可夫模型(Hidden Markov Model,HMM)创立于20世纪70年代.主要用于行为识别,语音识别,文字识别等. 原理简述 隐马尔可夫模型由五个部分组成:状态空间S,观测空间O, ...

  3. 蒙特卡洛-马尔科夫链(MCMC)初步

    MCMC(Markov Chain Monte Carlo)是一种经典的概率分布采样方法.本文对其概念和常见算法做简单梳理. 解决什么问题? 我们常常遇到这样的问题:模型构建好之后,有一个概率 p ( ...

  4. 蒙特卡罗 马尔科夫链 与Gibbs采样

    这几个概念看了挺多遍都还是含混不清,最近看了几篇博客,才算大致理解了一点点皮毛,所以来总结一下. MCMC概述 从名字我们可以看出,MCMC由两个MC组成,即蒙特卡罗方法(Monte Carlo Si ...

  5. MCMC(一):蒙特卡罗方法和马尔科夫链

    作为一种随机采样方法,马尔科夫链蒙特卡罗(Markov Chain Monte Carlo,以下简称MCMC)在机器学习,深度学习以及自然语言处理等领域都有广泛的应用,是很多复杂算法求解的基础.比如分 ...

  6. 隐马尔科夫模型模型:原理、实现

    文章目录 引入 盒子模型与盒子问题(urn problem) 随机过程 索引集 状态空间 采样函数 增量 马尔可夫链与马尔可夫过程 隐马尔科夫模型定义 示例--帮助理解 精灵.盒子与球 天气估计 原理 ...

  7. 机器学习——隐马尔科夫(HHM)原理

    机器学习--隐马尔科夫(HHM)模型原理 1 从马尔科夫模型到隐马尔科夫模型 1.1 马尔科夫过程引入 首先,我们先给出一张图: 在上面的图里,给出的是一个链式的结构,结构中的每一个节点称之为一个状态 ...

  8. 马尔可夫蒙特卡洛方法(MCMC)简单理解

    本文没有理论推导证明,旨在用简单的例子理解MCMC方法. 引入 p(T∣D)=p(D∣T)p(T)p(D)(1)p(T|D) = \frac{p(D|T)p(T)}{p(D)} \tag{1} p(T ...

  9. 隐马尔科夫模型(HMM)模型训练:Baum-Welch算法

    在上一篇博客中隐马尔科夫模型(HMM)原理详解,对隐马尔科夫模型的原理做了详细的介绍.今天,我们要对其中的模型训练算法Baum-Welch做一个实现,Baum-Welch算法可以在不知道状态序列的情况 ...

最新文章

  1. 记一次通过c#运用GraphQL调用Github api
  2. 数字电路中的竞争与冒险
  3. (十五)java B2B2C 多级Springboot多租户电子商城系统 Springboot整合RabbitMQ
  4. PHP基础3--文件加载-错误处理
  5. C#如何生成缩略图、水印
  6. 垃圾收集算法,垃圾收集器_为什么我不能关闭垃圾收集器?
  7. linux安装meld rpm,Linux meld安装
  8. 荣耀V40屏幕素质得到“认证”:120Hz高刷屏没跑了
  9. Java | 原来 try 还可以这样用啊?!
  10. CISCO3560 VLAN配置实例
  11. 浅析MySQL中exists与in的使用
  12. Spring Cloud Gateway替代zuul作为API网关(一)
  13. 【Verilog HDL】38译码器
  14. 解决网站80端口被封,本地公网IP加速25mb/s网站访问速度
  15. oracle语句整理,Oracle 维护常用SQL语句整理
  16. 出现窗口:CMD提示应用程序错误
  17. 名编辑电子杂志大师教程 | 设置电子杂志书签功能
  18. 小学教师听课体会 计算机,小学教师听课心得体会
  19. 为您的创业公司推荐5款类Slack开源协作工具
  20. 迪米特法则模式:迪米特法的则通俗理解

热门文章

  1. 在Window上使用Jenkins自动部署和上传快照Java工件
  2. 使用Apache Camel发布/订阅模式
  3. 运行时vs编译时类路径
  4. 休眠性能提示:脏收集效果
  5. JBoss AS 7.1.0.Final“ Thunder”发布-Java EE 6 Full Profile认证!
  6. 使用PowerMock模拟静态方法
  7. 英语名词复数的一般构成方法以及读音规则
  8. Linux 命令之 rcp -- 远程文件复制
  9. python操纵excel的方法_python操作Excel的几种方式
  10. petalinux 配置_澧县高压管道工厂化配置专业销售