仔细去看了ICML2014的文章Auto-Encoding Variational Bayes,想重新把VAE在理论上推导一遍。
先了解auto-encoder的组成。 q(z) 是标准正态分布, p(z|x), q(x|z) 是条件正态分布,分别对应编码器、解码器。
这里通过直接对联合分布进行近似的方式,简明快捷地给出了 VAE 的理论框架。 出发点依然没变,这里再重述一下。首先我们有一批数据样本 {x1,…,xn},其整体用 x 来描述,我们希望借助隐变量 z 描述 x 的分布 \(p(x)\):
\[
p(x)=\int p(x | z) p(z) d z, \quad p(x, z)=p(x | z) p(z)
\]
\[ KL(p(x, z) \| q(x, z))=\iint p(x, z) \ln \frac{p(x, z)}{q(x, z)} d z d x \]
这样(理论上)我们既描述了 p(x),又得到了生成模型 p(x|z),一举两得。
KL 散度是我们的终极目标,因为我们希望两个分布越接近越好,所以 KL 散度越小越好。由于我们手头上只有 x 的样本,因此利用 p(x,z)=p(x)p(z|x) 对上式进行改写: \[ \begin{aligned} K L(p(x, z) \| q(x, z)) &=\int p(x)\left[\int p(z | x) \ln \frac{p(x, z)}{q(x, z)} d z\right] d x \\ &=\mathbb{E}_{x \sim p(x)}\left[\int p(z | x) \ln \frac{p(z | x) p(x)}{q(x, z)} d z\right] \end{aligned} \] 这样一来利用 (4) 式,把各个 xi 代入就可以进行计算了,这个式子还可以进一步简化,因为: \[ \ln \frac{p(z | x) p(x)}{q(x, z)}=\ln \frac{p(z | x)}{q(x, z)}+\ln p(x) \] 而 \[ \begin{aligned} \mathbb{E}_{x \sim p(x)}\left[\int p(z | x) \ln p(x) d z\right] &=\mathbb{E}_{x \sim p(x)}\left[\ln p(x) \int p(z | x) d z\right] \\ &=\mathbb{E}_{x \sim p(x)}[\ln p(x)] \end{aligned} \] 注意这里的 p(x) 是根据样本 x1,x2,…,xn 确定的关于 x 的先验分布(更常见的写法是 p̃(x)),尽管我们不一定能准确写出它的形式,但它是确定的、存在的,因此这一项只是一个常数,所以可以写出: \[ \mathcal{L}=K L(p(x, z) \| q(x, z))-constant=\mathbb{E}_{x \sim p(x)}\left[\int p(z | x) \ln \frac{p(z | x)}{q(x, z)} d z\right] \] 目前最小化 KL(p(x,z)‖q(x,z)) 也就等价于最小化 L。注意减去的常数一般是负数(概率小于 1,取对数就小于 0),而 KL 散度本来就非负,非负数减去一个负数,结果会是一个正数,所以 L 恒大于一个某个正数。
到这里,我们回顾初衷——为了得到生成模型,所以我们把 q(x,z) 写成 q(x|z)q(z),于是就有: \[ \begin{aligned} \mathcal{L} &=\mathbb{E}_{x \sim p(x)}\left[\int p(z | x) \ln \frac{p(z | x)}{q(x | z) q(z)} d z\right] \\ &=\mathbb{E}_{x \sim p(x)}\left[-\int p(z | x) \ln q(x | z) d z+\int p(z | x) \ln \frac{p(z | x)}{q(z)} d z\right] \end{aligned} \] 再简明一点,那就是: \[ \begin{aligned} \mathcal{L} &=\mathbb{E}_{x \sim p(x)}\left[\mathbb{E}_{z \sim p(z | x)}[-\ln q(x | z)]+\mathbb{E}_{z \sim p(z | x)}\left[\ln \frac{p(z | x)}{q(z)}\right]\right] \\ &=\mathbb{E}_{x \sim p(x)}\left[\mathbb{E}_{z \sim p(z | x)}[-\ln q(x | z)]+K L(p(z | x) \| q(z))\right] \end{aligned} \] 看,括号内的不就是 VAE 的损失函数吗?只不过我们换了个符号而已。我们就是要想办法找到适当的 q(x|z) 和 q(z) 使得 L 最小化。
简单来说,由于直接描述复杂分布是难以做到的,所以我们通过引入隐变量来将它变成条件分布的叠加。而这时候我们对隐变量的分布和条件分布都可以做适当的简化(比如都假设为正态分布),并且在条件分布的参数可以跟深度学习模型结合起来(用深度学习来算隐变量的参数),至此,“深度概率图模型”就可见一斑了。