机器学习(2) 变分推断
变分
对于普通的函数 f(x) ,我们可以认为 f 是一个关于 x 的一个实数算子,其作用是将实数 x 映射到实数 f(x) 。那么类比这种模式,假设存在函数算子 F ,它是关于 f(x) 的函数算子,可以将 f(x) 映射成实数 F(f(x)) 。对于 f(x) 我们是通过改变x来求出 f(x) 的极值,而在变分中这个 x 会被替换成一个函数 y(x) ,我们通过改变 x 来改变 y(x) ,最后使得 F(y(x)) 求得极值。
变分推断
logP(x)=logP(x,z)−logP(z|x)=logP(x,z)q(z)−logP(z|x)q(z)=logP(x,z)−logq(z)−logP(z|x)q(z)=logP(x,z)−logq(z)+logq(z)P(z|x)
∫q(z)logP(x)dzlogP(x)现在等式两边同时对q(z)做期望,即,=∫q(z)logP(x,z)dz−∫q(z)logq(z)dz+∫q(z)logq(z)P(z|x)dz由于q(z)与P(x)无关,所以∫q(z)logP(x)dz=logP(x)原式最终变为:=∫q(z)logP(x,z)dz−∫q(z)logq(z)dzL(q(z)),ELOB(Evidence Lower Bound)+∫q(z)logq(z)P(z|x)dzKL(q(z)||P(z|x))
推了这么多公式,让我们先喘口气,来看看这些公式究竟在做什么?
对于一类数据
x
(无论是音频还是图片),对它们进行编码后得到的特征数据往往服从某种分布
q(z)
,
z
为隐变量,
q(z)
这个隐含分布我们无法得知,但是我们可以通过现有数据X来推断出
q(z)
,即
P(z|x)
。KL散度是用来衡量两个分布之间的距离,当距离为0时,表示这两个分布完全一致。
P(x)
不变,那么想让
KL(q(z)||P(z|x))
越小,即让
ELOB
越大,反之亦然。因为
KL≥0
,所以
logP(x)≥ELOB
。这个结论还可以通过下面的公式同样得到:
logP(x)=log(∫P(x,z)dz)=log(∫(P(x,z)q(z)q(z))dz)=logEz q(z)[P(x,z)q(z)]≥Ez q(z)log(P(x,z)q(z))=Ez q(z)logP(x,z)−Ez q(z)logq(z)=∫q(z)logP(x,z)dz−∫q(z)logq(z)dz
这段公式推导的关键在于中间的不等式部分,即Jensen不等式:
ψ(E(x))