生成模型那些事:从 GMM 到 VAE

机器学习与数学

共 5915字,需浏览 12分钟

 ·

2024-04-10 19:21

900f748f12fcba5c6b9f924e89587ddd.webp

1. 引言

对于给定的一堆数据 ,我们希望用它们构建一个生成模型,然后生成新的数据来。

比如,给你一堆人脸照片,希望构建一个模型,用于生成新的人脸图像。 6b83845457a5b9c1950af386d811740c.webp那么,如何生成新的数据呢?办法有很多,比如插值,直接用旧数据造新数据出来。但这样做,是不是有些 low 呢?

这样并没有充分使用隐藏在数据背后的模式。我们不妨把数据归归类,比如 k-means 聚类,然后在类别内插值生成新的数据。这似乎比刚才的做法要好一些,但没有考虑不同类别之间的相互影响。

于是,我们使用高斯混合模型来对数据建模,然后多个高斯分量生成数据再加权组合来创建新的数据。但高斯混合模型有个问题,就是该有多少个高斯分量呢?

不妨拓展一下思路,我们不纠结于多少个,越多越好嘛!为什么不考虑无穷多个呢?通过引入一个连续隐变量 ,然后将无穷多个高斯叠加起来。相加可以用积分来处理,于是便有:

其中, 表示模型的参数。这里的隐变量 服从简单的分布 ,而 可以看作是对数据 的编码,但是由于每个隐变量 都可以表示数据 ,对应不同的条件概率 ,而数据的编码也同样对应条件概率 。因此,可以看成一种概率编码-解码方案。

或许一个隐变量的表达能力总是有限,于是我们引入多个,用向量形式表示 。

那么对于这些隐变量,我们该如何解读呢?通常来说,直接插值数据往往并不合理,比如人脸照片,插值出来很可能不是人脸了。因为那只是外在表像,对应高维空间中的点,更本质的表示是个流形,是在高维空间中的一个低维嵌入,直接在高维空间中插值很容易脱离数据流形。

780f5831a04792bf8d59b69662efb312.webp抛开数学,我们也可以通俗地理解。人脑认识事物往往会“通过现象看本质”,或者所谓的“第一性原理”。比如将人脸投影到一个语义空间,大致量化成各种特征,年龄、眼睛大小、脸部大小比例等。这些特征不是直接观测到的数据,是隐藏在背后的,所以可以将它们看作隐变量。

3cdf9ac020ab1ca01cff7ceeff55f03a.webp

不过这里要说明一下,原始的 VAE 并不负责解缠,这是后续工作的事情。

¸ 目标

现在,我们来明确一下目标从给定的一堆数据中找到一种概率编码-解码方案,其中隐变量所在的空间尽量规则,方便于生成新的数据

而变分自编码器(VAE)就是这样一种概率生成模型;它的目标是学习数据的分布 ,一旦训练好,可以从此分布中抽取(生成)样本。

本篇首先介绍一般的非线性隐变量模型,该模型的极大似然估计学习并不简单。然后定义似然的一个下界,进而使用蒙特卡罗采样来近似该下界。

隐变量模型采用间接方法来描述多维变量 上的概率分布 。他们没有直接写出 的表达式,而是对数据 和未观察到的隐变量 的联合分布 进行建模。

而概率 可以通过边缘化该联合概率而得:

通常,将联合概率 分解为数据似然 和隐变量的先验 :

这是描述 的相当间接的方法,但它很有用,因为可以用简单分布  以及 来定义一个复杂分布 。

总体思路有了,就是用简单分布组装出复杂分布 。那么,剩下的问题就是给定数据集,如何表示这个模型以及求解它的参数。

我们先来看一个熟悉的例子

¸ 示例:高斯混合模型

在一元高斯混合中,隐变量 是离散的,先验 是分类分布,其中 的每个可能值有概率 。假定隐变量 取值 ,数据 的似然 服从均值 和方差 的正态分布:

在这里,隐变量是离散的,因此我们对其可能的值进行求和以进行边缘化,从而得到数据分布 :

可见,我们用简单的似然和先验表示了相对复杂的高斯混合模型。而这个模型的参数可以使用 EM 算法来求解。

¸ 非线性隐变量模型

当隐变量 是多元连续变量时,我们不妨假设先验 是标准多元正态分布:

这样子的先验简单到不需要参数了。似然 也取简单的分布,如正态分布,但它还是有参数的,它的均值是一个隐变量的非线性函数 ,其协方差矩阵 意味着各向同性:

其中,函数 是用参数为 的深度神经网络表示。隐变量 的维度一般低于数据 的维度。模型 描述了数据的期望,其余未建模的方面则归入噪声 。

数据分布 是通过对联合分布边缘化隐变量 后得到的:

下图示例展示了通过一维隐变量将无穷多个二元高斯分布叠加起来得到一个复杂的二元分布。 52455df4d5c7f40005b3219bbb3f7193.webp然后,可以脑补多维隐变量和多维数据的情形。

¸ 数据生成

有了数据分布 ,如何生成新的数据呢?在数据所在空间采样吗?之前已经说过,这样做不合适。

不是有隐变量 嘛,而且它的分布相对简单,因此我们可以使用祖先采样法来生成新的示例 。我们从先验 中采样 并将其输入网络 来得到似然 的平均值,从而得到 。这里涉及的先验和似然都是正态分布,所以这很方便。

2. VAE 模型

给定一个由 个独立同分布的数据点组成的数据集 ,为了训练模型,我们最大化数据集相对于模型参数的对数似然。

为简单起见,我们假设式   中的方差项 作为超参数,因此只需要专注于学习参数

其中,

我们这里的思路是使用极大似然估计,即最大化数据概率 ,也可以说是关于模型参数的似然函数,从而得到模型的参数 。

但其实也可以有其他思路,比如近似后验推断,用较为简单的分布 去近似表示复杂分布 ,也就是最小化两个分布间的差距,比如最小化两个分布的 散度:

或者近似联合概率 :

从不同思路会得到不同的推导过程,但可谓殊途同归,此处略过上述两种。

本文从式 出发来考虑问题,因为它的目标非常明确,即找到模型参数以最大化数据似然。

从前面式子可以看出,这个目标中已经隐含解码器,但好像还少了点什么?编码器在哪里呢?

¸ 证据下界(ELBO)

虽然我们的目标明确,就是最大化式 已得到模型的参数 。然而,这并不好计算。该积分没有解析表达式,也没有简单的方法来计算 的特定值。

那总得想办法来优化上述问题,不好直接计算,那我们就找找对数似然的下界。对于给定的 值,该函数始终小于或等于 似然,并且还取决于一些其他参数 。最终,我们将构建一个网络来计算这个下界并对其进行优化。

下面我们使用 Jensen 不等式来推导对数似然的下界。我们首先将对数似然乘以和除以隐变量上的某个概率分布 :

然后,我们使用 Jensen 不等式求对数来找到下界:

其中右侧称为证据下界()。它之所以得此名,是因为 在贝叶斯方法的背景下被称为证据(Evidence)。

实际上,建模分布 时会用到参数 ,因此 可以写为:

为了学习这个隐变量模型,我们最大化这个以 和 为变量的函数,而变分自编码器 VAE 就是用神经网络来优化这个函数。

当 取固定值,而 和似然函数相等时,我们称 是紧的。为了找到使下界变紧的分布 ,我们使用条件概率对 中 项的分子进行因式分解:

其中,最后那行的第一项因为 不依赖于 ,并且概率分布 的积分为 。

这个式子表明, 是对数似然 减去 散度 。

散度测量分布之间的“距离”,只能取非负值。由此可见, 是 的下界。

当 时, 散度将为零。这个后验是给定观测数据 后关于隐变量 的后验分布。

¸ ELBO 的另一层解读

上面两式是对 的不同表达,除此之外还可以表示为重建误差减去 散度:

其中,第一行中的联合分布 已被分解为条件概率和先验的乘积 。

在此公式中,第一项称为重建损失;第二项衡量辅助分布 与先验分布的匹配程度,可以称作正则化损失。这个公式正是变分自编码器中使用的公式。

¸ 变分近似

从式 可知,当 是后验 时, 是紧的。原则上,我们可以使用贝叶斯公式来计算后验:

但实际上,分母往往是没办法计算的。

一个办法是进行变分近似推断:我们为 选择一个简单的参数形式,并用它来近似真实的后验。在这里,我们选择具有均值 和对角协方差 的多元正态分布。虽然这并不总是能很好地匹配后验,但对于 和 的某些值来说会比其他值会更好一些。在训练过程中,我们会找到“最接近”真实后验 的正态分布。

刚才说了, 的最佳选择是后验 ,也就是说取决于数据点 ,因此为了达成优化,变分近似分布也应该选择后验形式。因此我们选择:

其中 是另一个神经网络,参数 预测正态变分近似的均值 和方差 。

此时,式 变为

另外,还可以发现,此时的 和   之间的差距为,

对于观测数据 ,在固定参数 时,找到 使得

最小,从而使得 最大。

这里的   是跟数据 有关的,也就说每个数据 ,我们都要训练一个网络去表示 ,这会变得非常低效,因此这里可以使用一个公共的网络来统一表示和共享训练。这就是 VAE 中所谓的摊销(amortized)。 f7f22251b98ef358e404a5439009ea79.webp

¸ 变分自编码器 VAE

现在,我们终于可以描述 VAE 了。我们构建一个计算 的网络:

其中分布 的具体形式就是式 。第二项的 散度作为正则化项用于引导后验不要偏离先验太远。而第一项仍然涉及一个棘手的积分,但由于它是关于 的期望,因此我们可以通过采样来近似它。对于任何 函数,我们有:

其中 是 中采样的第 个样本。这里使用的方法就是所谓的蒙特卡罗估计。对于非常粗略的近似估计,我们可以仅使用 中的单个样本 :

由于我们此处 用的是正态分布,因此代入第一项中可得,

所以可以看到很多 VAE 的实现中使用的是 MSE,主要是使用了高斯分布,如果是用别的分布,那这里也需要作相应改动。

第二项是变分分布 和先前 之间的 散度。两个正态分布之间的   散度可以解析计算。对于一种分布具有参数 而另一种分布是标准正态分布的特殊情况,其由下式给出:

其中 是潜空间的维数。

在实际的网络训练中是最小化损失函数,所以我们将式 取相反数,得

好了,这时候可以看 VAE 的算法架构了。简单起见,我们就上个图

f411e4fb31146b1fabe027bf570f81a7.webp

现在应该清楚为什么这被称为变分自编码器。它是变分的,因为它涉及的优化问题是拿高斯分布去近似后验分布之类的。而分布是函数嘛,所以需要用到变分方法。

它自带编码器和解码器,因为它从数据点 开始,从中计算低维隐变量(向量),然后使用该向量尽可能接近地重新生成数据点 。网络 从数据到隐变量的映射称为编码器,网络 从隐变量到数据的映射称为解码器。

然后,在训练网络时运行小批量的样本,并使用 SGD 或 Adam 等优化算法更新这些参数。在此过程中,参数 发生变化,以在隐变量模型中为数据分配更高的似然。这也是我们初始的目标,最大化数据似然以学习参数 :

其中,

另外,损失函数中的这两项之间其实存在互相抵触,因此还可以引入权重参数来平衡这两项。

其中 是重建误差(negative likelihood),而 是 散度正则化项。可以调整权重来达到不同的生成效果,而这个正是算法 -VAE 的做法。

¸ 重新参数化技巧

但是对于神经网络的训练而言,还需要处理一个情况;该网络涉及采样步骤,问题就是如何对这个随机分量进行自动微分。也就是说需要将这个步骤与某些待优化的参数绑定,才好反向传播时计算梯度来更新相关参数。有一个简单的办法;可以将随机部分移动到网络的一个分支中,该分支从 中提取样本 ,然后使用以下关系:

从预期的高斯分布中采样。于是采样与待优化的参数(均值和协方差矩阵)绑定了,因此可以正常计算导数。这称为重新参数化技巧。此处一般会配上类似下面这样的图。 1ce694e78f59b1c321867feaebc5c8bb.webp

3. VAE 的应用

变分自编码器(VAE)作为一种生成模型,在多个领域有广泛的应用:

图像生成

  • VAE 能够学习数据的概率分布,并基于此生成新的、逼真的图像样本。
  • 通过在隐空间中进行插值,可以实现连续变化的图像生成,例如平滑地改变一个人脸的表情或年龄特征。
  • 可用于艺术创作和游戏设计,生成多样化的角色、场景等。

图像修复与恢复

  • VAE 可以用于损坏图像的修复,应用于医学图像分析和监控视频修复等领域。

数据压缩

  • VAE 能将高维数据(如图像)映射到低维隐空间,实现有效数据压缩,有利于存储和传输大量数据时减少带宽需求。

可控制属性的图像生成

  • 在人脸生成任务中,可通过 VAE 控制特定的人脸属性(如发型、眼镜、微笑等),按用户指定生成相应人像图片。

文本生成

  • 虽然 LSTM 和 Transformer 架构更常用于文本生成,但 VAE 同样可应用于自然语言处理任务,生成连贯多样的文本片段。

声音合成

  • 同样适用于音频信号生成,如音乐片段或语音合成。

离散隐空间探索

  • 某些 VAE 变体结合离散化技术,允许在离散的潜在空间中操作,有助于深入理解并组织数据结构。

医学影像分析

  • 在医疗领域,VAE 可用于疾病分类、病变检测及基于病灶特征的图像重建。

推荐系统

  • 在推荐系统中,VAE 能够帮助学习用户和物品的潜在表示,以进行更为精确的个性化推荐。

以上列举了 VAE 的部分应用领域,随着研究和技术的发展,其应用场景仍在不断拓展。

4. VAE 的不足

変分自编码器 VAE 作为一种深度生成模型,它可以从潜空间中采样编码,然后通过解码器生成新的数据。VAE 的不足主要有以下几点:

  • VAE 的生成质量较低,容易产生模糊或失真的样本,这是因为 VAE 使用了重构误差作为损失函数,而重构误差往往会导致平均或者模糊的结果。

  • VAE 的后验分布假设为正态分布,这可能会限制了潜空间的表达能力,导致无法捕捉到数据的复杂性和多样性。

  • VAE 的训练过程需要计算 KL 散度,这需要知道先验分布和后验分布的具体形式,而这在实际应用中往往是不可知的 。

以上是一些 VAE 的典型不足,当然也有一些方法可以改进或者缓解这些问题,例如使用对抗训练,使用更复杂的后验分布,或者使用隐式变分推断等。VAE 仍然是一种有前景的生成模型,它在机器学习和人工智能领域有着广泛的应用。

好了,VAE 我们就介绍到这里,关于它后续的变种这里先不谈了。我们马上要进入当前正火热的扩散模型吧。


浏览 20
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报