变分自编码器(Variational Autoencoder)

变分自编码器(Variational Autoencoder)

变分自编码器(VAE)是一种深度生成模型,主要由 编码器(Encoder) 和 解码器(Decoder) 两部分组成:

  • 编码器(Encoder):负责把输入数据 \( x \) 映射到一个 概率分布,也就是潜在变量 \( z \) 的均值 \( \mu \) 和方差 \( \sigma^2 \)
  • 解码器(Decoder):通过采样得到的潜在变量 \( z \),把输入数据 \( x \) 重建出来

1. 基本思想

假设模型想学会生成一张图像,那它首先得知道这张图像服从什么分布。举个例子,一张图由 4 个像素组成,模型就得知道这 4 个像素各自的分布长什么样、它们之间有什么关系和依赖,然后从这个分布里采 4 个像素出来,就能拼成一张图。

可问题是,图像本身是高维数据,像素之间的分布和关系非常复杂,我们没办法直接把图像的分布描述出来。于是就引入了潜在变量这个概念,思路是:把高维、复杂的图像数据压缩成一个潜在变量(里面装着图像的核心信息),我们转而研究这个潜在变量的分布,问题就简单多了。

等到要生成图像时,由于已经知道了潜在变量的分布,我们就能从这个空间里采样,再还原成一张图像。所以 VAE 的整体思路是这样的:

  • 第一步,把输入图像压缩成一个潜在向量,这一步通常由编码器网络完成。
  • 第二步,估计这个潜在向量服从什么分布。VAE 一般假设潜在空间是一个高斯分布,去估计这些潜在向量的均值和方差,这样就能把潜在空间的分布定下来。
  • 第三步,想生成图像时,从估计好的潜在分布里采样,得到一个潜在向量。
  • 第四步,根据这个潜在向量恢复成图像,通常由解码器(一个神经网络)把潜在向量还原成图像。

VAE 叫变分自编码器,这个”变分”该怎么理解?

变分 这里指的是变分推断(Variational Inference,VI),它是一种近似概率分布、把复杂分布表示简化下来的方法。在 VAE 里,我们想让模型学会用一个分布去表示图像数据,可图像是高维的,像素之间关系复杂,直接对图像分布建模非常困难。

所以换个思路,先把图像压成一个低维的潜在向量(latent vector),只去研究这个潜在向量的分布,而不用直接去建模整个高维图像数据的分布,这样问题就简单了。

可新的问题又来了:这个潜在向量的真实分布是未知的,我们没法直接把它求出来。于是我们用某种方法,让图像压缩后得到的潜在变量分布,尽量逼近我们事先假设的正态分布。

所以,变分大致可以理解成:把一个复杂的分布变换到一个简单分布上,从而更好地解决问题。

2. 损失函数

VAE 的损失函数由两部分组成:重构损失 和 KL 散度,其中:

  • 重构损失:用来衡量解码器靠潜在变量 \( z \) 生成的图像,和原始输入图像 \( \hat{x} \) x 之间的差异。
  • KL 散度:VAE 通常假设潜在变量 \( z \) 服从标准正态分布,这一项衡量的就是编码器学到的潜在分布,和标准正态分布之间的差异。

公式里,第一项是重构损失,第二项是 KLD 损失。重构损失一般用 均方误差 或 二元交叉熵,KLD 损失经过推导之后如下:

  • \( μ_{i} \)​ 是潜在变量的均值
  • \( \sigma_i^2 \)​ 是潜在变量的方差

公式里的 \( \beta \) 是用来平衡重构损失和 KLD 损失的重要系数,它决定了 VAE 更偏向拟合数据,还是更偏向把潜在空间往标准正态分布上拉。

  • \( \beta \) 增大:KL 散度的权重变高,潜在空间的分布就更靠近先验分布(通常是标准正态分布)。这样 潜在空间会更稀疏,更利于生成任务,因为潜在空间更 好采样,能据此生成新样本。但代价是重构损失的作用被削弱,图像重建得不够精细。
  • \( \beta \) 减小:KL 散度的权重变低,模型 更看重重构损失,图像重建的精度就上去了。这对 图像去噪 和 图像重建 这类任务更有利,因为它们追求的是 高质量重建。但这样可能导致 潜在空间过于复杂,生成样本的质量反而下降。

3. 重参数化

训练过程中,VAE 用了”重参数化技巧”来保证梯度能反向传播。具体说,编码器输出的均值 \( \mu \) 和标准差 \( \sigma \) 作为正态分布的参数,潜在变量 \( z \) 再通过下面这个公式从该正态分布里采样:

其中,\( \epsilon \) 是来自标准正态分布的随机噪声。正是这个技巧,让 VAE 能通过反向传播被有效训练。

在 VAE 里,我们需要从一个概率分布里”抽签”(采样)来决定潜在变量的值,再交给解码器。可问题在于,抽签这个动作是随机的,不是一个可以计算的过程,所以当我们算完损失想反向传播去优化编码器时,梯度就断了,传不回去。

重参数化技巧的解法是:别直接抽签,而是先定好分布(均值和标准差),然后再用一个固定的随机因子 \( \epsilon \) 来算出抽签结果。这样一来,虽然最终的 \( z \) 仍然带随机性,但抽签这件事变成了一个可计算的过程,梯度就能顺利回传,不会被卡住。

4. 局限挑战

VAE 在图像生成任务里,生成的图像通常偏模糊,主要原因是:VAE 一般用均方误差(MSE)或二元交叉熵(BCE)作为重构损失,这类损失函数更倾向于生成平滑的图像,而不是高分辨率的细节。再加上 VAE 用高斯分布建模,生成出来的图像往往是多个潜在样本的平均结果,而不是抓住了某个特定样本的细节,于是结果就模糊了。

相比之下,生成对抗网络(GAN)靠判别器去衡量生成图像的真实性,能生成更锐利、分辨率更高的图像。

尽管有这些局限,VAE 依然是很重要的一类生成模型,尤其在可解释性、潜在空间结构化和训练稳定性上,它比 GAN 更有优势。