理解变分自编码器VAE

VAE的理解
转述记录

参考文章
https://arxiv.org/pdf/1312.6114.pdf
https://dfdazac.github.io/01-vae.html
https://spaces.ac.cn/tag/vae/
https://cloud.tencent.com/developer/article/1096650

自编码模型,输入是数据X,经过网络生成中间变量,然后通过中间表示,再去生成数据X’,最终是使用重构Loss,让输入数据X与生成数据X’之间差距变小。

VAE将自编码模型做了改进,输入数据是X,然后求X下的一个高斯分布,如何求呢,使用了两个神经网络,分别预测了X下均值μ和方差σ,这样就形成了均值μ,方差σ一个高斯分布,然后正常想法是,将这个高斯分布进行随机取样作为中间表示(隐向量),【相比于自编码器,在高斯分布中随机取值呢能够使得输入相同数据,得到的中间表示形式是在一个高斯范围内的,这使得可以操纵中间表示(隐向量),通过改变一个样本的编码而产生一定程度的局部变化,导致在局部尺度上潜在空间的平滑,即产生相似的样本。】然后再去生成数据X’,但是随机取样这个行为,在网络里是不可导的,所以采用了重采样技术,通过添加服从0~1分布的高斯噪声ε,利用μ+σε来代替随机采样的行为,也就是,相当于ε是随机参数,这样网络就可以优化μ和σ这两个参数,μ+σε成为一种中间表示,(sampling from Z~N(μ, σ^2) is the same as sampling from μ + σX, X~(0,1))再去生成对应于该分布下的输出数据X’。整个网络的损失,一部分是跟自编码器一样的重构损失,目的是为了保证X和X’的一致性。另一方面是希望预测的高斯分布与标准正太分布趋近,所以求其KL损失。

KL损失公式

原始的自编码模型,会使得两个类别之间的推理表示不能生成合理结果,也可以说没有泛化性,例如:已有0和8这两个数字的编码,我们对这两个编码进行加权求值得到一个中间表示,放到解码器中,自编码模型没有办法预测合理结果。这是因为在原始自编码器中,不同数字的中间表示(隐向量)之间完全没有重叠,因此无法生成中间结果 。如下如的1和7的编码聚类结果之间没有重叠。


理解变分自编码器VAE_第1张图片
image.png

VAE模型通过使用让中间表示从X预测的高斯分布分布中采样,从而来增加中间表示的噪声(采样过程中获得的噪声),同时这增加了不同类别之间的重叠度,使得网络能够学习到几个不同类别之间生成图像的变化。

可以自己思考下下面问题

为什么要求高斯分布?

为什么要求分布要趋近正态分布?

你可能感兴趣的:(理解变分自编码器VAE)