自动编码器有什么作用?
最简单的自动编码器将高维图像(例如,100K 像素)分解为低维表示(例如,长度为 10 的向量),然后仅使用这 10 个特征来尝试重建原始图像。你可以想象一个与人类的类比:我看着一个人,描述他们(“高大的,黑头发的,……”)然后在我忘记他们的样子之后,我试着只用我的笔记来描绘他们。
我们想学什么?
换句话说,为什么要打扰?几个原因:
- 降维:10 个特征比 100K 像素方便很多。例如,我可以通过在 10 维空间中进行聚类来执行分类(而在 100K 维空间中进行聚类将是难以处理的)。
- 语义:如果一切顺利,这 10 个特征中的每一个都会有一些明显的“解释”——例如,调整一个值会使主题看起来更老(尽管通常不是那么简单)。与受平移、旋转等影响的像素值相反。
- 异常识别:如果我在狗身上训练我的自动编码器,它通常应该可以很好地编码和解码狗的图片。但是如果我把一只猫放进去,它可能会做得很糟糕——我可以说出来,因为输出看起来不像输入。因此,寻找自动编码器做得不好的地方是寻找异常的常用方法。
我见过一些例子,图像从非笑脸变成笑脸,或者从黑白图像变成彩色图像。
有许多不同类型的自动编码器。我上面描述的是最简单的一种。另一种常见的类型是“去噪”自动编码器——而不是重建原始图像,目标是构建与原始图像相关但不同的图像。
典型的例子是去噪(因此得名):你可以拍摄一张干净的图像,添加一堆噪声,通过自动编码器运行它,然后奖励自动编码器生成干净的图像。因此,输入(嘈杂的图像)实际上与所需的输出(干净的图像)不同。你举的例子是相似的。
设计这些类型的自动编码器的挑战通常是损失——你需要一些机制来告诉自动编码器它是否做了正确的事情。
关于 VAE,它使用概率方法,因此我们必须学习高斯的均值和协方差。
VAE 是第三种类型的自动编码器。它有点特别,因为它在数学上有很好的基础;不需要临时指标。数学太复杂了,无法在这里进行,但关键思想是:
- 我们希望潜在空间是连续的。我们不希望将每个类分配到潜在空间的自己的角落,而是希望潜在空间具有明确定义的连续形状(即,高斯)。这很好,因为它强制潜在空间在语义上有意义。
- 图片和潜在空间之间的映射应该是概率性的而不是确定性的。这是因为同一个主体可以产生多个图像。
所以,工作流程是这样的:
- 你像以前一样从你的形象开始
- 和以前一样,您的编码器确定一个向量(例如,长度 200)。
- 但该向量不是潜在空间。相反,您使用该向量作为参数来定义潜在空间。例如,也许你选择你的潜在空间是一个 100 维的高斯。100 维高斯将需要每个维度的均值和标准差——这就是您使用长度为 200 的向量的目的。
- 现在你有了一个概率分布。你从这个分布中抽取一个点。这是您的图像在潜在空间中的表示。
- 和以前一样,您的解码器会将此向量转换为新的“输出”(例如,长度为 200K 的向量)。
- 但是,这个“输出”不是你的输出图像。相反,您使用这些 200K 参数来定义 100K 维高斯。然后你从这个分布中采样一个点——这就是你的输出图像。
当然,高斯分布并没有什么特别之处,您可以轻松地使用其他一些参数分布。在实践中,人们通常使用高斯。
这有时会比其他自动编码器提供更好的结果。此外,当您查看潜在空间中的类之间时,有时会得到有趣的结果。图像在潜在空间中与聚类中心的距离有时与不确定性有关。
此外,这些高维高斯分布还有一个很好的特性,即这些高斯分布是严格数学意义上的概率分布。它们近似于给定图像属于给定类别的概率。因此,有人认为 VAE 将能够克服深度学习的“挥手”,并将一切重新置于牢固的贝叶斯概率基础上。但当然,它只是一个近似值,而且这个近似值涉及到很多深度神经网络,所以目前还有大量的挥手。
顺便说一句,我喜欢在采访中使用这个问题——数量惊人的人声称有使用 VAE 的经验,但实际上并没有意识到 VAE 与“常规”AE 不同。