最近在研究编码器,阅读大量论文,历程艰辛,特此记录。如果博文有不妥之处,请告知,我一定及时修正!AE(Auto Encoder)、VAE(Variational AutoEncoder)、CVAE(Conditional AutoEncoder)解读


1、AE(Auto Encoder) 自动编码器

AE(Auto Encoder)、VAE(Variational AutoEncoder)、CVAE(Conditional AutoEncoder)解读AE分为两个部分:编码器和解码器。编码器可以是任意模型,现在一般都使用卷积神经网络。输入一张图片经过编码器得到潜变量(Latent Variable)(Latent \ Variable),类似于降维,得到这张图片的主要成分,然后再通过解码网络进行恢复出原图,所以判断编码和解码网络好坏的Loss1=MSE(inputoutput)Loss1=MSE(input,output)

那这个降维得到的潜变量代表什么意思呢?以MNIST为例, 潜变量ZZ就是一个内在的变量, 它在这张图片生成之前先决定了要生成哪一张,这就是 P(XZ)P(X|Z)。比如输入一张数字 “7”图片,写这个数字需要什么元素呢?需要一横一竖,横竖之间需要一定的角度。这些元素就是该数字的潜变量。单个潜变量元素分析是没有意义的,也是未知的,稍微改变这个潜变量或者不改变,都能得到数字 “7”,只不过会有偏移,比如粗细,胖瘦,倾斜角度。

对于AE,AE中学习的是encoderencoderdecoderdecoder,只能从一个XX,得到对应的重构XX。但是无法生成新的样本。重建一张图片是没有什么问题的,但是生成呢?AE无法无输入有效生成,我们无法去构造隐藏向量,因为我们是通过一张图片输入编码得到隐向量的。

那生成如何解决呢?这时候就出现了VAE,简单的说就在编码过程给它增加一些限制,迫使其生成的隐含向量能够粗略的遵循一个标准正态分布


2、VAE(Variational AutoEncoder)

VAE结构图:
AE(Auto Encoder)、VAE(Variational AutoEncoder)、CVAE(Conditional AutoEncoder)解读
设输入的数据为XX,其分布为P(X)P(X),这个分布是未知的,难采样,所以把P(X)P(X)改下:
P(X)=zP(X/Z)P(Z)P(X)=\sum_{z}P(X/Z)*P(Z)其中P(X/Z)P(X/Z)表示用ZZ来表示XX的模型。假设最后得到的这个潜变量ZZ服从正态分布,也就是P(Z)=N(μ,σ2)P(Z)=N(\mu,\sigma^2)。如果满足这个条件,我们就可以从满足正态分布的噪声里采样,得到新的样本。(上述公式可以看成生成便于我们理解)

那么上面的公式目的就修改成为:(下面可以看成编码来看
P(Z)=xP(Z/X)P(X)P(Z)=\sum_{x}P(Z/X)*P(X)如果我们继续假设P(Z/X)P(Z/X)为正态分布N(μ,σ2)N(\mu,\sigma^2),那么上述公式就变为:
P(Z)=xP(Z/X)P(X)=N(μ,σ)xP(X)=N(μ,σ2)P(Z)=\sum_{x}P(Z/X)*P(X)=N(\mu,\sigma)*\sum_{x}P(X)=N(\mu,\sigma^2)这就可以啦!这就是下面这张图的思路:
AE(Auto Encoder)、VAE(Variational AutoEncoder)、CVAE(Conditional AutoEncoder)解读
这里我们可以看出每一个样本,都有其专属的正态分布。那么有超多的样本,就有超多的专属分布。正态分布的两组参数(均值μ\mu,方差σ\sigma)(所以这边是个向量)。

VAEVAE里面是使用神经网络来计算均值和方差,详细可以看代码。为什么要使用均值和方差?因为:从P(ZXk)P(Z∣X_k)中采样一个ZkZ_k出来,这个P(ZXk)P(Z∣X_k)是正态分布,需要可导便于反向传播。所以利用均值方差,因为均值和方差是靠模型算出来的,这边利用了一个事实:

N(μ,σ2)N(\mu,\sigma^2)采样一个ZZ,相当与从N(0,1)N(0,1)采样一个β\beta,然后让Z=μ+βσZ=\mu+\beta*\sigma
这就是论文中所说的:重参数技巧
AE(Auto Encoder)、VAE(Variational AutoEncoder)、CVAE(Conditional AutoEncoder)解读
那下面这种图里面为什么要将P(Z/X)P(Z/X)像标准正态看齐呢?

我个人的理解是:(μ,σ2)(\mu,\sigma^2)中,μ\mu为圆点,σ\sigma为半径画空间。这里为啥要σ\sigma不为0,目的是防止了噪声为零,同时保证了模型具有生成能力。拿大牛的解释是:VAE本质上就是在常规的自编码器的基础上,对EncoderEncoder的结果(在VAE中对应着计算均值的网络)加上了“高斯噪声”,使得结果DecoderDecoder能够对噪声有鲁棒性;那另外一个EncoderEncoder(计算方差的网络)的作用呢?用来动态调节噪声的强度。
AE(Auto Encoder)、VAE(Variational AutoEncoder)、CVAE(Conditional AutoEncoder)解读
而怎么将N(μ,σ2)N(\mu,\sigma^2)逼近N(0,1)N(0,1),论文中使用的是KLDKLD散度。
这个我前面的博客介绍了:(https://blog.csdn.net/qq_33948796/article/details/88723125)
总结一下:EncoderEncoder 从图像中采样,产生 Latent spaceLatent \ space 的概率分布,the decoderthe \ decoderLatent spaceLatent \ space中采样该点,然后返回一个生成的图像。所以对于一张给定的图像来说,EncoderEncoder 产生一个分布,在Latent spaceLatent \ space 中该分布中采样出一个点出来,然后将该点输入到 DecoderDecoder 当中,产生一个图像。


3、CVAE(Conditional AutoEncoder)

上述生成是不能控制的,但是现实中很多情况往往是希望能够实现控制某个变量来实现生成某一类图像。CVAE可以实现这个:

AE(Auto Encoder)、VAE(Variational AutoEncoder)、CVAE(Conditional AutoEncoder)解读
训练的时候,输入给 EncoderEncoderDecoderDecoder 的图像对应的数字是给定的。在这种情况下,这个标签被表示成 onehot vectorone-hot \ vector


4、参考链接

相关文章: