变分自编码器 | VAE (2026)¶
变分自编码器(Variational Autoencoder,VAE)是一种无监督的生成式模型。它沿用了自编码器(Autoencoder,AE)的 encoder-decoder 架构,但在概率视角下将“编码”从确定性的低维向量,变成了对隐变量后验分布的近似,并具备可以从先验中采样生成新样本的生成能力。
分类¶
无监督学习方法 概率模型 参数化模型 生成学习方法
从 AE 到 VAE¶
自编码器的基本形式很直观:encoder 将输入 \(x\) 映射为隐向量 \(z\),decoder 再从 \(z\) 重建 \(x\)
训练目标通常是最小化重建误差,例如均方误差或二元交叉熵
但 AE 学习到的隐空间没有明确的概率结构。它只是把样本映射到某些点上,却没有定义“隐空间应该服从什么分布”。因此如果直接从隐空间随机采样一个 \(z\),再送入 decoder,得到的结果往往没有意义
VAE 的区别是:不再把输入映射为一个确定向量,而是映射为一个分布。具体地,VAE 假设数据由隐变量生成。这也可以视为概率图模型上的描述观测数据的因果关系(causal)
其中 \(p(z)\) 是先验分布,通常取标准正态分布
而 encoder 不再直接输出 z,而是输出近似后验分布 \(q_\phi(z|x)\) 的参数。最常见的情形是
于是 VAE 的“编码”变成了学习一个分布,“解码”则是在给定隐变量 z 的条件下生成样本
概率模型与目标¶
从生成模型视角看,我们希望最大化数据边际似然
对应地,训练目标就是最大化对数似然
但这里有两个困难:
积分 \(\int p_\theta(x|z) p(z) dz\) 通常不可解,潜在变量 \(z\) 常常是巨大维数
真实后验 pθ(z|x) 通常也不可解
因此 VAE 引入变分推断,用一个可学习的分布 \(q_\phi(z|x)\) 去近似真实后验 \(p_\theta(z|x)\),并通过优化一个下界来间接最大化 \(log p_\theta(x)\)
这个下界就是 ELBO(Evidence Lower Bound)
ELBO 推导¶
从对数边际似然出发:
由 Jensen 不等式有: $$ log \mathbb{E}_q\left[ \frac{p_θ(x, z)}{q_φ(z|x)} \right] \geq \mathbb{E}_q\left[ log\frac{ p_θ(x, z)}{q_φ(z|x)} \right] $$
于是得到: $$ log p_θ(x) \geq \mathbb{E}_{q_φ(z|x)}\left[ log \frac{p_θ(x, z)}{q_φ(z|x)} \right] = L(x; θ, φ) $$
其中 L(x; θ, φ) 即为 ELBO
进一步展开联合分布 \(p_θ(x, z) = p_θ(x|z) p(z)\),有:
这就是 VAE 最核心的目标函数
ELBO:统一重建误差与潜在近似误差¶
ELBO 的第一项:
表示在近似后验下,隐变量 \(z\) 能够多好地重建原始样本 \(x\)。最大化它,等价于最小化重建误差
第二项:
则要求近似后验 \(q_φ(z|x)\) 不要偏离先验 \(p(z)\) 太远。它可以看作潜在空间上的正则项,也可以理解为潜在近似误差
于是最大化 ELBO:
等价于:
等价于最小化损失负 ELBO,它把两个目标统一在一个损失函数中,形式上很优美
只有重建误差时,模型会倾向于把每个样本编码成孤立的点,隐空间没有连续性,采样没有意义
只有潜在近似误差时,模型会忽略输入信息,把后验都压向先验,重建效果很差
ELBO 同时约束两者:既要保留足够信息用于重建,又要让隐空间分布接近先验,便于生成和采样。
事实上通过边际似然完全分解可以得到 ELBO 和 KL 散度
因为 KL 散度非负,所以 ELBO 确实是 \(log p_θ(x)\) 的下界。最大化 ELBO,一方面提升数据对数似然的下界,另一方面也在最小化近似后验与真实后验之间的 KL 散度
重参数技巧¶
ELBO 中第一项需要从 \(q_φ(z|x)\) 中采样 \(z\),再计算 \(log p_θ(x|z)\)
但采样操作本身是随机的,梯度无法穿过这个随机节点反传到 encoder 参数 \(φ\)。在工程上对反向传播和随机梯度下降都不友好
VAE 的做法是另设一个变量,以高斯分布为例:
我们可以把采样拆成两部分:先从一个固定的标准正态分布中采样噪声,再做确定变换
其中 ⊙ 表示逐元素相乘
这样一来,随机性被转移到了变量 \(ε\) 上,而 \(z\) 对 \(μ\) 和 \(σ\) 是可导的。于是梯度可以正常传播更新
实际实现时,为了保证方差为正,encoder 通常输出 \(log σ^2\),然后令:
在高斯先验 \(p(z) = N(0, I)\) 下,KL 项有闭式解:
重建项则常用 Monte Carlo 估计:
其中 \(z^(l)\) 通过重参数技巧采样得到。这样整个 VAE 就可以端到端训练了
生成与采样:VAE 的好处¶
AE 的 encoder 是确定性的:
它只告诉我们在隐空间里“这个样本在哪里”,却没有定义隐空间的概率分布。因此从 AE 的隐空间随意采样,通常不能生成合理的新样本。
VAE 则显式定义了先验:
并通过 KL 项让 \(q_φ(z|x)\) 向先验靠拢。训练完成后,隐空间不再是一堆无结构的点,而是一个接近先验的连续概率空间
于是生成一个新样本可以这样做:
先从标准正态分布中采样一个隐变量,再送入 decoder 生成样本
VAE 还能在隐空间中进行插值:将两个样本编码后的均值 \(μ_1\)、\(μ_2\) 线性插值,再解码,往往能得到平滑过渡的生成结果
从概率角度看,VAE 优化的是边际似然 \(log p_θ(x)\) 的下界,因此从概率图模型角度看是在学习一个生成模型:
虽然这个积分通常无法直接计算,但通过最大化 ELBO,我们仍然可以训练出一个能够近似该生成分布的模型