首先讲一下VE,VE全程为 auto-encoders,也就是自编码器。自编码器是指自己训练自己,即将图像进行编码后用少部分潜在变量表示,然后用解码器还原图像,这样就实现了图像特征的高度提取与压缩。应用有:压缩,降噪,分割。由于AE是固定编码,因此无法作为生成模型。
如上图所示,自编码器中的潜在表示在编码器参数不变的情况下是固定的,称为潜在变量。
而VAE(Variational auto-encoder,变分自编码器) 不再只是学习固定映射,而是学习获取输入数据的概率分布,也就是说中间量我们不再叫潜在变量,而是称为潜在空间(也称潜在分布,隐变量等),并使用 Z 来表示,用来凸显其是一个变化的量。下图 所示为VAE结构图。
AE与VAE差距如图:
VAE 的训练方式是 基于分布(distribution-wise) 的,核心思想是通过 变分推断(Variational Inference) 近似真实数据分布:
编码器(Encoder):输入数据 x,输出潜在变量 z 的分布参数(如均值 μ 和方
差 σ),也就是上图的 p(z|x) 。
解码器(Decoder):从 z 的分布中采样,重构数据 x′。
这样关键问题就是如何构建一个从 x 映射到 z 的一个后验概率的分布,而根据右下角的链式法则可以知道, 较难求解,因此考虑使用神经网络来构建
拟合
。
与
的相似度使用KL散度来表示。
将上式进行变换可得
由于 p(x) 为定值,因此想要 与
更相似(KL散度更小)等价于让ELBO更大。那么 VAE 的损失函数就是:
左侧为重构损失(原图像与生成图像的损失),让图像能够完成重构。
右侧为KL散度损失(先验匹配损失),约束潜在变量 z
的分布接近标准正态分布 N(0, I)
,避免过拟合。
因为
-
q(z∣x) 是编码器输出的近似后验分布(通常假设为高斯分布 N(μ,σ2))。
-
p(z) 是预先定义的先验分布(通常为标准正态分布 N(0,I))。
想要生成图像decode时一般会给高斯分布,因此需要在训练时将模型预测的方差和均值限制在(0,1),这样即可直接生成图像。
在预测出方差和均值后需要进行重参数化,即让z=μ+σ⊙ϵ(其中 ϵ∼N(0,I),这样可以解决随机性采样与梯度反向传播之间的矛盾。
为什么需要 ϵ
直接采样 z∼N(μ,σ2) 是一个随机操作,无法计算梯度(因为采样不可导)。引入 ϵϵ 将随机性从计算图中分离,使得梯度可以通过 μ 和 σ 反向传播。
整体流程如图所示:
VAE 直接对数据分布进行建模,并通过变分推断优化潜在空间的分布,而非像 GAN 那样直接对样本点进行对抗优化。
参考文章: