看懂蒙特卡洛积分(一) 概率分布变换与随机采样

2022-4-9 20:51QinStone 284 0

TC130:游戏渲染进阶 123 赞同 · 6 评论文章

蒙特卡洛积分是图形学中常用的数学工具, 这里就来总结下蒙特卡洛积分的原理和使用方式. 很多教程中把概率分布和积分是混在一起讲的, 个人觉得分开讲比较合适. 这篇文章就先来讲下概率分布变换和随机采样的部分.

概率论基础

这里快速回顾下概率论的基础, 这里不会特别深入精确地描述. 需要的朋友可以参考概率论相关的教材.

[公式]
是随机变量,
[公式]
是任意实数, 称函数
[公式]
为随机变量
[公式]
分布函数/CDF, 或称
[公式]
服从
[公式]
, 记为
[公式]
.

分布函数满足:

  1. 单调不减;
  2. 右连续, 即
    [公式]
    ;
  3. [公式]
    .

从分布函数求概率:

  • [公式]
  • [公式]
  • [公式]


(1) 离散型变量

随机变量

[公式]
只能取有限个可能的值, 称
[公式]
离散型随机变量, 称
[公式]
[公式]
概率分布, 记为
[公式]
.

可以用矩阵形式表示为:

[公式]
.

离散型随机变量的概率分布满足

[公式]
.

比如记掷骰子的点数为

[公式]
, 得

[公式]

[公式]
的分布函数为

[公式]


(2) 连续型变量

如果随机变量

[公式]
的分布函数可以表示为:

[公式]

[公式]
连续型随机变量, 称
[公式]
[公式]
概率密度函数/概率密度/PDF, 记为
[公式]
.

概率密度函数满足

[公式]
.

对任意实数

[公式]
, 有
[公式]
.

[公式]
取在某个区间的概率为:

[公式]

比如现在假设

[公式]
是一个均匀随机分布在
[公式]
上的连续随机变量, 得

[公式]

(3) 如果

[公式]
是定义在样本空间上n个随机变量, 则称
[公式]
n维随机变量.

n维随机变量的分布函数定义为

[公式]

n维随机变量的性质和上面类似, 这里不再一一描述.

随机值采样

在计算机中, 得到一个均匀随机分布在

[公式]
上的随机数是很简单的, 我们这里用
[公式]
表示服从
[公式]
均匀分布的随机变量. 现在我们就来用
[公式]
来得到我们想要的服从特定概率分布的随机变量.

(1) 离散型随机变量

对于离散型随机变量, 计算过程比较简单, 已知

[公式]
, 假设从
[公式]
推导出
[公式]
的函数为
[公式]
.

考虑到

[公式]
[公式]
上均匀分布, 只需要将
[公式]
依概率映射到
[公式]
样本空间中每个值即可. 得到

[公式]

比如现在要得到

[公式]

易得

[公式]

(2) 连续型随机变量

比如现在要得到概率密度为

[公式]
, 概率分布为
[公式]
的随机变量
[公式]
. 设变换函数为
[公式]
, 即
[公式]
. 为了下面计算方便, 我们先假设
[公式]
是一个单调递增函数.

由概率分布定义可知:

[公式]

已知

[公式]
是单调递增函数, 可得:

[公式]

已知

[公式]
[公式]
上均匀分布, 可得

[公式]

可以得到

[公式]
互为反函数, 即

[公式]

我们平时遇到的概率分布函数都是不满足单调递增的, 只需要去掉概率密度为0的部分即可.


现在举两个例子:

A. 次方分布

[公式]
[公式]
上服从n次方分布, 即概率密度满足
[公式]
, 设
[公式]
, 由概率密度性质可知

[公式]

可以解得:

[公式]

由此算出

[公式]
的概率分布函数:

[公式]

[公式]
限制在
[公式]
上, 可得

[公式]

B. 指数分布

[公式]
的概率密度满足
[公式]
.

推导的部分和上面相同, 可得:

[公式]

这里的

[公式]
的概率分布和
[公式]
是相同的, 因此也可以写成

[公式]

(3) 拒绝式随机

对于一些无法求出解析解的概率分布函数, 或者无法得到

[公式]
反函数的概率分布函数, 可以用拒绝式随机方法.

假设我们现在想得到一个概率密度为

[公式]
的随机变量
[公式]
.

现在我们已有一个概率密度为

[公式]
的随机变量 , 我们可以任意次得到一个服从
[公式]
分布的随机变量
[公式]
, 且其概率密度满足 [公式] .

这样, 我们就可以通过下面的方法来随机得到

[公式]
:

  1. 取一个服从
    [公式]
    分布的随机变量值
    [公式]
    ;
  2. [公式]
    上随机得到一个变量值
    [公式]
    ;
  3. 如果 [公式] , 则该次随机结果被接受, 返回
    [公式]
    . 否者该次随机被拒绝, 重新执行第一步.

拒绝式随机方法的效率取决于

[公式]
[公式]
之间的贴合程度, 如果二者之间空隙很大, 就可能需要多次随机, 效率会比较低.

一个常见的拒绝式随机法的应用场景就是随机在一个圆中取一个点, 大致过程为:

point p;
do {
  p.x = rand() * 2 - 1;
  p.y = rand() * 2 - 1;
} while(p.x * p.x + p.y + p.y > 1);
return p;

概率分布变换

现在已知一个随机变量

[公式]
的概率密度为
[公式]
, 现在我们令
[公式]
, 现在我们要尝试求出
[公式]
的概率密度函数
[公式]
. 为了计算方便, 我们只考虑函数
[公式]
是严格单调递增的情况, 平时我们需要求解的函数大部分都是满足严格单调递增的.

由概率分布函数定义可知:

[公式]

对两边一起求导得:

[公式]

这样, 我们成功计算出了

[公式]
的概率密度函数.

比如现在有

[公式]
, 令
[公式]
, 可算出
[公式]
的概率密度为:

[公式]


现在, 让我们来考虑多维随机变量, 设

[公式]
[公式]
都是n维的随机变量,
[公式]
[公式]
之间的转换关系为
[公式]
.
[公式]
为矩阵函数, 即
[公式]
,
[公式]
.

可以推导得出:

[公式]

[公式]
表示
[公式]
的雅可比矩阵的行列式的绝对值,
[公式]
的雅可比矩阵为:

[公式]

现在来看下实际应用的例子:

A. 极坐标系

极坐标系的变换为

[公式]

假设我们现在已知关于极坐标的概率密度函数

[公式]
, 现在来计算直角坐标系的概率密度.

对应的雅可比矩阵为:

[公式]

求得行列式值为

[公式]
. 这样, 我们得到两种坐标系之间的变换公式为:

[公式]

B. 球坐标系

球坐标系到直角坐标系变换为:

[公式]

可解得雅可比矩阵行列式值为

[公式]
, 相应的概率密度为:

[公式]

现在来考虑在单位球面上的情况. 在球坐标系中, 我们从立体角的定义可以得到:

[公式]

立体角在某个

[公式]
范围内的概率为:

[公式]

得到概率密度的转换为:

[公式]

二维随机变量采样

现在可以来尝试从二维随机变量中采样.

(1) 联合概率密度

在开始之前, 我们还需要来简单回顾下联合概率密度的概念.

设现在有二维连续型随机变量

[公式]
, 二维随机变量的联合概率密度
[公式]
,
[公式]
联合分布函数

[公式]

二维随机变量的概率密度满足

[公式]

[公式]
边缘概率密度为:

[公式]

[公式]
的条件下,
[公式]
条件概率密度为:

[公式]

(2) 单位半球面采样

在单位半球面上均匀采样时, 每个立体角上都是等可能的. 由此得关于立体角的概率密度

[公式]
是常数, 令其为
[公式]
, 得

[公式]

解得

[公式]
, 由前面得到的结论可知
[公式]
.

先来计算

[公式]
, 得到
[公式]
的边缘概率密度为:

[公式]

再得到

[公式]
的条件概率密度为:

[公式]

[公式]
的概率密度在
[公式]
确定时是固定的, 这和我们的直觉是相同的. 接下来来计算相应的概率分布函数:

[公式]

求相应的反函数, 并将

[公式]
替换为
[公式]
, 得到:

[公式]

将结果用直角坐标系来表示:

[公式]

(3) 随机单位球面采样

推导过程和上面的几乎一模一样, 这里不再赘述. 最终结果为:

[公式]

(4) 随机单位圆采样

一个常见的错误是随机取半径, 随机取角度, 使用

[公式]
来采样. 这样得到的结果会使得在圆的中心区域概率比边缘部分要高.

在单位圆上均匀采样时, 关于面积的概率密

[公式]
是个常数, 可解得
[公式]
. 转换为极坐标系下得表示为
[公式]
. 使用和前面一样得推导过程得:

[公式]

[公式]
确定时, 因为圆的对称性,
[公式]
是个固定常数. 进一步计算分布函数并取反函数可求得:

[公式]


另外一种方式是使用正方形随机采样, 然后同心映射到圆上.

其中一个1/8部分的映射公式为:

[公式]

另外七个部分的映射公式可用相似的方式得到.

(5) 单位半球面余弦权重采样

求解图形学中的渲染方程时, 许多BRDF方程都是和夹角余弦相关的, 因此按照余弦采样是很有必要的. 即

[公式]
, 求解概率密度为:

[公式]

这样, 我们就可以继续使用上面的方式来推导出结果.

不过这里要介绍下Malley方法的实现, Malley方法就是先在单位圆上随机采样, 然后将单位圆上的点作为半球面上点的投影, 来得到半球面上的点.

下面我们来验证一下这种方式的正确性:

已知单位圆上随机采样的点极坐标为

[公式]
, 概率密度为
[公式]
. 单位半球面上对应的点极坐标系为
[公式]
, 两个坐标的关联为
[公式]
. 这样得到雅可比矩阵为:

[公式]

行列式值为

[公式]
, 变换概率密度分布得:

[公式]

刚好符合上面我们想要得概率密度函数, 这样就可以从单位圆采样得到单位半球面上得采样.


其余的在锥形区域, 三角形, 长方形区域随机采样的过程和结果都是类似的, 这里不再给出. 这样我们可以随意按照自己想要的概率密度进行随机数采样, 下一篇会讲述如何使用随机数来实现蒙特卡洛积分.


鲜花

握手

雷人

路过

鸡蛋

最新评论

QQ|手机版|小黑屋|九艺游戏动画论坛 ( 津ICP备2022000452号-1 )

GMT+8, 2024-4-17 02:14 , Processed in 0.096343 second(s), 18 queries .

Powered by Discuz! X3.4  © 2001-2017 Discuz Team.