快速推导 VAE 变分自编码器,多种写法,和重要细节 Variational Autoencoder
这里用 代表生成模型, 代表编码模型。
首先:
写成 MLE,比 KL 散度少一个常数,形式更简单。没必要时刻写出 KL 散度。
让我们 1 秒钟推导出 VAE。
思想是,匹配 和 ,就可以同时匹配 和 的边缘分布。
MLE 如下:
显然等价于:
恭喜,推导出了 VAE。
此外,这个 MLE 显然也等价于:
加 10 秒钟,把它变成更常见的样子。
展开:
改变符号,显然等价于:
再加上先验:
并令 是固定 stdev 的 Gaussian 以造出 MSE:
忽略常数,就和实际用的一模一样了。
注意:由此可见,VAE 一点儿也不模糊,真正的 VAE 有很多噪音(由于这里的概率模型是每点独立,因此噪音也是每点独立的噪音)。许多论文显示的模糊图像,是"平均图像"。
注意:我们完全可以用更复杂的先验,例如用 PixelXNN 生成图像,这样就完全没有"模糊"。
注意:似乎没人实验可变 stdev 的 Gaussian。所以我做了一些实验,见本文末尾。
最终结果( ):
其中每个 来自独立的 采样。
定义 ,并加入重参数化 trick:
于是可求 LOSS 对 的导数,进行 SGD。
补充传统的推导过程。如前所述,用 代表生成模型, 代表编码模型。
我们的目标是边缘分布的 MLE:
注意到这里有 ELBO:
因此目标等价于:
即:
这与我们之前的推导相同,只是多了一个 去逼近之前的 。
这里还有一种写法,注意到:
因此目标等价于:
我在另一篇文章,简单实验了 有可变 stdev 的情况:
PENG Bo:DGN v2:生成器应该输出分布,清晰图像并不是 GAN 的特权推荐阅读: