VAE是一个我个人很喜欢的生成模型,我认为在很多方面它都是优于GAN和Normalizing flow的,但本次我们不深入这个话题。以VAE本身的推导和介绍为主。
首先,与所有生成模型一样,VAE试图找到一种方式来建模$P(X)$,即数据分布,更具体来讲,我们希望找到一种方式,可以不停的从$P(X)$采样出数据点。而VAE是通过分布变换来实现这样一点的,分布变换指的是从一个分布中采样得到一个样本$z$,通过一个确定性函数$f(\cdot)$可以把$z$映射到另一分布。这种采样方法也称之为逆变换采样。
对一个随机变量X,它的累计分布函数,
VAE的目标就是通过auto encoder的形式,找到这个映射函数。
\begin{align} \log P(x) =& \log \sum_z P(x,z) \ =& \log \sum_z P(x,z) \frac{Q(z|x)}{Q(z|x)} \ =& \log \sum_z Q(z|x) \frac{P(x|z) P(z)}{Q(z|x)} \ =& \log \mathbb{E}_{z \sim Q(z|x)} \frac{P(x|z) P(z)}{Q(z|x)} \ \geq& \mathbb{E}_{z \sim Q(z|x)} \log \frac{P(x|z) P(z)}{Q(z|x)} \ \geq& \mathbb{E}_{z \sim Q(z|x)} [\log P(x|z) + \log P(z) -\log Q(z|x)] \ \geq& \mathbb{E}_{z \sim Q(z|x)} \log P(x|z) - \mathrm{KL}(Q(z|x)||P(z)) \end{align}
我们可以发现Q(z|x)可以被替换成任意分布,但它的影响是什么呢?
\begin{align} \mathrm{KL}(Q(z|x)||P(z|x)) =& \mathbb{E}_{z \sim Q(z|x)} [\log Q(z|x) - \log P(z|x)] \ =& \mathbb{E}_{z \sim Q(z|x)} [\log Q(z|x) - \log P(x|z) - \log P(z) + \log P(x)] \ =& -\mathbb{E}_{z \sim Q(z|x)} \log P(x|z) + \mathrm{KL}(Q(z|x)||P(z)) + \log P(x) \ \log P(x) =& \mathrm{KL}(Q(z|x)||P(z|x)) + \mathbb{E}_{z \sim Q(z|x)} \log P(x|z) - \mathrm{KL}(Q(z|x)||P(z)) \ \log P(x) \geq& \mathbb{E}_{z \sim Q(z|x)} \log P(x|z) - \mathrm{KL}(Q(z|x)||P(z)) \end{align}
由第二种方法可知,$\mathrm{KL}(Q(z|x)||P(z|x))$决定了VAE所求的ELBO和真实$P(x)$之间的差距,所以$Q$的选取是非常重要的。
很多工作假设$P(z)$为标准正态分布,这个假设可以这样理解,
上述推导中没有涉及数据集的问题,实际上,我们要求的不是
我们可以看到,当使用SGD方法时,对前后两项的估计可能误差是不一样的,所以当batch size很小时,会增加一个对KL项的额外系数,让其在整个epoch上和为1.
VAE的第一种解释是噪声信道,Encoder
VAE追求最小表示,不论z的维度设定为多少,KL项会使model用尽量少的表达能力去传递信号。这等同于用最小的维度来传递信息,因为可以找到一种映射方法,让某一些维度尽量稳定来高效的传递信息,而让其他维度贴近噪声分布。
一是KL项太大,model完全不使用z,二是KL项太小,decoder退化