蒙特卡洛方法

蒙特卡洛在图形渲染领域中有着大量的应用,其中包括但不限于基于物理的渲染(PBR)、基于图像的光照(IBL)、预计算辐照度全局光照(PRT)等等,最新的高效光追算法 ReSTIR 中也需要以蒙特卡洛作为理论基础,UE5 的 Lumen 目前也实现了基于 ReSTIR 的 Gather……

一、初识蒙特卡洛(Monte Carlo)

蒙特卡洛是南欧国家摩纳多的一个著名赌城,赌博就意味着概率,蒙特卡洛方法正是以概率为基础的方法是一大类随机算法(Randomized Algorithms)的总称,即通过随机样本来估算真实值。在了解蒙特卡洛之前,需要先了解概率论基础

1.1 最简单的例子:近似 PI 值

一个随机数生成器,可均匀生成 [-1, 1] 之间的数,每次生成两个数,对应着一个平面坐标系中的点 (x, y)

该图片来源于《深度强化学习》王树森著

将以上的操作重复进行 n 次,在 n 非常大的情况下,落入如上绿色范围内的点的数量 m 与 n 的比值就近似于 \frac{\pi}{4},对公式做个变换得到 \pi \approx \frac{4 m}{n},很好理解,到此蒙特卡洛也就入门了

1.1.1 n 有多大,PI 才能足够准确?

大数定律保证了蒙特卡洛的正确性:当 n 趋于无穷,\frac{4 m}{n} 趋于 \pi

通过 Bernstein 不等式 \left|\frac{4 m}{n}-\pi\right|=O\left(\frac{1}{\sqrt{n}}\right) 可以了解到:样本数量 n 增加一万倍,精度才能提高一百倍,这一部分还是算超纲了,有兴趣看下就好

1.2 最普通的例子:计算定积分

就拿《深度强化学习》这本书中的例子:

计算 I=\int_{0.8}^3 f(x) dx,其中 f(x)=\frac{1}{1+(\sin x) \cdot(\ln x)^2}

求解解析解非常困难,再加上计算机也不会计算连续的积分,因此通过蒙特卡洛计算数值近似解就是一个不错的选择,一元函数定积分也算是一个相对简单的问题

此蒙特卡洛近似计算步骤如下:

  1. 在区间 [a, b] 上做随机抽样,得到 n 个样本,记作:x_1, \cdots, x_n
  2. 对函数值 f\left(x_1\right), \cdots, f\left(x_n\right) 求平均,再乘以区间长度 b − a

可得出 I=\frac{b-a}{n}\sum_{i=1}^n f\left(x_i\right)

这个方法和黎曼和的求法非常类似:\frac{b-a}{n} 就是图中矩形的宽,而 f\left(x_{i}\right) 就是对应矩形的高

1.2.1 多元函数定积分

一元函数的定积分是相对比较简单的问题,在此情况下,变量 x 是个标量,求解的积分也不会是多重积分

多元函数定积分的求解要复杂一些,但好在,前面 1.1 求解 \pi 的例子正好可转换为多元函数定积分求近似的问题,下面就从公式的角度再推导一遍

其求解 \pi 近似值的本质其实就是计算 \pi=\int_{\Omega} f(x, y) d x d y,集合 Ω = [−1, 1] × [−1, 1]

其中 f(x, y)=\left\{\begin{array}{lc} 1, & \text { if } x^2+y^2 \leq 1 \\ 0, & \text { otherwise } \end{array}\right.,直观地说,如果点 (x, y) 落在下图的绿色圆内,那么函数值就是 1;否则函数值就是 0

从从集合 Ω = [−1, 1] × [−1, 1] 上均匀随机抽样 n 个点,记作 \left(x_1, y_1\right), \cdots,\left(x_n, y_n\right)

可得到 \pi \approx v \cdot \frac{1}{n} \sum_{i=1}^n f\left(x_i, y_i\right)=\frac{4}{n} \sum_{i=1}^n f\left(x_i, y_i\right),其中 v=\int_{\Omega} d x 即集合 Ω 的面积,1.1 中对 m 的定义,其实就是多次采样的 \sum_{i=1}^n f\left(x_i, y_i\right) 结果

二、蒙特卡洛积分(Monte-Carlo integration)

在介绍完备的蒙特卡洛积分前:先举一个完全不需要复杂的数学推导,生活中的例子

在要统计全国大学生的平均身高,有以下两个方案:

  1. 直接挨家挨户调查全国所有大学生每一个人的身高,然后求其平均
  2. 随便进入一所大学,统计这所大学里面所有学生的身高,然后求其平均作为近似解

可见,选择方案②确实是一个很不错的选择,它就是随机采样的一个案例,但是现在有这样一个问题:这所大学是文科大学,也因此男女比例是 1:5,要知道女性的平均身高是要低于男性的,这样若只是单纯的随机抽样必然会得出错误的结果。对于这个问题,该如何设计采样方案,才能使得最终的结果尽可能的客观真实呢?

相信这个问题对于一个初中生来讲,都能很好的回答:有两种方案

  • 抽到男生的时候,将其权重设为5,抽到女生的时候,将其权重设为1,最后计算平均身高时乘上权重求平均
  • 男生女生分开抽查,确保抽查到的男女生比例为 1:1,然后统计平均身高

但是从这个问题可以看出,每个样本被选中的概率并不一定是相同的,也就是说,样本池不一定均匀,就像题目中的情景,选出女生的概率要比选出男生的概率高

2.1 非均匀样本采样

若只是单纯的求解定积分结果,采样范围即积分范围,并且此采样范围内的每个样本完全均匀分布,但蒙特卡洛积分需要考虑到所有情况

对于一般格式的连续性积分 F(x)=\int_{\Omega} f(x) d x其被积函数为 f(x),积分区间为 Ω

一样采用离散的方式去近似:即只在区间 Ω 内进行 n 次采样,且每个样本 x 在区间内被选中的概率为 p(x),那么就有 F(x)=\int_{\Omega} f(x) d x\approx\frac{1}{n} \sum_{i=1}^{n} \frac{f\left(x_{i}\right)}{p\left(x_{i}\right)},其中

  • Ω 可以是三维空间、一个球面、或者一个曲面……
  • 样本 x 可能是一个点、也可能是一个立体角、或者是光线追踪时的其中一条路径……
  • p(x) 和 f(x) 无直接关系,只是在大部分情况下,我们可以自由选择 p(x),好的 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值