蒙特卡洛积分——采样方法

蒙特卡洛积分

  • 目的: 通过计算机进行采样近似求解复杂的积分
  • 理论基础: 大数定律,当 n n n足够大时, X X X的均值将收敛于它的期望(不严谨表述)
  • 一般形式: θ = ∫ a b f ( x ) d x = ∫ a b f ( x ) p ( x ) p ( x ) d x ≈ 1 n ∑ i = 1 n f ( x i ) p ( x i ) \theta=\int_a^b{f(x)dx}=\int_a^b{\frac{f(x)}{p(x)}p(x)dx}\approx\frac{1}{n}\sum_{i=1}^{n}\frac{f(x_i)}{p(x_i)} θ=abf(x)dx=abp(x)f(x)p(x)dxn1i=1np(xi)f(xi) p ( x ) p(x) p(x) x x x的概率密度, x i x_i xi为从 x x x的概率分布 p ( x ) p(x) p(x)中随机采样得到的第 i i i个样本,然而,当 p ( x ) p(x) p(x)是一个比较复杂的概率密度时,从 p ( x ) p(x) p(x)中随机采样并不容易,那么我们现在的问题就转化为了"如何采样出 x x x的分布 p ( x ) p(x) p(x)对应的若干个样本"
  • 重点强调一下,我们所说的采样指的是对 x x x采样,而 p ( x ) p(x) p(x) x x x的概率密度,影响每一个 x x x被采样到的概率

概率分布采样

  • 虽然对于复杂分布 p ( x ) p(x) p(x)而言,采样是一件困难的事情,但在计算机中, 得到一个均匀分布 U ( 0 , 1 ) U(0,1) U(0,1)上的随机数是很简单的, 因此,我们自然而然的会想要通过这个简单的均匀分布来解决我们的问题。

离散型随机变量情形

  • 我们这里用 θ \theta θ表示服从 U ( 0 , 1 ) U(0,1) U(0,1)的随机变量. 现在我们就探讨如何通过对服从 U ( 0 , 1 ) U(0,1) U(0,1)的随机变量 θ \theta θ采样,来得到我们想要的服从其它离散分布的随机变量 X X X的样本.
  • 设有一个离散型随机变量 X ∼ ( x 1 x 2 ⋯ x n p 1 p 2 ⋯ p n ) X\sim\left( \begin{array}{ccc} x_1&x_2&\cdots&x_n\\ p_1&p_2&\cdots&p_n \end{array} \right) X(x1p1x2p2xnpn) X X X θ \theta θ之间存在如下映射关系 X = G ( θ ) X=G(\theta) X=G(θ)
  • 由于 θ \theta θ恰好服从 U ( 0 , 1 ) U(0,1) U(0,1),因此,我们只需要将 θ \theta θ依概率映射到
    样本空间 X X X中每个值即可,即 X = G ( θ ) = { x 1 0 ≤ θ < p 1 x 2 p 1 ≤ θ < p 1 + p 2 ⋯ ⋯ x n ∑ 1 n − 1 p i ≤ θ < 1 X=G(\theta)=\left\{ \begin{array}{c} x_1&0\le\thetaX=G(θ)= x1x2xn0θ<p1p1θ<p1+p21n1piθ<1
    其实可以将右边的不等式看作累积分布概率作用下的结果,比如第二行 p 1 ≤ θ < p 1 + p 2 p_1\le\thetap1θ<p1+p2,其实它区间的长度就等于 p 2 + p 1 − p 1 = p 2 p_2+p_1-p_1=p_2 p2+p1p1=p2,也就是 x 2 x_2 x2对应的概率 p 2 p_2 p2
  • 这样就实现了在离散型随机变量的情形之下,找到了服从 U ( 0 , 1 ) U(0,1) U(0,1)的随机变量 θ \theta θ X X X之间的映射关系 G G G,也就可以通过对 θ \theta θ采样的结果转化为对 X X X的采样结果

连续型随机变量情形

  • 在连续型随机变量的情形之下,同样的,我们也探讨如何通过一个服从 U ( 0 , 1 ) U(0,1) U(0,1)的随机变量 θ \theta θ来得到我们想要的服从其它概率分布的随机变量的样本.
  • 设有一个连续型随机变量 X X X,其概率密度为 f ( x ) f(x) f(x),累积分布函数为 F ( x ) F(x) F(x) X X X θ \theta θ之间存在如下映射关系 X = G ( θ ) X=G(\theta) X=G(θ)
  • 由累积分布函数的定义可得 P { X < a } = F ( a ) P\{XP{X<a}=F(a) X = G ( θ ) X=G(\theta) X=G(θ)代入可得 P { G ( θ ) < a } = F ( a ) P\{G(\theta)P{G(θ)<a}=F(a)
  • 由累积分布函数的性质可得, F ( x ) F(x) F(x)为一个单调递增函数,因此,对不等式两边同时取 G G G的反函数可得 P { θ < G − 1 ( a ) } = F ( a ) P\{\thetaP{θ<G1(a)}=F(a)
  • 又已知 θ \theta θ服从 U ( 0 , 1 ) U(0,1) U(0,1),因此有 P { θ < b } = b , b ∈ [ 0 , 1 ] P\{\thetaP{θ<b}=b,b[0,1]
  • b = G − 1 ( a ) b=G^{-1}(a) b=G1(a)可得 P { θ < G − 1 ( a ) } = G − 1 ( a ) P\{\thetaP{θ<G1(a)}=G1(a)
  • 又因为刚才证得 P { θ < G − 1 ( a ) } = F ( a ) P\{\thetaP{θ<G1(a)}=F(a),所以有 F ( a ) = G − 1 ( a ) F(a)=G^{-1}(a) F(a)=G1(a)
  • 因此 G ( a ) = F − 1 ( a ) G(a)=F^{-1}(a) G(a)=F1(a)
  • 所以 X = G ( θ ) = F − 1 ( θ ) X=G(\theta)=F^{-1}(\theta) X=G(θ)=F1(θ)
  • 根据以上结论,我们可以得出在连续型随机变量的情形下, θ \theta θ与随机变量 X X X的映射关系就是 x x x累积分布函数的反函数

接收—拒绝采样

  • 刚刚介绍了概率分布采样方法,对于连续型随机变量的情形而言,我们可以通过使用随机变量 X X X的的累积分布函数的反函数,也就是如下式子 X = G ( θ ) = F − 1 ( θ ) X=G(\theta)=F^{-1}(\theta) X=G(θ)=F1(θ)来将 θ \theta θ转化为 X X X,但众所周知,累积分布函数是不好求的,尤其是对于复杂的概率密度 p ( x ) p(x) p(x)而言,难以通过积分得到累积分布函数 F ( θ ) F(\theta) F(θ)
  • 对于概率分布不是常见的分布的情况,一个可行的办法是牺牲采样的效率,采用接受-拒绝采样来得到该分布的样本。
  • 现在假设我们想要得到从一个复杂的分布 p ( x ) p(x) p(x)中进行采样,既然 p ( x ) p(x) p(x)太复杂在程序中没法直接采样,那么我设定一个便于程序采样的分布 q ( x ) q(x) q(x),比如高斯分布,然后从 q ( x ) q(x) q(x)中进行采样,并按照一定的方法拒绝某些不合理的样本,以达到接近 p ( x ) p(x) p(x)分布的目的,其中 q ( x ) q(x) q(x)被称为提议分布
    蒙特卡洛积分——采样方法_第1张图片
  • 采样步骤如下:
    • 我们设置一个常量 k k k使得 k q ( x ) kq(x) kq(x)总是在 p ( x ) p(x) p(x)的上方
    • 首先,我们使用概率分布采样方法 q ( x ) q(x) q(x)进行采样,得到一个样本 z 0 z_0 z0
    • 然后,从均匀分布 U ( 0 , 1 ) U(0,1) U(0,1)中随机采样得到一个样本 u 0 u_0 u0
    • 如果 u 0 ≤ p ( z 0 ) k q ( z 0 ) u_0\le\frac{p(z_0)}{kq(z_0)} u0kq(z0)p(z0),那么就接受 z 0 z_0 z0这个样本,否则拒绝这次采样
    • 重复以上过程,得到 n n n个接受的样本 z 0 , z 1 , . . . z n − 1 z_0,z_1,...z_{n−1} z0,z1,...zn1
  • 直观上理解这个采样过程就是:
    • 从均匀分布 U ( 0 , 1 ) U(0,1) U(0,1)中生成一个随机概率 u 0 u_0 u0
    • 由于我们需要近似的概率分布 p ( x ) p(x) p(x)是图中的红色线条,对于我们采集到的样本点 z 0 z_0 z0而言,它有 p ( z 0 ) k q ( z 0 ) \frac{p(z_0)}{kq(z_0)} kq(z0)p(z0)的概率可以被认为是一个合理的样本 p ( z 0 ) k q ( z 0 ) \frac{p(z_0)}{kq(z_0)} kq(z0)p(z0)代表的就是在 x = z 0 x=z_0 x=z0这条竖直的线上 p ( z 0 ) p(z_0) p(z0) k q ( z 0 ) kq(z_0) kq(z0)的比值,可以按几何概率的思想来理解)
    • 随机概率 u 0 u_0 u0如果没有超过 p ( z 0 ) k q ( z 0 ) \frac{p(z_0)}{kq(z_0)} kq(z0)p(z0)这个阈值,则认为这次采样的结果是合理的,并接受 z 0 z_0 z0
  • 总之,通过我们通过提议分布 q ( x ) q(x) q(x),最终采集到的样本为 z 0 , z 1 , . . . z n − 1 z_0,z_1,...z_{n−1} z0,z1,...zn1,我们可以通过这组样本,应用蒙特卡洛方法解决最开始的积分问题 θ = ∫ a b f ( x ) d x = ∫ a b f ( x ) p ( x ) p ( x ) d x ≈ 1 n ∑ i = 1 n f ( z i ) p ( z i ) \theta=\int_a^b{f(x)dx}=\int_a^b{\frac{f(x)}{p(x)}p(x)dx}\approx\frac{1}{n}\sum_{i=1}^{n}\frac{f(z_i)}{p(z_i)} θ=abf(x)dx=abp(x)f(x)p(x)dxn1i=1np(zi)f(zi)
  • 但此采样方法的效率深受提议分布的影响,如果提议分布与原始分布相差巨大,那么采样结果被拒绝的概率就会非常高,导致采样的效率低下,同时,对于一些高维的复杂非常见分布 p ( x 1 , x 2 , . . . , x n ) p(x_1,x_2,...,x_n) p(x1,x2,...,xn),我们要找到一个合适的 q ( x ) q(x) q(x) k k k非常困难。

总结

  • 当我们需要求解一个复杂积分时,我们可以对此积分稍作变换 ∫ a b f ( x ) d x = ∫ a b f ( x ) p ( x ) p ( x ) d x \int_a^b{f(x)dx}=\int_a^b{\frac{f(x)}{p(x)}p(x)dx} abf(x)dx=abp(x)f(x)p(x)dx以便于应用蒙特卡洛方法,因为蒙特卡洛方法最重要的思想便是使用均值来逼近期望,这就要求我们抽取一系列的 x x x的样本,然后令 ∫ a b f ( x ) p ( x ) p ( x ) d x ≈ 1 n ∑ i = 1 n f ( x i ) p ( x i ) \int_a^b{\frac{f(x)}{p(x)}p(x)dx}\approx\frac{1}{n}\sum_{i=1}^{n}\frac{f(x_i)}{p(x_i)} abp(x)f(x)p(x)dxn1i=1np(xi)f(xi) 以此来近似积分的结果.
  • 在抽取 x x x的样本的过程中,又出现了新的问题,对于常见的概率分布,我们可以通过概率分布采样方法进行采样,然而对于不常见的分布而言,我们很难积分得到它的累积分布函数,更不必说它的反函数,因此我们又引入了接收—拒绝采样方法,使用提议分布为中介进行采样.

References

  • https://www.cnblogs.com/pinard/p/6625739.html
  • https://zhuanlan.zhihu.com/p/191487550
  • https://zhuanlan.zhihu.com/p/259280292

你可能感兴趣的:(概率论,机器学习,贝叶斯,蒙特卡洛,MCMC)