理解变分自动编码器 (VAE)
添加图片注释,不超过 140 字(可选)降维、PCA 和自动编码器。欢迎来到雲闪世界。 在第一部分中,我们将首先讨论一些与降维相关的概念。特别是,我们将简要回顾主成分分析 (PCA) 和自动编码器,展示这两个概念是如何相互关联的。 什么是降维? 在机器学习中,降维是减少描述某些数据的特征数量的过程。这种减少是通过选择(仅保留一些现有特征)或提取(基于旧特征创建少量新特征)来完成的,并且在许多需要低
添加图片注释,不超过 140 字(可选)
降维、PCA 和自动编码器。欢迎来到雲闪世界。 在第一部分中,我们将首先讨论一些与降维相关的概念。特别是,我们将简要回顾主成分分析 (PCA) 和自动编码器,展示这两个概念是如何相互关联的。 什么是降维? 在机器学习中,降维是减少描述某些数据的特征数量的过程。这种减少是通过选择(仅保留一些现有特征)或提取(基于旧特征创建少量新特征)来完成的,并且在许多需要低维数据(数据可视化、数据存储、大量计算……)的情况下非常有用。虽然存在许多不同的降维方法,但我们可以设置一个与大多数(如果不是任何!)这些方法相匹配的全局框架。 首先,我们将从“旧特征”表示(通过选择或提取)产生“新特征”表示的过程称为编码器,将解码器称为逆过程。降维可以解释为数据压缩,其中编码器压缩数据(从初始空间到编码空间,也称为潜在空间),而解码器解压缩数据。当然,根据初始数据分布、潜在空间维度和编码器定义,这种压缩可能是有损的,这意味着部分信息在编码过程中丢失,并且在解码时无法恢复。
添加图片注释,不超过 140 字(可选)
降维方法的主要目的是在给定的系列中找到最佳的编码器/解码器对。换句话说,对于给定的一组可能的编码器和解码器,我们正在寻找在编码时保留最大信息量的对,从而在解码时具有最小的重构误差。如果我们分别将 E 和 D 表示为我们正在考虑的编码器和解码器系列,那么降维问题可以写成
添加图片注释,不超过 140 字(可选)
在哪里
添加图片注释,不超过 140 字(可选)
定义输入数据 x 和编码解码数据 d(e(x)) 之间的重构误差度量。最后请注意,在下文中我们将 N 表示数据数量,n_d 表示初始(解码)空间的维度,n_e 表示缩减(编码)空间的维度。 主成分分析 (PCA) 说到降维,首先想到的方法之一就是主成分分析 (PCA)。为了展示它如何适应我们刚刚描述的框架并与自动编码器建立联系,让我们对 PCA 的工作原理进行一个非常高的概述,把大部分细节放在一边(请注意,我们计划就该主题写一篇完整的文章)。 PCA 的理念是构建 n_e 个新的独立特征,这些特征是n_d 个旧特征的线性组合,使得这些新特征定义的子空间上的数据投影尽可能接近初始数据(以欧几里得距离表示)。换句话说,PCA 正在寻找初始空间的最佳线性子空间(由新特征的正交基描述),使得通过它们在这个子空间上的投影近似数据的误差尽可能小。
添加图片注释,不超过 140 字(可选)
在我们的全局框架中,我们在 n_e x n_d 矩阵(线性变换)系列 E 中寻找编码器,这些矩阵的行是正交的(特征独立性),并在 n_d x n_e 矩阵系列 D 中寻找相关的解码器。可以证明,对应于协方差特征矩阵的 n_e 个最大特征值(范数)的酉特征向量是正交的(或可以选择正交),并定义维度为 n_e 的最佳子空间,以最小近似误差投影数据。因此,可以选择这些 n_e 个特征向量作为我们的新特征,这样,降维问题就可以表示为特征值/特征向量问题。此外,还可以证明,在这种情况下,解码器矩阵是编码器矩阵的转置。
添加图片注释,不超过 140 字(可选)
自动编码器 现在让我们讨论一下自动编码器,看看如何使用神经网络进行降维。自动编码器的一般思想非常简单,包括将编码器和解码器设置为神经网络,并使用迭代优化过程学习最佳编码-解码方案。因此,在每次迭代中,我们都会向自动编码器架构(编码器后跟解码器)输入一些数据,我们将编码解码输出与初始数据进行比较,并通过架构反向传播错误以更新网络的权重。 因此,直观地看,整体自动编码器架构(编码器+解码器)会为数据创建瓶颈,从而确保只有信息的主要结构部分可以通过并重建。查看我们的一般框架,考虑的编码器系列 E 由编码器网络架构定义,考虑的解码器系列 D 由解码器网络架构定义,并且最小化重建误差的编码器和解码器的搜索是通过对这些网络的参数进行梯度下降来完成的。
添加图片注释,不超过 140 字(可选)
首先假设我们的编码器和解码器架构都只有一层,没有非线性(线性自动编码器)。这样的编码器和解码器就是简单的线性变换,可以表示为矩阵。在这种情况下,我们可以看到与 PCA 的明显联系,就像 PCA 一样,我们正在寻找最佳的线性子空间来投影数据,同时尽可能减少信息丢失。用 PCA 获得的编码和解码矩阵自然定义了我们通过梯度下降可以达到的解决方案之一,但我们应该指出,这不是唯一的解决方案。事实上,可以选择多个基础来描述相同的最佳子空间,因此,多个编码器/解码器对可以给出最佳重构误差。此外,对于线性自动编码器,与 PCA 相反,我们最终得到的新特征不必是独立的(神经网络中没有正交性约束)。
添加图片注释,不超过 140 字(可选)
现在,我们假设编码器和解码器都是深度非线性的。在这种情况下,架构越复杂,自动编码器就越能进行高维数降维,同时保持重构损失较低。直观地说,如果我们的编码器和解码器具有足够的自由度,我们可以将任何初始维数降低到 1。事实上,具有“无限能力”的编码器理论上可以获取我们的 N 个初始数据点并将它们编码为 1、2、3、……直到 N(或更一般地,编码为实轴上的 N 整数),并且相关的解码器可以进行逆变换,在此过程中不会有任何损失。 然而,在这里我们应该记住两件事。首先,没有重建损失的重要降维通常是有代价的:潜在空间中缺乏可解释和可利用的结构(缺乏规律性)。其次,大多数时候降维的最终目的不仅是减少数据的维数,而且是在减少维数的同时将大部分数据结构信息保留在缩减的表示中。由于这两个原因,潜在空间的维度和自动编码器的“深度”(定义压缩的程度和质量)必须根据降维的最终目的进行仔细控制和调整。
添加图片注释,不超过 140 字(可选)
变分自动编码器 到目前为止,我们已经讨论了降维问题,并介绍了可以通过梯度下降进行训练的编码器-解码器架构自动编码器。现在让我们将其与内容生成问题联系起来,看看当前形式的自动编码器对于这个问题的局限性,并介绍变分自动编码器。 自动编码器在内容生成方面的局限性 此时,一个自然而然的问题是“自动编码器和内容生成之间有什么联系?”。事实上,一旦自动编码器训练完成,我们就有了编码器和解码器,但仍然没有真正的方法来生成任何新内容。乍一看,我们可能会认为,如果潜在空间足够规则(在训练过程中由编码器很好地“组织”),我们可以从该潜在空间中随机取一个点并对其进行解码以获得新内容。然后解码器将或多或少地像生成对抗网络的生成器一样运行。
添加图片注释,不超过 140 字(可选)
然而,正如我们在上一节中讨论的那样,自动编码器的潜在空间的规律性是一个难点,它取决于初始空间中数据的分布、潜在空间的维度和编码器的架构。因此,很难(如果不是不可能的话)先验地确保编码器将以一种与我们刚刚描述的生成过程兼容的智能方式组织潜在空间。 为了说明这一点,让我们考虑一下我们之前给出的例子,其中我们描述了一个编码器和一个解码器,它们足够强大,可以将任何 N 个初始训练数据放到实轴上(每个数据点都被编码为一个实值)并对其进行解码而不会产生任何重建损失。在这种情况下,自动编码器的高自由度使得可以在没有信息丢失的情况下进行编码和解码(尽管潜在空间的维度很低),这会导致严重的过度拟合,这意味着潜在空间的某些点在解码后会给出毫无意义的内容。如果这个一维示例被自愿选择为非常极端,我们可以注意到自动编码器潜在空间规律性的问题比这更为普遍,值得特别关注。
添加图片注释,不超过 140 字(可选)
仔细想想,编码数据进入潜在空间时缺乏结构是很正常的。事实上,自动编码器在训练任务中没有任何东西可以强制获得这样的组织:自动编码器仅被训练以尽可能少的损失进行编码和解码,无论潜在空间如何组织。因此,如果我们不仔细定义架构,那么在训练过程中,网络自然会利用任何过度拟合的可能性来尽可能好地完成任务……除非我们明确地对其进行正则化! 变分自动编码器的定义 因此,为了能够将我们的自动编码器的解码器用于生成目的,我们必须确保潜在空间足够规则。获得这种规律性的一个可能的解决方案是在训练过程中引入显式正则化。因此,正如我们在本文的介绍中简要提到的那样,变分自动编码器可以定义为一种自动编码器,其训练经过正则化以避免过度拟合并确保潜在空间具有支持生成过程的良好特性。 与标准自动编码器一样,变分自动编码器是一种由编码器和解码器组成的架构,经过训练可最小化编码解码数据与初始数据之间的重构误差。然而,为了引入潜在空间的一些正则化,我们对编码解码过程进行了轻微的修改:我们不再将输入编码为单个点,而是将其编码为潜在空间上的分布。然后对模型进行如下训练:
-
首先,输入被编码为潜在空间上的分布
-
其次,从该分布中采样一个潜在空间中的点
-
第三,解码采样点并计算重构误差
-
最后,重建误差通过网络反向传播
添加图片注释,不超过 140 字(可选)
在实践中,编码分布被选择为正态分布,以便编码器可以训练返回描述这些高斯分布的均值和协方差矩阵。将输入编码为具有一定方差的分布而不是单个点的原因在于,这样可以非常自然地表达潜在空间正则化:编码器返回的分布被强制接近标准正态分布。我们将在下一小节中看到,我们通过这种方式确保潜在空间的局部和全局正则化(局部正则化是因为方差控制,全局正则化是因为均值控制)。 因此,在训练 VAE 时最小化的损失函数由一个“重构项”(在最后一层)和一个“正则化项”(在潜在层)组成,重构项倾向于使编码-解码方案尽可能高效,正则化项倾向于通过使编码器返回的分布接近标准正态分布来规范潜在空间的组织。该正则化项表示为返回分布与标准高斯分布之间的Kulback-Leibler 散度,下一节将进一步说明。我们可以注意到,两个高斯分布之间的 Kullback-Leibler 散度具有一个封闭形式,可以直接用两个分布的均值和协方差矩阵来表示。
添加图片注释,不超过 140 字(可选)
关于正则化的直觉 为了使生成过程成为可能,潜在空间所期望的规律性可以通过两个主要属性来表达:连续性(潜在空间中的两个接近的点在解码后不应该给出两个完全不同的内容)和完整性(对于所选的分布,从潜在空间采样的点在解码后应该给出“有意义”的内容)。
添加图片注释,不超过 140 字(可选)
VAE 将输入编码为分布而不是简单点这一事实不足以确保连续性和完整性。如果没有明确定义的正则化项,模型可以学习“忽略”返回分布的事实,并且其行为几乎与经典自动编码器一样(导致过度拟合),以尽量减少其重构误差。为此,编码器可以返回方差很小的分布(这往往是准时分布),也可以返回均值差异很大的分布(这在潜在空间中彼此相距很远)。在这两种情况下,分布的使用方式都是错误的(抵消了预期的收益),并且无法满足连续性和/或完整性。 因此,为了避免这些影响,我们必须对编码器返回的协方差矩阵和分布的平均值进行正则化。实际上,这种正则化是通过强制分布接近标准正态分布(中心化和简化)来实现的。这样,我们要求协方差矩阵接近恒等分布,防止出现准时分布,平均值接近 0,防止编码分布彼此相距太远。
添加图片注释,不超过 140 字(可选)
利用这个正则化项,我们可以防止模型在潜在空间中对相距很远的数据进行编码,并鼓励尽可能多的返回分布“重叠”,从而满足预期的连续性和完整性条件。当然,对于任何正则化项来说,这都是以训练数据的更高重构误差为代价的。然而,重构误差和 KL 散度之间的权衡是可以调整的,我们将在下一节中看到,平衡的表达是如何从我们的正式推导中自然产生的。 总结本小节,我们可以观察到,通过正则化获得的连续性和完整性往往会在潜在空间中编码的信息上产生“梯度”。例如,潜在空间中位于来自不同训练数据的两个编码分布的均值中间的点应该被解码为介于第一个分布的数据和第二个分布的数据之间的某个点,因为它可能在两种情况下都被自动编码器采样。
添加图片注释,不超过 140 字(可选)
注意。顺便提一下,我们提到的第二个潜在问题(网络将分布彼此远离)实际上几乎等同于第一个问题(网络倾向于返回准时分布)直到规模发生变化:在两种情况下,分布的方差相对于其均值之间的距离都变小。
VAE 的数学细节 在上一节中,我们给出了以下直观概述:VAE 是将输入编码为分布而不是点的自动编码器,其潜在空间“组织”通过约束编码器返回的分布使其接近标准高斯而进行正则化。在本节中,我们将从数学的角度对 VAE 进行更严格的解释,这将使我们能够更严格地证明正则化项的合理性。为此,我们将设置一个清晰的概率框架,并将特别使用变分推理技术。 概率框架和假设 让我们首先定义一个概率图模型来描述我们的数据。我们用 x 表示代表我们数据的变量,并假设 x 是由未直接观察到的潜在变量 z(编码表示)生成的。因此,对于每个数据点,假设以下两个步骤的生成过程:
-
首先,从先验分布 p(z) 中抽取一个潜在表征 z
-
第二,数据 x 从条件似然分布 p(x|z) 中抽样
添加图片注释,不超过 140 字(可选)
有了这样的概率模型,我们可以重新定义编码器和解码器的概念。事实上,与考虑确定性编码器和解码器的简单自动编码器相反,我们现在将考虑这两个对象的概率版本。“概率解码器”自然定义为p(x|z),它描述了给定编码变量的解码变量的分布,而“概率编码器”定义为p(z|x),它描述了给定解码变量的编码变量的分布。 此时,我们已经注意到,我们在简单的自动编码器中缺乏的潜在空间正则化自然出现在数据生成过程的定义中:潜在空间中的编码表示 z 确实被认为遵循先验分布 p(z)。否则,我们也可以回想一下著名的贝叶斯定理,它建立了先验 p(z)、似然 p(x|z) 和后验 p(z|x) 之间的联系
添加图片注释,不超过 140 字(可选)
现在我们假设 p(z) 是标准高斯分布,p(x|z) 是高斯分布,其均值由变量 z 的确定性函数 f 定义,其协方差矩阵具有与单位矩阵 I 相乘的正常数 c 的形式。假设函数 f 属于记为 F 的函数族,该族暂时未指定,稍后将进行选择。因此,我们有
添加图片注释,不超过 140 字(可选)
现在,我们假设 f 是定义明确且固定的。理论上,我们知道 p(z) 和 p(x|z),我们可以使用贝叶斯定理来计算 p(z|x):这是一个经典的贝叶斯推理问题。然而,正如我们在上一篇文章中所讨论的那样,这种计算通常是难以处理的(因为分母处有积分),并且需要使用变分推理等近似技术。 注意:这里我们可以提到 p(z) 和 p(x|z) 都是高斯分布。因此,如果我们有 E(x|z) = f(z) = z,则意味着 p(z|x) 也应该遵循高斯分布,并且理论上,我们“仅”可以尝试根据 p(z) 和 p(x|z) 的均值和协方差矩阵来表达 p(z|x) 的均值和协方差矩阵。然而,在实践中,这一条件并不满足,我们需要使用变分推理等近似技术,使该方法非常通用,并且对模型假设的某些变化更具鲁棒性。 变分推理公式 在统计学中,变分推断 (VI) 是一种近似复杂分布的技术。其思想是设置一个参数化的分布族(例如高斯族,其参数是均值和协方差),并在该族中寻找目标分布的最佳近似值。族中的最佳元素是最小化给定近似误差测量(大多数情况下是近似值和目标之间的 Kullback-Leibler 散度)的元素,并通过对描述族的参数进行梯度下降来找到。有关更多详细信息,请参阅我们关于变分推断的帖子及其参考文献。 这里我们将用高斯分布 q_x(z) 来近似 p(z|x),其均值和协方差由参数 x 的两个函数 g 和 h 定义。这两个函数分别属于函数 G 和 H 的族,稍后将指定这两个族,但这两个族应该是参数化的。因此我们可以表示
图片上传失败
重试
因此,我们以这种方式定义了变分推理的候选函数族,现在需要通过优化函数 g 和 h(实际上是它们的参数)来找到该族中的最佳近似值,以最小化近似值与目标 p(z|x) 之间的 Kullback-Leibler 散度。换句话说,我们正在寻找最佳的 g* 和 h*,以便
添加图片注释,不超过 140 字(可选)
在倒数第二个等式中,我们可以观察到在近似后验 p(z|x) 时,最大化“观测值”的可能性(最大化预期对数似然,第一项)与接近先验分布(最小化 q_x(z) 和 p(z) 之间的 KL 散度,第二项)之间存在权衡。这种权衡对于贝叶斯推理问题来说是自然的,它表达了我们需要在数据的信心和先验的信心之间找到的平衡。 到目前为止,我们假设函数 f 已知且固定,并且我们已经证明,在这样的假设下,我们可以使用变分推理技术近似后验 p(z|x)。然而,在实践中,定义解码器的这个函数 f 是未知的,也需要选择。为此,让我们提醒一下,我们的初始目标是找到一个性能良好的编码解码方案,其潜在空间足够规则,可以用于生成目的。如果规律性主要由潜在空间上假设的先验分布决定,那么整个编码解码方案的性能高度依赖于函数 f 的选择。事实上,由于 p(z|x) 可以从 p(z) 和 p(x|z) 近似(通过变分推理),并且 p(z) 是一个简单的标准高斯,因此在我们的模型中,我们唯一可以使用的两个优化杠杆是参数 c(定义似然的方差)和函数 f(定义似然的均值)。 因此,让我们考虑一下,正如我们之前讨论的那样,我们可以为 F 中的任何函数 f(每个函数定义不同的概率解码器 p(x|z))获得 p(z|x) 的最佳近似值,表示为 q*_x(z)。尽管它具有概率性质,但我们正在寻找一种尽可能高效的编码解码方案,然后,我们希望选择函数 f,当 z 从 q*_x(z) 中采样时,该函数 f 最大化给定 z 时 x 的预期对数似然。换句话说,对于给定的输入 x,我们希望在从分布 q*_x(z) 中采样 z,然后从分布 p(x|z) 中采样 x̂ 时,最大化 x̂ = x 的概率。因此,我们正在寻找最佳 f*,使得
添加图片注释,不超过 140 字(可选)
其中 q*_x(z) 取决于函数 f,并且按前面所述获得。综合考虑所有因素,我们正在寻找最优的 f*、g* 和 h*,以便
添加图片注释,不超过 140 字(可选)
我们可以在此目标函数中识别上一节中给出的 VAE 直观描述中引入的元素:x 和 f(z) 之间的重构误差以及由 q_x(z) 和 p(z) 之间的 KL 散度(标准高斯)给出的正则化项。我们还可以注意到常数 c,它决定了前两个项之间的平衡。c 越高,我们就越会假设模型中概率解码器的 f(z) 周围存在较高的方差,因此,我们越倾向于正则化项而不是重构项(如果 c 较低,则相反)。 将神经网络引入模型 到目前为止,我们已经建立了一个依赖于三个函数 f、g 和 h 的概率模型,并使用变分推理表达了要解决的优化问题,以便获得 f*、g* 和 h*,从而为该模型提供最佳编码解码方案。由于我们无法轻松地在整个函数空间上进行优化,因此我们限制了优化范围并决定将 f、g 和 h 表示为神经网络。因此,F、G 和 H 分别对应于由网络架构定义的函数系列,并且优化是针对这些网络的参数进行的。 实际上,g 和 h 不是由两个完全独立的网络定义的,而是共享部分架构和权重,因此我们有
添加图片注释,不超过 140 字(可选)
由于它定义了 q_x(z) 的协方差矩阵,因此 h(x) 应该是一个方阵。但是,为了简化计算并减少参数数量,我们做出额外的假设,即 p(z|x) 的近似值 q_x(z) 是一个具有对角协方差矩阵的多维高斯分布(变量独立性假设)。在此假设下,h(x) 只是协方差矩阵对角线元素的向量,因此具有与 g(x) 相同的大小。但是,我们以这种方式减少了我们考虑用于变分推断的分布族,因此获得的 p(z|x) 的近似值可能不太准确。
添加图片注释,不超过 140 字(可选)
与对 p(z|x) 进行建模的编码器部分相反,我们将其视为均值和协方差均为 x(g 和 h)函数的高斯分布,而我们的模型假设 p(x|z) 为具有固定协方差的高斯分布。定义该高斯分布均值的变量 z 的函数 f 由神经网络建模,可表示如下
添加图片注释,不超过 140 字(可选)
然后通过连接编码器和解码器部分获得整体架构。然而,我们仍然需要非常小心从编码器在训练期间返回的分布中采样的方式。采样过程必须以允许误差通过网络反向传播的方式表示。一个简单的技巧,称为重新参数化技巧,用于使梯度下降成为可能,尽管在架构的中途发生了随机采样,并且利用以下事实:如果 z 是一个服从高斯分布的随机变量,其平均值为 g(x),协方差为 H(x)=h(x).h^t(x),那么它可以表示为
添加图片注释,不超过 140 字(可选)
添加图片注释,不超过 140 字(可选)
最后,通过这种方式获得的变分自动编码器架构的目标函数由上一小节的最后一个方程给出,其中理论期望被或多或少准确的蒙特卡罗近似所取代,该近似大多数时候都包含一次抽取。因此,考虑到这个近似并表示 C = 1/(2c),我们恢复了上一节中直观得出的损失函数,该函数由重构项、正则化项和一个常数组成,用于定义这两个项的相对权重。
添加图片注释,不超过 140 字(可选)
总结 本文的主要内容如下:
-
降维是减少描述某些数据的特征数量的过程(通过仅选择初始特征的子集或将它们组合成数量较少的新特征),因此可以看作是一种编码过程
-
自动编码器是由编码器和解码器组成的神经网络架构,它们为数据处理创造了一个瓶颈,并且经过训练,在编码-解码过程中丢失的信息量最少(通过梯度下降迭代进行训练,目的是减少重建误差)
-
由于过度拟合,自动编码器的潜在空间可能非常不规则(潜在空间中相近的点可能会产生非常不同的解码数据,潜在空间中的一些点在解码后可能会产生毫无意义的内容,......),因此,我们无法真正定义一个生成过程,该过程只是从潜在空间中采样一个点并使其通过解码器来获得新的数据
-
变分自动编码器 (VAE) 是一种自动编码器,它通过使编码器返回潜在空间上的分布而不是单个点来解决潜在空间不规则性的问题,并在损失函数中添加返回分布的正则化项,以确保更好地组织潜在空间
-
假设一个简单的底层概率模型来描述我们的数据,那么 VAE 的非常直观的损失函数(由一个重建项和一个正则化项组成)就可以仔细推导出来,特别是使用变分推断的统计技术(因此得名“变分”自动编码器)
总结一下,我们可以概括出,在过去几年中,GAN 比 VAE 受益更多。社区对 GAN 表现出更高兴趣的原因之一是,与主导 GAN 的对抗性训练概念相比,VAE 理论基础(概率模型和变分推理)的复杂程度更高。
感谢关注雲闪世界。(Aws解决方案架构师vs开发人员&GCP解决方案架构师vs开发人员)
订阅频道(https://t.me/awsgoogvps_Host) TG交流群(t.me/awsgoogvpsHost)
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)