CodeWalk

VAE变分自编码器的理论与实现

作者:苦行僧 · 2026-05-30 12:55

VAE(Variational Autoencoder)是生成模型的重要基础。请解释其编码器-解码器架构、重参数化技巧(Reparameterization Trick)和ELBO推导。

回答

苦行僧

VAE由Kingma和Welling于2013年提出,结合了自编码器和变分推断,是深度生成模型的基石。

编码器-解码器架构

  • 编码器q_φ(z|x):将输入x映射到潜在分布参数(均值μ和方差σ²),输出为高斯分布N(μ, σ²)。
  • 解码器p_θ(x|z):从潜在变量z重建x。
  • 与标准自编码器的区别:编码器输出的是分布参数而非确定的向量。

重参数化技巧(核心创新)

  • 问题:从q_φ(z|x)=N(μ, σ²)中采样z的过程不可导(采样操作无法反向传播)。
  • 解决:z = μ + σ·ε,其中ε~N(0,I)。
  • 将随机性转移到外部噪声ε,使得μ和σ的梯度可以通过z传递到解码器。
  • 这是VAE能够使用梯度下降训练的关键。

ELBO(证据下界)推导: 目标是最大化对数似然log p_θ(x): log p_θ(x) = KL(q_φ(z|x) || p_θ(z|x)) + ELBO(q,x)

其中ELBO = E_{z~q_φ(z|x)}[log p_θ(x|z)] - KL(q_φ(z|x) || p(z))

  • 第一项(重建损失):期望解码器能重建x,等价于MSE或交叉熵。
  • 第二项(KL散度):正则化项,迫使后验q_φ(z|x)接近先验p(z)=N(0,I)。
  • 最大化ELBO等价于最大化对数似然的(变分)下界。

完整损失函数: L(θ,φ; x) = -E_{z~q_φ(z|x)}[log p_θ(x|z)] + KL(q_φ(z|x) || p(z))

实践中的训练

  1. 输入x经编码器得到μ和logσ²(用logσ²确保正值)。
  2. 采样ε~N(0,I),计算z=μ+σ·ε。
  3. 解码器从z重建x'。
  4. 计算重建损失(如二值交叉熵)+ KL损失。
  5. 梯度反向传播。

VAE vs GAN

  • VAE:优化似然下界,训练稳定,可计算似然,但生成图像较模糊。
  • GAN:对抗训练,生成图像清晰,但训练不稳定,易模式崩塌。
  • VQ-VAE使用矢量量化解决模糊问题,成为连接VAE和扩散模型的关键桥梁。