自动编码器
自动编码器是一种神经网络,用于减少输入维度,然后将其恢复到原始大小。自动编码器通常用于图像重建和去噪等任务。
如上图所示,输入数据在中间层被降维。网络的第一部分,即输入维度被降低的部分,称为编码器;第二部分,即恢复原始输入维度的部分,称为解码器。中间层,即维度最小的部分,称为瓶颈层。
自动编码器通过最小化输入和重构输出之间的均方误差 (MSE)进行训练。
自动编码器能否用于生成新图像,而不仅仅是重建现有图像?
以下是一个我们可以尝试的想法。
我们可以丢弃训练好的自动编码器的编码器部分,仅使用解码器。接下来,我们会随机选择一组值作为瓶颈层的输入,并将这些值通过训练好的解码器。这个过程可能会产生一些输出。然而,这些生成的图像是否能被人类识别则是另一个问题。在大多数情况下,这些图像可能无法被识别。
这种方法的问题在于,我们不知道瓶颈层中值的概率分布。如果我们了解这个分布,就可以从中采样值,从而生成更真实的图像。
这个概念是潜变量模型的基础,这些模型旨在更好地理解和操作潜在空间。这一类别中的两个著名模型是概率主成分分析(P-PCA)和变分自动编码器(VAE),我将在本文中讨论它们。
潜变量模型(LVM)
首先,我们来理解什么是潜变量。潜变量是未直接观察到但可以从数据中推断出来的变量。它们用于建模真实世界数据的底层结构或分布。潜变量通常假设遵循已知的概率分布,如标准正态分布。
在图像生成的上下文中,我们假设数据集中的每幅图像都可以由低维潜变量空间中的一个对应点来表示。当我们训练潜变量模型时,我们的目标是学习一个映射函数,该函数将潜变量转换为真实的图像。
这种转换通常使用神经网络来执行,该网络充当解码器,将潜变量表示转换为有意义的图像。在某些模型中,如变分自动编码器(VAE),在解码过程中会引入噪声,以鼓励生成平滑且多样的图像。
在图像中展示的潜变量模型(LVM)类比中,红色的乐高积木块代表潜变量,而紫色的乐高积木块代表真实世界的数据。每个乐高积木块代表用于转换的一个神经网络层。
概率主成分分析(P-PCA)
P-PCA假设每个观察到的样本x(维度为m)是由一个潜特征向量z(维度为d,d < m)生成的,并且潜特征z可以从均值为零、协方差为单位矩阵的多元高斯分布中采样得到。
P-PCA的参数包括矩阵W(维度为m x d),它将潜特征向量投影到可观测空间中,还有均值μ(维度为m)和方差σ(维度为1)。
P-PCA具有闭式解。
对于一个包含n个样本(每个样本x的维度为m)的数据集,其均值为μ,协方差为S,
其中,U_q包含S的前d个主成分特征向量(即对应于d个最大特征值的特征向量),A_q是一个对角矩阵,包含d个最大特征值。
在估计了概率主成分分析(PPCA)的参数后,我们可以通过从标准正态分布中随机采样值来创建潜变量向量z。然后,使用学习到的模型参数对这个向量z进行变换。
通过对采样的z向量应用这种变换,我们获得了一个新的数据点x,这是一个随机生成的观测值。如果原始的x值表示图像,那么这个过程允许我们通过从标准正态分布中采样z值,并将它们通过学习到的p-PCA模型,来生成新的图像。
我已经在人脸图像上训练了p-PCA模型。以下是使用训练好的p-PCA模型生成的100张图像:
生成的图像相当模糊。原因是p-PCA模型是线性的,因此相当简单。
我们还可以对潜变量中的一个维度进行小幅度扰动,并观察生成的图像如何变化。我已经创建了一个5×10的拼贴画,展示了由扰动后的潜向量生成的图像(即5个不同的潜变量维度,每个维度有10个不同的线性间隔扰动)。
原始图像:
扰动后的图像:
变分自编码器(VAE)
变分自编码器(VAE)可以被视为概率主成分分析(p-PCA)模型的非线性扩展。虽然VAE与传统自编码器相似,但关键区别在于VAE在潜空间中强制实施一个近似的正态分布。这一约束提高了模型捕捉底层数据结构的能力,并使得采样和生成更加有效。
如文章前文所述,我们仅使用自编码器的训练好的解码器是无法生成逼真图像的,因为潜空间的概率分布是未知的。
为了解决这个问题,我们强制潜空间遵循一个近似的正态分布,从而可以从中采样并生成逼真图像。此外,我们假设解码器的输出为生成图像分布的均值。因此,我们在解码器输出上添加一些噪声,以得到最终的生成图像。这就是变分自编码器(VAE)的核心思想。
在上面的图中,X既表示输入也表示重建的输出,Q指的是编码器网络,而P表示解码器网络。
为了确保潜空间近似为正态分布,编码器输出潜空间分布的均值和标准差,然后从中采样作为解码器的输入。
然而,挑战在于潜空间中的采样操作是不可微的。如果保持原样,这将阻止我们通过反向传播更新编码器的参数。
为了解决潜空间中不可微采样的问题,我们使用了一种称为重参数化技巧的技术。
重参数化技巧背后的思想是让采样操作变得可微,从而使得反向传播过程能够更新网络的参数。在上面的图中,一旦我们从编码器输出中获得均值和标准差,我们就从标准正态分布中采样一个值,并使用公式z = mu + epsilon * sigma来创建解码器的输入。
VAE的训练损失与标准自编码器的损失不同。常规自编码器使用原始数据与重建输出之间的均方误差,而VAE的损失由两项组成:输入与输出之间的重建损失(通常是均方误差)以及编码器输出分布与先验分布(即潜向量空间分布)之间的Kullback-Leibler(KL)散度。如果假设两个分布都是正态的,我们可以以闭式形式计算KL散度。这个损失项被称为证据下界(ELBO)。
在其基本形式中,VAE可能会遭遇一个称为后验崩溃的问题。当编码器学到的分布变得与先验(一个标准正态分布)过于相似时,就会发生这种情况,导致潜变量丢失关于输入的有意义信息。结果,解码器主要依赖先验,降低了模型生成多样化和信息丰富输出的能力。
这种崩溃是由于损失函数中的KL散度项导致的,它鼓励潜空间分布匹配正态分布。为了缓解这个问题,一个常见的方法是引入一个超参数β(如在β-VAE中),它缩放KL散度项。
因此,β是一个至关重要的超参数,需要仔细调整以平衡有意义潜表示和正则化之间的权衡,最终提高生成数据的质量。
在用于训练p-PCA模型的数据集上训练β-VAE后,我能够生成以下图像:
注意到使用VAE模式创建的图像相比p-PCA模型创建的图像要清晰得多。这是因为VAE模型本质上是非线性的,因此比p-PCA模型更复杂。
让我们来做一个有趣的实验!首先,我们将在潜向量空间中选择两个随机点。接下来,我们将在这两个点连成的线段上生成20个等间距的点。然后,将这20个点分别通过训练好的VAE解码器,以生成对应的图像。下面的结果展示了图像如何在两个原始点之间平滑过渡。
你可以观察到,在第一张图像中,这个人表情中性,而在最后一张图像中,他们看起来很开心。注意,从中性表情到开心表情的过渡在中间图像中是逐渐且平滑发生的。
结论
在本文中,我们首先探讨了自编码器是否能够生成图像,而不仅仅是重建图像。我们发现这并不可行,因为潜空间的概率分布是未知的。为了解决这个问题,我们研究了两种对潜空间分布施加限制的模型:概率主成分分析(pPCA)和变分自编码器(VAE),它们都能够实现图像生成。在此过程中,我们还观察到,修改某些潜变量或在潜空间中沿某个方向遍历会导致生成图像发生逐渐且有意义的变化。