第十七章 蒙特卡罗方法
中文
英文
2020-4-4 深度学习笔记17 - 蒙特卡罗方法 1 (采样和蒙特卡罗方法-必要性和合理性)
先来个通俗易懂的,转自https://zhuanlan.zhihu.com/p/41217212
我们已经了解的蒙特卡洛采样,估计的积分 s = ∫ p ( x ) f ( x ) d x = E p [ f ( x ) ] s=∫p(x)f(x)dx=E_p[f(x)] s=∫p(x)f(x)dx=Ep[f(x)],如果采样是均匀的,即如下图所示:
估计方法随着取样数的增长而越发精确,那么有什么方法能够在一定的抽样数量基础上来增加准确度,减少方差呢?这就需要我们人为地对抽样的分布进行干预,首先我们看下图:
很明显在圆形区域的函数值对积分的贡献比方形区域要大很多,所以我们可以在抽样的时候以更大的概率抽取圆形区域的样本,这样一来就能够提高估计的准确度。
假设我们以分布 p ( x ) p(x) p(x)在原函数上进行采样,依照这个分布进行采样我们一定程度上可以使得在原函数 f ( x ) f(x) f(x)对积分贡献大的区域获得更多的采样机会。
但这时我们不能对 f ( x 1 ) , f ( x 2 ) , . . . f ( x n ) {f(x_1),f(x_2),...f(x_n)} f(x1),f(x2),...f(xn)进行简单的求和平均来获得估计值,因为此时采样不是均匀分布的,小矩形的“宽”并不等长,所以我们要对其进行加权,这个权重就是重要性权重。
那么为什么我们要引入一个新的分布 p ( x ) p(x) p(x)?
原因就是原函数 f ( x ) f(x) f(x)也许本身就是定义在一个分布之上的,定义这个分布为 π ( x ) \pi(x) π(x)。我们无法直接从 π ( x ) \pi(x) π(x)上进行采样,所以另辟蹊径重新找到一个更加简明的分布 p ( x ) p(x) p(x),从它进行取样,希望间接地求出 f ( x ) f(x) f(x)在分布 π ( x ) \pi(x) π(x) 下的期望。
注意:这里的 π ( x ) \pi(x) π(x)其实就是《机器学习》中的 p ( x ) p(x) p(x),而这里的 p ( x ) p(x) p(x)是《机器学习》一文中的 q ( x ) q(x) q(x)
回到本文开头的公式,函数 f ( x ) f(x) f(x) 在概率分布 π ( x ) \pi(x) π(x)下的期望为 s = ∫ π ( x ) f ( x ) d x = E π [ f ( x ) ] s=∫\pi(x)f(x)dx=E_\pi[f(x)] s=∫π(x)f(x)dx=Eπ[f(x)]
当我们在 p ( x ) p(x) p(x) 上采样 { x 1 , x 2 . . . x n } \{x_1,x_2...x_n\} {x1,x2...xn}后可以估计 f f f 的期望(近似s的经验平均值,上一节中介绍过),
E [ f ] = s ^ n = 1 n ∑ i = 1 n f ( x i ) E[f]=\hat{s}_n = \frac{1}{n}\sum_{i=1}^{n}f(x_i) E[f]=s^n=n1i=1∑nf(xi)
我们可以对式子进行改写,由于 π ( x ) f ( x ) = p ( x ) π ( x ) p ( x ) f ( x ) \pi(x)f(x)=p(x)\frac{\pi(x)}{p(x)}f(x) π(x)f(x)=p(x)p(x)π(x)f(x),所以可以得到:
s = ∫ π ( x ) f ( x ) d x = E π [ f ( x ) ] = ∫ p ( x ) π ( x ) p ( x ) f ( x ) d x s=∫\pi(x)f(x)dx=E_\pi[f(x)]=∫p(x)\frac{\pi(x)}{p(x)}f(x)dx s=∫π(x)f(x)dx=Eπ[f(x)]=∫p(x)p(x)π(x)f(x)dx
这个公式可以看作是 π ( x ) p ( x ) f ( x ) \frac{\pi(x)}{p(x)}f(x) p(x)π(x)f(x)定义在 p ( x ) p(x) p(x)上的期望。
p ( x ) p(x) p(x) 上采样 { x 1 , x 2 . . . x n } \{x_1,x_2...x_n\} {x1,x2...xn}后可以估计 f f f 的期望就是
E [ f ] = s ^ n = 1 n ∑ i = 1 n π ( x i ) p ( x i ) f ( x i ) E[f]=\hat{s}_n = \frac{1}{n}\sum_{i=1}^{n}\frac{\pi(x_i)}{p(x_i)}f(x_i) E[f]=s^n=n1i=1∑np(xi)π(xi)f(xi)
π ( x i ) p ( x i ) \frac{\pi(x_i)}{p(x_i)} p(xi)π(xi)就是重要性权重。
上面的介绍很容易理解。
下面回到《机器学习》。
如公式 s = ∫ p ( x ) f ( x ) d x = E p [ f ( x ) ] s=∫p(x)f(x)dx=E_p[f(x)] s=∫p(x)f(x)dx=Ep[f(x)]所示,蒙特卡罗方法中,对积分(或者和)分解,确定积分中哪一部分作为概率分布 p ( x ) p(x) p(x)以及哪一部分作为被积的函数 f ( x ) f(x) f(x)是很关键的一步(我们感兴趣的是估计 f ( x ) f(x) f(x)在概率分布 p ( x ) p(x) p(x)下的期望)。
p ( x ) f ( x ) p(x)f(x) p(x)f(x)不存在唯一的分解,因为它总是可以被写成
p ( x ) f ( x ) = q ( x ) p ( x ) f ( x ) q ( x ) p(x)f(x)=q(x)\frac{p(x)f(x)}{q(x)} p(x)f(x)=q(x)q(x)p(x)f(x)
在这里,我们从 q q q分布中采样,然后估计 p f q \frac{pf}{q} qpf在此分布下的均值(期望)。
注意这里q和p,对应的是上面转载中的p和 π \pi π
考虑达到某给定精度所需要的样本数量,我们要找到分布 q q q 最优的选择 q ∗ q^* q∗ 。
最优的选择 q ∗ q^* q∗ 可以被推导出来。这种最优的采样函数 q ∗ q^* q∗ 对应所谓的最优重要采样。
重要采样的估计为
s ^ q = 1 n ∑ i = 1 , x ( i ) ∼ q n p ( x ( i ) ) f ( x ( i ) ) q ( x ( i ) ) \hat{s}_q = \frac{1}{n}\sum_{i=1,x^{(i)}\sim q}^{n}\frac{p(x^{(i)})f(x^{(i)})}{q(x^{(i)})} s^q=n1i=1,x(i)∼q∑nq(x(i))p(x(i))f(x(i))
我们可以容易地发现估计的期望与q分布无关
E q [ s ^ q ] = E p [ s ^ p ] = s E_q [\hat{s}_q] = E_p [\hat{s}_p] = s Eq[s^q]=Ep[s^p]=s
重要采样的方差可能对 q q q的选择非常敏感。 这个方差可以表示为
V a r [ s q ] = V a r [ p ( x ) f ( x ) q ( x ) ] / n Var[s^q]=Var[\frac{p(x)f(x)}{q(x)}]/n Var[sq]=Var[q(x)p(x)f(x)]/n
方差想要取到最小值, q q q需要满足
q ∗ ( x ) = p ( x ) ∣ f ( x ) ∣ Z q^∗(x)=\frac{p(x)|f(x)|}Z q∗(x)=Zp(x)∣f(x)∣
在这里Z表示归一化常数,选择适当的Z使得q∗(x)之和或者积分为1。
一个更好的重要采样分布会把更多的权重放在被积函数较大的地方
另一种方法是采用有偏重要采样
(biased importance sampling),这种方法有一个优势,即不需要归一化的 p p p或 q q q分布。
重要采样应用