变分推断(Variational Inference,)与证明下界(Evidence Lower Bound, ELBO)

一入生成深似海,其中有很多晦涩难懂的数学公式和原理,对于数学基础薄弱的我,实在有些不友好。因此准备不定期的输出,自己所学理论与实践。既是巩固,也方便笔者自己回忆与复习,同时也希望能够帮助同样在学习中的你。往后文章都会先发布于微信公众号:深度学习指南。欢迎关注喔~

最佳排版请前往:公众号文章地址

什么是变分推断?

假设我们现在要做一个生成模型,我们只有训练集的数据,要求数据的分布p,我们当然无法直接求。因此一个可行的方法是,找一个容易表达和求解的分布q,只要p和q的分布差异足够小,我们就可以将q作为p的近似分布了,成为我们的输出结果。而求解这个过程的方法,就叫做变分推断

这样的一个思路,我们就可以把一个求分布问题,转变成了“缩小距离”的优化问题。

变分推断与证据下界

现在,我们定义一下问题。在机器学习的生成式里,我们没有办法直接显式的写出数据对应的分布表达式,因此采取的办法是引入带有隐变量的概率分布。即

p ( x ) = ∫ p ( z ) p ( x ∣ z ) d z p(x) = \int p(z)p(x|z)dz p(x)=p(z)p(xz)dz

这个方法的本质是什么?其实就是我们希望z~q,然后有一个神经网络计算$f_{\theta}(z) ,这个计算的结果就是 ,这个计算的结果就是 ,这个计算的结果就是x ,即 ,即 ,即x   ~  p(.|z) 。这意味着,我们要定义 。这意味着,我们要定义 。这意味着,我们要定义(X,Z)$的联合分布。

上述积分,我们没法直接求,因为我们不知道 q ( x ∣ z ) q(x|z) q(xz)到底是个什么东西,神经网络只是万能的函数拟合器,没法直接拟合分布。因此,这里转向贝叶斯的思路,即

p ( x ) = p ( z ) p ( x ∣ z ) p ( z ∣ x ) p(x) = \frac{p(z)p(x|z)}{p(z|x)} p(x)=p(zx)p(z)p(xz)

所以我们要想求 p ( x ) p(x) p(x),我们仅需求 p ( z ∣ x ) p(z|x) p(zx),因为分子项 q ( z ) q(z) q(z)是我们自己定义的先验分布,一般是一个高斯分布。 p ( x ∣ z ) p(x|z) p(xz)是一个我们自己定义的神经网络。因此求分布 p ( x ) p(x) p(x)的问题就转变成了求解后验分布 p ( z ∣ x ) p(z|x) p(zx)

但其实后验分布 p ( z ∣ x ) p(z|x) p(zx)并不好搞,它的计算挑战在于计算分母 p ( x ) p(x) p(x), 它是对所有可能的z的值的积分,这在 z z z是高纬或连续的情况下,计算上是不可行的,比如若 z z z是一个10维的连续变量,每个维度上我们需要对1000个点做积分,那么我们总共需要计算 100 0 10 1000^{10} 100010个点!这根本无法接受。

因此到这里我们终于可以引入本篇文章的重点:变分推断方法,寻找一个近似分布 q ∗ q^* q(z)来近似替代 p ( z ∣ x ) p(z|x) p(zx),即

q ∗ ( z ) = arg ⁡ min ⁡ q ( z ) ∈ Q L ( q ( z ) , p ( z ∣ x ) ) q^*(z) = \arg\min_{q(z)\in Q}{L(q(z),p(z|x))} q(z)=argq(z)QminL(q(z),p(zx))

其中 Q Q Q表示空间里的一个概率分布集合,我们需要在 Q Q Q中找一个最优的替代概率分布 q ∗ ( z ) q^*(z) q(z),要求这个分布是好求解,并且是整个 Q Q Q中离 p ( z ∣ x ) p(z|x) p(zx)最近的分布。 L L L表示此空间上的一种距离度量函数。

如果我们能找到 q ∗ ( z ) q^*(z) q(z),那么我们就可以用 q ∗ ( z ) q^*(z) q(z)去估计原来不好计算的

在这里,一般采用的距离度量工具是KL散度,那这里的变分推断就是变分贝叶斯推断(Variational Bayes, VB)(VB是变分推断里的特例)。 所以我们的目标就变成了

q ∗ ( z ) = arg ⁡ min ⁡ q ( z ) ∈ Q K L ( q ( z ) ∣ ∣ p ( z ∣ x ) ) (1) q^*(z) = \arg\min_{q(z)\in Q}{KL(q(z)||p(z|x))} \tag{1} q(z)=argq(z)QminKL(q(z)∣∣p(zx))(1)

单独将KL项展开

K L ( q ( z ) ∣ ∣ p ( z ∣ x ) ) = ∫ q ( z ) log ⁡ q ( z ) p ( z ∣ x ) d z (2) \tag{2} {KL(q(z)||p(z|x))} = \int q(z) \log \frac{q(z)}{p(z|x)} dz KL(q(z)∣∣p(zx))=q(z)logp(zx)q(z)dz(2)

根据期望的公式,我们可以得到

K L ( q ( z ) ∣ ∣ p ( z ∣ x ) ) = ∫ q ( z ) log ⁡ q ( z ) p ( z ∣ x ) d z = E q ( log ⁡ q ( z ) ) − E q ( log ⁡ p ( z ∣ x ) ) (3) \tag{3} {KL(q(z)||p(z|x))} = \int q(z) \log \frac{q(z)}{p(z|x)} dz = \mathbb{E}_q (\log q(z)) - \mathbb{E}_q (\log p(z|x)) KL(q(z)∣∣p(zx))=q(z)logp(zx)q(z)dz=Eq(logq(z))Eq(logp(zx))(3)

将最后一项的期望,根据条件概率公式展开

K L ( q ( z ) ∣ ∣ p ( z ∣ x ) ) = E q ( log ⁡ q ( z ) ) − E q ( log ⁡ p ( x , z ) ) + log ⁡ p ( x ) (4) \tag{4} {KL(q(z)||p(z|x))} = \mathbb{E}_q (\log q(z)) - \mathbb{E}_q (\log p(x,z)) + \log p(x) KL(q(z)∣∣p(zx))=Eq(logq(z))Eq(logp(x,z))+logp(x)(4)

其中最后一项之所以为 log ⁡ p ( x ) \log p(x) logp(x),是因为 E q ( log ⁡ p ( x ) ) \mathbb{E}_q(\log p(x)) Eq(logp(x)) z z z无关,所以期望是一个常数。

推导到这里,我们已经得到了 − E L B O - ELBO ELBO,即 E q ( log ⁡ q ( z ) ) − E q ( log ⁡ p ( x , z ) ) \mathbb{E}_q (\log q(z)) - \mathbb{E}_q (\log p(x,z)) Eq(logq(z))Eq(logp(x,z)),注意是负的喔。

所以关于 q ( z ) q(z) q(z) E L B O ( q ) ELBO(q) ELBO(q)的表达式为

E L B O ( q ) = E q ( log ⁡ p ( x , z ) ) − E q ( log ⁡ q ( z ) ) (5) \tag{5}ELBO(q) = \mathbb{E}_q (\log p(x,z)) - \mathbb{E}_q (\log q(z)) ELBO(q)=Eq(logp(x,z))Eq(logq(z))(5)

所以我们可以得到

log ⁡ p ( x ) = E L B O ( q ) + K L ( q ( z ) ∣ ∣ p ( z ∣ x ) ) (6) \tag{6} \log p(x)= ELBO(q) + KL(q(z)||p(z|x)) logp(x)=ELBO(q)+KL(q(z)∣∣p(zx))(6)

因为等式的左边是一个常数,而还记得我们式子(1)的目标吗?是要最小化KL项,而KL散度总是大于等于0, 因此最终我们要做的就是最大化 E L B O ( q ) ELBO(q) ELBO(q),就能达成我们的目标,即

q ∗ ( z ) = arg ⁡ min ⁡ q ( z ) ∈ Q K L ( q ( z ) ∣ ∣ p ( z ∣ x ) ) = arg ⁡ max ⁡ q ( z ) ∈ Q E L B O ( q ) (7) \tag{7} q^*(z) = \arg\min_{q(z)\in Q}{KL(q(z)||p(z|x))} = \arg\max_{q(z) \in Q} ELBO(q) q(z)=argq(z)QminKL(q(z)∣∣p(zx))=argq(z)QmaxELBO(q)(7)

到这里,我们可以总结说,想要找到后验分布 p ( z ∣ x ) p(z|x) p(zx)最相近的分布 q ∗ ( z ) q^*(z) q(z),只要最大化 q ( z ) q(z) q(z)的ELBO就可以了。另外,到这里也知晓为什么ELBO会叫证明下界(Evidence Lower Bound),是因为KL散度总是大于等于0,所以有了下列的不等式

log ⁡ p ( x ) = E L B O ( q ) + K L ( q ( z ) ∣ ∣ p ( z ∣ x ) ) > = E L B O ( q ) (8) \tag{8} \log p(x)= ELBO(q) + KL(q(z)||p(z|x)) >= ELBO(q) logp(x)=ELBO(q)+KL(q(z)∣∣p(zx))>=ELBO(q)(8)

所以ELBO(q)其实就是数据Evidence log ⁡ p ( x ) \log p(x) logp(x)的下界。

最后:在实际计算中, E L B O ELBO ELBO一般表示为以下形式计算

E L B O ( q ) = E q ( log ⁡ p ( x , z ) ) − E q ( log ⁡ q ( z ) ) = E q ( log ⁡ p ( x ∣ z ) p ( z ) ) − E q ( log ⁡ q ( z ) ) = E q ( log ⁡ p ( x ∣ z ) ) + E q ( log ⁡ p ( z ) ) − E q ( log ⁡ q ( z ) ) = E q ( log ⁡ p ( x ∣ z ) ) + ∫ q ( z ) log ⁡ p ( z ) q ( z ) d z = E q ( log ⁡ p ( x ∣ z ) ) − K L ( q ( z ) ∣ ∣ p ( z ) \begin{aligned} ELBO(q) &= \mathbb{E}_q(\log p(x,z)) - \mathbb{E}_q(\log q(z)) \\ &= \mathbb{E}_q(\log p(x|z)p(z)) - \mathbb{E}_q(\log q(z)) \\ &= \mathbb{E}_q(\log p(x|z)) + \mathbb{E}_q(\log p(z)) - \mathbb{E}_q(\log q(z)) \\ &= \mathbb{E}_q(\log p(x|z)) + \int q(z)\log \frac{p(z)}{q(z)}dz\\ &= \mathbb{E}_q(\log p(x|z)) - KL(q(z)||p(z) \end{aligned} ELBO(q)=Eq(logp(x,z))Eq(logq(z))=Eq(logp(xz)p(z))Eq(logq(z))=Eq(logp(xz))+Eq(logp(z))Eq(logq(z))=Eq(logp(xz))+q(z)logq(z)p(z)dz=Eq(logp(xz))KL(q(z)∣∣p(z)

其中,在机器学习里, p ( z ) p(z) p(z)是我们预设的分布,一般设为高斯分布(因为我们也没有多少可用又简单的显式分布-.-)

总结

本文在开头,先直白讲解了什么叫做变分推断,以及它的作用。然后从机器学习的生成模型的背景开始,逐步引出变分推断的使用,最后从头到尾推导了,ELBO的由来。笔者的数学水平有限,如有错误,欢迎指正喔。

参考资料


  1. 变分推断之傻瓜式推导ELBO - 知乎 (zhihu.com)
  2. 变分贝叶斯推断——Variational Bayesian Inference - 知乎 (zhihu.com)
  3. [(5 封私信 / 2 条消息) 如何简单易懂地理解变分推断(variational inference)? - 知乎 (zhihu.com)](
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

这一炉能成

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值