天天看点

adobe media encoder_Variational Auto-Encoder(变分自编码)

Variational Auto-Encoder(变分自编码)

记录一下从苏大神那里学习到的笔记,自己做一个概要

https://spaces.ac.cn/archives/5253

首先,VAE是一个生成模型,这似乎和我们最初见到的Auto-Encoder的直观理解是矛盾的,Auto-Encoder是利用神经网络来做特征提取或者特征降维的,可以将encoder的结果用于后续的其他任务。但是,VAE是一个生成模型,它的目的希望拟合一个映射,从一个latent space,拟合真实的样本空间,它学习的是一个分布之间的变化。

如果用Z表示隐空间,我们希望decoder学系到一个分布的映射,即

adobe media encoder_Variational Auto-Encoder(变分自编码)

假设Z服从正态分布,这样我们既可以从

adobe media encoder_Variational Auto-Encoder(变分自编码)

中采样一个

adobe media encoder_Variational Auto-Encoder(变分自编码)

,来生成对应的

adobe media encoder_Variational Auto-Encoder(变分自编码)

,即对应了VAE是一个生成模型。

那么如何得到

adobe media encoder_Variational Auto-Encoder(变分自编码)

呢?神经网络的时代,就是直接用神经网络来拟合,具体就是通过神经网络来计算出Z分布的均值和方差。

其实如果按照下图理解是很不科学的

adobe media encoder_Variational Auto-Encoder(变分自编码)

我们通过一个encoder计算得到了一系列样本均值和方差,得到一个正态分布,然后从正态分布中采样,计算它decoder和原始样本的重构误差,这样合理吗?如何知道我们采样的

adobe media encoder_Variational Auto-Encoder(变分自编码)

就是和原来的

adobe media encoder_Variational Auto-Encoder(变分自编码)

是对应的呢?不能!!!那么这样优化显然是不合理的。

文中指出,我们其实并没有使用

adobe media encoder_Variational Auto-Encoder(变分自编码)

是正态分布的假设,而是使用

adobe media encoder_Variational Auto-Encoder(变分自编码)

是正态分布的假设(后验分布)。具体地,就是假设每一个样本都存在一个专属的正态分布

adobe media encoder_Variational Auto-Encoder(变分自编码)

,注意这里所说的是后验分布,即对应的是已知

adobe media encoder_Variational Auto-Encoder(变分自编码)

之后,Z的分布,不是每一个

adobe media encoder_Variational Auto-Encoder(变分自编码)

都存才在一个分布。我们希望decoder能够从Z中采样,然后还原

adobe media encoder_Variational Auto-Encoder(变分自编码)

,因为前面提到我们学习的

adobe media encoder_Variational Auto-Encoder(变分自编码)

是专属

adobe media encoder_Variational Auto-Encoder(变分自编码)

的分布,那么我们既可以确定这个分布采样出的

adobe media encoder_Variational Auto-Encoder(变分自编码)

是要还原到

adobe media encoder_Variational Auto-Encoder(变分自编码)

中去的。

如果按照下图的理解,就可以说通,每次采样得到的

adobe media encoder_Variational Auto-Encoder(变分自编码)

可以放心和它自己专属的X求重构损失了。

adobe media encoder_Variational Auto-Encoder(变分自编码)

有了上面的理解,我们再来看损失函数,首先真是样本

adobe media encoder_Variational Auto-Encoder(变分自编码)

和生成样本

adobe media encoder_Variational Auto-Encoder(变分自编码)

的MSE不予讨论。既然我们使用神经网络拟合了

adobe media encoder_Variational Auto-Encoder(变分自编码)

分布的均值和方差,那么就需要引入这两个损失。来看看VAE是如何保证Z是一个正态分布的,那就是让它向标准正态分布看齐,根据定义

adobe media encoder_Variational Auto-Encoder(变分自编码)

这里即假设了

adobe media encoder_Variational Auto-Encoder(变分自编码)

服从正态分布,同时推到出$Z$服从正态分布的。然后,就可以放心地从

adobe media encoder_Variational Auto-Encoder(变分自编码)

中采样来生成图像了。

如果要让生成的

adobe media encoder_Variational Auto-Encoder(变分自编码)

服从正态分布,那么计算

adobe media encoder_Variational Auto-Encoder(变分自编码)

的KL散度,可以的到

adobe media encoder_Variational Auto-Encoder(变分自编码)

这样就得到了两部分的损失函数。

关于重采样:在生成模型中,我们需要从正态分布Z中采样做一个采样来恢复X,但是这个Z分布的均值和方差都是通过模型计算出来的,我们需要靠这个过程来反向优化均值和方差的模型,这个“采样操作”不可导,但是其结果可导。

adobe media encoder_Variational Auto-Encoder(变分自编码)

那么从

adobe media encoder_Variational Auto-Encoder(变分自编码)

中采样一个Z,相当于从

adobe media encoder_Variational Auto-Encoder(变分自编码)

中采样一个

adobe media encoder_Variational Auto-Encoder(变分自编码)

,然后令

adobe media encoder_Variational Auto-Encoder(变分自编码)

,这样我们相当于从一个正态分布中进行采样,实际采样的操作就不参与到梯度下降的过程了,改为采样的结果直接参与,这样就可以进行训练了。

关于变分:因为这里应用了KL散度,所以其实在推导过程中用到了变分的思想。

总结:VAE使用神经网络来拟合latent space的均值和方差,给encoder部分计算均值的部分添加了噪声(方差部分),使decoder能够对噪声鲁棒,而KL散度则是给encoder添加一个正则项,是encoder能够拟合出的东西具有零均值,同时保持一定的方差,符合正态分布。encoder计算方差的部分,相当于动态地调节噪声强度,即当重构误差大于kl loss时,会减小噪声强度,使拟合变得容易(kl loss增加),当重构误差小与kl loss,就会增大噪声,使拟合困难(kl loss减小),这时decoder就得想办法提升生成能力。 重构过程是希望没有噪声的,而kl loss,希望有高斯噪声的(迫使Z符合高斯分布),这两者是相互对立的,这就和GAN中的生成对抗很相似了,只不过这个过程更加高明,是混合进行的。效果另说,但是模型很漂亮。