您当前的位置:首页 > IT编程 > pointnet
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch |

自学教程:AE与VAE--AutoEncoder:自编码器-VAE:变分自编码器

51自学网 2021-01-11 11:10:20
  pointnet
这篇教程AE与VAE--AutoEncoder:自编码器-VAE:变分自编码器写得很实用,希望能帮到您。

AE与VAE

  • AutoEncoder:自编码器
  • 不同种类的自编码器
  • VAE:变分自编码器
  • 总结

 

AutoEncoder:自编码器

在这里插入图片描述

自动编码器是一种数据的压缩算法,其中数据的压缩和解压缩函数是数据相关的、有损的、从样本中自动学习的。在大部分提到自动编码器的场合,压缩和解压缩的函数是通过神经网络实现的。

  • 自动编码器是数据相关的(data-specific 或 data-dependent),这意味着自动编码器只能压缩那些与训练数据类似的数据。比如,使用人脸训练出来的自动编码器在压缩别的图片,比如树木时性能很差,因为它学习到的特征是与人脸相关的。
  • 自动编码器是有损的,意思是解压缩的输出与原来的输入相比是退化的,MP3,JPEG等压缩算法也是如此。这与无损压缩算法不同。
  • 自动编码器是从数据样本中自动学习的,这意味着很容易对指定类的输入训练出一种特定的编码器,而不需要完成任何新工作。

搭建一个自动编码器需要完成下面三样工作:搭建编码器,搭建解码器,设定一个损失函数,用以衡量由于压缩而损失掉的信息。编码器和解码器一般都是参数化的方程,并关于损失函数可导,典型情况是使用神经网络。编码器和解码器的参数可以通过最小化损失函数而优化,例如SGD。

自编码器是一个自监督的算法,并不是一个无监督算法。自监督学习是监督学习的一个实例,其标签产生自输入数据。要获得一个自监督的模型,你需要一个靠谱的目标跟一个损失函数,仅仅把目标设定为重构输入可能不是正确的选项。
目前自编码器的应用主要有两个方面,第一是数据去噪,第二是为进行可视化而降维。配合适当的维度和稀疏约束,自编码器可以学习到比PCA等技术更有意思的数据投影。

不同种类的自编码器

自编码器(Autoencoder)是神经网络的一种,经过训练后能尝试将输入复制到输出。自编码内部有一个隐藏层 h,可以产生编码(code)表示输入。该网络可以看作由两部分组成:一个由函数 h = f(x) 表示的编码器和一个生成重构的解码器 r = g(h)。如果一个自编码器只是简单地学会将处处设置为 g(f(x)) = x,那么这个自编码器就没什么特别的用处。相反,我们不应该将自编码器设计成输入到输出完全相等。这通常需要向自编码器强加一些约束,使它只能近似地复制,并只能复制与训练数据相似的输入。这些约束强制模型考虑输入数据的哪些部分需要被优先复制,因此它往往能学习到数据的有用特性。

  • 欠完备自编码器。从自编码器获得有用特征的一种方法是限制 h h h的维度比 x x x小,这种编码维度小于输入维度的自编码器称为欠完备(undercomplete)自编码器。学习欠完备的表示将强制自编码器捕捉训练数据中最显著的特征。学习过程可以简单地描述为最小化一个损失函数 L ( x , g ( f ( x ) ) ) L(x,g(f(x))) L(x,g(f(x))),其中 L L L是一个损失函数,惩罚 g ( f ( x ) ) g(f(x)) g(f(x)) x x x的差异,如均方误差。
  • 去噪自编码器。去噪自编码器(denoisingautoencoder, DAE)最小化 L ( x , g ( f ( ˜ x ) ) ) L(x,g(f(˜ x))) L(x,g(f(˜x))),其中 ˜ x ˜ x ˜x是被某种噪声损坏的 x x x的副本。因此去噪自编码器必须撤消这些损坏,而不是简单地复制输入。

VAE:变分自编码器

相比于自编码器,VAE更倾向于数据生成。只要训练好了decoder,我们就可以从标准正态分布生成数据作为解码器的输入,来生成类似但不同于训练数据的新样本,作用类似GAN。
在这里插入图片描述
实际上,在AE的基础上通过encoder产生的向量,可以这么理解:
假如在AE中,一张满月的图片作为输入,模型得到的输出是一张满月的图片;一张弦月的图片作为输入,模型得到的是一张弦月的图片。当从满月的code和弦月的code中间sample出一个点,我们希望是一张介于满月和弦月之间的图片,但实际上,对于AE我们没办法确定模型会输出什么样的图片,因为我们并不知道模型从满月的code到弦月的code发生了什么变化。
在这里插入图片描述
而VAE做的事情,实际上就是在原本满月和弦月生成的code上面加了noise,即在某个数值区间内,每个点理论上都可以输出满月的图片;在某个数值区间内,每个点理论上都可以输出弦月的图片,当调整这个noise的值的时候,也就是改变了这个数值区间,如下图所示,当两个区间出现重合的公共点,那么理论上,这个点既应该像满月,又应该像弦月,因此输出的图片就应该兼具满月和弦月的图片特点,也就生成一张介于满月和弦月之间的月相,而这个月相,在原本的输入中是不存在的,即生成了新的图片。
在这里插入图片描述
在这里插入图片描述
在下面这个图中,我们通过六个因素来描述最终的人脸形状,而这些因素不同的值则代表了不同的特性:
在这里插入图片描述
对于每个隐性参数他不会去只生成固定的一个数,而是会产生一个置信值得分布区间,这是一种连续的表达方式,通过采样,我们就可以获得许多从来没有见过的数据了。
在这里插入图片描述

总结

VAE和AE的差异在于:

  • 两者虽然都是X->Z->X’的结构,但是AE寻找的是单值映射关系,即: z = f ( x ) z=f(x) z=f(x)
  • 而VAE寻找的是分布的映射关系,即:DX→DZ

为什么会有这个差别呢?我们不妨从生成模型的角度考虑一下。既然AE的decoder做的是 Z − > X ’ Z->X’ Z>X的变换,那么理论上它也可以作为生成器使用。但这里有个问题,显然不是所有的RZ都是有效的Z。Z的边界在哪里?如何得到有效的Z,从而生成 x x x?这些都不是AE能解决的。VAE映射的是分布,而分布可以通过采样得到有效的z,从而生成相应的 x x x


三篇最新技术3D点云
什么是PCA?
51自学网,即我要自学网,自学EXCEL、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。
京ICP备13026421号-1