什么是自动编码器?

数据挖掘 机器学习 神经网络 深度学习 自动编码器
2021-09-15 13:12:47

我是一名学生,我正在学习机器学习。我专注于深度生成模型,尤其是自动编码器变分自动编码器 (VAE)

我试图理解这个概念,但我遇到了一些问题。

到目前为止,我已经了解自动编码器接受输入,例如图像,并希望将此图像减少为潜在空间,该空间应包含数据集的基本特征,然后使用编码操作,然后使用操作在解码的过程中,它重构了由于编码部分而丢失了一些信息的图像。

在此之后,使用损失函数,它重建潜在空间,从而获得潜在特征。

在此处输入图像描述

关于 VAE,它使用概率方法,因此我们必须学习高斯的均值方差协方差。

到目前为止,这是我所理解的。

我真正不清楚的是我们试图用自动编码器和 VAE 学习什么?

我见过这样的例子,图像从非笑脸变成笑脸,或者从黑白图像变成彩色图像。

但我不明白主要概念,即:自动编码器做什么?

我在这里添加一些我学习的地方的来源,以便有需要的人可以看到它们:

  1. https://hackernoon.com/autoencoders-deep-learning-bits-1-11731e200694
  2. https://www.youtube.com/watch?v=yFBFl1cLYx8
  3. https://www.youtube.com/watch?v=9zKuYvjFFS8
3个回答

自动编码器有什么作用?

最简单的自动编码器将高维图像(例如,100K 像素)分解为低维表示(例如,长度为 10 的向量),然后使用这 10 个特征来尝试重建原始图像。你可以想象一个与人类的类比:我看着一个人,描述他们(“高大的,黑头发的,……”)然后在我忘记他们的样子之后,我试着只用我的笔记来描绘他们。

我们想学什么?

换句话说,为什么要打扰?几个原因:

  • 降维:10 个特征比 100K 像素方便很多。例如,我可以通过在 10 维空间中进行聚类来执行分类(而在 100K 维空间中进行聚类将是难以处理的)。
  • 语义:如果一切顺利,这 10 个特征中的每一个都会有一些明显的“解释”——例如,调整一个值会使主题看起来更老(尽管通常不是那么简单)。与受平移、旋转等影响的像素值相反。
  • 异常识别:如果我在狗身上训练我的自动编码器,它通常应该可以很好地编码和解码狗的图片。但是如果我把一只猫放进去,它可能会做得很糟糕——我可以说出来,因为输出看起来不像输入。因此,寻找自动编码器做得不好的地方是寻找异常的常用方法。

我见过一些例子,图像从非笑脸变成笑脸,或者从黑白图像变成彩色图像。

有许多不同类型的自动编码器。我上面描述的是最简单的一种。另一种常见的类型是“去噪”自动编码器——而不是重建原始图像,目标是构建与原始图像相关但不同的图像。

典型的例子是去噪(因此得名):你可以拍摄一张干净的图像,添加一堆噪声,通过自动编码器运行它,然后奖励自动编码器生成干净的图像。因此,输入(嘈杂的图像)实际上与所需的输出(干净的图像)不同。你举的例子是相似的。

设计这些类型的自动编码器的挑战通常是损失——你需要一些机制来告诉自动编码器它是否做了正确的事情。

关于 VAE,它使用概率方法,因此我们必须学习高斯的均值和协方差。

VAE 是第三种类型的自动编码器。它有点特别,因为它在数学上有很好的基础;不需要临时指标。数学太复杂了,无法在这里进行,但关键思想是:

  • 我们希望潜在空间是连续的。我们不希望将每个类分配到潜在空间的自己的角落,而是希望潜在空间具有明确定义的连续形状(即,高斯)。这很好,因为它强制潜在空间在语义上有意义。
  • 图片和潜在空间之间的映射应该是概率性的而不是确定性的。这是因为同一个主体可以产生多个图像。

所以,工作流程是这样的:

  • 你像以前一样从你的形象开始
  • 和以前一样,您的编码器确定一个向量(例如,长度 200)。
  • 但该向量不是潜在空间。相反,您使用该向量作为参数来定义潜在空间。例如,也许你选择你的潜在空间是一个 100 维的高斯。100 维高斯将需要每个维度的均值和标准差——这就是您使用长度为 200 的向量的目的。
  • 现在你有了一个概率分布。你从这个分布中抽取一个点。这是您的图像在潜在空间中的表示。
  • 和以前一样,您的解码器会将此向量转换为新的“输出”(例如,长度为 200K 的向量)。
  • 但是,这个“输出”不是你的输出图像。相反,您使用这些 200K 参数来定义 100K 维高斯。然后你从这个分布中采样一个点——这就是你的输出图像。

当然,高斯分布并没有什么特别之处,您可以轻松地使用其他一些参数分布。在实践中,人们通常使用高斯。

这有时会比其他自动编码器提供更好的结果。此外,当您查看潜在空间中的类之间时,有时会得到有趣的结果。图像在潜在空间中与聚类中心的距离有时与不确定性有关。

此外,这些高维高斯分布还有一个很好的特性,即这些高斯分布是严格数学意义上的概率分布它们近似于给定图像属于给定类别的概率。因此,有人认为 VAE 将能够克服深度学习的“挥手”,并将一切重新置于牢固的贝叶斯概率基础上。但当然,它只是一个近似值,而且这个近似值涉及到很多深度神经网络,所以目前还有大量的挥手。

顺便说一句,我喜欢在采访中使用这个问题——数量惊人的人声称有使用 VAE 的经验,但实际上并没有意识到 VAE 与“常规”AE 不同。

考虑自动编码器的一个简单方法是:一个特定的信息图像可以从其减少的或其他压缩的表示中重建的程度如何。如果你做到了这一步,这意味着你成功地重建了前一个句子,只使用了原来的 103 个字符中的 92 个。

更具体地说,自动编码器是经过训练以无监督方式学习有效数据编码的神经网络。目的是通过训练网络忽略“不重要”的信号(如噪声)来学习给定数据集的表示。通常,AE 被考虑用于降维。

实际上,AE

  • 最初将输入数据压缩为潜在空间表示
  • 从这个潜在空间表示重建输出
  • 计算输入和输出之间的差异,定义为重建损失。

在这个训练循环中,AE 将这种重建损失最小化,以便输出与输入尽可能相似。

在考虑自动编码器时,我发现一种有用的方法是以下结果:虽然 PCA 等方法识别输入空间中的最大变化轴,但在自动编码器中引入非线性激活函数允许识别最大轴嵌入在空间的(可能)非线性变换中的变化。

例如,考虑R^2根据函数 分布的数据y=x^2 + epsilon,其中ε~N(0,.0001)在这里,目标是将输入存储为一维压缩。PCA 方法可能会引入显着的损失(只要支持足够大),但具有非线性的自动编码器将能够将变换空间中的主嵌入轴识别为原像大致y=x^2 在输入空间,因此会引入更少的损失。您可以将自动编码器训练机制视为逼近一个变换函子,该函子产生一个具有线性原像的变换空间y=x^2然后,自动编码器通过根据输入在线性图像上的位置存储输入来工作y=x^2

观察到缺少非线性激活函数,自动编码器本质上等同于 PCA——直到基础发生变化。一个有用的练习可能是考虑为什么会这样。