采样

求期望原本是个数学推导的过程。如果数学不好,推不出答案;或者问题压根没有闭式解,怎么样才能得到一个近似的结果呢?采样就可以做到。

采样,即人为地产生一些数据,使之服从目标分布。最简单的,如果想产生均匀分布,之间 rand() % MAXSIZE 就均匀地产生了 [0, MAXSIZE) 的随机数。

如果现在有一个任意的概率密度 p(x),那怎么采样呢?比较一般的想法是,先求出 CDF,即积分得到分布函数 F(x)。它的值域一定在 [0,1]。那我们从值域上均匀采样,再通过反函数求到对应的 x=F1(y),也就能成功采样了。

sample

学会了采样,求 E[f(x)] 就更加简单了:

E[f(x)]=xf(x)p(x)dx=1Nxpf(x)=¯f(x)

即采样出服从 pNx,计算相应的 f(x),再求平均。根据大数定理,平均值就是期望。

重要性采样

刚才的采样有一个非常重要的前提条件,那就是 CDF 可求,且可逆。如果遇到不会积分,分段函数,或者奇奇怪怪的情况,都会使得原来的做法太困难。

因此我们假设有一个我们易于掌控的概率函数 q(x),它的 CDF 可求,且可逆,将原式化成:

E[f(x)]=xp(x)q(x)f(x)q(x)dx=1Nxqp(x)q(x)f(x)=¯w(x)f(x)

其中w(x)=p(x)q(x)。即采样出服从 qNx,计算相应的 w(x)f(x),再求平均。

根据大数定理,平均值就是期望。

贝叶斯推理

在机器学习中,如果可以求出参数的期望,那么训练也就完成了。

E[θ]=θ|Xθ p(θ|X)dθ

由于

p(θ|X)=p(X|θ)p(θ)p(X)p(X|θ)p(θ)

我们通过 p(X|θ)p(θ) 计算得到的 p 积分不为 1,而是一个难以计算的常数。真正的后验是p。设 C=θpdθp=p/C

再通过重要性采样时,˜w=pq=Cpq,一般地我们可以改写上面重要性采样的公式:

E[f(x)]=xf(x)p(x)dx=xp(x)Cq(x)f(x)q(x)dx=1C1Nxqp(x)q(x)f(x)=1C¯˜w(x)f(x)

C 同样可以采样得到:

C=xp(x)dx=xp(x)q(x)q(x)dx=1Nxqp(x)q(x)=¯˜w(x)

因此

E[f(x)]=¯˜w(x)f(x)¯˜w(x)

回到贝叶斯

f(θ)θ˜w(θ)p(X|θ)p(θ)q(θ|X)

p(X|θ) 是模型假设;p(θ)q(θ) 是形式相同的两个分布。q 可能会根据输入数据的特性来调整。

参见下面的例子:

example

避免溢出下界

可以先求对数,等需要的时候再算指数。

另一方面,在求平均数之前,势必已经算出了各个数字。如果每个数字都除掉了最大数,那么在最后的式子里不受影响。

E[f(x)]=¯exp(log˜w(x)M)f(x)¯exp(log˜w(x)M)M=max(log˜w(x))

q 的选取

qp 高密度的地方也要尽量高密度,这样才能真实还原数据的性质。

我看的几个 exerise 里面 q 都取和先验一样的形式。一般以 ESS 来衡量其稳定性:

ESS=1NNi=1(˜w(Xi)¯w1)2

q 本身的方差在合理的范围内,ESS 才会比较小。下图 c 衡量了方差。

ESS-q

Reference

Importance Sampling