查看原文
其他

漫谈VAE和VQVAE,从连续分布到离散分布

The following article is from Smarter Author Smarter

公众号关注 “ML_NLP
设为 “星标”,重磅干货,第一时间送达!

转载自 | Smarter

最近DALLE和VQGAN展现出了非常强大的图片生成能力,DALLE可以通过输入文字生成匪夷所思的超现实主义图片,VQGAN可以生成百万像素的高清图片,而这两个生成模型都跟VAE和VQVAE的思想密切相关,这促使我去深入研究VAE和VQVAE的原理,以便更好的领会DALLE和VQGAN的奥妙所在。

本文先讨论一下如何重构图片,然后回顾一下AutoEncoder模型,最后介绍VAE和VQVAE的设计思路和重参数方式,以及探讨一下VAE和VQVAE的本质。

01

如何重构图片?

上面的人脸图片可以描述成多种不同属性,比如微笑、皮肤黑、男性、有胡须、不戴眼镜和头发黑等等。如果想要通过神经网络架构重构出这张人脸图片,可以先将图片编码成一个一个不同的属性,然后通过综合这些属性解码得到重构图片,这就是自编码器的常规思路。

然而这里还有一个需要解决的问题是,如何对一张图片的属性进行编码,因为属性既可以描述成离散值的形式也可以描述成概率分布的形式(从概率分布中随机采样出离散值)。比如第一张小男孩图片的smile属性,离散值可以表示为-0.8,概率分布可以表示成-1到0之间的正态分布(然后从中随机采样出离散值,大概率在正态分布最高点的横坐标-0.5附近)。

02

AutoEncoder

最基础的AutoEncoder由一个Encoder和一个Decoder组成。Encoder对输入图片进行编码得到latent code,然后通过Decoder进行重建,就算输入图片和生成图片的重构误差,训练的时候最小化重构误差。

AutoEncoder可以理解为通过网络学习出任意概率分布,然后取概率分布中的最高点的横坐标作为编码的离散值。这会导致AutoEncoder的生成过程是不可控的,对输入噪声敏感,因为学习得到的概率分布是不能提前预知的。

03

VAE


VAE通过Encoder学习出mean和std两个编码,同时随机采样一个正态分布的编码  ,然后通过   * std + mean公式重采样得到latent code,然后通过Decoder进行重建。

另外,由于正态分布的连续性,不存在不可导问题,可以通过重参数方法,对latent code进行恢复,并且通过链式求导法则进行梯度更新。

VAE可以理解为通过网络学习出每个属性正太分布的mean和std编码,然后通过mean和std和N ( 0,1 )正态分布恢复每个属性的正态分布,最后随机采样得到每个属性的离散值。

如图所示,VAE相对于AutoEncoder的好处是,当采样输入不同时,VAE对于任意采样都能重构出鲁棒的图片。VAE的生成过程是可控的,对输入噪声不敏感,我们可以预先知道每个属性都是服从正态分布的。

04

VQVAE


VQVAE通过Encoder学习出中间编码,然后通过最邻近搜索将中间编码映射为codebook中K个向量之一,然后通过Decoder对latent code进行重建。

另外由于最邻近搜索使用argmax来找codebook中的索引位置,导致不可导问题,VQVAE通过stop gradient操作来避免最邻近搜索的不可导问题,也就是latent code的梯度跳过最近邻搜索直接复制到中间编码上。

VQVAE相比于VAE最大的不同是,直接找每个属性的离散值,通过类似于查表的方式,计算codebook和中间编码的最近邻作为latent code。由于维护了一个codebook,编码范围更加可控,VQVAE相对于VAE,可以生成更大更高清的图片(这也为后续DALLE和VQGAN的出现做了铺垫)。

05

总结

因此AutoEncoder、VAE和VQVAE可以统一为latent code的概率分布设计不一样,AutoEncoder通过网络学习得到任意概率分布,VAE设计为正态分布,VQVAE设计为codebook的离散分布。总之,AutoEncoder的重构思想就是用低纬度的latent code分布来表达高纬度的数据分布,VAE和VQVAE的重构思想是通过设计latent code的分布形式,进而控制图片生成的过程。


Reference

[1] Auto-Encoding Variational Bayes

[2] Neural Discrete Representation Learning


强烈建议阅读以下4篇blog

https://www.jeremyjordan.me/autoencoders/

https://www.jeremyjordan.me/variational-autoencoders/

变分自编码器VAE:原来是这么一回事 | 附开源代码 - 知乎 (zhihu.com)

https://kexue.fm/archives/6760?utm_source=wechat_session&utm_medium=social&utm_oi=710944035610562560




推荐阅读:

视觉增强词向量:我是词向量,我开眼了!

Transformer长大了,它的兄弟姐妹们呢?(含Transformers超细节知识点)

ERICA: 提升预训练语言模型实体与关系理解的统一框架

点击下方卡片,关注公众号“机器学习算法与自然语言处理”,获取更多信息:

继续滑动看下一个
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存