变分自编码器(VAE)原理
VAE 的核心思想与概率模型
传统的自编码器 (AE) 学习一个确定性的映射:
- 潜变量 (Latent Variable)
: 从一个简单的先验分布 中采样,通常是标准正态分布 。 - 数据
: 从潜变量 的条件分布 中采样。
VAE 的目标是学习参数
要直接最大化
变分推断与证据下界 (ELBO)
为了解决边际似然不可计算的问题,我们引入一个变分分布(Variational Distribution)
根据概率论的贝叶斯定理,我们可以得到真实的后验分布
取对数并整理,得到边际似然
现在,我们希望将引入的近似后验
根据詹森不等式(Jensen’s inequality)或者更直接地使用 KL 散度的定义,我们定义
对于任意
其中:
证据下界 (Evidence Lower Bound, ELBO)
: KL 散度项
:
由于 KL 散度是非负的,
我们不直接算总的可能性,而是最大化 ELBO,最大化 ELBO
ELBO 的分解与 VAE 损失函数
为了在实践中计算 ELBO,我们进一步分解
根据联合分布的定义
代回 ELBO 表达式并重新组织项:
VAE 的最终优化目标是最大化这个 ELBO:
这相当于最小化 VAE 损失函数
重参数化 (Reparameterization Trick)
为了通过梯度下降来优化
KL 项的梯度: 如果我们假设
是一个高斯分布 ,且 是 ,则 KL 项可以解析计算,梯度 很容易得到。 (其中
是潜变量的维度) 重构项的梯度:
是一个期望,依赖于 。当我们对 求导时,梯度需要穿过随机采样过程 才能到达 。
由于采样的不可导性,传统的 Monte Carlo 梯度估计(如 REINFORCE)具有高方差,收敛困难。
VAE 引入了重参数化技巧来解决这个问题。它将随机性从分布参数
我们不再从
如果
(其中
现在,重构损失的期望可以重写为:
此时,求导对象
我们只需要用 Monte Carlo 估计来近似这个期望(在实际实现中,通常只采一个样本
其中
VAE 架构总结
VAE 的最终架构和训练过程如下:
- 编码器 (Encoder)
: 接收输入 ,输出潜变量分布的参数 和 (为了确保方差非负,通常输出对数方差,再通过 得到标准差 )。 - 采样 (Sampling): 利用重参数化技巧,从
中采样 ,计算 。 - 解码器 (Decoder)
: 接收潜变量 ,输出重构数据 (对于高斯解码器,输出 的均值)。 - 损失计算 (Loss):
- 重构项: 根据
的形式(通常假设高斯分布对应 MSE,伯努利分布对应交叉熵)计算 。 - KL 项: 解析计算
。 - 总损失: 重构项 + KL 项。
- 重构项: 根据
- 反向传播: 使用总损失对
和 进行优化。
通过最大化 ELBO,VAE 巧妙地将复杂的生成模型训练问题转化为一个可微分的、可以通过梯度下降优化的目标。
