导读

小编在读一篇论文时遇到了变分自编码器(Variational auto-encoder,VAE)的概念,我也是第一次接触,于是乎翻遍了网上现有的好多资料,稍微理解了一点,整理下来,希望能帮助大家。如有不对地方,还请各位下方评论区批评指正,感谢您的交流指导~~

引言

  1. 首先附上关于变分自编码器的论文
    Auto-Encoding Variational Bayes[PDF]
    在这里插入图片描述
  2. 变分自编码器(Variational auto-encoder,VAE)是一类重要的生成模型(generative model),它于2013年由Diederik P.Kingma和Max Welling提出。

介绍

VAE可以通过编码解码的步骤,直接比较重建图片和原始图片的差异,但是GAN做不到。

在介绍变分自编码器之前,我们先简单了解下自编码器的一些知识:

一、自编码器

1.介绍
自编码器(autoencoder, AE)是一类在半监督学习和非监督学习中使用的人工神经网络,其功能是通过将输入信息作为学习目标,对输入信息进行表征学习。

自编码器包含编码器(encoder)和解码器(decoder)两部分。按学习范式,自编码器可以被分为收缩自编码器、正则自编码器和变分自编码器,其中前两者是判别模型、后者是生成模型 。按构筑类型,自编码器可以是前馈结构或递归结构的神经网络。
自编码器具有一般意义上表征学习算法的功能,被应用于降维和异常值检测。包含卷积层构筑的自编码器可被应用于计算机视觉问题,包括图像降噪 、神经风格迁移等。

2.算法

自编码器是一个输入和学习目标相同的神经网络,其结构分为编码器和解码器两部分。给定输入空间X∈ χ \chi χ 和特征空间h∈F,自编码器求解两者的映射 f f f g g g使输入特征的重建误差达成最小:
在这里插入图片描述
求解完成后,由编码器输出的隐含层特征h,即“编码特征”可视为输入数据X的表征。

3.传统自编码器架构
在这里插入图片描述
(图片来源网络,侵删)

二、变分自动编码器

VAE继承了传统自动编码器的架构,并使用它来学习数据生成分布,这允许我们从潜在空间中随机抽取样本。然后可以使用解码器网络对这些随机样本进行解码,以生成具有与训练网络的特征类似的特征的独特图像。
在这里插入图片描述
(图片来源网络,侵删)

它和AE的不同点就在于:
AE 中间输出的是隐变量的 具体取值
VAE中间要输出的是隐变量的具体分布情况,
这样一来,我们就可以从这个分布中另外取样,送入到解码器,就可以生成类似输入样本 x x x 的其他样本 x ′ x^{'} x 了,并且这两个会十分近似。

VAE本质上就是在我们常规的自编码器的基础上,对encoder的结果(在VAE中对应着计算均值的网络)加上了“高斯噪声”,使得结果decoder能够对噪声有鲁棒性;而那个额外的KL loss(目的是让均值为0,方差为1),事实上就是相当于对encoder的一个正则项,希望encoder出来的东西均有零均值。
那另外一个encoder(对应着计算方差的网络)的作用呢?它是用来动态调节噪声的强度的。直觉上来想,当decoder还没有训练好时(重构误差远大于KL loss),就会适当降低噪声(KL loss增加,注意KL loss等于0表示分布就是标准正态分布),使得拟合起来容易一些(重构误差开始下降);反之,如果decoder训练得还不错时(重构误差小于KL loss),这时候噪声就会增加(KL loss减少),使得拟合更加困难了(重构误差又开始增加),这时候decoder就要想办法提高它的生成能力了。
说白了,重构的过程是希望没噪声的,而KL loss则希望有高斯噪声的,两者是对立的。所以,VAE跟GAN一样,内部其实是包含了一个对抗的过程,只不过它们两者是混合起来,共同进化的。

  • 架构
    在这里插入图片描述
    变分自编码器架构

具体原理推导请参考参考资料部分,这里就不做重复描述了。

  • 实现
    代码可参考https://github.com/LiUzHiAn/VAE-Pytorch

详细教程

可参考这篇文章,详细介绍了关于变分自编码器的内容
Tutorial on Variational Autoencoders【PDF】
在这里插入图片描述

参考资料:
1.百度百科
2.变分自编码器(一):原来是这么一回事
3.变分自编码器(一)——基本原理简介
4.变分自编码器的原理和程序解析

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐