Monte Carlo Method

Reference: Jonathan Pengelly, Monte Carlo Methods, 2002 

Basic Description
MC为许多数学上难以解决的问题通过运行统计采样实验提供了近似解(approximate solution),所以MC也可定义为统计模拟方法。那统计模拟方法(statistic simulation)又是什么呢?就是任何通过利用随机数序列(sequence of random number)来模拟的方法。MC方法就是一个采用统一随机采样的各种方法的集合。也就是说随机采样(随机模拟--模拟事件发生的过程,但是input和parameter是一定范围内的随机数: simulations using random numbers and probability to get an approximation of the answer to the problem---和采样的简称)是MC的核心思想。
那为什么不叫作"随机采样方法"而叫做Monte Carlo 方法呢?要知道概率论和统计的诞生是因为人们想观察和发现赌博中的规律(e.g. 计算胜率赔率)从而从赌博中获利。统计大师们也努力向成为赌博大师(Gambling Master ^_^) 而发展着。。Monte Carlo是不是听着有点耳熟呢?不错,它正是著名的赌城。赌城吧自然有很多赌场啊筛子啊,这些让你想到了什么呢?没错,随机数!所以用Monte Carlo来命名这种随机数方法真是再合适不过了!是不是感觉到这些大师中的点点骚气呢。。。
MC方法的提出和二战紧密相连呢(ps: 菊花一紧),它正是来源于四十年代为了解决各种关于核爆炸而提出的计算方法。但是很不幸呢这些赌博大师空有方法而“巧妇难于无米之炊”,那时的科技(也就是计算机啦)不足以运行那么牛逼xx的模拟实验,随机数生成也很蛋疼,可以想象那些大师们脸上类似便秘的表情了。。好在金子总会发光的,随着科技的日益发展(让我想到了高考英语作文模板句with the development of the technology..),计算机们已进化到足以在许多方面能完爆小模拟实验的擎天柱级别的人物了呢(喂,要不要那么夸张),生成些随机数自然也是小case了呢。说到随机数,知道计算机一般是怎么生成随机数的吗?线性同余。听上去很高端吧,这里不表,回去自己查。
在这里或许要问了,为什么随机采样能得到近似解呢?我来举个小例子,参考自 http://cos.name/2010/03/monte-carlo-method-to-compute-integration/ http://blog.csdn.net/xianlingmao/article/details/7768833 。假设给我们一个已知大小的矩形R,这个矩形里有一坨很不规则shit一样的大小未知的区域M(为什么加上shi一样的啊。。这么恶心谁还来看你的blog啊O__O"…)。怎么求M的面积呢?积分啊。积分你妹,不知道M的函数我看你怎么积分?!有一种很天才的方法就是抓把巴豆往R那个框框里力道均匀的随意方向地扔。当扔的巴豆足够多的时候我们就可以数数有多少巴豆在M里,有多少不在M(都在R里)里。对,然后我们就可以用前者的数目除以所有扔了的巴豆,从而通过这个比例就能大致推出M的面积占R的多少呢!是不是很巧妙呢。就是说在某些情况下,由于不可能对所有的可能性都进行模拟实验(就像我们巴豆数量有限不足以填满整个框框),尽管现在的计算机显得很牛逼的样子,所以通过一坨互不相关的采用随机数执行的模拟实验来找出整个宏观的规律(统计,statistic ),这些随机实验是整个全部可能性(全集)的子集,即样本(sample),从而这一过程也叫做采样(sampling)。还有个很古老的 普冯氏求Pi问题也能很好的说明这个思想呢,感兴趣的请移步 http://wenku.baidu.com/view/f25ce96327d3240c8447ef35.html 。题外话扯句,学通信的应该对sampling很熟悉吧,由于传输失真什么的,需要采取一定样本来还原原来的信息。
要注意哦,MC旗下的众方法们只能够提供一个近似解呢。于是呢对于这些方法们的近似误差(approximation error)的分析就尤为重要了。为了不断减少误差,衍生出了许许多多不同的方法了呢。而且对于不同的环境使用不同的方法能得到意想不到的准确度呢~
好吧,序言扯完了,让我们说正事儿吧!

Monte Carlo Techniques
还记得上面举的小例子吧,求不规则形状面积的那个。我们都知道,积分(integral)在笛卡尔坐标系中直观的表示就是有关一个函数图形与坐标轴相围而成的图形的面积(area)大小(纳尼你不知道?回去好好看微积分)。既然我们可以用随机采样的方法计算面积,自然可以用此方法来计算积分。事实证明,对于那些高阶用正式方法很难算出结果的复杂积分,MC有时能很快就能求出比较准确的近似解呢O(∩_∩)O。要记住两点哦,其实挺废话的,我们得出的近似解要越精确越好,就要用分析误差的工具如方差(variance)来评估;对于不同的情景,不同的MC方法的表现是不一样的,我们要从事实出发,坚持实事求是,挑选那种会表现最佳的方法,这样我们就可以省了很多不必要的采样了,保护环境,低碳从我做起。好了,多余废话不表,那就让我来说说怎么用最基本的四种MC方法来求积分吧,噢耶。

1)Crude Monte Carlo (基本MC方法)
给定一个定积分

熟悉吧?假定我们取N个随机数样本,对每个样本s把它带入f(x)中得到f(s)。把这N个f(s)加到一起并处以N从而得到样本的平均值(mean),再用这个平均值乘以积分区间(interval b - a) b - a 就得到积分值了。怎么样很简单吧。用数学公式表示为

话说积分公式里那个很像纤细版S的积分符号就是来自于Sigma (sum)符号呢,联想一下,积分符号可以看成是进击了Sigma不为过吧。Make sense了吧。
如果还不能很好理解这个方法的话我们可以这么想,如公式所描述的,把(b - a)以外的单独拿出来先,这不就是我们小时候就会的求平均数嘛。不错,它就是对我们所取的所有N个样本取个简单的平均值。但是平均值就相当于一块大区域的最基本的一部分,要求整个大区域的面积就再用这个平均值乘以小区域的数量(b - a)不就好了嘛。说白了MC方法思想和积分的基本思想是一致的,区别就是它不需要考虑所有的可能性,而是取一部分再掐指一算就哦了。
结束了吗?别急,我们还没评估这种方法的误差呢。把方差公式套过来,即得样本方差为:

这样就能简单评估出准确度呢,简单吧!

2)Acceptance - Rejection Monte Carlo (接受-拒绝 MC)
上节讲到的Crude MC已经够简单理解了吧,但是还有更简单的呢,这不,接受-拒绝MC登场了。很遗憾,简单的代价就是它是四种方法中准确度最低的了。
事实上接受-拒绝MC的思想和我们在basic description中举的那个数巴豆的例子特别像。假定还是上节那样的一个定积分,我们要对于(b -a)中任意的x找出它的上界。然后我们就用最高的那个上界当作高,b - a 为底,组成一个把f(x)包起来的长方形。剩下的就和以前扔巴豆类似了,我们往这个新的长方形框框里随意取N个点,记下在f(x)函数图形下方的点即有效样本的数量。由于我们只“接受”有效样本,“拒绝”无效的,正好体现了“接受-拒绝”这名字。这样我们就得出了有效样本所占比例(ratio),再乘以长方形面积就行了。数学表示为:

k是有效样本(the successful samples)的数量, M是(Max(f(x)) * (b - a)),也就是长方形的面积。用图来解释如下:

接受-拒绝MC的样本方差和Crude MC的一样,就不多说了。

3) Stratified Sampling (分层采样)
分层采样,顾名思义就是把区间(a, b)分层,再对每层采用Crude MC。
好处就是算方差的时候不用整个一坨计算了,而是算出一小坨一小坨的,然后加一块儿。对于那种很像分步的积分和那种积分图形很平(flat)的很适用。因为平的积分的方差会很小。
所以分层采样就是把一个复杂的积分分成一段段的分别计算。


至于它的方差计算方法就不用再废话了吧。

4) Importance Sampling (重要采样)
重要采样是这四种最难的~\(≧▽≦)/~啦啦啦。不过不用怕哦,原理也没啥难的,通俗易懂,和上节在思路上一致的哦。接着上节的分层采样来说,我们来看看上节的Figure 2, I1是不是非常平,也就是值很固定(constant)。但是呢随着我们继续往后看,f(x)的值变得越来越大,图形也越来越陡,到最后一坨已经非常陡(有可能在这块区域采样的方差也会大,对整个f(x)的方差都造成大的影响;如果错了就会“很错”,所以得了,多来样本吧这边减小点方差)了占面积也是最大的(值是最高的,会更大的拉大平均值),换句话说它对于整个积分的影响也是最大的。那我们何不对这最后一部分多费些心思多采点样,对前面点少采点,反正采一次样费的精力是一样的嘛。在采样次数相同的情况下,这样采样准确度不就上去啦?所以重要采样的中心思想就是对重要的区间多采样。
重要采样采用概率分布函数(就是随机变量random variables的不同取值和它对应的概率probability之间的映射,probability distribution function简称pdf 囧)来作为采样的指导思想。让重要的区域有更高的概率,即更大的可能获得采样的机会。参见此图:

现在我们可以把积分公式变变形:

p(x)就是pdf。记住哦,p(x)在(a, b)的和是1,而且由于f(x)在(a, b)都有定义,所以没地方p(x)会是0。
通过调节p(x),我们更加关注于f(x)的重要的那部分(原著上说是值最大超过平均值的那部分,我觉得这么说不准确,应加上往往,可以想象一下那种前面一大长溜都是很矮的最后一丢丢陡然变高的那种函数图形,重要的区域是那种函数图象不稳定从而容易造成方差的那种吧,不光是很陡很高),会不会造成不准呢?没事儿的,对每个样本都通过计算f(x)/p(x)来调节f(x)和p(x)的不协调,从而使得f(x)和p(x)大致趋势相一致。我们也就能看出p(x)的选取的重要性,这也是这种方法之所以困难的原因吧。

来个简短的总结吧。后两种能在特定情况下大幅提升准确度。之于分层采样,适用于适合分块的并伴有平的函数图形;重要采样需要一个很好的pdf来指引革命思想。前两个方法适用性更普遍,是解决复杂问题的基础。

后面我将再举一些简单的例子。今天先到这里吧!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值