对一些常用的采用进行总结,主要参考了PRML。
整个采样的关键思想:求
E[f]=∫f(z)p(z)dz
但是通常数值分析的方法很难求,寻求一种近似的方法
E[f]=1L∑f(z(l))
其中z(l)∼P(z),通常来说10~20个样本就可以很好的拟合,并且这个方法是不取决于z的维度的。
但是通常情况下,可能一些非常小概率的z决定了E[f],所以可能要求采样数要采的比较多
对于有向图的采样,采用ancestral sampling。从父亲开始采样起。
如果观察节点固定的话,使用一种叫做logic sampling的方法。也是从父亲开始采样起,最终采样到可见节点,如果不符合的话,丢弃。
无向图的采样更加复杂,通常需要一些更复杂的采样方法,比如说吉布斯采样。
对于采样联合分布的边缘采样p(u,v),如果我们要采样P(u),简单的把v丢弃即可。
介绍一些常用的采样方法
Inverse CDF
最简单的采样,计算机只能生成一些伪随机数。在[0, 1]中均匀分布。现在假设计算机已经可以生成出[0,1]分布的样本z了,现在我们要从一个更复杂的分布p(y)中采出y,我们希望找到一个简单的映射
y=f(z)
p(y)=p(z)|dzdy|
对于多元变量有
P(y1,⋯,ym)=p(z1,⋯,zm)∂(z1,⋯,zm)∂(y1,⋯,ym)
Box-Muller变换
z1,z2从均匀分布中采样满足z21+z22≤1,那么有p(z1,z2)=1π
接下来进行变换
y1=z1(−2lnz1r2)
y2=z2(−2lnz2r2)
现在y1,y2为均值为0,方差为1的独立高斯分布。
对于均值为μ,方差为σ,使用σy+μ即可。如果是covariance Σ,使用Cholesky decomposition,Σ=LLT,然后y=μ+Lz
Rejection Sampling
为了从p(z)=1Zp˜p(z)中采出样本出来,通常˜p(z)是很好计算的,但是分母Zp难以计算。我们提出一个分布q(z),以及一个常数,其中满足kq(z)≥˜p(z)Rejection Sampling
然后从z0∼q(z),所以接受率为
p(acc)=∫ˉp(z)/kq(z)q(z)dz=1k∫ˉp(z)dz
Adaptive rejection sampling
Adaptive Rejection Sampling
通常来说决定k是比较困难的一件事情,但是对于log凹的函数来说会比较的简单。
首先选取几个初始的点,算一下梯度,然后构造一些切线。因为在对数区是切线,所以对应的分布为
q(z)=kiλiexp(−λi(z−zi−1))zi−1<z≤zi
然后按照正常的rejection sampling去做,如果当前点被接受了,不做任何修改。
如果当前点被拒绝了,就从这个点重新构造一条切线出来。
但是这个方法通常在高维空间有问题。比如说两个高斯σ2pI与σ2qI,对于D维来说,k=(σq/σp)D,如果σq只高出0.01,那么最后接受率大概为1/200000
Importance sampling
前面的几种方法都是从分布中采出样本出来,现在我们要求一个期望。E[f]=1L∑p(zl)f(zl)。我们采用如下的形式
E[f]=∫f(z)p(z)dz=∫f(z)p(z)q(z)q(z)=1L∑p(z(l))q(z(l))f(z(l))
通常来说p(z)无法计算,所以通常的情况是p(z)=ˉp(z)/Zp
那么上式就变为
E[f]=∫f(z)p(z)dz=∫f(z)p(z)q(z)q(z)=ZqZp1L∑ˉrlf(z(l))
ZpZq=1Zq∫ˉp(z)dz=∫ˉp(z)ˉq(z)q(z)dz=1L∑ˉrl
所以有E[f]=wlf(z(l))
其中wl=ˉrl∑mˉrm=ˉp(z(l))/q(zl)∑mˉp(z(m))/q(z(m))
Sampling-Importance-resampling
通常对于一般的p(z)来说,没有办法决定合适的k值,所以提出这种方法。
首先从q(z)里面采出L个样本,然后算出权重w1,⋯,wL,然后再根据权重采出L个样本出来。这样可以保证采出的L个样本是近似服从于p(z)的。
如果L→∞,可以证明就是p(z)
首先概率分布函数为p(z≤a)=∑l:zl≤awl=∑lI(z(l)≤a)ˉp(z(l))/q(z(l))∑lˉp(z(l))/q(z(l))
当L→∞,替换和为积分,得到
p(z≤a)=∫I(z≤a)ˉp(z)/q(z)q(z)dz∫ˉp(z)/q(z)q(z)dz=∫I(z≤a)p(z)dz
当q(z)和p(z)越接近,得到的样本就越好,当q(z)=p(z)的时候,可以得到每个权重都是1L
MCMC and Gibbs
这篇Blog写的很不错MCMC and Gibbs