变分自编码器(Variational Autoencoders,VAE)原理

1. 简介

变分自编码器 (Variational Autoencoder, VAE) 是一种生成模型 (Generative Model),由 Kingma 和 Welling 于 2013 年提出。它巧妙地结合了深度学习(神经网络的拟合能力)和贝叶斯推断(概率统计理论)。

为什么我们需要 VAE?

普通的自编码器 (AE) 虽然能很好地进行数据压缩和特征提取,但在生成新数据方面存在缺陷:

  • AE 的局限性:AE 将输入映射为隐空间中一个固定的点(确定性映射)。其隐空间往往是不连续的(过拟合),这意味着如果你在隐空间中随机取一个点进行解码,生成的图像很可能是毫无意义的噪声。
  • VAE 的改进:VAE 将输入映射为隐空间中的一个概率分布(通常是高斯分布,概率性映射)。

核心思想

VAE 不再让编码器输出一个具体的向量 zz ,而是输出该向量服从的分布参数(均值 μ\mu 和方差 σ2\sigma^2 )。

Input xEncoderDistributions (μ,σ)SamplezDecoderReconstruction x^\text{Input } x \xrightarrow{\text{Encoder}} \text{Distributions } (\mu, \sigma) \xrightarrow{\text{Sample}} z \xrightarrow{\text{Decoder}} \text{Reconstruction } \hat{x}

这种做法带来了两个核心优势:

  • 连续性 (Continuity):隐空间中相近的点解码出的结果也是相近的。
  • 完备性 (Completeness):隐空间中的点都能解码出有意义的结果(通过 KL 散度约束实现)。

这使得 VAE 具备了生成能力:我们可以直接从标准正态分布 N(0,1)\mathcal{N}(0,1) 中采样 zz ,然后通过解码器生成全新的样本。

2. AE

AE就是一个编码器和一个解码器,编码器将输入映射到隐空间,解码器将隐空间映射回输入空间。

graph RL
    B -->|"decoder(Generative Model)"| A
    A((x)) -->|"encoder(Inference Model)"| B((z))

3. ELBO (Evidence Lower Bound)

graph RL
B((z)) -->|"$$p(x|z)$$"| A((x))
A((x)) -->|"$$q_\phi(z|x)$$"| B((z))

如图的AE模型, ϕ\phi 是推断网络(Encoder)参数。

我们的优化目标是让样本在模型中的 似然(Likelihood) p(x)p(x) 极大化,而由于单调性,等价于让 证据(Evidence) logp(x)\log{p(x)} 极大化。

一般来说 p(x) 有两种求法。一是通过联合概率的边缘化,

p(x)=p(x,z) ⁣dzp(x) = \int p(x,z) \,\mathop{}\!\mathrm{d}z

二是利用贝叶斯公式,

p(x)=p(x,z)p(zx)p(x) = \frac{p(x,z)}{p(z|x)}

困难在于:

  1. 边缘化困难:对z积分在高维空间难以计算
  2. 后验未知:真实后验 p(zx)=p(x,z)/p(x)p(z|x) = p(x,z)/p(x) 难以求得

所以我们需要一个代理目标,通过最大化代理目标来最大化优化目标。

这个代理目标就是 ELBO。ELBO的定义为

Eqϕ(zx)[logp(x,z)qϕ(zx)]\mathbb{E}_{q_\phi(z|x)}[\log{\frac{p(x,z)}{q_\phi(z|x)}}]

要证明所谓ELBO确实是下界,这里给出两种方式。一是根据Jensen不等式,

logp(x)=logp(x,z)qϕ(zx)qϕ(zx) ⁣dz=logEqϕ(zx)[p(x,z)qϕ(zx)](定义)Eqϕ(zx)[logp(x,z)qϕ(zx)](不等式)=ELBO(定义)\begin{aligned} \log{p(x)} &= \log{\int{\frac{p(x,z)q_\phi(z|x)}{q_\phi(z|x)} \,\mathop{}\!\mathrm{d}z}} \\ &= \log{\mathbb{E}_{q_\phi(z|x)}[\frac{p(x,z)}{q_\phi(z|x)}]} && \text{(定义)} \\ &\ge \mathbb{E}_{q_\phi(z|x)}[\log{\frac{p(x,z)}{q_\phi(z|x)}}] && \text{(不等式)} \\ &= \text{ELBO} && \text{(定义)} \end{aligned}

二是通过度量分布接近程度的 KL散度 DKL(pq)=Ep(x)[logp(x)q(x)]0D_{\text{KL}}(p||q) = \mathbb{E}_{p(x)}[\log{\frac{p(x)}{q(x)}}] \ge 0 ,如下

logp(x)=logp(x)qϕ(zx) ⁣dz(乘以1)=logp(x)qϕ(zx) ⁣dz(交换)=Eqϕ(zx)[logp(x)](定义)=Eqϕ(zx)[logp(x,z)p(zx)](贝叶斯)=Eqϕ(zx)[logp(x,z)qϕ(zx)+logqϕ(zx)p(zx)](乘以1)=ELBO+DKL(qϕ(zx)p(zx))(定义)ELBO\begin{aligned} \log{p(x)} &= \log{p(x)}\int{q_\phi(z|x) \,\mathop{}\!\mathrm{d}z} && \text{(乘以1)} \\ &= \int{\log{p(x)}q_\phi(z|x) \,\mathop{}\!\mathrm{d}z} && \text{(交换)} \\ &= \mathbb{E}_{q_\phi(z|x)}[\log{p(x)}] && \text{(定义)} \\ &= \mathbb{E}_{q_\phi(z|x)}[\log{\frac{p(x,z)}{p(z|x)}}] && \text{(贝叶斯)} \\ &= \mathbb{E}_{q_\phi(z|x)}[\log{\frac{p(x,z)}{q_\phi(z|x)}} + \log{\frac{q_\phi(z|x)}{p(z|x)}}] && \text{(乘以1)} \\ &= \text{ELBO} + D_{\text{KL}}(q_\phi(z|x)||p(z|x)) && \text{(定义)} \\ &\ge \text{ELBO} \end{aligned}

4. VAE

graph RL
B((z)) -->|"$$p_\theta(x|z)$$"| A((x))
A((x)) -->|"$$q_\phi(z|x)$$"| B((z))

ϕ\phi 是推断网络(Encoder)参数, θ\theta 是生成网络(Decoder)参数,
变分

arg minθ,ϕL(θ,ϕ;x)<=>arg maxθ,ϕELBO\argmin_{\theta,\phi}{\mathcal{L}(\theta,\phi;x)} <=> \argmax_{\theta,\phi}{\text{ELBO}}

ELBO=Eqϕ(zx)[logpθ(x,z)qϕ(zx)]=Eqϕ(zx)[logpθ(xz)p(z)qϕ(zx)]=Eqϕ(zx)[logpθ(xz)]DKL(qϕ(zx)p(z))\begin{aligned} \text{ELBO} &= \mathbb{E}_{q_\phi(z|x)}[\log{\frac{p_{\theta}(x,z)}{q_\phi(z|x)}}] \\ &= \mathbb{E}_{q_\phi(z|x)}[\log{\frac{p_{\theta}(x|z)p(z)}{q_\phi(z|x)}}] \\ &= \mathbb{E}_{q_\phi(z|x)}[\log{p_{\theta}(x|z)}] - D_{\text{KL}}(q_\phi(z|x)||p(z)) \end{aligned}

第一项是 Reconstruction Loss (重构误差) 的相反数,第二项是 Regularization Term (正则项)。最大化 ELBO 等价于 最小化 (重构误差 + KL散度)。

假定 KL散度项的两个分布服从正态分布,

qϕ(zx)N(μϕ(x),σϕ2(x)I)p(z)N(0,1)q_\phi(z|x) \sim \mathcal{N}(\mu_\phi(x), \sigma^2_\phi(x)I) \\ p(z) \sim \mathcal{N}(0,1)

通过 蒙特卡洛法 求期望项;通过 重参数化qϕ(zx)q_\phi(z|x) 采样,使得梯度可以传导回 μϕ\mu_\phiσϕ\sigma_\phi (因为直接从 N(μϕ(x),σϕ2(x)I)\mathcal{N}(\mu_\phi(x), \sigma^2_\phi(x)I) 采样 zz 是一个随机过程,这个操作是不可导的)

z=μϕ(x)+σϕ(x)ε     where εN(0,1)z=\mu_\phi(x)+\sigma_\phi(x) \varepsilon ~~~~~where ~ \varepsilon \sim \mathcal{N}(0,1)

因为 qqpp 都是正态分布,可以推导出 KL 散度解析解:

DKL=12(1+log(σϕ2)μϕ2σϕ2)D_{\text{KL}} = -\frac{1}{2} \sum (1 + \log(\sigma_\phi^2) - \mu_\phi^2 - \sigma_\phi^2)

损失函数的直观解释:

  • 第一项 (Reconstruction): 希望解码出来的 x^\hat{x} 和输入 xx 越像越好(对于高斯分布假设,这等价于 MSE Loss。另外,伯努利分布对应 Cross Entropy)。
  • 第二项 (KL Divergence): 希望隐变量 zz 的分布尽量接近标准正态分布 N(0,1)\mathcal{N}(0,1) ,防止模型“死记硬背”将每个数据点映射到离散的空间点,从而保证生成空间的连续性。

损失函数两项的对抗:

  • 只重构不 KL: 模型退化为普通 AE,隐空间过拟合,不连续,无法生成新样本。
  • 只 KL 不重构: q(zx)q(z|x) 完美坍缩成 N(0,1)\mathcal{N}(0,1) ,编码器完全忽略输入 xx ,解码器只能生成乱码。

VAE 的精髓: 在“还原输入”和“隐空间正则化”之间寻找平衡。

5.VAE的不足

VAE 生成的图像通常比较模糊,这是因为 MSE Loss 对高频细节不敏感,倾向于取平均值。VAE 建模的是单峰高斯分布。如果真实数据的分布是多峰的(Multimodal),比如一张图可能是“猫”也可能是“狗”,VAE 为了最大化似然,会在猫和狗的中间位置放置均值,导致生成出“像猫又像狗”的模糊图像。而 GAN (生成对抗网络) 没有显式的似然函数约束,可以自由地收敛到其中一个峰,因此更清晰

后验坍缩:有时候 Decoder 太强(尤其是自回归 Decoder,如 RNN/PixelCNN),它可能在训练时利用“教师强制(Teacher Forcing)”直接根据历史信息预测下一步,从而忽略隐变量 zz 。这会导致:KL 散度接近 0: qϕ(zx)q_\phi(z|x) 退化为先验 p(z)p(z) 。失去表征能力: zz 不再包含 xx 的特定信息。结果:虽然训练 Loss 可能很低,但模型实际上变成了一个无条件的生成模型(Unconditional Generator),无法根据特定输入进行重构或属性编辑。

参考

变分自编码器(Variational Autoencoders,VAE)原理

https://psu.monster/post/2025/9f9a5a1e8f0f

作者

psu

发布于

2025-11-24

更新于

2025-11-25

许可协议

评论

Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×