欢迎来到太阳集团8722娱乐!

太阳集团8722娱乐

高精度编码器成功进入中国航天领域

被列为重点攻关计划并已多次荣获科技创新项目基金!

咨询热线
0431-85102283
新闻中心
您的位置:太阳集团 > 行业新闻 > 详细内容

透彻理解变分自编码器VAE生成图像的原理

发布者:太阳集团8722娱乐2019-04-26

VAE可以说是最有用的自动编码器类型,但在我们尝试解决VAE之前,有必要了解通常用于数据压缩或去噪的传统自动编码器。

在本文中,我们将重点介绍一种称为变分自动编码器的特定类型的自动编码器。网上有很多文章解释了如何使用自动编码器,但没有一篇特别全面。在本文将说明为什么我们可能想要使用VAE、他们解决的问题类型,给出这些神经架构如何工作的数学背景,以及使用Keras的一些实际实现。

首先会试着通过一些例子让你对VAE可以做的事情感到兴奋。

VAE的力量

假设您正在开发一款视频游戏,并且您拥有一款风格非常复杂的开放世界游戏。你聘请了一个平面设计师团队来制作一堆植物和树木来装饰你的世界,但是一旦把它们放进游戏中你就会觉得它看起来不自然,因为同一物种的所有植物看起来完全一样,那么你能做些什么呢?

首先,您可能建议使用一些参数化来随机尝试和扭曲图像,但有多少特征就足够了?这种变化应该有多大?一个重要的问题是,实施计算密集程度如何?

这是使用变分自动编码器的理想情况。我们可以训练神经网络来学习关于植物的潜在特征,然后每当我们的世界中出现一个,我们就可以从我们的"学习"特征中随机抽取样本并生成一个独特的植物。事实上,这是多少开放世界游戏开始在他们的世界中产生风景的方面。

我们来看一个更加图形化的例子。想象一下,我们是一名建筑师,并希望为任意形状的建筑物生成平面图。我们可以使用自动编码器网络来学习给定任意构建形状的数据生成分布,并且它将从我们的数据生成分布中获取样本并生成平面图。这个想法在下面的动画中显示。

这些对设计师的潜力可以说是最突出的。想象一下,我们为一家时装公司工作,并负责创造新的服装款式,事实上,我们可以在"时尚"商品上训练自动编码器,并让网络学习时装发布的数据。随后,我们可以从这个低维潜在分布中获取样本,并使用它来创建新的想法。

最后一个示例是我们将在本教程的最后一部分中使用的示例,其中将研究时尚流行的MNIST数据集。

自动编码

传统的自动编码器

自动编码器是令人惊讶的简单神经架构。它们基本上是一种压缩形式,类似于使用MP3压缩音频文件的方式,或者使用JPEG压缩图像文件。

自动编码器与主成分分析(PCA)密切相关。实际上,如果自动编码器中使用的激活函数在每个层内都是线性的,则瓶颈中存在的潜在变量直接对应于来自PCA的主要组件。通常,自动编码器中使用的激活函数是非线性的,典型的激活函数是ReLU(整流线性单元)和S形激活函数。

网络背后的数学很容易理解,所以我将简要介绍一下。本质上,我们将网络分为两个部分,即编码器和解码器。

由φ表示的编码器功能将原始数据X映射到潜在空间F,潜在空间F存在于瓶颈处。由ψ表示的解码器功能将瓶颈处的潜在空间F映射到输出。在这种情况下,输出与输入功能相同。因此,我们基本上试图在一些广义非线性压缩之后重建原始图像。

编码网络可以由通过激活函数的标准神经网络函数表示,其中z是潜在维度。

类似地,解码网络可以以相同的方式表示,但是使用不同的权重,偏差和潜在的激活函数。

然后可以根据这些网络函数编写损失函数,并且我们将使用这种损失函数通过标准反向传播过程训练神经网络。

由于输入和输出是相同的图像,这不是真正的监督或无监督学习,因此我们通常称之为自我监督学习。自动编码器的目的是选择我们的编码器和解码器函数,使得我们需要最少的信息来对图像进行编码,使得它可以在另一侧再生。

如果我们在瓶颈层中使用的节点太少,重新创建图像的能力将受到限制,我们将重新生成模糊或无法识别原始图像。如果我们使用太多节点,那么根本不需要使用压缩。

压缩的情况非常简单,例如,如果你下载某些内容时,就会压缩发送给您的数据。一旦它到达你的计算机,它将通过解压缩算法,然后显示在您的计算机上。这类似于zip文件的工作方式,除了它是通过流式算法在幕后完成的。

去噪自动编码器

还有其他几种类型的自动编码器。最常用的一种是去噪自动编码器,它将在本文后面用Keras进行分析。这些自动编码器在训练之前为数据添加了一些白噪声,但在训练时将误差与原始图像进行比较。这迫使网络不会过度适应图像中存在的任意噪声。稍后我们将使用它来从扫描的文档图像中删除折痕和黑暗区域。

稀疏自动编码器

与直观相反,稀疏自动编码器具有比输入或输出维度更大的潜在维度。但是,每次运行网络时,只有一小部分神经元会发射,这意味着网络本质上是"稀疏的"。这类似于去噪自动编码器,在某种意义上它也是一种正规化形式,以减少网络过度拟合的倾向。

压缩自动编码器

压缩编码器与后两个程序大致相同,但在这种情况下,我们不会改变体系结构,只需在损失函数中添加正则化器。这可以被认为是脊回归的神经形式。

现在,我们了解了自动编码器的用途,我们需要了解他们不擅长什么。一些最大的挑战是:

· 潜在空间的差距

· 潜在空间中的可分离性

· 离散潜伏空间

这些问题都可以在此图中说明。

MNIST数据集的潜在空间表示

该图显示了潜在空间内不同标记数字的位置。我们可以看到潜在空间包含间隙,不知道这些空间中的哪些字符可能看起来像。这相当于在监督学习问题中缺乏数据,因为我们的网络尚未针对潜在空间的这些情况进行过训练。另一个问题是空间的可分离性,上图中有几个数字很好地分开,但也有标记随机散布的区域,这使得难以分离字符的独特特征(在这种情况下数字0 -9)。这里的另一个问题是无法研究连续的潜在空间,例如:

传统自动编码器的这些问题意味着在我们学习数据生成分布并生成新数据和图像之前,我们还有很长的路要走。

现在我们了解了传统自动编码器的工作原理,我们将继续使用变分自动编码器。这些稍微复杂一些,因为它们实现了一种取自贝叶斯统计数据的变分推理。我们将在下一节中更深入地讨论这个问题

变分自动编码器

VAE继承了传统自动编码器的架构,并使用它来学习数据生成分布,这允许我们从潜在空间中随机抽取样本。然后可以使用解码器网络对这些随机样本进行解码,以生成具有与训练网络的特征类似的特征的独特图像。

对于那些熟悉贝叶斯统计数据的人来说,编码器正在学习后验分布的近似。这种分布通常难以分析,因为它没有封闭形式的解决方案。这意味着我们可以执行计算昂贵的采样程序,如马尔可夫链蒙特卡罗(MCMC)方法,或者我们可以使用变分方法。正如人们可能怀疑的那样,变分自动编码器使用变分推理来生成其对该后验分布的近似。

我们需要了解的第一件事是后验分布以及为什么我们无法计算它。看看下面的等式,这是贝叶斯定理。这里的前提是我们想要知道如何从我们的潜在变量z中学习如何生成数据x 。这意味着我们想要学习p(z | x)。但是,我们不知道这种分布,我们不需要,因为我们可以用贝叶斯定理重新表达这个概率。然而,这并不能解决我们所有的问题,因为被称为证据的分母通常是难以处理的。然而,一切都没有丢失,因为存在一种允许我们近似这种后验分布的厚脸皮解决方案。事实证明,我们可以将此推理问题转化为优化问题。

为了近似后验分布,我们需要一种方法来评估提案分布与真实后验的比较。要做到这一点,我们使用贝叶斯统计学家最好的朋友,Kullback-Leibler散度。KL散度衡量两种概率分布的相似程度; 如果它们是相同的,则分歧为零,如果它是正数,则两个分布是不同的。KL严格为正,虽然技术上不是距离,因为函数不对称。我们以下列方式使用KL散度。

这个等式可能看起来令人生畏,但这里的想法非常简单。我们提出了一系列可能的分布,可能是我们的数据生成方式Q,我们希望找到最优分布q *,它能最小化我们在拟议分布和实际分布之间的距离。我们对这个公式仍有一个问题,即我们实际上并不知道p(z | x),因此我们无法计算KL偏差。那我们如何解决这个问题?

这是开始有点深奥的地方。我们可以做一些数学操作,并用ELBO(证据下界)和另一个涉及p(x)的术语重写KL散度。

有趣的是,ELBO是这个等式中唯一的变量,它取决于我们选择的分布。另一个术语不受我们选择的分布的影响,因为它不依赖于q。因此,我们可以通过在上面的等式中最大化ELBO来最小化KL散度。关键是我们可以实际计算ELBO,这意味着我们现在可以执行优化过程。

因此,我们现在需要做的就是为Q提供一个很好的选择,然后区分ELBO,将其设置为零,瞧,我们有最佳分布。

通常,在定义q时,为了简单起见,进行平均场变分推断。这基本上表示每个变分参数彼此独立。因此,我们对每个数据点都有一个q,我们可以将它们相乘以给出一个联合概率,给出"平均场" q。

实际上,我们可以根据需要选择任意数量的字段或集群。例如,在MNIST的情况下,我们可能会选择10个集群,因为我们知道存在10个可能的数字。

我们需要做的第二件事是通常称为重新参数化的技巧,我们将随机变量置于导数之外,因为随机变量的导数由于其固有的随机性而给出了更大的误差。

重新参数化技巧有点深奥,但它基本上说明我们可以将正态分布写成平均值加上一些标准偏差,乘以一些误差。

这意味着在区分时,我们不是取随机函数本身的导数,而只是它的参数。

如果这没有多大意义,下面这段话解释了这个技巧以及为什么它比随机变量本身的衍生物更好地表现出来:

这个过程没有一般的封闭形式解决方案,因此我们仍然在某种程度上限制了我们近似后验分布的能力。然而,指数分布族确实具有封闭形式的解决方案。这意味着我们可以使用标准分布,例如正态分布,二项式,泊松,β等。因此,虽然我们可能找不到真正的后验分布,但我们可以找到一个近似值,它可以在给定指数族的情况下发挥最佳作用。

变分推理的艺术是选择我们的分布族Q,它足够大以获得后验的良好近似,但不能太大以至于需要花费相当长的时间来计算。

现在我们已经对我们的网络如何训练以了解数据的潜在分布有了一个很好的了解,我们可以看看我们如何使用这种分布生成数据。

数据生成程序

看下面的图像,我们可以认为我们对数据生成过程的近似决定了我们想要生成数字'2',因此它从潜在变量质心生成值2。但是,我们可能不希望每次都生成相同的'2',就像我们的植物视频游戏示例一样,所以我们在潜在空间中为此项添加一些随机噪声,这是基于随机数和'学会了'价值分布的传播'2'。我们通过我们的解码器网络传递它,我们得到一个看起来与原始不同的2。

这是一个过于简化的版本,它抽象了实际自动编码器网络的架构。下面是在编码器和解码器网络中使用卷积层的真实变分自动编码器的体系结构的表示。我们看到,我们分别在潜在空间内学习数据生成分布的中心和扩展,然后从这些分布中"采样"以生成基本上"伪造"的数据。

学习过程的固有性质意味着看起来相似的参数(刺激相同的网络神经元发射)在潜在空间中聚集在一起,并且不是任意间隔的。这在下图中说明。我们看到2的值开始聚集在一起,而值3逐渐被推开。这很有用,因为它意味着网络不会在潜在空间中任意放置字符,从而使值之间的转换更真实。

整个网络架构的概述如下所示。我们使用一组图像训练自动编码器,以了解潜在空间内的平均值和标准偏差,从而形成我们的数据生成分布。接下来,当我们想要生成相似的图像时,我们从潜在空间中的一个质心进行采样,使用我们的标准偏差和一些随机误差稍微扭曲它,然后通过解码器网络传递它。从该示例可以清楚地看出,最终输出看起来与输入图像相似但不相同。

VAE编码教程

我们将介绍一种简单的去噪自动编码器,用于去除文档扫描图像上的折痕和标记,以及消除时尚MNIST数据集中的噪声。然后,我们将在使用MNIST数据集训练网络后使用VAE生成新的服装项目。

去噪自动编码器

MNIST

对于第一个练习,我们将向MNIST数据集添加一些随机噪声(盐和胡椒噪声),我们将尝试使用去噪自动编码器消除这种噪声。首先,我们执行预处理:下载数据,缩放数据,然后添加噪声。

在此之后,我们为自动编码器网络创建了架构。这涉及多层卷积神经网络,编码器网络上的最大池化层以及解码器网络上的升级层。

除非你有GPU,否则该模型需要一段时间才能运行,每个时期大约需要3-4分钟。我们的输入图像,带噪声的输入图像和输出图像如下所示。

输入时尚MNIST的图像

用盐和胡椒噪声输入图像

去噪网络的输出

正如你所看到的,我们能够从嘈杂的图像中充分消除噪音,但我们已经失去了相当多的服装细节分辨率。这是我们为强大网络支付的价格之一。可以调整网络以使该最终输出更能代表输入图像。

文字清理

我们的第二个去噪自动编码器示例包括清理折痕和暗区的扫描图像。以下是我们想要获得的输入和输出图像。

输入"嘈杂"文本数据的图像

清理文本图像

变分自动编码器

对于我们的结果,我们将尝试生成时尚MNIST数据集中存在的服装项目的新图像。

这种神经结构有点复杂,并且包含一个称为"Lambda"层的采样层。

这是架构,但我们仍然需要插入损失函数并合并KL分歧。

我们现在可以查看我们的重建样本,看看我们的网络能够学到什么。

我们可以清楚地看到鞋子,手提包和服装商品之间的过渡。此处并未绘制所有潜在空间以帮助提高图像清晰度。我们还可以查看时尚MNIST数据集中存在的10个服装项目中的每一个的潜在空间和颜色代码。

我们看到这些项目被分成不同的集群

通过本文对变分自动编码器和变分推理的透彻讲解。希望你们现在可以更好地了解自动编码器是什么以及它们如何在实际应用中使用。