Monte Carlo Integration(蒙特卡洛积分)
Probability Review(概率论回顾)
一个随机变量(random variable) X X X是某个随机过程(random process)的取值,我们一般使用大写的希腊字母来表示一个随机变量。随机变量总是从某个域(domain)中抽取的,域可以是离散的或是连续的,我们可以应用函数 f f f到随机变量 X X X上产生新的随机变量 Y = f ( X ) Y=f(X) Y=f(X)。
对于一个离散的随机变量 X X X,某个事件发生的概率写作 p ( X ) p(X) p(X),这个概率被称为概率质量函数(probability mass function, PMF)。
两个独立事件的联合概率(joint probability)是他们概率的乘积, p ( X , Y ) = p ( X ) p ( Y ) p(X,Y)=p(X)\,p(Y) p(X,Y)=p(X)p(Y)。
对于相关随机变量(dependent random variables),一个的概率会影响另一个的概率,它们的联合概率建立在条件概率(conditional probability)之上, p ( X , Y ) = p ( X ) p ( Y ∣ X ) p(X,Y)=p(X)p(Y|X) p(X,Y)=p(X)p(Y∣X)。 p ( Y ∣ X ) p(Y|X) p(Y∣X)是给定 X X X的情况下 Y Y Y的概率。
一个重要的随机变量是规范均匀随机变量(canonical uniform random variable),写作 ξ \xi ξ,这个变量从域 [ 0 , 1 ) [0,1) [0,1)中独立均匀取值。这个随机变量重要的原因有二。第一,这个随机变量的分布在软件中非常好实现,非常多库中都存在伪随机数生成器(pseudo-random number generator, PRNG)。第二,这个随机变量可用于映射到其他离散随机变量上,例如当 ∑ j = 1 i − 1 p j ≤ ξ < ∑ j = 1 i p j \sum_{j=1}^{i-1}p_j\leq{\xi}<\sum_{j=1}^{i}p_j ∑j=1i−1pj≤ξ<∑j=1ipj时,取值 X i X_i Xi。
累积分布函数(cumulative distribution function, CDF) P ( x ) P(x) P(x)是随机变量的取值小于或等于某个值 x x x的概率: P ( x ) = Pr { X ≤ x } P(x)=\text{Pr}\{X\leq{}x\} P(x)=Pr{X≤x}
连续随机变量(Continuous random variables)是从连续的域中进行取值的随机变量,连续随机变量使用概率密度(Probability density function, PDF)描述随机变量取特定值的相对概率,这是对 PMF 的连续模拟。
连续随机变量的 PDF p ( x ) p(x) p(x)是它 CDF 的导数: p ( x ) = d P ( x ) d x p(x)=\frac{\mathrm{d}P(x)}{\mathrm{d}x} p(x)=dxdP(x)
对于均匀随机变量, p ( x ) p(x) p(x)是一个常数,例如 ξ \xi ξ的 PDF 为: p ( x ) = { 1 x ∈ [ 0 , 1 ) 0 otherwise p(x)=\begin{cases} 1&x\in[0,1)\\0&\text{otherwise} \end{cases} p(x)={10x∈[0,1)otherwise。PDF 的函数值始终非负,并且积分域上的总积分值为 1。
给定域上的一个区间 [ a , b ] [a,b] [a,b],对 PDF 进行积分可得出随机变量位于区间内的概率: Pr { x ∈ [ a , b ] } = ∫ a b p ( x ) d x = P ( b ) − P ( a ) \Pr\{x\in[a,b]\}=\int_a^bp(x)\,\mathrm{d}x=P(b)-P(a) Pr{x∈[a,b]}=∫abp(x)dx=P(b)−P(a)
Expected Values(期望值)
使用一个随机变量 f ( X ) = Y f(X)=Y f(X)=Y在一个域为 D D D的函数 f f f上,用分布 p ( x ) p(x) p(x)进行采样,得到的样本均值(Sample Mean)由采样值 Y 1 , Y 2 , . . . , Y n Y_1,Y_2,...,Y_n Y1,Y2,...,Yn的平均值给出:
Y ˉ = 1 n ∑ i = 1 n Y i \begin{equation} \bar{Y}=\frac1n\sum_{i=1}^nY_i \end{equation} Yˉ=n1i=1∑nYi
随机变量 Y Y Y的期望,某个采样点 Y i Y_i Yi的期望,样本均值 Y ˉ \bar{Y} Yˉ的期望,都由函数 f f f和分布函数 p ( x ) p(x) p(x)的积分给出:
μ = E [ Y ] = E [ Y i ] = E [ f ( X i ) ] = E [ Y ˉ ] = ∫ D f ( x ) p ( x ) d x \begin{equation} \mu=E[Y]=E[Y_i]=E[f(X_i)]=E[\bar{Y}]=\int_D{}f(x)p(x)\,\mathrm{d}x \end{equation} μ=E[Y]=E[Yi]=E[f(Xi)]=E[Yˉ]=∫Df(x)p(x)dx
期望有一些有用的性质:
E [ a X ] = a E [ X ] \begin{equation} E[aX]=aE[X] \end{equation} E[aX]=aE[X]
E [ ∑ i = 1 n X i ] = ∑ i = 1 n E [ X i ] \begin{equation} E[\sum_{i=1}^nX_i]=\sum_{i=1}^nE[X_i] \end{equation} E[i=1∑nXi]=i=1∑nE[Xi]
Variance(方差)
方差(Variance),即随机变量或函数与其期望值的期望平方偏差,是表征随机变量收敛性的有效方法。
用随机变量 Y Y Y采样在 p ( x ) p(x) p(x)下的函数 f ( x ) f(x) f(x),它的方差为:
V [ Y ] = σ 2 = ∫ f ( x ) 2 p ( x ) 2 d x − μ 2 \begin{equation} V[Y]=\sigma^2=\int{}f(x)^2p(x)^2\,\mathrm{d}x-\mu^2 \end{equation} V[Y]=σ2=∫f(x)2p(x)2dx−μ2
方差有以下性质:
V [ X ] = E [ ( X − E [ X ] ) 2 ] \begin{equation} V[X]=E[(X-E[X])^2] \end{equation} V[X]=E[(X−E[X])2]
V [ X ] = E [ X 2 ] − E [ X ] 2 \begin{equation} V[X]=E[X^2]-E[X]^2 \end{equation} V[X]=E[X2]−E[X]2
如果一系列采样点 X 1 , X 2 , . . . , X n X_1,X_2,...,X_n X1,X2,...,Xn相互独立,则总和的方差就是各个随机变量方差的总和:
V [ ∑ i = 1 n X i ] = ∑ i = 1 n V [ X i ] \begin{equation} V[\sum_{i=1}^nX_i]=\sum_{i=1}^nV[X_i] \end{equation} V[i=1∑nXi]=i=1∑nV[Xi]
Monte Carlo: Basics
The Monte Carlo Estimator(蒙特卡洛估计器)
蒙特卡洛积分是一种数值积分方法(其他数值积分方法),使用蒙特卡洛估计器可以近似任意积分的值,假设我们要计算一维积分 ∫ b a f ( x ) d x \int^a_b{f(x)}{dx} ∫baf(x)dx,给定一组独立的均匀随机变量值 X i ∈ [ a , b ] X_i\in[a,b] Xi∈[a,b],使用蒙特卡洛估计器 F n F_n Fn近似积分,有:
F n = b − a n ∑ i = 1 n f ( X i ) \begin{equation} F_n=\frac{b-a}{n}\sum_{i=1}^{n}{f(X_i)} \end{equation} Fn=nb−ai=1∑nf(Xi)
这个近似结果的期望值 E [ F n ] E[F_n] E[Fn]等于其积分值,由于是均匀随机变量,因此对于任意 x x x值, p ( x ) = 1 / ( b − a ) p(x)=1/(b-a) p(x)=1/(b−a),根据(2), (3)可得:
E [ F n ] = E [ b − a n ∑ i = 1 n f ( X i ) ] = b − a n ∑ i = 1 n E [ f ( X i ) ] = b − a n ∑ i = 1 n E [ X ] = b − a n ∑ i = 1 n ∫ a b f ( x ) p ( x ) d x = ∫ a b f ( x ) d x \begin{aligned} E[F_n]&=E[\frac{b-a}{n}\sum_{i=1}^{n}{f(X_i)}]\\ &=\frac{b-a}{n}\sum_{i=1}^{n}E[f(X_i)]\\ &=\frac{b-a}{n}\sum_{i=1}^{n}E[X]\\ &=\frac{b-a}{n}\sum_{i=1}^{n}\int_a^b{f(x)p(x)}{\,\mathrm{d}x}\\ &=\int_a^b{f(x)}{\,\mathrm{d}x} \end{aligned} E[Fn]=E[nb−ai=1∑nf(Xi)]=nb−ai=1∑nE[f(Xi)]=nb−ai=1∑nE[X]=nb−ai=1∑n∫abf(x)p(x)dx=∫abf(x)dx
我们可以非常直观的推广这个积分器到多维,考虑一个三维积分 ∫ z 0 z 1 ∫ y 0 y 1 ∫ x 0 x 1 f ( x , y , z ) d x d y d z \int_{z_0}^{z_1}\int_{y_0}^{y_1}\int_{x_0}^{x_1}f(x,y,z)\,\mathrm{d}x\,\mathrm{d}y\,\mathrm{d}z ∫z0z1∫y0y1∫x0x1f(x,y,z)dxdydz,使用均匀随机变量 X = ( x i , y i , z i ) X=(x_i,y_i,z_i) X=(xi,yi,zi)采样,对于任意 X X X值, p ( X ) = 1 x 1 − x 0 1 y 1 − y 0 1 z 1 − z 0 p(X)=\frac{1}{x_1-x_0}\frac{1}{y_1-y_0}\frac{1}{z_1-z_0} p(X)=x1−x01y1−y01z1−z01,因此估计器为 ( x 1 − x 0 ) ( y 1 − y 0 ) ( z 1 − z 0 ) n ∑ i = 1 n f ( X i ) \frac{(x_1-x_0)(y_1-y_0)(z_1-z_0)}{n}\sum_{i=1}^nf(X_i) n(x1−x0)(y1−y0)(z1−z0)∑i=1nf(Xi)。
将其推广到非均匀采样的随机变量 X i X_i Xi,取自 PDF p ( x ) p(x) p(x),有:
F n = 1 n ∑ i = 1 n f ( X i ) p ( X i ) \begin{equation} F_n=\frac{1}{n}\sum_{i=1}^{n}\frac{{f(X_i)}}{p(X_i)} \end{equation} Fn=n1i=1∑np(Xi)f(Xi)
唯一的限制是对于所有 ∣ f ( x ) ∣ > 0 |f(x)|>0 ∣f(x)∣>0的 x 值,PDF 都是非零的。类似于均匀情况,这个近似结果的期望值 E [ F n ] E[F_n] E[Fn]也等于其积分值。
E [ F n ] = E [ 1 n ∑ i = 1 n f ( X i ) p ( X i ) ] = 1 n ∑ i = 1 n ∫ a b f ( x ) p ( x ) p ( x ) d x = 1 n ∑ i = 1 n ∫ a b f ( x ) d x = ∫ a b f ( x ) d x \begin{aligned} E[F_n]&=E[\frac{1}{n}\sum_{i=1}^{n}{\frac{f(X_i)}{p(X_i)}}]\\ &=\frac{1}{n}\sum_{i=1}^{n}\int_a^b\frac{f(x)}{p(x)}p(x)\,\mathrm{d}x\\ &=\frac{1}{n}\sum_{i=1}^{n}\int_a^b{f(x)}{\,\mathrm{d}x}\\ &=\int_a^b{f(x)}{\,\mathrm{d}x} \end{aligned} E[Fn]=E[n1i=1∑np(Xi)f(Xi)]=n1i=1∑n∫abp(x)f(x)p(x)dx=n1i=1∑n∫abf(x)dx=∫abf(x)dx
蒙特卡洛的优点在于样本数量可以任意选取,不管被积函数的维度如何,这是蒙特卡洛相对于传统确定性求积技术的另一个重要优势,传统确定性求积技术通常需要大量在维度上呈指数的样本。
Error in Monte Carlo Estimators(蒙特卡洛估计器误差)
证明蒙特卡罗估计器收敛于正确答案并不足以证明它的使用,它的收敛速度也很重要,收敛速度可以由方差进行评判。
假设估计器 F F F需要估计积分 ∫ b a f ( x ) d x \int^a_b{f(x)}\,\mathrm{d}x ∫baf(x)dx,考虑使用概率密度为 p ( x ) p(x) p(x)的随机变量 X X X来采样函数 f ( x ) f(x) f(x),计算 V [ F ] V[F] V[F],有:
V [ F ] = σ ^ 2 = V [ 1 n ∑ i = 1 n f ( X i ) p ( X i ) ] = 1 n 2 V [ ∑ i = 1 n f ( X i ) p ( X i ) ] = 1 n 2 ∑ i = 1 n V [ Y i ] = 1 n V [ Y ] \begin{aligned} V[F]=\hat\sigma^2 & =V[\frac{1}{n}\sum_{i=1}^{n}\frac{{f(X_i)}}{p(X_i)}] \\ & =\frac{1}{n^2}V[\sum_{i=1}^{n}{\frac{{f(X_i)}}{p(X_i)}}] \\ & =\frac{1}{n^2}\sum_{i=1}^{n}V[Y_i] \\ & =\frac{1}{n}V[Y] \end{aligned} V[F]=σ^2=V[n1i=1∑np(Xi)f(Xi)]=n21V[i=1∑np(Xi)f(Xi)]=n21i=1∑nV[Yi]=n1V[Y]
这里我们设使用单样本估计积分的方差为 V [ Y ] V[Y] V[Y],可以推断出方差随着样本数量线性递减。
由于方差是平方误差,因此蒙特卡罗估计中的误差(标准差)仅以 O ( n − 1 / 2 ) O(n^{-1/2}) O(n−1/2)的速率下降。虽然标准正交技术(standard quadrature techniques or Gaussian quadrature)在一维上收敛速度更快,但随着被积函数维数的增加,它们的性能会呈指数级下降,而蒙特卡罗的收敛速度与维数无关,使蒙特卡罗成为唯一实用的高维积分数值积分算法。
O ( n − 1 / 2 ) O(n^{-1/2}) O(n−1/2)的性质使得在渲染场景,对每个 pixel 进行采样时,样本数较少时,蒙特卡洛增加样本数对画面的改善是非常迅速的,但随着样本数的增加,误差消除的速度会逐渐增加。
方差的线性递减性还可以很好的用于指导比较不同的蒙特卡洛积分器,考虑两个估计器,其中第二个估计器在同等样本数下的方差是第一个的一半,但需要三倍的时间来计算估计;两者中哪一个更好?在这种情况下,首选第一种方法,因为在第二个估计器的消耗的时间内,第一个可以采集三倍的样本,在这种情况下,它会实现三倍的方差减少。由此可以给估计器 F F F封装一个新的属性 效率(efficiency) ϵ \epsilon ϵ。有:
ϵ [ F ] = 1 V [ F ] T [ F ] \begin{equation} \epsilon[F]=\frac1{V[F]T[F]} \end{equation} ϵ[F]=V[F]T[F]1
其中, V [ F ] V[F] V[F]表示方差, T [ F ] T[F] T[F]表示计算到此方差值需要的时间。
此外,并不是所有的估计器的期望值都等于积分的值,这种估计器被称为是有偏(biased)的,差值表示为:
β = E [ F ] − ∫ f ( x ) d x \begin{equation} \beta=E[F]-\int{}f(x)\,\mathrm{d}x \end{equation} β=E[F]−∫f(x)dx
如果有偏估计器能够比无偏估计器更快地接近正确的结果,那么有偏估计器仍然是可取的。
例如 Kalos and Whitlock 提出的一种计算 [ 0 , 1 ] [0,1] [0,1]上均匀分布 X i ∼ p X_i\sim{p} Xi∼p的平均值的估计器。第一种估计器为 1 n ∑ i = 1 n X i \frac1n\sum_{i=1}^nX_i n1∑i=1nXi,第二种为 1 2 max ( X 1 , X 2 , . . . , X n ) \frac12\max(X_1,X_2,...,X_n) 21max(X1,X2,...,Xn)。
第一种估计器是无偏的,但方差下降速度为 O ( n − 1 ) O(n^{-1}) O(n−1)。
第二种估计器的期望值为 0.5 n n + 1 ≠ 0.5 0.5\frac{n}{n+1}\neq0.5 0.5n+1n=0.5,是有偏的,但方差下降速度为 O ( n − 2 ) O(n^{-2}) O(n−2)。
由此可见第二种估计器更加优秀。第二种估计器还有一个有用的性质是当采样点数量趋于无限时,误差会降为 0,这种估计器被称为是 consistent 的。
与方差密切相关的是均方误差(mean squared error, MSE),它被定义为估计器与真实值的平方差的期望:
MSE [ F ] = E [ ( F − ∫ f ( x ) d x ) 2 ] \begin{equation} \text{MSE}[F]=E[(F-\int{}f(x)\,\mathrm{d}x)^2] \end{equation} MSE[F]=E[(F−∫f(x)dx)2]
对于无偏估计器,MSE 等于方差;反之是方差与估计器的偏差的平方之和。
使用 MSE 的概念,我们就可以通过样本均值(sample mean)来计算样本方差(sample variance),写作:
1 n − 1 ∑ i = 1 n ( X i − X ˉ ) 2 \begin{equation} \frac1{n-1}\sum_{i=1}^n(X_i-\bar{X})^2 \end{equation} n−11i=1∑n(Xi−Xˉ)2
除数为 n − 1 n-1 n−1而不是 n n n的原因可以查阅 Bessel’s correction。
样本方差是基于给定的样本而不是真实概率分布的,因此它只是方差的估计值,本身就具有误差。例如对于一个 99.99% 取 1,0.01% 取 1e10 的随机变量,样本方差可能由于取得的样本值全是 1 而等于 0,但方差并不为 0。
如果一个积分的准确估计 F ~ ≈ 1 n ∑ i = 1 n ( f ( X i ) − F ~ ) 2 \tilde{F}\approx\frac1n\sum_{i=1}^n(f(X_i)-\tilde{F})^2 F~≈n1∑i=1n(f(Xi)−F~)2可以被计算出来(例如使用极大的采样数),那么 MSE 可以被估计为:
MSE [ F ] ≈ 1 n ∑ i = 1 n ( f ( X i ) − F ~ ) 2 \begin{equation} \text{MSE}[F]\approx\frac1n\sum_{i=1}^n(f(X_i)-\tilde{F})^2 \end{equation} MSE[F]≈n1i=1∑n(f(Xi)−F~)2
Sampling Strategies for Improving Efficiency
Stratified Sampling(分层采样)
分层采样的思想是以更好的方式确保采样点在域上的均匀性。
典型的分层采样的域是 s 维的单位 cube [ 0 , 1 ] s [0,1]^s [0,1]s,其他域可以通过合适的变换 T : [ 0 , 1 ] s → Λ T: [0,1]^s\to{\Lambda} T:[0,1]s→Λ实现,通过选择不同的映射函数 T T T,变换后的采样可以是不同的概率密度函数(若概率密度函数 p ( x ) p(x) p(x)太过复杂,将难以找到与之对应的映射函数 T T T),下文的分层采样所描述的情况使用 s 维的单位 cube 作为域,且概率均匀。
分层采样将积分域 Λ \Lambda Λ细分成 n n n个非重叠的区域 Λ 1 , Λ 2 , . . . , Λ n \Lambda_1,\Lambda_2,...,\Lambda_n Λ1,Λ2,...,Λn,每个区域被称为一个 stratum,并且所有 stratum 的并集为原始域,有 ⋃ i = 1 n Λ i = Λ \bigcup_{i=1}^n\Lambda_i=\Lambda ⋃i=1nΛi=Λ。
假设总估计器 F ′ F' F′需要从 Λ i \Lambda_i Λi中采样 n i n_i ni个点,stratum Λ i \Lambda_i Λi的概率密度函数为 p i p_i pi(不同于 p p p, p i p_i pi定义在 Λ i \Lambda_i Λi上,且在 Λ i \Lambda_i Λi上的积分为 1),在每个 stratum 上使用蒙特卡洛估计可得: F i = 1 n i ∑ i = 1 n i f ( X i , j ) p i ( X i , j ) F_i=\frac{1}{n_i}\sum_{i=1}^{n_i}\frac{{f(X_{i,j})}}{p_i(X_{i,j})} Fi=ni1∑i=1nipi(Xi,j)f(Xi,j),再通过 F ′ = ∑ i = 0 n v i F i F'=\sum_{i=0}^nv_iF_i F′=∑i=0nviFi计算得到总体估计,其中 v i v_i vi是 stratum i i i的体积分数(fractional volume),取值为 ( 0 , 1 ] (0,1] (0,1]。
Stratum i i i上被积函数的真值为: μ i = E ( [ f ( X i , j ) ] ) = 1 v i ∫ Λ i f ( x ) d x \mu_i=E([f(X_{i,j})])=\frac1{v_i}\int_{\Lambda_i}f(x)\,\mathrm{d}x μi=E([f(Xi,j)])=vi1∫Λif(x)dx,方差为: σ i 2 = 1 v i ∫ Λ i ( f ( x ) − μ i ) 2 d x \sigma_i^2=\frac1{v_i}\int_{\Lambda_i}(f(x)-\mu_i)^2\,\mathrm{d}x σi2=vi1∫Λi(f(x)−μi)2dx,由上文线性递减证明可知,当在 Λ i \Lambda_i Λi上采样 n i n_i ni点时, V [ F i ] V[F_i] V[Fi]将会趋近 σ i 2 / n i {\sigma_i^2}/{n_i} σi2/ni。因此总估计器的方差为:
V [ F ′ ] = E [ ∑ v i F i ] = ∑ V [ v i E i ] = ∑ v i 2 V [ E i ] = ∑ v i 2 σ i 2 n i \begin{aligned} V[F']&=E[\sum{}v_iF_i]\\ &=\sum{}V[v_iE_i]\\ &=\sum{}v_i^2V[E_i]\\ &=\sum{}\frac{v_i^2\sigma_i^2}{n_i} \end{aligned} V[F′]=E[∑viFi]=∑V[viEi]=∑vi2V[Ei]=∑nivi2σi2
我们合理假设 Λ i \Lambda_i Λi上的采样数 n i n_i ni与体积分数 v i v_i vi成正比,有 n i = v i n n_i=v_in ni=vin,则总估计器的方差为:
V [ F ′ ] = 1 n ∑ v i σ i 2 \begin{equation} V[F']=\frac1n\sum{}v_i\sigma_i^2 \end{equation} V[F′]=n1∑viσi2
将 V [ F ′ ] V[F'] V[F′]和不进行分层采样的估计器的方差 V [ F ] V[F] V[F]进行比较,我们可以注意到,非分层采样点相当于根据 v i v_i vi随机选取了一个 stratum Λ I \Lambda_I ΛI, 再在 Λ I \Lambda_I ΛI上采样点 X X X,在这种情况下, X X X是有条件地在 I I I上选择的,因此可以使用条件概率表示方差:
V [ F ] = 1 n [ ∑ v i σ i 2 + ∑ v i ( μ i − Q ) 2 ] \begin{equation} V[F]=\frac1n[\sum{}v_i\sigma_i^2+\sum{}v_i(\mu_i-Q)^2] \end{equation} V[F]=n1[∑viσi2+∑vi(μi−Q)2]
Q Q Q是整个 Λ \Lambda Λ域上函数 f f f的平均值(具体推导需要条件方差的性质,详见 Veach 1997)
从这个公式中我们可以看出,相比 V [ F ′ ] V[F'] V[F′], V [ F ] V[F] V[F]多出了一项 1 n ∑ v i ( μ i − Q ) 2 \frac1n\sum{}v_i(\mu_i-Q)^2 n1∑vi(μi−Q)2,同时,无论如何取 stratum, V [ F ] V[F] V[F]的值始终是不变的,因此增加 1 n ∑ v i ( μ i − Q ) 2 \frac1n\sum{}v_i(\mu_i-Q)^2 n1∑vi(μi−Q)2就相当于在减小 V [ F ′ ] V[F'] V[F′],所以分层采样的任务就在于增加不同域 Λ i \Lambda_i Λi下 μ i \mu_i μi与 Q Q Q的差值。因此就算我们不知道函数 f f f,也可以通过创建更加紧凑(compact)的 strate 来减小方差。
分层抽样的主要缺点是它和高斯型积分一样,在提高域的维度的时候,需要进行的分层数会指数上升,但幸运的是,独立地对某些维度进行分层是可行的,完成独立分层后,随机地将来自不同维度的样本关联起来即可得到最终结果,同时,在选择分层维度时,应该对那些对被积函数值的影响相关度最高的维度进行分层。
Importance Sampling(重要性采样)
在蒙特卡洛方法中,重要性采样是一种强大的用于减小方差的技术,它的基本思想在于,输入随机变量的某些值对估计参数的影响比其他值更大。如果通过更频繁的采样来强调这些“重要”的值,那么估计器的方差就可以减小,因此,重要性采样的基本方法是选择一个更偏向于重要值的分布。
假设估计器 F F F需要估计积分 ∫ f ( x ) d x \int{f(x)}\,\mathrm{d}x ∫f(x)dx,采样使用的 PDF 为 p ( x ) p(x) p(x)。若 p ( x ) ∝ f ( x ) p(x)\propto{}f(x) p(x)∝f(x),即 p ( x ) = c f ( x ) p(x)=cf(x) p(x)=cf(x)(隐含了 c = 1 ∫ f ( x ) d x c=\frac1{\int{}f(x)\,\mathrm{d}x} c=∫f(x)dx1),那么估计器的方差即为:
V [ F ] = V [ 1 n ∑ i = 1 n f ( X i ) p ( X i ) ] = V [ 1 n ⋅ ∑ i = 1 n 1 c ] = 0 \begin{equation} V[F]=V[\frac{1}{n}\sum_{i=1}^{n}\frac{{f(X_i)}}{p(X_i)}]=V[\frac1n\cdot\sum_{i=1}^{n}\frac{1}{c}]=0 \end{equation} V[F]=V[n1i=1∑np(Xi)f(Xi)]=V[n1⋅i=1∑nc1]=0
方差降为了 0,但这是不可能的,毕竟我们想要拟合的目标即是 ∫ f ( x ) d x = 1 c \int{f(x)}\,\mathrm{d}x=\frac1c ∫f(x)dx=c1,但这给了我们一个思路,即我们需要尽可能找到与 f ( x ) f(x) f(x)成比例的概率密度函数 p ( x ) p(x) p(x)。
Multiple Importance Sampling(多重重要性采样)
我们经常会遇到两个或多个函数积的积分,例如 ∫ f a ( x ) f b ( x ) d x \int{}f_a(x)f_b(x)\,\mathrm{d}x ∫fa(x)fb(x)dx。在这种情况下,我们通常可以为单个函数单独推导出各自的重要性抽样策略,尽管不是与其乘积相似的策略。这种情况在涉及 light transport 的积分中尤其常见,例如在计算 light transport equation 时 BSDF,incident radiance 和余弦因子的乘积。
假设我们现在有采样分布 p a p_a pa和 p b p_b pb以及对应的采样 f a f_a fa和 f b f_b fb的方法,为使用蒙特卡洛积分,我们也许可以直接应用 p a p_a pa作为 PDF,采样随机变量 X X X,这时估计器的采样值为 f ( X ) p a ( X ) = f a ( X ) f b ( X ) p a ( X ) = c f b ( X ) \frac{f(X)}{p_a(X)}=\frac{f_a(X)f_b(X)}{p_a(X)}=cf_b(X) pa(X)f(X)=pa(X)fa(X)fb(X)=cfb(X),由于我们假设 p a ( X ) ∝ f a ( X ) p_a(X)\propto{}f_a(X) pa(X)∝fa(X),且 p a p_a pa的积分为 1,所以 c c c是 f a ( X ) f_a(X) fa(X)的积分值,由这个方程可以看出,估计器的值将与 f b f_b fb直接相关,估计器的方差会与 f b f_b fb的方差成正比,可能导致方程非常大,同样的,使用 p b p_b pb作为 PDF 也会导致相同的问题。
不幸的是,从每个分布中取一些样本并对两个估计量取平均值的解决方案并没有好到哪里去。因为方差是可加性的,一旦方差进入一个估计器,我们就不能通过将它添加到另一个低方差估计器中来消除它。
多重重要性采样(Multiple Importance Sampling, MIS)通过一种易于实现的方差减少技术解决了这个问题。基本思想是,当估计一个积分时,我们应该从多个抽样分布中抽取样本,希望至少有一个样本与被积函数的形状匹配得很好,即使我们不知道这是哪一个。多重重要性采样甚至鼓励专门的采样例程只考虑不寻常的特殊情况,因为它们减少了这些情况发生时的方差,通常成本相对较小。
我们现在有采样分布 p a p_a pa和 p b p_b pb,从这两个分布中各采一个样本, X ∼ p a X\sim{}p_a X∼pa, Y ∼ p b Y\sim{}p_b Y∼pb,MIS 蒙特卡洛积分器写作:
w a ( X ) f ( X ) p a ( X ) + w b ( Y ) f ( Y ) p b ( Y ) \begin{equation} w_a(X)\frac{f(X)}{p_a(X)}+w_b(Y)\frac{f(Y)}{p_b(Y)} \end{equation} wa(X)pa(X)f(X)+wb(Y)pb(Y)f(Y)
w a , w b w_a,w_b wa,wb是确保估计器的期望值等于 f ( x ) f(x) f(x)积分的权值函数。
更一般地,给定 n n n个采样点,其中每个分布 p i p_i pi采样 n i n_i ni次, X i , j X_{i,j} Xi,j是第 i 个分布下第 j 个采样点,MIS 积分器写作:
F n = ∑ i = 1 n 1 n i ∑ j = 1 n i w i ( X i , j ) f ( X i , j ) p i ( X i , j ) \begin{equation} F_n=\sum_{i=1}^n\frac{1}{n_i}\sum_{j=1}^{n_i}w_i(X_{i,j})\frac{f(X_{i,j})}{p_i(X_{i,j})} \end{equation} Fn=i=1∑nni1j=1∑niwi(Xi,j)pi(Xi,j)f(Xi,j)
使积分器无偏的方法是当 f ( x ) ≠ 0 f(x)\neq0 f(x)=0时,都有 ∑ i = 1 n w i ( x ) = 1 \sum_{i=1}^nw_i(x)=1 ∑i=1nwi(x)=1,并且 p i ( x ) = 0 p_i(x)=0 pi(x)=0时 w i ( x ) = 0 w_i(x)=0 wi(x)=0。
如果将各个权值函数设置为 w i ( x ) = 1 / n w_i(x)=1/n wi(x)=1/n,MIS 就退化成了取平均值的解决方案,这并不能降低方差。我们更希望权值函数 w i w_i wi在对应的 p i p_i pi与 f f f匹配较好时取相对大的值,反之,取相对小的值,这样才能有效的降低方差。
在实践中,一种较好的方法被称为平衡启发式法(balance heuristic),它考虑了采样点 X i , j X_{i,j} Xi,j在所有采样分布下的概率,而单是在 p i p_i pi下的概率。
w i ( x ) = n i p i ( x ) ∑ j n j p j ( x ) \begin{equation} w_i(x)=\frac{n_ip_i(x)}{\sum_jn_jp_j(x)} \end{equation} wi(x)=∑jnjpj(x)nipi(x)
各采样一个样本的(21)积分器可写作:
f ( X ) p a ( X ) + p b ( X ) + f ( Y ) p b ( Y ) + p b ( Y ) \begin{equation} \frac{f(X)}{p_a(X)+p_b(X)}+\frac{f(Y)}{p_b(Y)+p_b(Y)} \end{equation} pa(X)+pb(X)f(X)+pb(Y)+pb(Y)f(Y)
这样一来,在 p a p_a pa上采样的点 X X X就算在 p a p_a pa上的 PDF 较小,只要 p b ( X ) p_b(X) pb(X)比较大,也能有效的降低这个点的权重,这种方法有效的降低了最终估计器的方差。
在实践中,指数启发式法(power heuristic)一般会更大程度的降低方差,使用指数 β \beta β,有指数启发式赋权法:
w i ( x ) = ( n i p i ( x ) ) β ∑ j ( n j p j ( x ) ) β \begin{equation} w_i(x)=\frac{(n_ip_i(x))^\beta}{\sum_j(n_jp_j(x))^\beta} \end{equation} wi(x)=∑j(njpj(x))β(nipi(x))β
即使不从所有分布中抽样,也可以应用 MIS。这种方法被称为单样本模型(single sample model)。对于被积函数 f ( x ) f(x) f(x),如果选取采样策略 p i p_i pi的概率是 q i q_i qi,从 p i p_i pi采样得到样本 X X X,单样本估计器写作:
w i ( X ) q i f ( X ) p i ( X ) \begin{equation} \frac{w_i(X)}{q_i}\frac{f(X)}{p_i(X)} \end{equation} qiwi(X)pi(X)f(X)
这个估计器也是积分的无偏估计,对于单样本模型,可以证明平衡启发式算法是最优的。
多重重要性抽样的一个缺点是,如果其中一种采样策略 p i p_i pi与被积函数 f f f非常匹配,MIS 可能会略微增加方差。对于渲染应用来说,MIS 几乎总是值得的,因为它在可能存在高方差的情况下提供了方差减少。
MIS Compensation
在使用 MIS 时,若一块区域的被积函数 f f f很小,但对应所有采样分布函数 p i p_i pi都不为 0,则可能导致这块区域被过采样,同时 f f f较大的区域会欠采样。MIS Compensation 可以在一定程度上解决这个问题,减小方差。
MIS Compensation 是基于锐化一个或多个(但不是全部)概率分布的思想——例如,通过调整它们,使它们在以前具有低概率的区域具有零概率。例如,一个新的抽样分布可以定义为:
p ′ ( x ) = max ( 0 , p ( x ) − δ ) ∫ max ( 0 , p ( x ) − δ ) d x \begin{equation} p'(x)=\frac{\max{(0,p(x)-\delta)}}{\int\max{(0,p(x)-\delta)}\,\mathrm{d}x} \end{equation} p′(x)=∫max(0,p(x)−δ)dxmax(0,p(x)−δ)
这种技术特别容易应用于表化抽样分布(tabularized sampling distributions)的情况,它在采样环境贴图光源时效果很好。
Russian Roulette
俄罗斯轮盘赌方法跳过对最终结果贡献较小的样本,从而提高蒙特卡洛效率。在渲染中,我们经常使用形如 f ( X ) v ( X ) p ( X ) \frac{f(X)v(X)}{p(X)} p(X)f(X)v(X)的估计器,其中,被积函数由一些容易评估的函数 f ( X ) f(X) f(X)(eg. 表面如何散射光)和较为昂贵的函数 v ( X ) v(X) v(X)(eg. 光线是否可见的二元函数)组成,在这种情况下,大部分计算费用都与 v v v相关。
若 f ( X ) = 0 f(X)=0 f(X)=0,我们可以直接跳过计算 v ( X ) v(X) v(X),但若当 f ( X ) f(X) f(X)较小时我们也跳过计算 v ( X ) v(X) v(X),这么做只会增加 bias,Russian Roulette 即用于解决这个问题,基本思路在于,跳过一些 v ( X ) v(X) v(X)的计算,并增加不跳过时 v ( X ) v(X) v(X)的权值。
为应用 Russian Roulette,我们先要根据采样点 X X X计算出一个终止概率(termination probability) q q q,这个值可以通过很多方法获得,例如在上面的例子中计算一个与 f ( X ) f(X) f(X)成反比的 q q q。基于 q q q,新估计器需要一个常数 c c c( c c c一般等于 0),然后在 1 − q 1-q 1−q概率下,估计器进行计算,并且附有权值 1 / ( 1 − q ) 1/(1-q) 1/(1−q),反之跳过计算,直接使用 c c c作为结果,新估计器为:
F ′ = { F − q c 1 − q ξ > q c otherwise \begin{equation} F'=\begin{cases} \frac{F-qc}{1-q}&\xi>q\\ c&\text{otherwise} \end{cases} \end{equation} F′={1−qF−qccξ>qotherwise
新估计器的期望值为 E [ F ′ ] = ( 1 − q ) ( E [ F ] − q c 1 − q ) + q c = E [ F ] E[F']=(1-q)(\frac{E[F]-qc}{1-q})+qc=E[F] E[F′]=(1−q)(1−qE[F]−qc)+qc=E[F],是无偏估计法。
Russian Roulette 会提高估计器的方差,但更关键的是,它跳过一些低贡献的采样点的计算,从而提高了运行效率。
Splitting
Russian roulette 通过减少采样数来提高效率,而 Splitting 通过在多维积分上增加采样数来提高效率。考虑积分 ∫ A ∫ B f ( x , y ) d x d y \int_A\int_Bf(x,y)\,\mathrm{d}x\,\mathrm{d}y ∫A∫Bf(x,y)dxdy,使用标准重要性采样估计器,我们需要在独立分布 X i ∼ p x X_i\sim{}p_x Xi∼px, Y i ∼ p y Y_i\sim{}p_y Yi∼py上独立采样 n n n个点并计算 1 n ∑ i = 1 n f ( X i , Y i ) p x ( X i ) p y ( Y i ) \frac{1}{n}\sum_{i=1}^n\frac{f(X_i,Y_i)}{p_x(X_i)p_y(Y_i)} n1∑i=1npx(Xi)py(Yi)f(Xi,Yi)。而 Splitting 采取的策略是在一个 A A A上的采样点上采样多个 B B B上的值,对于每一个 X i X_i Xi采样点,都采样 m m m个 Y i , j Y_{i,j} Yi,j,从而将估计器改写成:
1 n ∑ i = 1 n 1 m ∑ j = 1 m f ( X i , Y i , j ) p x ( X i ) p y ( Y i , j ) \begin{equation} \frac1n\sum_{i=1}^n\frac1m\sum_{j=1}^m \frac{f(X_i,Y_{i,j})}{p_x(X_i)p_y(Y_{i,j})} \end{equation} n1i=1∑nm1j=1∑mpx(Xi)py(Yi,j)f(Xi,Yi,j)
这样一来,计算 n m nm nm个采样点就不需要分别采样 X , Y X,Y X,Y各 n m nm nm次, X X X只需要采样 n n n次即可。例如在进行光追计算时,从 pixel 出发的光线打到一个半球表面后可以分裂成多条,相当于后续多条光线都共用了第一条光线的信息,从而提高了效率。
Sampling Using the Inversion Method
为了评估蒙特卡洛估计器,我们需要从给定的概率密度函数中随机抽取样本,有很多方法可以做到这一点,在 rendering 一种重要的方法被称为 Inversion Method。Inversion Method 使用反转 CDF 的方法,将 [ 0 , 1 ) [0,1) [0,1)上的均匀样本映射到给定的一维概率分布上,当使用分布良好的样本时,Inversion Method 会非常高效。BSDFs,光源,相机,散射介质等的分布都可以使用 Inversion Method 实现。
Discrete Case
利用规范均匀随机变量,我们可以给出一种从一组离散概率中采样的算法。假设我们有一个有四种可能结果的 process,每种结果产生的概率为
p
1
,
p
2
,
p
3
,
p
4
p_1,p_2,p_3,p_4
p1,p2,p3,p4,有
∑
p
i
=
1
\sum{}p_i=1
∑pi=1,那么对应的 PMF 如下图所示:
离散概率的 CDF 的形式为
P
i
=
∑
j
=
1
i
p
j
P_i=\sum_{j=1}^ip_j
Pi=∑j=1ipj,以图像表示如下图所示:
我们可以在 P i − 1 < ξ < P i P_{i-1}<\xi<P_i Pi−1<ξ<Pi时,选取 i − 1 i-1 i−1作为选择的结果,这种方式可以被解释成在反转 CDF,因此得名 Inversion Method。使用图形化解释,可以将 ξ \xi ξ看做是在 [ 0 , 1 ] [0,1 ] [0,1]的纵轴上进行随机采样,由于 ξ \xi ξ击中任何特定柱块的概率正好等于该柱块的高度,因此结果是正确的。
Continuous Case
连续情况下的 Inversion Method 与离散情况下很相像,只是把 PMF 函数换成了 PDF,CDF 变成对 PDF 积分。
假设我们从 PDF p ( x ) p(x) p(x)中采样 X i X_i Xi,需要通过以下几步:
- 积分 PDF 找到与之对应的 CDF, P ( x ) = ∫ − ∞ x p ( x ′ ) d x ′ P(x)=\int_{-\infin}^xp(x')\,\mathrm{d}x' P(x)=∫−∞xp(x′)dx′
- 得到规范均匀随机变量 ξ \xi ξ
- 生成符合 ξ = P ( X ) \xi=P(X) ξ=P(X)的采样点,即 X = P − 1 ( ξ ) X=P^{-1}(\xi) X=P−1(ξ)
Sampling a Linear Function
设被积函数 f ( x ) = ( 1 − x ) a + x b f(x)=(1-x)a+xb f(x)=(1−x)a+xb定义在 [ 0 , 1 ] [0,1] [0,1]上,且 a , b ≥ 0 a,b\geq0 a,b≥0,PDF p ( x ) ∝ f ( x ) p(x)\propto{}f(x) p(x)∝f(x),有 p ( x ) = 2 f ( x ) a + b p(x)=\frac{2f(x)}{a+b} p(x)=a+b2f(x),
积分 PDF 得到 CDF 函数为二次函数 P ( x ) = x ( a ( 2 − x ) + b x ) a + b P(x)=\frac{x(a(2-x)+bx)}{a+b} P(x)=a+bx(a(2−x)+bx),通过 ξ = P ( X ) \xi=P(X) ξ=P(X),反转得到 X = a − ( 1 − ξ ) a 2 + ξ b 2 a − b = ξ ( a + b ) a + ( 1 − ξ ) a 2 + ξ b 2 X=\frac{a-\sqrt{(1-\xi)a^2+\xi{b^2}}}{a-b}=\frac{\xi(a+b)}{a+\sqrt{(1-\xi)a^2+\xi{}b^2}} X=a−ba−(1−ξ)a2+ξb2=a+(1−ξ)a2+ξb2ξ(a+b)
Transforming between Distributions
使用 Inversion Method 可以通过 ξ \xi ξ生成 1 维的分布函数,但一个更加一般的问题是如何从一个任意的分布函数转换成其他分布,理解这种转换,将使我们能够推导出多维采样算法。
假设我们有一个从 p ( x ) p(x) p(x)采样的随机变量 X X X,CDF 为 P ( x ) P(x) P(x)。现在给定一个方程 f ( x ) f(x) f(x),有 f ( x ) = y f(x)=y f(x)=y,考虑一个新的随机变量 Y = f ( X ) Y=f(X) Y=f(X)。在这种情况下, f ( x ) f(x) f(x)必须是一个一对一的转换(如果有多个 x x x值映射到同个 y y y值,则不可能明确地描述这个 y y y值的概率密度),同时,还需要保证 f ( x ) f(x) f(x)的导数严格大于 0 或小于 0(严格递增或递减),这意味着对于任意给定的 x x x值,都有 Pr { Y ≤ f ( x ) } = Pr { X ≤ x } \text{Pr}\{Y\leq{}f(x)\}=\text{Pr}\{X\leq{}x\} Pr{Y≤f(x)}=Pr{X≤x},由 CDF 的定义可知: P f ( y ) = P f ( f ( x ) ) = P ( x ) P_f(y)=P_f(f(x))=P(x) Pf(y)=Pf(f(x))=P(x)。
CDF 之间的关系直接导致它们 PDF 之间的关系,假设 f f f是严格递增的,则有微分:
p f ( y ) d f d x = p ( x ) \begin{equation} p_f(y)\frac{\mathrm{d}f}{\mathrm{d}x}=p(x) \end{equation} pf(y)dxdf=p(x)
或者写作:
p f ( y ) = ( d f d x ) − 1 p ( x ) \begin{equation} p_f(y)=(\frac{\mathrm{d}f}{\mathrm{d}x})^{-1}p(x) \end{equation} pf(y)=(dxdf)−1p(x)
更一般的,由于 f f f的导数严格大于 0 或小于 0,因此有:
p f ( y ) = ∣ d f d x ∣ − 1 p ( x ) \begin{equation} p_f(y)=|\frac{\mathrm{d}f}{\mathrm{d}x}|^{-1}p(x) \end{equation} pf(y)=∣dxdf∣−1p(x)
例如随机变量 X X X的概率分布为 p ( x ) = 2 x , x ∈ [ 0 , 1 ] p(x)=2x,x\in[0,1] p(x)=2x,x∈[0,1], f ( x ) = sin x f(x)=\sin{}x f(x)=sinx,为计算随机变量 Y = f ( X ) Y=f(X) Y=f(X),我们先计算出 d f / d x = cos x {\mathrm{d}f}/{\mathrm{d}x}=\cos{}x df/dx=cosx,然后计算出 p f ( y ) = p ( x ) ∣ cos x ∣ = 2 x cos x = 2 arcsin y 1 − y 2 p_f(y)=\frac{p(x)}{|\cos{}x|}=\frac{2x}{\cos{}x}=\frac{2\arcsin{}y}{\sqrt{1-y^2}} pf(y)=∣cosx∣p(x)=cosx2x=1−y22arcsiny。
这个过程看起来是反向的,因为在实际应用中通常我们已知 PDF,进而从而计算转换。
假设我们用服从 p ( x ) p(x) p(x)分布的随机变量 X X X和服从 p f ( y ) p_f(y) pf(y)分布的随机变量 Y Y Y,如何计算转换方程,我们需要做的是利用 CDF 的相等, P f ( y ) = P ( x ) P_f(y)=P(x) Pf(y)=P(x)计算出:
f ( x ) = P f − 1 ( P ( x ) ) \begin{equation} f(x)=P_f^{-1}(P(x)) \end{equation} f(x)=Pf−1(P(x))
这个方法是 inversion method 的推广。
Transformation in Multiple Dimensions
将一维的随机变量推广到多维,假设我们有一个 d 维的随机变量 X X X服从概率分布 p ( x ) p(x) p(x),有随机变量 Y Y Y服从 Y = T ( X ) Y=T(X) Y=T(X), T T T为双射函数,这种情况下, X X X和 Y Y Y的概率密度函数的关系为:
p T ( y ) = p T ( T ( x ) ) = p ( x ) ∣ J T ( x ) ∣ \begin{equation} p_T(y)=p_T(T(x))=\frac{p(x)}{|J_T(x)|} \end{equation} pT(y)=pT(T(x))=∣JT(x)∣p(x)
其中 ∣ J T ( x ) ∣ |J_T(x)| ∣JT(x)∣是 T T T的雅可比行列式的绝对值, T T T的雅可比矩阵为
J T ( x ) = [ ∂ T 1 ∂ x 1 ⋯ ∂ T 1 ∂ x d ⋮ ⋱ ⋮ ∂ T d ∂ x 1 ⋯ ∂ T d ∂ x d ] J_T(x)=\begin{bmatrix} \frac{\partial{}T_1}{\partial{}x_1}& \cdots& \frac{\partial{}T_1}{\partial{}x_d} \\ \vdots&\ddots&\vdots\\ \frac{\partial{}T_d}{\partial{}x_1}&\cdots& \frac{\partial{}T_d}{\partial{}x_d} \end{bmatrix} JT(x)= ∂x1∂T1⋮∂x1∂Td⋯⋱⋯∂xd∂T1⋮∂xd∂Td
例如我们想关联极坐标的采样 X = ( r , θ ) X=(r,\theta) X=(r,θ)和笛卡尔坐标的采样 Y = ( x , y ) Y=(x,y) Y=(x,y),已知 x = r cos θ x=r\cos\theta x=rcosθ, y = r sin θ y=r\sin\theta y=rsinθ和 X X X的概率密度函数 p ( r , θ ) p(r,\theta) p(r,θ),计算 p ( x , y ) p(x,y) p(x,y)。
我们先计算这个变换的雅可比矩阵 J T J_T JT,有
J T ( x ) = [ ∂ x ∂ r ∂ x ∂ θ ∂ y ∂ r ∂ y ∂ θ ] = [ cos θ − r sin θ sin θ r cos θ ] J_T(x)=\begin{bmatrix} \frac{\partial{}x}{\partial{}r}& \frac{\partial{}x}{\partial{}\theta} \\ \frac{\partial{}y}{\partial{}r}& \frac{\partial{}y}{\partial{}\theta} \end{bmatrix}=\begin{bmatrix} \cos\theta& -r\sin\theta \\ \sin\theta& r\cos\theta \end{bmatrix} JT(x)=[∂r∂x∂r∂y∂θ∂x∂θ∂y]=[cosθsinθ−rsinθrcosθ]
∣ J T ∣ = r |J_T|=r ∣JT∣=r,因此 p ( x , y ) = p ( r , θ ) / r p(x,y)=p(r,\theta)/r p(x,y)=p(r,θ)/r。
若想从笛卡尔坐标系上的采样转换到极坐标下的采样,有:
p ( r , θ ) = r p ( x , y ) \begin{equation} p(r,\theta)=r\,p(x,y) \end{equation} p(r,θ)=rp(x,y)
在三维情况下通过方向坐标求球坐标,有 ∣ J T ∣ = r 2 sin θ |J_T|=r^2\sin\theta ∣JT∣=r2sinθ,对应的概率密度函数为:
p ( r , θ , ϕ ) = r 2 sin θ p ( x , y , z ) \begin{equation} p(r,\theta,\phi)=r^2\sin\theta\,p(x,y,z) \end{equation} p(r,θ,ϕ)=r2sinθp(x,y,z)
Sampling with Multidimensional Transformation
假设我们有一个二维密度函数 p ( x , y ) p(x,y) p(x,y)并期望采样 ( X , Y ) (X,Y) (X,Y),如果密度是独立的,你们我们可以将其表示成一维密度的乘积, p ( x , y ) = p x ( x ) p y ( y ) p(x,y)=p_x(x)p_y(y) p(x,y)=px(x)py(y)。
更一般的,当考虑 ( X , Y ) (X,Y) (X,Y)相关时,我们可以先将一个维度积分掉,从而计算出边际密度函数(marginal density function) p ( x ) p(x) p(x),有:
p ( x ) = ∫ p ( x , y ) d y \begin{equation} p(x)=\int{}p(x,y)\,\mathrm{d}y \end{equation} p(x)=∫p(x,y)dy
p ( x ) p(x) p(x)可以被看做是某个特定 x x x在所有可能的 y y y值上的平均密度,由此我们可以采样 X ∼ p ( x ) X\sim{}p(x) X∼p(x),然后使用条件概率密度函数采样 Y ∼ p ( y ∣ x ) Y\sim{}p(y|x) Y∼p(y∣x),有:
p ( y ∣ x ) = p ( x , y ) ∫ p ( x , y ) d y \begin{equation} p(y|x)=\frac{p(x,y)}{\int{}p(x,y)\,\mathrm{d}y} \end{equation} p(y∣x)=∫p(x,y)dyp(x,y)
采样更高维的分别也可以使用同样的策略。
Reference
https://www.pbr-book.org/4ed/Monte_Carlo_Integration
https://www.math.arizona.edu/~tgk/mc/book_chap6.pdf
PS
本文主要是对PBRT内容的翻译总结,欢迎交流~