VAE 的核心思想与概率模型

传统的自编码器 (AE) 学习一个确定性的映射:。而 VAE 引入了概率框架,将数据生成过程建模为:

  1. 潜变量 (Latent Variable) 从一个简单的先验分布 中采样,通常是标准正态分布
  2. 数据 从潜变量 的条件分布 中采样。

VAE 的目标是学习参数 (解码器/生成器参数),使得数据的边际似然 最大化。

要直接最大化 ,我们需要计算上述积分。由于 (解码器)和 (先验)通常是复杂的神经网络模型,这个积分在连续空间上是不可解析计算的。所以我们引入变分推断来进行计算。

变分推断与证据下界 (ELBO)

为了解决边际似然不可计算的问题,我们引入一个变分分布(Variational Distribution) ,它由另一个神经网络(编码器/推断网络)参数化,并用于近似真实的后验分布

根据概率论的贝叶斯定理,我们可以得到真实的后验分布

取对数并整理,得到边际似然 的表达式:

现在,我们希望将引入的近似后验 纳入等式中。我们从 的角度来看

根据詹森不等式(Jensen’s inequality)或者更直接地使用 KL 散度的定义,我们定义 之间的关系。

对于任意 ,边际似然 可以分解为两部分:

其中:

  • 证据下界 (Evidence Lower Bound, ELBO)

  • KL 散度项

由于 KL 散度是非负的,,因此我们有:

确实是边际似然 的一个下界,因此称为证据下界 (ELBO)

我们不直接算总的可能性,而是最大化 ELBO,最大化 ELBO ,总的可能性 也会跟着增加。同时,这也会让 越来越接近

ELBO 的分解与 VAE 损失函数

为了在实践中计算 ELBO,我们进一步分解

根据联合分布的定义 ,我们将第一项展开:

代回 ELBO 表达式并重新组织项:

VAE 的最终优化目标是最大化这个 ELBO:

这相当于最小化 VAE 损失函数

重参数化 (Reparameterization Trick)

为了通过梯度下降来优化 ,我们需要计算对 (编码器参数)的梯度:

  • KL 项的梯度: 如果我们假设 是一个高斯分布 ,且 ,则 KL 项可以解析计算,梯度 很容易得到。

    (其中 是潜变量的维度)

  • 重构项的梯度: 是一个期望,依赖于 。当我们对 求导时,梯度需要穿过随机采样过程 才能到达

由于采样的不可导性,传统的 Monte Carlo 梯度估计(如 REINFORCE)具有高方差,收敛困难。

VAE 引入了重参数化技巧来解决这个问题。它将随机性从分布参数 中分离出来:

我们不再从 直接采样,而是引入一个辅助的、不依赖于 的随机变量 ,并定义一个确定性函数 ,使得:

如果 ,则 可以表示为:

(其中 表示逐元素乘积)

现在,重构损失的期望可以重写为:

此时,求导对象 已经变成了关于 确定性函数,梯度 可以直接通过链式法则计算,而无需穿过采样节点。

我们只需要用 Monte Carlo 估计来近似这个期望(在实际实现中,通常只采一个样本 ):

其中

VAE 架构总结

VAE 的最终架构和训练过程如下:

  1. 编码器 (Encoder) 接收输入 ,输出潜变量分布的参数 (为了确保方差非负,通常输出对数方差,再通过 得到标准差 )。
  2. 采样 (Sampling): 利用重参数化技巧,从 中采样 ,计算
  3. 解码器 (Decoder) 接收潜变量 ,输出重构数据 (对于高斯解码器,输出 的均值)。
  4. 损失计算 (Loss):
    • 重构项: 根据 的形式(通常假设高斯分布对应 MSE,伯努利分布对应交叉熵)计算
    • KL 项: 解析计算
    • 总损失: 重构项 + KL 项。
  5. 反向传播: 使用总损失对 进行优化。

通过最大化 ELBO,VAE 巧妙地将复杂的生成模型训练问题转化为一个可微分的、可以通过梯度下降优化的目标。