文章来源:机器之心

在众多经典的贝叶斯方法中,马尔可夫链蒙特卡洛(MCMC)由于包含大量数学知识,且计算量很大,而显得格外特别。本文反其道而行之,试图通过通俗易懂且不包含数学语言的方法,帮助读者对 MCMC 有一个直观的理解,使得毫无数学基础的人搞明白 MCMC。

在我们中的很多人看来,贝叶斯统计学家不是巫术师,就是完全主观的胡说八道者。在贝叶斯经典方法中,马尔可夫链蒙特卡洛(Markov chain Monte Carlo/MCMC)尤其神秘,其中数学很多,计算量很大,但其背后原理与数据科学有诸多相似之处,并可阐释清楚,使得毫无数学基础的人搞明白 MCMC。这正是本文的目标。

那么,到底什么是 MCMC 方法?一言以蔽之:

MCMC 通过在概率空间中随机采样以近似兴趣参数(parameter of interest)的后验分布。

我将在本文中做出简短明了的解释,并且不借助任何数学知识。

首先,解释重要的术语。「兴趣参数」(parameter of interest)可以总结我们感兴趣现象的一些数字。我们通常使用统计学评估参数,比如,如果想要了解成年人的身高,我们的兴趣参数可以是精确到英寸的平均身高。「分布」是参数的每个可能值、以及我们有多大可能观察每个参数的数学表征,其最著名的实例是钟形曲线:

在贝叶斯统计学中,分布还有另外一种解释。贝叶斯不是仅仅表征一个参数值以及每个参数有多大可能是真值,而是把分布看作是我们对参数的「信念」。因此,钟形曲线表明我们非常确定参数值相当接近于零,但是我们认为在一定程度上真值高于或低于该值的可能性是相等的。

事实上,人的身高确实遵从一个正态曲线,因此我们假定平均身高的真值符合钟形曲线,如下所示:

很明显,上图表征是巨人的身高分布,因为据图可知,最有可能的平均身高是 6'2"(但他们也并非超级自信)。

让我们假设其中某个人后来收集到一些数据,并且观察了身高在 5"和 6"之间的一些人。我们可以用另一条正态曲线表征下面的数据,该曲线表明了哪些平均身高值能最好地解释这些数据:

在贝叶斯统计中,表征我们对参数信念的分布被称为「先验分布」,因为它在我们看到任何数据之前捕捉到了我们的信念。「可能性分布」(likelihood distribution)通过表征一系列参数值以及伴随的每个参数值解释观察数据的可能性,以总结数据之中的信息。评估最大化可能性分布的参数值只是回答这一问题:什么参数值会使我们更可能观察到已经观察过的数据?如果没有先验信念,我们可能无法对此作出评估。

但是,贝叶斯分析的关键是结合先验与可能性分布以确定后验分布。它可以告诉我们哪个参数值最大化了观察到已观察过的特定数据的概率,并把先验信念考虑在内。在我们的实例中,后验分布如下所示:

如上所示,红线表征后验分布。你可以将其看作先验和可能性分布的一种平均值。由于先验分布较小且更加分散,它表征了一组关于平均身高真值的「不太确定」的信念。同时,可能性分布在相对较窄的范围内总结数据,因此它表征了对真参数值的「更确定」的猜测。

当先验与可能性分布结合在一起,数据(由可能性分布表征)主导了假定存在于这些巨人之中的个体的先验弱信念。尽管该个体依然认为平均身高比数据告诉他的稍高一些,但是他非常可能被数据说服。

在两条钟形曲线的情况下,求解后验分布非常容易。有一个结合了两者的简单等式。但是如果我们的先验和可能性分布表现很差呢?有时使用非简化的形状建模数据或先验信念时是最精确的。如果可能性分布需要带有两个峰值的分布才能得到最好地表征呢?并且出于某些原因我们想要解释一些非常奇怪的先验分布?通过手动绘制一个丑陋的先验分布,我已可视化了该情景,如下所示:

可视化由 Matplotlib 渲染,并使用 MS Paint 做了改善

如前所述,存在一些后验分布,它给出了每个参数值的可能性分布。但是很难得到完整的分布,也无法解析地求解。这就是使用 MCMC 方法的时候了。

MCMC 允许我们在无法直接计算的情况下评估后验分布的形状。为了理解其工作原理,我将首先介绍蒙特卡洛模拟(Monte Carlo simulation),接着讨论马尔可夫链。

蒙特卡洛模拟只是一种通过不断地生成随机数来评估固定参数的方法。通过生成随机数并对其做一些计算,蒙特卡洛模拟给出了一个参数的近似值(其中直接计算是不可能的或者计算量过大)。

假设我们想评估下图中的圆圈面积:

由于圆在边长为 10 英寸的正方形之内,所以通过简单计算可知其面积为 78.5 平方英寸。但是,如果我们随机地在正方形之内放置 20 个点,接着我们计算点落在圆内的比例,并乘以正方形的面积,所得结果非常近似于圆圈面积。

由于 15 个点落在了圆内,那么圆的面积可以近似地为 75 平方英寸,对于只有 20 个随机点的蒙特卡洛模拟来说,结果并不差。

现在,假设我们想要计算下图中由蝙蝠侠方程(Batman Equation)绘制的图形的面积:

我们从来没有学过一个方程可以求这样的面积。不管怎样,通过随机地放入随机点,蒙特卡洛模拟可以相当容易地为该面积提供一个近似值。

蒙特卡洛模拟不只用于估算复杂形状的面积。通过生成大量随机数字,它还可用于建模非常复杂的过程。实际上,蒙特卡洛模拟还可以预测天气,或者评估选举获胜的概率。

理解 MCMC 方法的第二个要素是马尔科夫链(Markov chains)。马尔科夫链由存在概率相关性的事件的序列构成。每个事件源于一个结果集合,根据一个固定的概率集合,每个结果决定了下一个将出现的结果。

马尔科夫链的一个重要特征是「无记忆性」:可能需要用于预测下一个时间的一切都已经包含在当前的状态中,从事件的历史中得不到任何新信息。例如 Chutes and Ladders 这个游戏就展示了这种无记忆性,或者说马尔科夫性,但在现实世界中很少事物是这种性质的。尽管如此,马尔科夫链也是理解现实世界的强大工具。

在十九世纪,人们观察到钟形曲线在自然中是一种很常见的模式。(我们注意到,例如,人类的身高服从钟形曲线分布。)Galton Boards 曾通过将弹珠坠落并通过布满木钉的板模拟了重复随机事件的平均值,在弹珠的最终数量分布中重现了钟形曲线:

俄罗斯数学家和神学家 Pavel Nekrasov 认为钟形曲线,或者更一般的说,大数规律只不过是小孩子的游戏和普通的谜题中的伪假象,其中每个事件之间都是完全独立的。他认为现实世界中的互相依赖的事件,例如人类行为,并不遵循漂亮的数学模式或分布。

Andrey Markov(马尔科夫链正是以他的名字命名)试图证明非独立的事件可能也遵循特定的模式。他的其中一个最著名的例子是从一份俄罗斯诗歌作品中数出几千个两字符对(two-character pairs)。他使用这些两字符对计算了每个字符的条件概率。即,给定一个确定的上述字母或空白,关于下一个字母将是 A、T 或者空白等,存在一个确定的概率。通过这些概率,Markov 可以模拟一个任意的长字符序列。这就是马尔科夫链。虽然早先的几个字符很大程度上依赖于初始字符的选择,Markov 表明在长字符序列中,字符的分布会出现特定的模式。因此,即使是互相依赖的事件,如果服从固定的概率分布,将遵循平均水平的模式。

举一个更有意义的例子,假设你住在一个有 5 个房间的房子里,里面有一个卧室、浴室、客厅、厨房、饭厅。然后我们收集一些数据,假定只需要当前你所处的房间和相应的时间就可以预测下一个你所处的房间的概率。例如,如果你在厨房,你有 30% 的概率会留在厨房,有 30% 的概率会走到饭厅,有 20% 的概率会走到客厅,有 10% 的概率会走到浴室,以及有 10% 的概率会走到卧室。使用每个房间的概率集合,我们可以构建一个关于你接下来要去的房间的预测链。

如果想预测一个人处于厨房之后所在的房间,基于几个状态而做出预测可能有效。但由于我们的预测仅仅基于一个人在房子中的单次观察,可以合理地认为预测结果是不够好的。例如,如果一个人从卧室走到浴室,相比从厨房走到浴室的情况,他更可能会返回原来的房间。因此,马尔科夫链并不真正适用于现实世界。

然而,通过迭代运行马尔科夫链数千次,确实能给出关于你接下来可能所处的房间的长期预测。更重要的是,这个预测并不受这个人起始所处的房间的影响。对此可以直观地理解为:在模拟和描述长期过程(或普遍情况)一个人所处房间的概率时,时间因素是不重要的。因此,如果我们理解了控制行为的概率,就可以使用马尔科夫链计算变化的长期趋势。

希望通过介绍一些蒙特卡洛模拟和马尔科夫链,可以使你对 MCMC 方法的零数学解释有更直观的理解。

回到原来的问题,即评估平均身高的后验分布:

这个平均身高的后验分布的实例没有基于真实数据。

我们知道后验分布在某种程度上处于先验分布和可能性分布的范围内,但无论如何都无法直接计算。使用 MCMC 方法,我们可以有效地从后验分布中提取样本,然后计算统计特征,例如提取样本的平均值。

首先,MCMC 方法选择一个随机参数值。模拟过程中会持续生成随机的值(即蒙特卡洛部分),但服从某些能生成更好参数值的规则。即对于一对参数值,可以通过给定先验信度计算每个值解释数据的有效性,从而确定哪个值更好。我们会将更好的参数值以及由这个值的解释数据有效性决定的特定概率添加到参数值的链中(即马尔科夫链部分)。

为了可视化地解释上述过程,首先强调一下,一个分布的特定值的高度代表的是观察到该值的概率。因此,参数值(x 轴)对应的概率(y 轴)可能或高或低。对于单个参数,MCMC 方法会从随机在 x 轴上采样开始。

红点表征随机参数采样。

由于随机采样服从固定的概率,它们倾向于经过一段时间后收敛于参数的高概率区域:

蓝点表示当采样收敛之后,经过任意时间的随机采样。注意:垂直堆叠这些点仅仅是为了说明目的。

收敛出现之后,MCMC 采样会得到作为后验分布样本的一系列点。用这些点画直方图,然后你可以计算任何感兴趣的统计特征:

通过 MCMC 模拟生成的样本集合计算的任何统计特征,都是对真实后验分布的统计特征的最佳近似。

MCMC 方法也可以用于评估多于一个参数的后验分布(例如,人类身高和体重)。对于 n 个参数,在 n 维空间中存在高概率的区域,其中特定的参数值集合可以更有效地解释数据。因此,我认为 MCMC 方法的本质,就是在一个概率空间中进行随机采样以近似后验分布。

一份数学小白也能读懂的「马尔可夫链蒙特卡洛方法」入门指南相关推荐

  1. 人人都能看懂的「迭代器、生成器」入门指南!

    大家好. 今天我们将讨论能在很多教程中看到,但又常常搞的头晕转向的迭代器.生成器,以及让新手经常困惑的yield. 事实上,和装饰器一样,这三个概念也是绑在一起的,例如你想知道 「什么是yield」, ...

  2. 今日新闻简报 每日一份微语简报 60s读懂世界

    今日新闻简报 每日一份微语简报 60s读懂世界 [365资讯简报]每天一分钟,知晓天下事!2020年12月27日 星期日 农历十一月十三 1.今日新闻简报头条:冒名顶替上大学.高空抛物.抢夺公交方向盘 ...

  3. LC滤波器简单设计法 - 一文读懂LC滤波器简单设计方法及原理介绍,LC值计算方法

    LC滤波器简单设计法 - 一文读懂LC滤波器简单设计方法及原理介绍,LC值计算方法 LC滤波器概述 LC滤波器也称为无源滤波器,是传统的谐波补偿装置.LC滤波器之所以称为无源滤波器,顾名思义,就是该装 ...

  4. 公开课 | 让机器读懂你的意图——人体姿态估计入门

    机器视觉的主要任务是让机器看懂世界,而世界的主要组成是人类社会.我们一直在围绕物和人的识别展开研究:物品检测识别.行人检测与跟踪.人脸识别. 事实上,行人检测是人的整体粗粒度识别,人脸识别是人的局部特 ...

  5. 不用数学也能讲清贝叶斯理论的马尔可夫链蒙特卡洛方法?这篇文章做到了

    作者 | Ben Shaver 翻译 | 刘畅 编辑 | Donna 大多数时候,贝叶斯统计在结果在最好的情况下是魔法,在最糟糕时是一种完全主观的废话.在用到贝叶斯方法的理论体系中,马尔可夫链蒙特卡洛 ...

  6. 不用数学讲清马尔可夫链蒙特卡洛方法?

    翻译 | 刘畅 大多数时候,贝叶斯统计在结果在最好的情况下是魔法,在最糟糕时是一种完全主观的废话.在用到贝叶斯方法的理论体系中,马尔可夫链蒙特卡洛方法尤其神秘. 这篇文章将介绍马尔可夫链蒙特卡洛方法, ...

  7. 小白也能读懂的机器学习入门指南

    点击上方"程序员江湖",选择"置顶或者星标" 你关注的就是我关心的! 这篇文章写得真的很好,忍不住转给大家. 转自:博客园,作者:计算机的潜意识 从机器学习谈起 ...

  8. 一文读懂贝叶斯推理问题:MCMC方法和变分推断

    全文共6415字,预计学习时长20分钟或更长 图片来源:pexels.com/@lum3n-com-44775 贝叶斯推理(Bayesian inference)是统计学中的一个重要问题,也是许多机器 ...

  9. 产品经理要懂的「技术那些事」

    本文由作者 Alto 于社区发布 产品经理是否要懂技术?要懂到什么程度? 非技术背景如何与研发沟通?工程师口中的"黑话"到底是什么意思? 本文是书籍<产品经理必懂的技术那点事 ...

最新文章

  1. Apple高规格推3232吋LCD面板XDR
  2. 实易智能DNS单台设备QPS高达28万
  3. 【python】再说装饰器与闭包的写法
  4. Proxy 补充学习笔记
  5. [Java基础]抽象类基础
  6. 通用编程_通用编程准则
  7. sql语句分组mysql_以数据库字段分组显示数据的sql语句(详细介绍)
  8. php有哪些_php工作原理是什么?php常用功能有哪些?
  9. Delphi 生日提醒的方法《LceMeaning》
  10. android 启动白屏_从细节入手改善用户体验,Flutter跨平台App开发中设置Android和iOS的启动页
  11. 【转载】全球天然气探明储量
  12. 剑指offer面试题39. 数组中出现次数超过一半的数字(数组)(摩尔投票法)
  13. IPTV视频码流分析
  14. Java中list==null与list.size( )==0的区别
  15. mysql中char存储中文_数据库中的字符类型存储字符和汉字的数量
  16. 【算法】排序_堆排序
  17. OpenWrt 固件定制
  18. 华为笔试题:根据子网掩码判断两个IP地址是否在同一子网,并输出IP1的网络号
  19. No discret job created in Oracle
  20. Android获取SDcard目录及创建文件夹;

热门文章

  1. GPT「高仿」问世:GPT-Neo,最大可达GPT-3大小,已开源 | AI日报
  2. 张宏江:开源时代如何解决人的思维孤岛
  3. 干货!神经网络原来是这样和数学挂钩的
  4. 用户界面设计准则从何而来
  5. 图灵2010.01书讯——看你错过了哪一本
  6. 开源人工智能算法一种新颖的超像素采样网络深层特征来估计任务特定的超像素
  7. 独家|OpenCV1.11 使用OpenCV制作一个低成本立体摄像机
  8. 乘风破浪的马里奥!这个AI带你一口气通29关,你猜连AI都过不去的是哪3关?
  9. 数据蒋堂 | BI系统中容易被忽视的数据源功能
  10. 张继平院士:40年北大数学路 | 北大黄金一代是如何培养的