根据维基百科,蒙特卡洛积分法是基于随机数的数值积分方法,用于计算定积分。对于高维的积分该方法具有巨大优势,因为蒙特卡洛方法是基于随机采样的方法,而很多其他方法是基于grid的,即将空间分割为不同的grid,最终将每个grid中的计算结果汇总,在n维的情况下这些方法就是O(n)的空间复杂度,而蒙特卡洛仍为O(1),但要达到相同的精度,所需要的采样数量是否一定优于grid的方法,我暂时还未得到证明。
1. 算法说明
那么接下来我们来看看蒙特卡洛积分描述了怎样一个过程。
以一维的定积分$\int_{a}^{b}f(x)dx$为例,我们去找一个分布,其概率密度为:
2. 例子
一个比较常见的蒙特卡洛方法即投点法,如下图的rejective方法(取自维基百科):
那么怎么用上述推导来解释这个过程呢。我这里给了一个可能的解释,首先可以定义一个二维函数$f(x,y)$:
那么红色部分的面积即为$\iint_{D}f(x,y)dxdy$,其中$D$为正方形区域。那么投点做了什么事呢——在正方形区域中均匀采样,故$pdf(x,y)=1$,所以可以得到:
这个求和即为:若采样点落在圆中,则计数加一,否则reject。
3. 重要性采样
关于重要性采样的在蒙特卡洛积分中的作用,我们可以看如下这个半球面积分的例子:
如果在半球面上进行均匀采样,蒙特卡洛方法如下:
而如果进行Cosine Weight的采样,则有如下结果:
可以看到当我们的分布的概率密度刚好与$f(x)$差一个常数倍的话,我们甚至只需要采样一次。因此当分布于函数越相近时,我们所需要的采样数也就越少。