1. 引言:从自编码器(AE)说起,AE是如何工作的?
要理解 VAE,我们必须先理解它的前身——自编码器(Autoencoder, AE)。自编码器是一种无监督学习模型,其核心目标是数据压缩与重建。它的架构由两部分组成:
- 编码器(Encoder): 接收高维的输入数据 $x$(比如一张图片),将其压缩映射到一个低维的潜在空间(Latent Space),得到一个潜在向量(Latent Vector)$z$。
- 解码器(Decoder): 接收这个低维向量 $z$,尝试将其还原回原始的高维数据 $\tilde{x}$。
AE 是如何做到的?
AE 的训练目标非常简单:最小化输入 $x$ 和输出 $\tilde{x}$ 之间的重构误差(Reconstruction Error)。它通常使用均方误差(MSE)或交叉熵作为损失函数。当训练完成后,AE 的编码器就学会了如何提取数据中最重要的特征,而解码器则学会了如何从这些特征中重构数据。
2. 传统 AE 的致命缺陷:为什么 AE 不能用来“生成”?
虽然 AE 在数据压缩和特征提取上表现出色,但如果你想用它来生成全新的图像(例如从潜在空间中随机抽取一个向量 $z$,让解码器生成一张没见过的逼真人脸),AE 会彻底失败。
为什么 AE 做不到?它有什么问题?
- 死记硬背的确定性映射: 传统 AE 的编码器是一个确定性(Deterministic)的函数。它将训练集里的每一张图片死死地映射到潜在空间中的一个固定点。模型只是在“记住”这些点如何还原,而不是在学习数据的内在生成规律。
- 潜空间缺乏正则化(离散与空洞): 传统 AE 的训练准则仅仅是最大化重构能力,这不足以让模型学习到有用的生成表示。如果缺乏正则化,AE 很容易“作弊”:它会构造一个尺度任意放大、方差极高的潜在空间。在这个空间里,训练数据映射的点彼此之间离得非常远,点与点之间充满了巨大的“空洞”。
- 随机采样得到无意义的乱码: 如果你试图从 AE 的潜在空间中随机抽取一个点 $z$ 送入解码器,由于这个点极大概率落在了“空洞”里(即模型在训练时从未见过的区域),解码器根本不知道该如何处理它,最终只能输出毫无意义的乱码或模糊的噪声。
简而言之:传统 AE 没有对潜在空间的概率分布进行任何约束,导致其潜在空间是不连续的,无法用于随机采样和插值生成。
3. 破局之道:VAE 相对于 AE 的优点与核心思想
为什么 VAE 可以做到生成?它比 AE 强在哪里?
变分自编码器(VAE)巧妙地将深度学习(神经网络)与贝叶斯概率图模型结合在了一起。它解决 AE 缺陷的核心思想是:不再将输入映射为潜空间中的一个“固定的点”,而是将其映射为一个“概率分布”(通常是高斯分布)。
VAE 相对于 AE 的核心优点:
- 引入连续的概率分布: VAE 的编码器输出的不再是固定的向量 $z$,而是高斯分布的参数(均值 $\mu$ 和方差 $\sigma^2$)。这意味着每一张图片被映射成了潜空间中的一个“势力范围”。
- 强大的正则化(KL散度): VAE 强制要求这些后验分布去逼近一个标准的先验分布(通常是标准正态分布 $\mathcal{N}(0, I)$)。这种约束迫使不同的数据点在潜空间中紧密且平滑地排列在一起,消除了“空洞”。
- 完美的插值与采样能力: 由于潜空间被标准正态分布平滑地填满,我们可以直接从 $\mathcal{N}(0, I)$ 中随机采样 $z$,解码器也能将其映射为一张有意义且逼真的全新图像。此外,在两个潜向量之间进行线性插值,还能生成语义上平滑过渡的图像。
4. VAE 的硬核推导:原始论文中的关键点与公式
让我们深入 VAE 原始论文《Auto-Encoding Variational Bayes》,看看这一过程是如何通过严谨的数学推导实现的。
4.1 问题的设定与不可解的真实后验
假设我们的数据 $x$ 是由一些连续的、未观测到的潜在变量 $z$ 生成的。生成过程分为两步:
- 从先验分布 $p_{\theta^*}(z)$ 中生成 $z$;
- 从条件分布 $p_{\theta^*}(x|z)$ 中生成 $x$。
我们希望最大化数据的边际似然 $p_\theta(x)$。但这里遇到了一个致命问题:为了计算 $p_\theta(x) = \int p_\theta(z)p_\theta(x|z)dz$,我们需要积分掉所有可能的 $z$,这个积分在面对复杂的非线性神经网络时是完全不可解(Intractable)的。同时,真实的后验分布 $p_\theta(z|x) = \frac{p_\theta(x|z)p_\theta(z)}{p_\theta(x)}$ 也是不可解的,导致传统的 EM 算法无法使用。
4.2 引入变分推理与变分下界(ELBO)
为了解决不可解的问题,VAE 引入了一个参数化的推断模型(识别模型/编码器) $q_\phi(z|x)$,用它来近似那个不可解的真实后验 $p_\theta(z|x)$。
现在,我们可以对单个数据点 $x^{(i)}$ 的对数似然进行分解:
$$ \log p_\theta(x^{(i)}) = D_{KL}(q_\phi(z|x^{(i)}) || p_\theta(z|x^{(i)})) + \mathcal{L}(\theta, \phi; x^{(i)}) $$公式右侧的第一项是近似后验与真实后验之间的 KL 散度(Kullback-Leibler Divergence)。因为 KL 散度永远大于等于 0,所以第二项 $\mathcal{L}(\theta, \phi; x^{(i)})$ 就构成了数据对数似然的一个严格下界(Lower Bound),在 VAE 中我们称之为 ELBO (Evidence Lower Bound)。
由于我们无法直接最大化似然函数,VAE 的目标转为:最大化这个变分下界(ELBO) $\mathcal{L}$。
ELBO的公式可以写为:
$$ \mathcal{L}(\theta, \phi; x^{(i)}) = -D_{KL}(q_\phi(z|x^{(i)}) || p_\theta(z)) + \mathbb{E}_{q_\phi(z|x^{(i)})}[\log p_\theta(x^{(i)}|z)] $$仔细观察这个公式,它完美地解释了 VAE 的双重目标:
- 重构误差(Reconstruction Error): $\mathbb{E}_{q_\phi(z|x^{(i)})}[\log p_\theta(x^{(i)}|z)]$。这要求解码器 $p_\theta(x|z)$ 能够尽可能好地从潜变量 $z$ 中复原出数据 $x$(与传统 AE 的目标一致)。
- 正则化项(Regularization): $-D_{KL}(q_\phi(z|x^{(i)}) || p_\theta(z))$。这要求编码器输出的近似后验 $q_\phi(z|x)$ 必须尽可能接近先验分布 $p_\theta(z)$(通常是 $\mathcal{N}(0, I)$)。正是这个项,彻底解决了传统 AE 潜空间随意发散、存在空洞的致命缺陷。
5. VAE的绝对核心魔法:重参数化技巧 (Reparameterization Trick)
到目前为止,理论很完美,但在工程实现时我们遇到了一个巨大的障碍:我们需要通过反向传播(Backpropagation)来同时优化编码器参数 $\phi$ 和解码器参数 $\theta$。然而,在计算重构误差期望时,潜变量 $z$ 是从分布 $q_\phi(z|x)$ 中随机采样出来的(即 $z \sim q_\phi(z|x)$)。然而随机采样这个操作是不可导的,我们无法将梯度 $∇_\phi$ 穿过这个随机采样的节点传递给编码器神经网络。
如果用朴素的蒙特卡洛梯度估计器(如 Score Function Estimator / REINFORCE),会导致方差极大,模型根本无法训练。
重参数化技巧(Reparameterization Trick)的引入
为了让梯度能够顺利反向传播,Kingma 等人提出了极其巧妙的转换:我们将随机性剥离出来,作为一个独立的输入。
在 VAE 中,我们假设 $q_\phi(z|x)$ 是一个对角协方差的多变量高斯分布。 我们不再直接从 $\mathcal{N}(\mu, \sigma^2)$ 中采样 $z$。相反,我们先从一个标准正态分布中采样一个辅助噪声变量 $\epsilon \sim \mathcal{N}(0, I)$,然后再通过一个确定性的连续函数对其进行变换:
$$ z = g_\phi(x, \epsilon) = \mu + \sigma \odot \epsilon $$注:这里的 $\mu$ 和 $\sigma$ 都是由编码器神经网络根据 $x$ 计算出的确定性输出,$\odot$ 表示逐元素相乘。
通过这个等价替换,随机性被完全转移到了与参数 $\phi$ 无关的辅助变量 $\epsilon$ 上。现在的 $z$ 成为了关于 $\mu$ 和 $\sigma$ 的确定性且可导的函数。梯度现在可以像走高速公路一样,无障碍地穿过 $\mu$ 和 $\sigma$,一直反向传播到编码器神经网络的权重上,这彻底移除了梯度计算的信息瓶颈。
6. SGVB 估计器与最终优化的目标函数
有了重参数化技巧,原始论文提出了随机梯度变分贝叶斯估计器(Stochastic Gradient Variational Bayes, SGVB)。
我们用重参数化的单次蒙特卡洛采样来近似期望,ELBO 的估计器可以写为:
$$ \tilde{\mathcal{L}}_B(\theta, \phi; x^{(i)}) = -D_{KL}(q_\phi(z|x^{(i)}) || p_\theta(z)) + \frac{1}{L} \sum_{l=1}^L \log p_\theta(x^{(i)}|z^{(i,l)}) $$其中,$z^{(i,l)} = \mu^{(i)} + \sigma^{(i)} \odot \epsilon^{(l)}$,且 $\epsilon^{(l)} \sim \mathcal{N}(0, I)$。在实际训练的每一个 Minibatch 中,对于每个样本通常只采一次样($L=1$)就足够让 SGD 收敛了。
最后,由于先验 $p_\theta(z)$ 和后验 $q_\phi(z|x)$ 都是高斯分布,那个一直困扰我们的 KL 散度项可以直接求出解析解(Closed-form analytical solution)。
对于特征维度为 $J$ 的潜空间,KL 散度的解析解公式为:
$$ -D_{KL}(q_\phi(z) || p_\theta(z)) = \frac{1}{2} \sum_{j=1}^J \left( 1 + \log((\sigma_j)^2) - (\mu_j)^2 - (\sigma_j)^2 \right) $$将解析解和重构误差结合,我们就得到了 VAE 最终实际用于代码训练的损失函数(单样本):
$$ \mathcal{L}(\theta, \phi; x^{(i)}) \simeq \frac{1}{2} \sum_{j=1}^J \left( 1 + \log((\sigma_j^{(i)})^2) - (\mu_j^{(i)})^2 - (\sigma_j^{(i)})^2 \right) + \log p_\theta(x^{(i)} | z^{(i)}) $$(其中 $z^{(i)} = \mu^{(i)} + \sigma^{(i)} \odot \epsilon$, 这是一个可导的重构误差项)
7. 结语
从传统 AE 的确定性压缩,到 VAE 的概率性推断,变分自编码器完成了一次生成模型的伟大跨越。
- AE 失败于: 缺乏对潜空间分布的宏观约束,任由模型死记硬背,导致潜空间充满不可解的空洞。
- VAE 成功于: 引入变分下界(ELBO)将生成目标严谨地转化为可优化的数学问题;使用 KL散度 强迫潜空间紧凑排列形成平滑的连续空间;最重要的是,发明了重参数化技巧(Reparameterization Trick),打通了随机采样节点的反向传播血脉。
正是这些数学设计,使得 VAE 具备了极其强大的数据表示学习和生成能力,也为后来更为强大的扩散模型(如 LDM,实际上也是将 Diffusion 过程应用于 VAE 提取的潜空间中)奠定了坚实的基础。