变分推断
TIP
这一节里有的公式似乎没有区分积分和求和,那就不区分了吧反正意思对了就行 2333。
在 EM 算法中有:
logp(x)=ELBO(q,x)+KL(q(z)∥p(z∣x))(1)
在 E 步中,我们需要找到一个 q(z)=p(z∣x),从而使得 logp(x)=ELBO(q,x)。这里假设 p(z∣x) 是可以计算的,但这个假设有可能是不成立的,后验可能是 intractable 的。
这里解释一下为啥 intractable。由贝叶斯定理:
p(z∣x)=p(x)p(x∣z)p(z)
也就是说这里需要算输入数据的分布 p(x):
p(x)=∫zp(x∣z)p(z)dz
而在很多情况下这是没法算的(不然还要 GAN 这种调参调到死的玩意儿干啥)。
因此有了变分推断(Variational Inference),也称变分贝叶斯(Variational Bayesian),变分推断可以看作 EM 算法的扩展版,主要处理不能精确求出 p(z∣x) 的情况。
变分推断的思想是,在 E 步中,寻找一个简单分布 q∗(z) 来近似 p(z∣x):
q∗(z)=argq(z)∈QminKL(q(z)∥p(z∣x))(2)
其中 Q 为候选的概率分布族。当 KL(q(z)∥p(z∣x)) 无限接近于 0 时,q∗(z) 与 p(z∣x) 就无限接近。但如刚刚所说,p(z∣x) 难以直接计算,因此我们不能直接优化这个 KL 散度。
结合式 (1) 和式 (2),有:
q∗(z)=argq(z)∈Qmin(logp(x)−ELBO(q,x))=argq(z)∈QmaxELBO(q,x)
所以最小化 KL 散度被转化为了最大化 ELBO。这里 ELBO 是一个以函数 q 为自变量的函数,即泛函。
这里的公式都没有写参数 θ,因为变分推断中的参数都是随机变量,可以直接算进隐变量 z 里。
ELBO
上一节中算出 KL(q(z)∥p(z∣x)) 为:
KL(q(z)∥p(z∣x))=−z∑q(z)logq(z)p(z∣x)=Eq(z)[logq(z)]−Eq(z)[logp(z∣x)]=Eq(z)[logq(z)]−Eq(z)[logp(x)p(x,z)]=Eq(z)[logq(z)]−Eq(z)[logp(x,z)]+logp(x)
则 ELBO 为:
ELBO(q,x)=logp(x)−KL(q(z)∥p(z∣x))=Eq(z)[logp(x,z)]−Eq(z)[logq(z)]
而 EM 算法中:
θt+1=argθmaxz∑pθt(z∣x)logpθ(x,z)=argθmaxEpθt(z∣x)[logpθ(x,z)]
可以看到变分推断中的 ELBO 相比 EM 算法中的 ELBO 大概多了 −Eq(z)[logq(z)] 这一项。这是因为 EM 算法中 q(z) 是常数项,而在变分推断中并不是。
btw,−Eq(z)[logq(z)] 就是 q(z) 的熵,可以表示为 H[q(z)]。
平均场分布族
候选分布族 Q 的复杂性决定了优化问题的复杂性。我们选 Q 的时候可以选我们知道到的、简单的、最好是独立同分布的概率分布。通常会选平均场(mean-field)分布族,即 z 可以分拆为多组相互独立的变量,概率密度 q(z) 可以分解为:
q(z)=m=1∏Mqm(zm)
其中 zm 是隐变量的子集,可以是单变量,也可以是一组多元变量。
那么 ELBO(q,x) 可以写为:
ELBO(q,x)=∫q(z)logq(z)p(x,z)dz=∫q(z)(logp(x,z)−logq(z))dz=part1∫m=1∏Mqm(zm)logp(x,z)dz−part2∫m=1∏Mqm(zm)m=1∑Mlogqm(zm)dz
对于 part1:
part1=∫z1⋯∫zMm=1∏Mqm(zm)logp(x,z)dz1…dzM
如果只对隐变量的某个子集 zj 感兴趣:
part1=∫qj(zj)⎝⎛∫⋯∫zm=jm=j∏Mqm(zm)logp(x,z)m=j∏Mdzm⎠⎞dzj=∫qj(zj)⎝⎛∫⋯∫zm=jlogp(x,z)m=j∏Mqm(zm)dzm⎠⎞dzj=∫qj(zj)⎝⎛∫m=j∏Mqm(zm)logp(x,z)dzm⎠⎞dzj
再令:
logp(x,zj)=∫m=j∏qm(zm)logp(x,z)dzm(3)
p(x,zj) 可以看作一个关于 zj 的未归一化的分布。
最终有:
part1=∫qj(zj)logp(x,zj)dzj
对于 part2:
part2=∫z1⋯∫zMm=1∏Mqm(zm)m=1∑Mlogqm(zm)dz1…dzM=∫z1⋯∫zM[logq1(z1)+…logqM(zM)](q1(z1)…qM(zM))dz1…dzM=∫z1q1(z1)logq1(z1)dz1+⋯+∫zMqM(zM)logqM(zM)dzM=m=1∑M(∫zmqm(zm)logqm(zm)dzm)
同样,如果只对隐变量的某个子集 zj 感兴趣:
part2=∫qj(zj)logqj(zj)dzj+const
其中,const 为一个常数,即所有与 qj(zj) 无关的项。
现在 ELBO(q,x) 可以写为:
ELBO(q,x)=part1−part2=∫qj(zj)logp(x,zj)dzj−∫qj(zj)logqj(zj)dzj+const=∫qj(zj)logqj(zj)p(x,zj)dzj+const→−KL(qj(zj)∥p(x,zj))+const
坐标上升法
也就是说,如果我们固定除了 zj 以外的其他隐变量 z−j 不变,那么 ELBO 可以被看做一个负 KL 散度加上一个常数。因此最小化 KL 散度 KL(qj(zj)∥p(x,zj)) 就等于最大化 ELBO。
因此最优的 qj∗(zj) 正比于对数联合概率密度 logp(x,z) 的期望的指数(由式 (3) 推出):
qj∗(zj)=p(x,zj)∝exp(Eq−j[logp(x,z)])
可以用**坐标上升法(Coordinate Ascent Variational Inference,CAVI)**来迭代优化每个 qj∗(zj)(同时会假设其他隐变量固定不变)。坐标上升法流程为:

其他
我们通常会选择一些比较简单的分布 q(z) 来近似 p(z∣x)。但当 p(z∣x) 比较复杂时,往往很难用简单的 q(z) 去近似。这时可以用神经网络的强大拟合能力来近似 p(z∣x),这种思想被应用在了变分自编码器中。
参考