本专栏之前介绍了 VAE 的推导:PENG Bo:快速推导 VAE 变分自编码器,多种写法,和重要细节 Variational Autoencoder ,在此介绍 VAE 在 2017/18 年的部分新进展。

1. VAE 的「编码坍塌」

如果思考过 VAE 的原理,会发现它有一个矛盾之处:如果每个 xz 的每维都是 N(0,1) ,那么这个 z 实际就没有编码能力,因为不同 x 的编码都一样。网路最终会试图忽略 z,直接去还原 p_x

如下图所示:

对于左边的普通 VAE,它会要求 z (三角标记)都往目标分布(中间的三角标记)靠拢(减少 KL),但是,中间的三角标记只会还原出一个固定的 x (中间的正方标记)。

假如我们加入一个新网路,可以判断 z 是否属于 p_z(而不是预先限制 z 为 Gaussian 然后只看 KL),就可以改善这种问题。于是在 [1711.01558] Wasserstein Auto-Encoders 提出用一个 WGAN 或 MMD 去判断,例如这样的全连接 WGAN:

他们发现 WGAN 的效果比 MMD 更好。

类似的例子是 Information Maximizing Variational Autoencoders 其中只用了 MMD 判断:

这类思想最早的来源是 Adversarial Autoencoders ,大同小异。


2. VAE 为什么能实现 Disentanglement?

考虑 SVHN,令编码为 (y,z) ,其中 y 是 10 个数字类别, z 是额外的「风格」,例如数字的角度,颜色,等等。

如果用 VAE 训练这个问题,我们会发现成功实现 disentanglement,类似于无监督的分类:

但如果仔细想想,这并不显然。如 Rethinking Style and Content Disentanglement in Variational Autoencoders 所述,模型没有动力去必须完成这个任务:

经过实验,关键还是在于 DCNN + SGD 过程。在编码 disentangle 的情况下,E 和 G 网路都训练更快(因为对于 DCNN 而言,这样的任务「更简单」)。所以梯度下降时网路会倾向于走这个最快的道路。

我的看法:关键是在网路架构本身,在于 Deep Image Prior,此前我也说过很多次了。


3. 对 VAE loss 的拆分

本文见 [1804.02086] Structured Disentangled Representations,考虑 G 网路和 E 网路:

如我在前文的 VAE 推导所述,VAE 用这样的看法更直接:

可进一步拆分:

每个部分的作用如图:

还可以继续拆 KL:

每个项目都可以加因子,许多论文只是调整因子而已:


4. IntroVAE:为 VAE 植入 GAN 思想的一种方法

论文见Introspective Variational Autoencoders for Photographic Image Synthesis。通过修改 VAE 的 LOSS,在不引入新网路的情况下,用 E 网路承担了 GAN 中 D 网路的功能。

效果如下图,和 nVidia 的 PGGAN 相当,而且不需要分层训练,可以直接训练:

训练过程,其实思想非常简单:

思想是,在原有 VAE 的基础上,要求 E 网路在输入假图像【包括 G(z) 和 G(E(x))】时,给出和 p_z 分布尽量不同的编码(增大此时 zp_z 的 KL)。这样 E 网路就有了「鉴别能力」。而 G 网路加一个目标去骗过 E 网路。

有个细节是,为了防止 E 网路把假图像的 z 分布推得和 p_z 过远,在两个分布间的 KL 大于超参数 m 时,就不再推了。这个 m 可以取得比正常 VAE 中的 KL 大一些即可。


还有更多进展,会在本专栏未来的文章介绍,欢迎关注。


最后发一下我在调的网路,类似 VAE,不过更简化,只有生成 G 网路。例如,编码转移效果,点击看 GIF 动画(噪点是知乎的压缩,原图很流畅,毕竟是 VAE):

训练非常快。在 GTX1070 上 1 个小时就很清晰。稍后再调清晰一些写写做法。

数据集是 Trillion Pair,其中图片有点旧,也似乎少了一些人(例如,缺杨幂,有迪丽热巴,缺范冰冰,有李冰冰,缺梅西,有C罗,缺费德勒,有纳达尔...)。


推荐阅读:
相关文章