VAE | 变分自编码器总结

Variational AutoEncoder


自动编码器(Autoencoder,AE)

原理

先将高维的原始数据映射到一个低维特征空间,然后从低维特征学习重建原始的数据。一个AE模型包含两部分网络:

  • Encoder:将原始的高维数据映射到低维特征空间,这个特征维度一般比原始数据维度要小,这样就起到压缩或者降维的目的,这个低维特征也往往成为中间隐含特征(latent representation)
  • Decoder:基于压缩后的低维特征来重建原始数据
  • 无监督学习方法,不需要标注数据
  • 自编码器的目标是学习一个恒等函数,我们可以使用交叉熵(Cross-entropy)或者均方差(Mean Square Error)构建重建损失量化输入和输出的差异,低纬度的隐层编码用于数据压缩和特征表示,类似PCA压缩,特征相似度。

变种

去噪自编码器(Denoising Autoencoder,DAE)

  • 在训练过程先对输入进行一定的扰动,比如增加噪音或者随机mask掉一部分特征。相比AE,DAE的重建难度增加,这也使得encoder学习到的隐含特征更具有代表性。

基于MIM(mask image modeling)的自监督方法

  • MAE和SimMIM,它们都是采用和AE类似的设计架构,这让基于AE的无监督训练方法再次卷土重来。
  • BERT可以看成是一个特殊的AE(De-noising auto-encoder)。输入为一个句子,然后对句子增加一些噪音(mask掉一些词),我们希望模型能尽可能的还原出来原始的句子。

变分自编码器(VAE)

原理

​ 由于自编码器仅关注隐层编码的重建能力,其隐层空间分布往往是无规律和不均匀的,在连续的隐层空间随机采样或者插值得到一组编码通常会产生无意义和不可解释的生成结果。为了构建一个有规律的隐层空间,使得我们可以在不同潜在属性上随机地采样和平滑地插值,最后通过解码器生成有意义的图像,研究者们在2014年提出了变分自编码器。

​ 变分自编码器不再将输入映射成隐层空间中的一个固定编码,而是转换成对隐层空间的概率分布估计,为了方便表示我们假设先验分布是一个标准高斯分布。同样的,我们训练一个概率解码器建模,实现从隐层空间分布到真实数据分布的映射。当给定一个输入,我们通过后验分布估计出关于分布的参数(多元高斯模型的均值和协方差),并在此分布上采样,可使用重参数化技巧使采样可导(为随机变量),最后通过概率解码器输出关于的分布,为了使生成图像尽量真实,我们需要求解后验分布,目标是最大化真实图像的对数似然。

遗憾的是,真实的后验分布根据贝叶斯模型包含对在连续空间上的积分,是不可直接求解的。为了解决上述问题,变分自编码器使用了变分推理的方法,引入一个可学习的概率编码器去近似真实的后验分布,使用KL散度度量两个分布的差异,将这个问题从求解真实的后验分布转化为如何缩小两个分布之间的距离。

我们省略中间推导过程,将上式展开得到式,

由于KL散度非负,我们可以将我们的最大化目标转写成,

综上,我们将关于概率编码器和概率解码器的定义为模型的损失函数,其负数形式称为的证据下界(Evidence Lower Bound),最大化证据下界等效于最大化目标。上述变分过程是VAE及各种变体的核心思想,通过变分推理将问题转化为最大化生成真实数据的证据下界。

区别

结构

结论

​ 实现encoder和decoder就平常的方法来,CV的CNN,NLP的LSTM等等,只是VAE在中间转化的时候多加了点东西。

​ encoder有两个:计算均值和计算方差

  • 计算均值的网络
    • 本质上就是对encode的结果加上高斯噪声,使得decoder对噪声更有鲁棒性
    • KL Loss相当于正则(对零均值的正态逼近),使得encoder的结果具有零均值
  • 计算方差的网络
    • 相当于动态调节噪声的强度(和方差对应)
    • 刚开始训练时(重构误差>>KL Loss),适当降低噪声强度(KL Loss增加),使得拟合更容易;反之,训练久后,噪声强度增加(重构误差<KL Loss),这是噪声增加(KL Loss减少),拟合又更困难了。也就是KL Loss和重构误差的优化是一个对抗的过程,与GAN不同的是,这两个混在一起共同优化的

​ decoder类似


条件变分自编码器(Conditional,CVAE)

原理

  • 类似CGAN,实现条件输入控制生成结果
  • AE适合数据压缩与还原,不适合生成未见过的数据
  • VAE适合生成未见过的数据,但不能控制生成内容
  • CVAE(Conditional VAE)可以在生成数据时通过指定其标签来生成想生成的数据

向量量化变分自编码器(Vector Quantised,VQ-VAE )

  • github.com/ritheshkuma...
  • VAE 学习连续的潜在表示,而 VQ-VAE 学习离散的潜在表示
  • VQ-VAE其实就是一个AE(自编码器)而不是VAE(变分自编码器)
  • VQ-VAE 假定所有隐变量具有统一的先验,因此所有隐变量都被视为具有同等的可能性

隐空间

  • 原始数据用Z非线性表示
  • 如果原始数据是隐变量的线性变换,正是经典无监督算法 PCA 的设计目的:PCA 本质上试图找到基础的 Z 潜在表示。如果潜在表示与原始数据具有更复杂的非线性关系呢?例如,下图可视化了更复杂的隐空间可以编码的高级信息类型。在这种情况下,PCA 将无法找到最佳的潜在表示。我们可以使用自编码器来找到这个更抽象的隐空间。
  • 隐空间是数据的压缩表示,强调数据最重要的特征信息。
  • 自编码器是一种用于寻找隐空间的方法,这些隐空间是数据的复杂非线性函数。
  • 变分自编码器在自编码器基础上增加了一个先验隐空间(标准正态分布),这为学习的隐空间提供了非常好的属性(我们可以通过隐空间平滑地插值数据分布)。

隐空间离散表示

  • transformers 旨在处理离散数据
  • DALL-E涉及一个 transformer,该 transformer 以文本 embeddings 和在图像上训练的 VQ-VAE 的隐变量作为输入。
  • VQ-VAE 几乎比目前任何其他算法更好地表示多样化,复杂的数据分布。由于它与 transformers 配合得非常好,因此在给定足够大的计算预算的情况下,几乎可以扩展生成任意的可能性(不幸的是,对于最先进的结果,这是很少有个人甚至组织能够负担得起的预算)。出于这些原因,我预计 VQ-VAE 在相当长的一段时间内仍将是深度学习生态系统中的热门组件。
相关推荐
cwj&xyp几秒前
Python(二)str、list、tuple、dict、set
前端·python·算法
xiaoshiguang34 小时前
LeetCode:222.完全二叉树节点的数量
算法·leetcode
爱吃西瓜的小菜鸡4 小时前
【C语言】判断回文
c语言·学习·算法
别NULL4 小时前
机试题——疯长的草
数据结构·c++·算法
TT哇4 小时前
*【每日一题 提高题】[蓝桥杯 2022 国 A] 选素数
java·算法·蓝桥杯
yuanbenshidiaos6 小时前
C++----------函数的调用机制
java·c++·算法
唐叔在学习6 小时前
【唐叔学算法】第21天:超越比较-计数排序、桶排序与基数排序的Java实践及性能剖析
数据结构·算法·排序算法
ALISHENGYA6 小时前
全国青少年信息学奥林匹克竞赛(信奥赛)备考实战之分支结构(switch语句)
数据结构·算法
chengooooooo6 小时前
代码随想录训练营第二十七天| 贪心理论基础 455.分发饼干 376. 摆动序列 53. 最大子序和
算法·leetcode·职场和发展
jackiendsc6 小时前
Java的垃圾回收机制介绍、工作原理、算法及分析调优
java·开发语言·算法