破解VAE的迷思

VAE生成的图像比较模糊,个中原因一直缺乏让人信服的解释。经常有人聚焦在KL损失上,而笔者认为本质上这是一个工程问题。至于为什么GAN生成的图像不模糊,请参考VAE的哲学,GAN的哲学。

我们首先观察一下VAE的任务。要学的图像是高维空间中一些离散的点,VAE试图把它们压缩到一个低维连续空间(也就是潜空间),再复原回原空间。这么做是基于这样的假设——那就是要学习的实际上是嵌入高维空间的低维流形,然而真实图形中的细节显然不全是某种低维流形,有些图像细节,比如处于空间中的头发,肤质,真实纹理质感,即使是某种流形,也很难用低数据量描述,或很难学得用低数据量描述。考虑到其他深度网络都是使用一个过容量(表示容量)的网络来学习一个简单平滑的函数,VAE使用一个瓶颈式的潜空间向量去实现前述任务就显得不太现实了。

因此,VAE无法还原图像的细节,看上去缺乏真实感,同时,在不能还原的前提下,为了降低损失,只有输出平均值,对于人脸来说,就是生成一张大众脸。如果潜空间向量使用比较低的维数,原图中的人脸即使被遮挡了,还原图像也会生成被遮挡的部分,因为大多数训练样本是一张完整的脸。如果像AI生成模型之人脸变换(一) VAE一样使用比较大的潜空间向量维数,还原质量会好一些,也不会出现人脸自动去遮挡的效果,但是采样质量较差。因为潜空间变大了,高维空间的离散点映射过来,不再容易保证连续性。

CVAE-GAN假装解决了这一难题,它可以在一个细粒度分类中生成高质量的图像。比如在训练后,可以生成某一个人的人脸,但实际上它是通过让网络学习某个人的很多张照片来记住这个人的模样。它不是通过潜变量来传递这个人的相貌信息,而是通过一个单独的flag告诉后面的生成网络,请生成这个人的脸。。。

目前,真正解决前述工程难题最好的是IntroVAE 。它的关键之处是使用GAN中的对抗思想,来充分压榨出网络的能力!(建议读者先行阅读IntroVAE论文,因为本文不会对IntroVAE做任何具体介绍,只有评论。。。。)IntroVAE把Encoder当作GAN中的Discriminator,因为E的结构和D相同,本质上,D就是E网络最后dense一下,出一个结果。通过Encoder(相当于GAN中的Discriminator)和Decoder(相当于GAN中的Generator)的对抗,使得Encoder和Decoder都具有非常强的能力。另外,传统的VAE只有重构损失来约束生成质量,IntroVAE把E当作D,这样随机采样生成的图片也有了损失,这就和GAN效果似的了,不仅G的能力大增,随机采样的效果也特别好,潜空间的编码质量也提高了。

我刚读到论文一半的时候,不由得怀疑IntroVAE的训练过程是否在数学上能够证明,结果论文果真就给出了证明:IntroVAE达到纳什均衡时,生成图像分布等于真实图像分布(其实我没细看证明过程:))。

尽管如此,如果仔细观察论文中的样图,仍旧可以发现还原的人脸还是有点不像啊~~~~

你可能感兴趣的:(人工智能,深度学习与人工智能)