几句话了解自编码器到变分自编码器

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/hellohellohhhhh/article/details/83041795

变分自编码器是很火的生成网络,数学推导很复杂,我喜欢望眼欲穿的感觉,一眼就看到本质,所以就记录自己的理解。

1.自编码器(AE):

自编码器分成两个部分,第一个部分是encoder,一般是多层网络,将输入的数据压缩成为一个向量,变成低维度,而该向量就称之为瓶颈。第二个部分是decoder,灌之以瓶颈,输出数据,我们称之为重建输入数据。我们的目的是要让重建数据和原数据一样,以达到压缩还原的作用。损失函数就是让重建数据和原数据距离最小就OK了。
缺点:低维度的瓶颈显然丢失了很多有用的信息,重建的数据效果并不好。

2.去噪自编码器(DAE)

这里要讲的是,我们拿到一张干净的图片,想象一下比如是干净的原始minst数据集,此时我们给原来干净的图片集加上很多噪声,灌给编码器,我们希望可以还原成干净的是图片集,以和AE相同的方式去训练,得到的网络模型便是DAE.

3.变分自编码器VAE

VAE和AE,DAE不同的是,原先编码器是映射成一个向量,现在是映射成两个向量,一个向量表示分布的平均值,另外一个表示分布的标准差,两个向量都是相同的正太分布。现在从两个向量分别采样,采样的数据灌给解码器。于是我们得到了损失函数:VAE损失函数
损失函数的前部分和其他自编码器函数一样是重建loss损失,后部分是KL散度。KL散度是衡量两个不同分布的差异,有个重要的性质是总是非负的。仅当两个分布式完全相同的时候才是0。所以后部分的作用就是控制瓶颈处的两个向量处于正态分布。(均值为0,标准差为1)。这里有一个问题,从两个分布采样数据,BP时候怎么做?所以有一个技巧叫做参数重现(Reparameterization Trick),
在这里插入图片描述
前向传播的时候,我们是通过以上公式得到z,BP的时候是让神经网络去拟合μ和σ,一般我们很难求的参数都丢给神经网络就好,就像Batch Normonization的γβ一样。
数学公式是很复杂,理论是很完美的,缺点效果还是比较模糊。

4.去耦变分自编码

我们希望瓶颈处的向量,即低维度的向量把编码过程中有用的维度保留下来,把没有用的维度用正态分布的噪声替代,可以理解为学习不同维度的特征,只是这些特征有好坏之分而已。我们仅需在loss function中加上一个β即可达到目的。
在这里插入图片描述
实验表明,VAE在重建图片时候对图片的<长度,宽度,大小,角度>四个值时候是混乱的,而去耦变分自编码器是能比较清晰的展示,最后生成的图片效果也更锐利清楚。
OK,到此就结束了。简单明了。

展开阅读全文

没有更多推荐了,返回首页