VAE 是 AE的变体。主要目的是让模型学习数据的分布,最后让解码器(decoder)部分具有生成样本的能力。
VAE可看做高斯混合模型(GMM)的扩展。
GMM中,数据由多个高斯分布来描述:
其中 $z \sim P(z^{k}) $, \(x|z^{k} \sim N(\mu^{k}, \sigma^{k})\)
此处,高斯分布的数量是有限的。
因此,这种编码方式编码能力有限。因此需要对这种方式拓展为连续编码。
\[p(x) = \int_{z} p(x|z)p(z)d z \]其中 \(z\sim N(0,1), x|z \sim N(\mu (z), \sigma (z))\).
求解方式是最大化似然:
\[\max L = \sum_{x} \log p(x) \]我们引入\(q(z|x)\), 它可以是任意一个概率分布。做如下等价变化。
\[\begin{align} \log p(x) & = \int_{z}q(z|x)\log p(x) dz \\ & = \int_{z}q(z|x)\log \frac{p(z, x)}{p(z|x)} dz \\ & = \int_{z}q(z|x)\log \left(\frac{p(z,x)}{q(z|x)} \frac{q(z| x)}{p(z|x)}\right) dz \\ & = \int_{z}q(z|x)\log \left(\frac{p(z,x)}{q(z|x)} \right) dz + \int_{z}q(z|x) \left(\frac{q(z| x)}{p(z|x)}\right) dz \\ & = \int_{z}q(z|x)\log \left(\frac{p(z,x)}{q(z|x)} \right) dz + KL(q(z| x)||p(z|x)) \\ & \geq \int_{z}q(z|x)\log \left(\frac{p(z,x)}{q(z|x)} \right) dz \end{align} \]也即是
\[\log p(x) \geq \int_{z}q(z|x)\log \left(\frac{p(z,x)}{q(z|x)} \right) dz \]我们定义
\[L_{b} = \int_{z}q(z|x)\log \left(\frac{p(z,x)}{q(z|x)} \right) dz \]优化目标变为了同时优化\(q(z|x)\) 和 \(p(z|x)\)。
如果仅仅优化\(q(z|x)\), 由于\(\log p(x)\) 与\(q(z|x)\) 无关,那么 \(\log p(x)\) 不变化,它仅仅会增大\(L_{b}\), 因此,也缩小了KL. 如果KL缩小为0, 那么调节KL就会增大\(\log p(x)\). 而且最后,因为KL的缩小,最后的 \(q(z|x)\) 可以近似 \(p(z|x)\).
对于\(L_{b}\),我们作进一步分解。
第一项展开如下(可参考VAE原文附录):
\[\sum_{i=1}^{l}(\exp(\sigma_{i}) - (1 + \sigma_{i}) + (m_{i})^{2}) \]对于第二项,
\[\begin{align} & \max \int_{z}q(z|x)\log p(x|z) dz \\ & = \max E_{q(z|x)}[\log p(x|z)] \end{align} \]这里其实就是auto-encoder的损失。
参考:
李宏毅机器学习 https://www.bilibili.com/video/av15889450/?p=33
https://www.gwylab.com/note-vae.html