原文地址:https://pan.baidu.com/s/1LNolV-_SZcEhV0vz2RkDRQ ;

本文进行翻译和总结。

VAE

VAE是两种主要神经网络生成模型中的一种,另一种典型的方法是GAN。VAE是一种自编码器,在训练时将数据编码成正则化的隐层分布,该隐层分布可以生成新的数据。其中,"变分"一词来自正则化和统计学中变分推断的关系。

本文想要解决的问题:

1.什么是自编码器?

2.什么是隐层空间,为什么需要正则化?

3.怎样使用VAE生成新的数据?

4.VAE和变分推断之间的关系?

自编码器,降维,PCA

自编码器(autoencoder)是一种降维的方法,一般的自编码器框架包括了编码器和解码器。编码器通过选择和抽取特征将数据编码到低维隐层特征空间中,解码器则相反。自编码器的损失函数就是编码时最大化信息保留和解码之后最小化重构损失。通过降低隐层特征空间(编码空间)的维度,达到降维的作用。

说到降维就不得不说PCA(主成分分析)了。PCA中,新的特征是原特征的线性组合,且新特征是相互正交的,目的就是减少信息的丢失。所以pca的编码过程就是求特征空间的特征向量和特征值。PCA也可以融入自编码器框架,编码过程中就是求解编码矩阵,得到编码空间特征向量;解码过程就是进行特征还原,解码矩阵为编码矩阵的转置。线性自编码器其实就是神经网络版的PCA。

自编码器需要注意的点:①不考虑重构损失的降维,可能会导致缺乏解释性和可开发性。②降维的目的不单单只是减少数据特征的维度,还要得到数据最重要的那些维度。所以最后隐层空间的维度和自编码器的深度需要和降维的目的有关。

变分自编码器

自编码器和内容生成之间的联系:隐层空间足够“正则化”,就是在编码器训练时well organized。如果自编码器在训练时有足够的自由,那么重构损失会变得很小,在网络足够深时达到0(造成过拟合)。

变分自编码器的定义:训练时加入正则化防止过拟合,保证隐层空间具有足够的能力进行生成过程的自编码器。所以对自编码器进行了一些轻微的修改:编码过程将输入数据编码成分布而不是一些点。

训练过程:1.将数据编码成分布;2.再从隐层分布中采样数据点;3.解码还原数据并计算重构损失;4.将重构损失反向传播。

编码器生成的分布被选为正态分布,那么编码器就可以训练返回描述这些正太分布的均值和协方差矩阵这些统计量就可以。为什么一个输入被编码成分布而不是一个唯一的一点是因为它可以很自然地表达潜在空间的全局正则化和局部正则化,后面会说明这一点:局部是因为方差的控制,全局是因为均值的控制。

变分自编码器的损失函数由重构项(最后层)和正则项(隐层)组成。正则项为生成的分布和正太分布之间的KL散度来表示。

直觉上的正则项

正则化的作用是使隐层空间可以进行生成过程,所以需满足以下两个特点:连续性和完整性。连续性可以理解为隐层中两个相近的点解码后应该近似是一样的;完整性理解为分布中采样得到的点解码后的内容应该是有具体意义的。如果单单是将隐层中的点变成分布是不足以满足上面两个特点。所以需要定义一个好的正则项,即编码器生成的分布接近标准正太分布,协方差矩阵接近单位阵,均值为0。这个正则化项,可以防止模型在潜在空间中对数据进行遥远的编码,并鼓励尽可能多的返回分布“重叠”,从而满足预期的连续性和完整性条件。正则项会提高重构损失,所以训练时需要权衡这两个损失。

VAE的数学细节

前面的直觉上的总结:VAE是将输入编码成分布的自编码器,并且隐层被规整为标准正太分布。下面从数学的角度来解释这个正则化项的合理性。首先进行如下概率框架定义和假设:

1.隐层z是从p(z)中采样而来。

2.数据x是从条件似然分布p(x|z)中采样得到。

所以在编码器框架中的解码器"条件概率"可以定义为p(x|z),表示给出编码器变量结果下的编码结果的条件分布。编码器“条件概率”p(z|x)。假设z的先验分布p(z)为标准正太分布,那么根据贝叶斯定义:

假设p(z)满足标准正太分布,那么p(x|z)也可以表示为正太分布:

p(z)和p(x|z)都是满足正太分布的,所以p(z|x)也是满足正太分布的。通过上面的贝叶斯公式,计算p(z|x)是一个标准的贝叶斯推导问题,但是这个计算是很棘手的,因为贝叶斯公式的分母上的积分求解很困难,所以我们需要优化方法,比如变分推断。

变分推断

变分推断是一个近似复杂分布的技术手段,就是使用一个参数化的分布来寻找目标分布的最优近似。现在我们的目标是近似p(z|x)使用高斯分布q_x(z),它的均值和方差由两个函数g,h定义参数为x。

所以我们需要找到最优函数解g和h,使得近似分布和目标分布之间KL最小化。

从这个倒数第二行的等式中可以看到,在求近似p(z|x)分布时,在可见数据的似然函数最大化(左边项)和先验分布的kl距离最小化(右边项)。这两个权衡项可以理解为对于数据的自信和对先验的自信两者之间的权衡。从倒数第一行的等式中,我们可以得到常数c是权衡左右两项,c越大表示解码器的方差越大,越倾向正则项。

神经网络中变分推断

从上面可以看出,在神经网络中函数g和h共享同一个结构和权重。

上面两个图是自编码器神经网络的图,但是训练时变分推断中需要在编码得到的分布中采样得到样本点,但是这个采样过程在训练时无法进行损失的反响传播,所以需要一个重采样的技巧。左边的情况是没有重采样技巧时无法进行反向传播,右边的图表示引入重采样。

变分自编器的表示总体结构图:

总结

本文的主要内容:

1.降维是将描述数据的特征维度数量降低的过程。

2.自编码器是神经网络架构,通过编码解码过程进行重构,并训练使得重构损失最小。

3.由于过拟合,自编码器的隐层没有正则化,无法进行生成过程解码得到新数据。

4.变分自编码器可以解决隐层没有正则化的问题,通过将隐层表示为分布为不是点,并且加入了正则损失。

5.自编码器的损失由重构和正则损失组成,使用变分推断的方法求解。

深入理解VAE(变分自编码器)相关推荐

  1. VAE 变分自编码器

    收集了几篇文章,介绍VAE变分自编码器,如下: 1.[干货]深入理解变分自编码器 - 知乎转载自:机器学习研究组订阅 原文链接:[干货]深入理解变分自编码器[导读]自编码器是一种非常直观的无监督神经网 ...

  2. PyTorch 实现 VAE 变分自编码器 含代码

    编码器 自编码器 自编码器网络结构图 线性自编码器代码如下: 卷积自编码器代码如下: 变分自编码器 变分自编码器网络结构图 变分自编码器代码如下: Ref 自编码器 自编码器网络结构图 线性自编码器代 ...

  3. VAE(变分自编码器)学习笔记

    VAE学习笔记 普通的编码器可以将图像这类信息编码成为特征向量. 但通常这些特征向量不具有空间上的连续性. VAE(变分自编码器)可以将图像信息编码成为具有空间连续性的特征向量. 方法是向编码器和解码 ...

  4. VAE变分自编码器实现

    变分自编码器(VAE)组合了神经网络和贝叶斯推理这两种最好的方法,是最酷的神经网络,已经成为无监督学习的流行方法之一. 变分自编码器是一个扭曲的自编码器.同自编码器的传统编码器和解码器网络一起,具有附 ...

  5. 入门到精通!珍藏资源!VAE变分自编码器

    过去虽然没有细看,但印象里一直觉得变分自编码器(Variational Auto-Encoder,VAE)是个好东西.趁着最近看概率图模型的三分钟热度,我决定也争取把 VAE 搞懂.    于是乎照样 ...

  6. 通俗易懂——VAE变分自编码器原理

    变分自编码器(Variational Auto Encoder, VAE) 李宏毅机器学习笔记.转载请注明出处. 自编码器(Autoencoder): Autoencoder = Encoder + ...

  7. 【生成模型】变分自编码器(VAE)及图变分自编码器(VGAE)

    这段时间在学习机器学习中有关不确定性和概率分布的知识,发现了VAE这样一个有趣的方向,想抓紧时间整理一下VAE的主要思想和方法,然后思考如何迁移应用到自己的研究方向上. 从直观上理解VAE 变分自编码 ...

  8. 变分自编码器(VAE)直观理解and 数学推导

    这两天在学习VAE相关的内容,感觉云里雾里emm-写个博客记录一下~ 内容借鉴并综合了以下带佬: 变分自编码器VAE:原来是这么一回事 半小时理解变分自编码器 花式解释AutoEncoder与VAE ...

  9. 【13】变分自编码器(VAE)的原理介绍与pytorch实现

    文章目录 1.VAE的设计思路 2.VAE的模型架构 3.VAE的作用原理 4.VAE的Pytorch实现 1)参考代码 2)训练结果展示 3)生成结果展示 5.实现VAE中出现的问题 1.VAE的设 ...

最新文章

  1. python3 报错 ‘builtin_function_or_method‘ object has no attribute 解决方法
  2. [No0000C0]百度网盘真实地址解析(不用下载百度网盘)20170301
  3. Queue+Stack(C++,标准库中的队列和栈)
  4. db2分页查询sql语句_MySQL学习(八):SQL查询语句的用法和优化
  5. IDEA——常用代码模板
  6. #js#简单的在线计算器
  7. Yaml锚点和别名*
  8. 已处理证书链,但是在不受信任提供程序信任的根证书中终止 - Windows 7安装.Net Framework 4.7.2时出现此问题
  9. 我的矩阵分析学习安排
  10. Nodejs文件相关操作
  11. 关于Qt的dateTime和时间戳转化数据不对的问题
  12. SQL SERVER 2005 数据库置疑修复
  13. 如何下载视频号的视频
  14. Redis一问多答(必背篇)
  15. Python 修改图像中的像素值
  16. 苏炫杰全国计算机等级考试,高中主题班会教案模板
  17. 苹果Mac远程控制软件:Screens
  18. SDN和NFV的主要区别
  19. 哈希(hash)理解
  20. halcon基于相关性的模式匹配

热门文章

  1. html5对各浏览器的支持情况
  2. redis中各种数据类型对应的jedis操作命令、redis命令大全
  3. 关于开展2020年全国大学生电子设计竞赛模拟电子系统设计专题邀请赛(TI杯)的第二次通知
  4. 华为的“3个数字化”:对象数字化、过程数字化、规则数字化
  5. 雷达系列论文翻译(十一):LVI-SAM: Tightly-coupled Lidar-Visual-Inertial Odometryvia Smoothing and Mapping
  6. MATLAB系统仿真其三:Lorenz和Rossler系统混沌同步
  7. P2853 [USACO06DEC]Cow Picnic S
  8. 运维监控系统实战笔记(day3)
  9. 集总型的威尔金森功分器(建议用于600MHz以下)
  10. 25-微信小程序商城 联系客服(微信小程序商城开发、小程序毕业设计、小程序源代码)(黄菊华-微信小程序开发教程)