15分钟入门蒙特卡洛 Monte Carlo

点击上方“小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

来自 | 知乎   作者 | 薛定豆

链接 | https://zhuanlan.zhihu.com/p/223042372

编辑 | 深度学习这件小事公众号

本文仅作学术交流,如有侵权,请联系后台删除。

74a6604b5ef22802d6ecb3c6f28c9a35.png

20世纪40年代,蒙特卡洛(Monte Carlo, 位于摩纳哥的赌城,如上图)方法由John von Neumann,Stanislaw Ulam和 Nicholas Metropolis 在 Los Alamos National Lab (LANL) 曼哈顿计划中,为模拟中子扩散发展出的一种统计方法。正如名字反映出的,蒙特卡洛方法本质上是跟赌博一样具有随机特性。

   一、估计圆周率 outside_default.png 的值

如果(x,y)是独立地从0到1之间均匀分布抽样出的一系列的数对number pair, 那么这些随机的位置坐标(x,y)落在1为半径圆弧内的概率应该是:四分之一圆的面积➗整个正方形的面积:

outside_default.png

而因为(x,y) 是0到1的均匀分布,所以这个概率当抽样足够多的时候就等于红色的点数除以总共点数:

outside_default.png

这样一来,只要采样足够多,就可以得到无限趋近于outside_default.png的值。这个例子很好的体现了Monte Carlo(MC)方法的精神:利用随机分布的特性,大数次抽样得到准确的估计。换句话说,就是我猜,我猜地又多又均匀就基本上成功了!

5f9142d16b178a5791f1ad955ac881fb.gif

   二、估计定积分的值

微积分里我们学到,定积分(也就是曲线下的面积)可以想象成很多等宽小矩形加起来的面积之和,如下图所示,

outside_default.png

30e04e92704893bb44d6de4be00743b9.png

如果用蒙特卡洛的思维来做的话,可以从a到b的均匀分布产生一些列的x值: outside_default.png,只要抽样足够多,就可以估计出在这个区间内 outside_default.png 的平均值,记做 outside_default.png 这样一来,曲线下面积就等效成一个以这个平均值为高的矩形面积:

outside_default.png

62d66fb26f4ce342a4980e82d2791b09.png

   三、重要性抽样(Importance sampling)

其实,很多积分中 outside_default.png 还是有一些重要的区域的,为了使采样更有效率,一般我们可以采用重要性抽样来计算积分:

outside_default.png

这里, outside_default.png 是任意满足正定 outside_default.png 且归一化 outside_default.png 条件的概率分布,且 outside_default.png 是从这个分布采样的随机数。重要性抽样其实仅仅就是做了个恒等变形,把原来要均匀采样的概率分布(其实就是 outside_default.png )替换成任意概率分布,并把要平均的函数除以这个分布。重要性抽样是统计和物理中常见的方法,可以很好的对重点区域采样而快速估计积分。

另一方面,重要性抽样有着很简单直接的并行化方案:对于多维定积分, outside_default.png 从分布 outside_default.png 中采样的话,(这里为了符号简便,现在暂时将第 outside_default.png 次采样记做带括号的上标 outside_default.png )

outside_default.png

其实,统计力学里常见的积分就是物理量 outside_default.png 的系综平均

outside_default.png

这里outside_default.png 是正则系综分布函数, outside_default.png 是正则配分函数。

   四、Metropolis Monte Carlo算法 (Markov Chain Monte Carlo, MCMC)

那么,问题来了,怎么对任意分布 outside_default.png 采样?这里介绍Metropolis MC算法,也叫Metropolis-Hastings算法,它类似于随机瞎走(Random walk)的方式产生一列数,这些数的总体分布服从 outside_default.png 。这里,我们以平衡态统计力学中的最常见的Boltzmann分布为例说明。

玻尔兹曼分布说对于构型 outside_default.png ,它的概率应该是 outside_default.png ,这里 outside_default.png 是这个构型的能量。我们想要产生服从玻尔兹曼分布的一系列 outside_default.png ,可以设想如果我基于原来的一个构型 outside_default.png 怎么产生下一个构型 outside_default.png 呢?

当体系达到平衡时,体系在 outside_default.png 的概率 outside_default.png 不应该随时间改变,于是有

outside_default.png

这里 outside_default.png 表示基于 outside_default.png 随机产生 outside_default.png 的转移概率(Transition probability),求和是对于所有可能的其他构型outside_default.png。从上面关系可以得到只要满足下面细致平衡(detailed balance)条件,就可以产生出服从玻尔兹曼分布的序列:

outside_default.png

Metropolis选择的是下面方式选择转移概率(尽量最大化接受新构型):

outside_default.png

outside_default.png

读者可以将上面两个式子相除,就可以看出在不管新构型的能量是更高还是更低,这个转移概率的比值都服从细致平衡条件,也就是最终产生的分布就会使玻尔兹曼分布了。

Metropolis算法——移动然后选择接受这个移动还是拒绝这个移动

  1. 从起始构型 outside_default.png ,计算能量 outside_default.png ;

  2. 随机移动一些构型坐标得到一个trial构型 outside_default.png ,并计算该构型的能量 outside_default.png ;

  3. 决定是否接受这个移动:
    (1)如果 outside_default.png ,那么100%接受这个移动,正式的下一步构型就是 outside_default.png了;
    (2)如果 outside_default.png ,那么产生一个0到1之间的随机数R, 并跟转移概率 outside_default.png 比较,如果 outside_default.png 那就接受这个移动 outside_default.png ,否则就拒绝这个移动 outside_default.png ;

  4. 回到第二步,直到累积N个构型。

这一列构型 outside_default.png 被称为马尔科夫链(Markov Chain),因为产生的新构型只跟当前构型有关,对前面的构型没有任何的记忆效应,所以这个方法又叫马尔科夫链蒙特卡洛(MCMC)。而且,从任何初始构型出发,最终都会达到平衡而且服从就是玻尔兹曼分布,即通过配比转移概率 outside_default.png 达到对某构型的采样概率为outside_default.png 且不随“时间”改变。【注意:MC里序列是没有物理上时间先后关系的,所有说MC“时间序列”都是指随机产生的顺序。】

当然,这个例子只是一个统计力学里的概率分布函数,其实任何形式的分布都可以用MC产生,使得MC方法在统计里应用的不要太多。

下载1:OpenCV-Contrib扩展模块中文版教程

在「小白学视觉」公众号后台回复:扩展模块中文教程,即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。


下载2:Python视觉实战项目52讲
在「小白学视觉」公众号后台回复:Python视觉实战项目,即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。


下载3:OpenCV实战项目20讲
在「小白学视觉」公众号后台回复:OpenCV实战项目20讲,即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。


交流群

欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值