2020-4-4 深度学习笔记17 - 蒙特卡罗方法 2 ( 重要采样--采样数量一定,提高准确度,减少方差)

第十七章 蒙特卡罗方法

中文
英文

2020-4-4 深度学习笔记17 - 蒙特卡罗方法 1 (采样和蒙特卡罗方法-必要性和合理性)

重要采样Importance Sampling–最优条件下采样

先来个通俗易懂的,转自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)],如果采样是均匀的,即如下图所示:
2020-4-4 深度学习笔记17 - 蒙特卡罗方法 2 ( 重要采样--采样数量一定,提高准确度,减少方差)_第1张图片
估计方法随着取样数的增长而越发精确,那么有什么方法能够在一定的抽样数量基础上来增加准确度,减少方差呢?这就需要我们人为地对抽样的分布进行干预,首先我们看下图:
2020-4-4 深度学习笔记17 - 蒙特卡罗方法 2 ( 重要采样--采样数量一定,提高准确度,减少方差)_第2张图片
很明显在圆形区域的函数值对积分的贡献比方形区域要大很多,所以我们可以在抽样的时候以更大的概率抽取圆形区域的样本,这样一来就能够提高估计的准确度。

假设我们以分布 p ( x ) p(x) p(x)在原函数上进行采样,依照这个分布进行采样我们一定程度上可以使得在原函数 f ( x ) f(x) f(x)对积分贡献大的区域获得更多的采样机会。
2020-4-4 深度学习笔记17 - 蒙特卡罗方法 2 ( 重要采样--采样数量一定,提高准确度,减少方差)_第3张图片
但这时我们不能对 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=1nf(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=1np(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)qnq(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分布。

重要采样应用

  • 重要采样被应用于加速训练具有大规模词表的神经网络语言模型的过程中或者其他有着大量输出结点的神经网络中
  • 重要采样应用于估计配分函数(一个概率分布的归一化常数)
  • 在深度有向图模型比如变分自编码器中估计对数似然
  • 采用随机梯度下降训练模型参数时重要采样可以用来改进对代价函数梯度的估计,尤其是分类器这样的模型,其中代价函数的大部分代价来自少量错误分类的样本。

你可能感兴趣的:(深度学习,IT)