VAE:变分自编码器

VAE 是一种带概率约束的自编码器,它把数据编码成潜在分布,再从这个分布采样并解码生成数据。

VAE 在深度学习中指 Variational Autoencoder,变分自编码器。它是一类生成模型,可以学习数据的潜在表示,并从中生成新的样本。

普通自编码器 Autoencoder 的结构是: 输入 x → 编码器 Encoder → 潜变量 z → 解码器 Decoder → 重建 x' 目标是让输出 x' 尽量接近输入 x。

而 VAE 的区别在于: 普通自编码器把输入压缩成一个确定的向量 z;VAE 不直接输出一个固定的 z,而是输出一个概率分布。

通常是高斯分布:

Encoder(x) → μ, σ
z ~ N(μ, σ²)
Decoder(z) → x'

也就是说,VAE 学到的是: 某个输入样本在潜在空间中大概位于哪里,以及它的不确定性有多大。


VAE 的核心思想

VAE 希望学习一个潜在变量模型:z→xz \rightarrow x

也就是认为数据 x 是由某个隐藏变量 z 生成出来的。

例如在人脸生成中:z 可能表示脸型, 表情, 类型, 发型, 姿态, 光照…

VAE 的目标是学习:p(x∣z)p(x \mid z), 即给定潜变量 z,如何生成数据 x。

但真实的后验分布:p(z∣x)p(z \mid x) 通常很难直接求,所以 VAE 用一个神经网络近似它:q(z∣x)q(z \mid x)

这就是”Variational”的来源:用变分推断近似难求的后验分布。

VAE 的损失函数

VAE 的损失通常由两部分组成:Loss = Reconstruction Loss + KL Divergence

第一部分:重建损失

衡量生成结果 x' 和原始输入 x 有多像。比如 MSE(x,x′)\text{MSE}(x, x'), 或者二元交叉熵。

它的作用是:让模型尽量重建原始数据。

第二部分:KL散度

VAE 会让编码器输出的分布接近标准正态分布:q(z∣x)≈N(0,I)q(z \mid x) \approx \mathcal{N}(0, I)

q(z∣x)≈p(z∣x)q(z \mid x) \approx p(z \mid x) , 这里的 q 就是近似后验分布。

KL 散度衡量两个分布之间的差异:DKL(q(z∣x)∥p(z))D_{KL}(q(z \mid x) \| p(z))

其中通常 p(z)=N(0,I)p(z) = \mathcal{N}(0, I)

它的作用是:让潜在空间更加连续、规则,方便采样和生成。

为什么需要 KL散度?

如果没有 KL 散度,VAE 会退化得更像普通自编码器。 这样虽然重建效果可能不错,但潜在空间可能很乱:

  • 某些区域有样本
  • 某些区域完全没意义
  • 随机采样 z 可能生成垃圾结果

加上 KL 散度后,VAE 会把潜变量压到一个规则的分布里,例如标准正态分布。也就是说,VAE 不只是压缩数据,还能生成数据。

重参数化技巧 Reparameterization Trick

VAE 中有一个关键问题:z∼N(μ,σ2)z \sim \mathcal{N}(\mu, \sigma^2),采样操作本身不可直接反向传播。

所以使用重参数化技巧:ε∼N(0,I)\varepsilon \sim \mathcal{N}(0, I),z=μ+σ⋅εz = \mu + \sigma \cdot \varepsilon

这样随机性来自 ε\varepsilon,而 μ\mu 和 σ\sigma 仍然可以通过梯度下降学习。

类比一下

假设 z 表示”猫的抽象特征”:z = 橘猫、侧脸、坐姿、室内光线

那么 p(x∣z)p(x\mid z) 表示:在这些隐藏特征确定的情况下,具体图片可能长什么样。

即使 z 固定,图片仍然可以有很多细节变化:所以 p(x∣z)p(x\mid z) 不是单个图片,而是一组可能图片的概率分布。