2016-12-30 20:34 3299人阅读 评论(0) 收藏 举报
 分类:
数据挖掘与机器学习(41) 

版权声明:本文为博主原创文章,未经博主允许不得转载。

 

目录(?)[+]

 

在以贝叶斯方法为基础的机器学习技术中,通常需要计算后验概率,然后通过最大后验概率(MAP)等方法进行参数推断和决策。然而,在很多时候,后验分布的形式可能非常复杂,这个时候寻找其中的最大后验估计或者对后验概率进行积分等计算往往非常困难,此时可以通过采样的方法来求解。

作为本系列文章的组成部分,也作为你阅读本文所必须的预备知识,希望各位读者确认已经对如下文章所谈之话题了然于心:

欢迎关注白马负金羁的CSDN博客 http://blog.csdn.net/baimafujinji,为保证公式、图表得以正确显示,强烈建议你从该地址上查看原版博文。本博客主要关注方向包括:数字图像处理、算法设计与分析、数据结构、机器学习、数据挖掘、统计分析方法、自然语言处理。


从蒙特卡洛积分开始

在此前的文章《蒙特卡洛(Monte Carlo)法求定积分》一文中我们已经详细介绍了基于随机算法进行定积分求解的技术。这里主要用到其中的平均值法。为了便于后续介绍,这里先做简单回顾。

在计算定积分∫bag(x)dx时,我们会把g(x)拆解成两项的乘积,即g(x)=f(x)p(x),其中f(x)是某种形式的函数,而p(x)是关于随机变量X的概率分布(也就是PDF或PMF)。如此一来,上述定积分就可以表示为求f(x)的期望,即

∫bag(x)dx=∫baf(x)p(x)dx=E[f(x)]

当然,g(x)的分布函数可能具有很复杂的形式,仍然无法直接求解,这时就可以用采样的方法去近似。这时积分可以表示为

∫bag(x)dx=E[f(x)]=1n∑i=1nf(xi)

在贝叶斯分析中,Monte Carlo 积分运算常常被用来在对后验概率进行积分时做近似估计。比如要计算

I(y)=∫f(y | x)p(x)dx

便可以使用下面这个近似形式

I^(y)=1n∑i=1nf(y | xi)

采样方法

不难发现,在利用蒙特卡洛法进行积分求解时,非常重要的一个环节就是从特定的分布中采样。这里的“采样”的意思也即是生成满足某种分布的观测值。就此,本博客之前已经介绍过“逆采样”和“拒绝采样”等方法。如果你对此不甚了解,可以参考:

我们采样的目的很多时候都是为了近似积分运算,前面的采样方法(逆采样和拒绝采样)都是先对分布进行采样,然后再用采样的结果近似计算积分。下面要介绍的另外一种方法“重要性采样”(Importance sampling)则两步并做一步,直接的近似计算积分。

我们现在的目标是计算下面的积分

E[f(x)]=∫f(x)p(x)dx

按照蒙特卡洛求定积分的方法,我们将从满足p(x)的概率分布中独立地采样出一系列随机变量xi,然后便有

E[f(x)]≈1N∑i=1Nf(xi)

但是现在的困难是对满足p(x)的概率分布进行采样非常困难,毕竟实际中很多p(x)的形式都相当复杂。这时我们该怎么做呢?于是想到做等量变换,于是有

∫f(x)p(x)dx=∫f(x)p(x)q(x)q(x)dx

如果把其中的 f(x)p(x)q(x)看成是一个新的函数h(x),则有

∫f(x)p(x)q(x)q(x)dx=∫h(x)q(x)dx≈1N∑i=1Nf(xi)p(xi)q(xi)

其中p(xi)q(xi)被称为是weights of xi或importance weights。所以这种采样的方法就被称为是重要性采样(Importance sampling)。

如下图所示,当使用Importance Sampling时,我们并不会像在拒绝采样那样拒绝掉某些采样点。此时,所有的采样点都将为我们所用,但是它们的权重是不同的。因为权重为p(xi)q(xi),所以在下图中,当p(xi)>q(xi)时,采样点xi的权重就大(红色线在绿色在上方时),反之就小。重要性采样就是通过这种方式来从一个“参考分布”q(x)中获得“目标分布”p(x)的。


蒙特卡洛马尔科夫链之基本概念

In statistics, Markov chain Monte Carlo (MCMC) methods are a class of algorithms for sampling from a probability distribution based on constructing a Markov chain that has the desired distribution of its equilibrium distribution.

MCMC构造Markov chain,使其稳态分布等于我们要采样的分布 ,这样我们就可以通过Markov chain来进行采样。这种等价如何来理解是我们深入探讨具体操作方法之前需要先攻克的一个问题。在此之前,希望你对马尔科夫链有一个比较清晰的认识,为此你可以参考

我们用下面的式子来表示每一步(时刻推进)中从状态si到状态sj的转移概率:P(i,j)=P(i→j)=Pr(Xt+1=sj | Xt=Si)。这里的一步是指都时间从时刻t过渡到下一时刻t+1。

Markov chain在时刻t处于状态j的概率可以表示为πj(t)=Pr(Xt=sj)。用向量π(t)来表示在时刻t各个状态的概率向量。在初始时刻,需要选取一个特定的π(0),通常情况下我们可以使向量中一个元素为1,其他元素均为0,即从某个特定的状态开始。随着时间的推移,状态会通过转移矩阵,向各个状态扩散。

Markov chain在t+1时刻处于状态si的概率可以通过t时刻的状态概率和转移概率来求得,并可通过Chapman-Kolmogorov Equation来得到(可以参考《Chapman-Kolmogorov Equation》

πi(t+1)=Pr(Xt+1=si)=∑kPr(Xt+1=si | Xt=sk)⋅Pr(Xt=sk)=∑kP(k→i)πk(t)=∑kP(i | k)πk(t)

用转移矩阵写成矩阵的形式如下

π(t+1)=π(t)P

其中转移矩中的元素P(i,j)表示P(i→j)。因此 π(t)=π(0)Pt。定义P(n)ij为Pr(Xt+n=sj | Xt=si),易见P(n)ij表示矩阵Pn中第ij个元素。

一条Markov chain有一个平稳分布π∗ ,是指给定任意一个初始分布π(0) ,经过有限步之后,最终都会收敛到平稳分布π∗ 。平稳分布具有性质π∗=π∗P。可以结合之前文章中谈到的矩阵极限的概念来理解Markov chain的平稳分布。

一条Markov chain拥有平稳分布的一个充分条件是对于任意两个状态i和j, 其满足detailed balance :P(j→i)πj=P(i→j)πi 。可以看到,此时

(πP)j=∑iπiP(i→j)=∑iπjP(j→i)=πj∑iP(j→i)=πj

所以π=πP,明显满足平稳分布的条件。

如果一条Markov chain满足detailed balance,我们就说它是reversible的。在Markov chain中,对于随机变量的取值是连续的情况,上面的这些定义和性质都是类似的。比如这时转移概率为 P(x | y),那么∫P(x | y)dy=1。Chapman-Kolmogorov Equation 这时可以表示为

πt(y)=∫πt−1(y)P(x | y)dy

平稳分布的性质表示为(Obviously, at equilibrium, that stationary distribution satisfies)

π∗(y)=∫π∗(y)P(x | y)dy

The detailed balance condition holds when π(x)P(y | x)=π(y)P(x | y)

∫π(x)P(y | x)dx=∫π(y)P(x | y)dx=π(y)∫P(x | y)dx=π(y)

最后我们来总结一下MCMC的基本思想。在拒绝采样和重要性采样中,当前生成的样本点与之前生成的样本点之间是没有关系的,它的采样都是独立进行的。然而,MCMC是基于马尔科夫链进行的采样。这就告诉我们,当前的样本点生成与上一时刻的样本点是有关的。如下图所示,假设我们当前时刻生成的样本点是x,下一次时刻采样到x′的(转移)概率就是P(x | x′),或者写成P(x→x′)。我们希望的是这个过程如此继续下去,最终的概率分布收敛到π(x),也就是我们要采样的分布。


易见,转移概率就是P(x | x′)与采样分布π(x)之间必然存在某种联系,因为我们希望依照P(x | x′)来进行转移采样最终能收敛到π(x)。那这个关系到底是怎么样的呢?首先,我们知道给定所有可能的x,然后求从x转移到x′的概率,所得之结果就是x′出现的概率,如果用公式表示即

π(x′)=∫π(x)P(x′ | x)dx

这其实也就是Chapman-Kolmogorov Equation 所揭示的关系。如果马尔科夫链是平稳的,那么基于该马尔科夫链的采样过程最终将收敛到平稳状态

π∗(x′)=∫π∗(x′)P(x | x′)dx′

而平稳状态的充分条件又是满足detailed balance:π(x)P(x′ | x)=π(x)P(x | x′)。可见detailed balance的意思是说从x转移到x′的概率应该等于从x′转移到x的概率,在这样的情况下,采样过程将最终收敛到目标分布。也就是说,我们设计的MCMC算法,只要验证其满足detailed balance的条件,那么用这样的方法做基于马尔科夫链的采样,最终就能收敛到一个稳定状态,即目标分布。

实际应用中有两个MCMC采样算法非常常用,即Metropolis–Hastings算法与吉布斯采样,可以证明吉布斯采样是Metropolis–Hastings算法的一种特殊情况,而且二者都满足detailed balance的条件。

我们将在本系列的最后一篇文章里介绍Metropolis–Hastings算法与吉布斯采样有关的内容。彼时亦将通过一些具体的例子和R语言程序来体会一下这两种采样方法的威力。


参考文献

[1] 本文中的英文定义来自于维基百科 
[2] http://zhfuzh.blog.163.com/blog/static/1455393872012822854853/ 
[3] 悉尼科技大学徐亦达博士的机器学习公开课授课材料 
[4] 莱斯大学Justin Esarey助理教授(http://jee3.web.rice.edu/index.htm)的公开课资料(https://www.youtube.com/watch?v=j4nEAqUUnVw
[5] https://theoreticalecology.wordpress.com/2010/09/17/metropolis-hastings-mcmc-in-r/ 
[6] Christopher Bishop, Pattern Recognition and Machine Learning, Springer, 2007

蒙特卡洛马尔科夫链(MCMC)的更多相关文章

  1. 从随机过程到马尔科夫链蒙特卡洛方法(MCMC)

    从随机过程到马尔科夫链蒙特卡洛方法 1. Introduction 第一次接触到 Markov Chain Monte Carlo (MCMC) 是在 theano 的 deep learning t ...

  2. 马尔科夫链蒙特卡洛(Markov chain Monte Carlo)

    (学习这部分内容大约需要1.3小时) 摘要 马尔科夫链蒙特卡洛(Markov chain Monte Carlo, MCMC) 是一类近似采样算法. 它通过一条拥有稳态分布 \(p\) 的马尔科夫链对 ...

  3. MCMC(二)马尔科夫链

    MCMC(一)蒙特卡罗方法 MCMC(二)马尔科夫链 MCMC(三)M-H采样和Gibbs采样(待填坑) 在MCMC(一)蒙特卡罗方法中,我们讲到了如何用蒙特卡罗方法来随机模拟求解一些复杂的连续积分或 ...

  4. 白话马尔科夫链蒙特卡罗方法(MCMC)

    前言 你清茶园不是人待的地方! 里面的个个都是人才,说话又好听--就是我太菜了啥也听不懂,这次期中还考的贼**烂,太让人郁闷了. 最近课上讲这个马尔科夫链蒙特卡罗方法,我也学得一塌糊涂.这时我猛然想起 ...

  5. 《principles of model checking》中的离散时间马尔科夫链

    <principles of model checking>中的离散时间马尔科夫链 说明:此文为我自学<principles of model checking>第十章内容的笔 ...

  6. 13张动图助你彻底看懂马尔科夫链、PCA和条件概率!

    13张动图助你彻底看懂马尔科夫链.PCA和条件概率! https://mp.weixin.qq.com/s/ll2EX_Vyl6HA4qX07NyJbA [ 导读 ] 马尔科夫链.主成分分析以及条件概 ...

  7. N元马尔科夫链的实现

    马尔可夫模型(Markov Model)是一种统计模型,广泛应用在语音识别,词性自动标注,音字转换,概率文法等各个自然语言处理等应用领域.经过长期发展,尤其是在语音识别中的成功应用,使它成为一种通用的 ...

  8. Chapter 4 马尔科夫链

    4.1 引言 现在要研究的是这样一种过程: 表示在时刻的值(或者状态),想对一串连续时刻的值,比如:,, ... 建立一个概率模型. 最简单的模型就是:假设都是独立的随机变量,但是通常这种假设都是没什 ...

  9. 【HDOJ6229】Wandering Robots(马尔科夫链,set)

    题意:给定一个n*n的地图,上面有k个障碍点不能走,有一个机器人从(0,0)出发,每次等概率的不动或者往上下左右没有障碍的地方走动,问走无限步后停在图的右下部的概率 n<=1e4,k<=1 ...

随机推荐

  1. git/github学习笔记

    郑重提示,本文来自这里,如果喜欢,请关注原作者. 1. git 版本控制系统 相比CVS\SVN优势: - 支持离线开发,离线Repository- 强大的分支功能,适合多个独立开发者协作- 速度块 ...

  2. 箭头函数 Arrow Functions/////////////////////zzz

    箭头符号在JavaScript诞生时就已经存在,当初第一个JavaScript教程曾建议在HTML注释内包裹行内脚本,这样可以避免不支持JS的浏览器误将JS代码显示为文本.你会写这样的代码: < ...

  3. php开发客服系统(持久连接+轮询+反向ajax 转载 http://www.tuicool.com/articles/2mU7v2R)

    php开发客服系统( 下载源码 ) 用户端(可直接给客户发送消息) 客服端(点击用户名.即可给该用户回复消息) 讲两种实现方式: 一:iframe + 服务器推技术comet(反向ajax,即服务器向 ...

  4. PHPExcel--基本操作

    下面是PHPExcel的导入与导出的基本操作,也是最重要的两个操作. 生成文件: <?php require_once './Classes/PHPExcel.php'; $content = ...

  5. sqlserver数据库 Schema

    //读取数据库中所有的数据库 USE MASTER DECLARE @is_policy_automation_enabled bit SET @is_policy_automation_enable ...

  6. margin padding

    margin and padding有时候可以实现相同的效果但是 用padding的场合更多 2者的区别和用法的细节我还是没掌握好

  7. 霍尼韦尔FC400A与FC400B的区别

    给霍尼韦尔官方打电话咨询了下,发现两者区别不大,唯一的区别是400B可以和主机联动,也就是主机关的时候,400B也可以自动关闭,不需要手动去关闭电源,这样非常方便. 本来官方是只有400A的时候,但是 ...

  8. 面试题-Stack的最小值o(1)

    // Stack.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> using names ...

  9. WPF中通过代码设置控件的坐标

    用WPF做贪吃蛇小游戏时,发现了一个问题: 贪吃蛇的移动,我是通过不断刷新Rectangle来实现(贪吃蛇的身体由一组Rectangle组成),因此需要不断调整Rectangle的坐标,但是WPF中没 ...

  10. Tomcat崩溃

    参考: http://bbs.csdn.net/topics/390391810?page=1 自己遇到的: --------------------------------------------- ...