AI 入门 101
什么是自动编码器?

如果您之前阅读过无监督学习技术,您可能已经遇到过“自动编码器”这个术语。自动编码器是开发无监督学习模型的主要方式之一。然而,什么是自动编码器呢?
简而言之,自动编码器通过输入数据、压缩和编码数据,然后从编码表示中重构数据。模型被训练直到损失被最小化,数据被尽可能地复制。通过这个过程,自动编码器可以学习数据的重要特征。虽然这是自动编码器的一个快速定义,但更详细地了解自动编码器和它们的工作原理将会很有益。这篇文章将尝试揭开自动编码器的神秘面纱,解释自动编码器的架构和应用。
什么是自动编码器?
自动编码器是神经网络。神经网络由多个层组成,自动编码器的定义特征是输入层包含与输出层相同数量的信息。输入层和输出层具有相同数量的单位的原因是自动编码器旨在复制输入数据。在分析和以无监督方式重构数据后,它输出数据的副本。
数据通过自动编码器时,不是直接从输入映射到输出,这意味着网络不仅仅是复制输入数据。自动编码器有三个组件:一个编码(输入)部分压缩数据,一个处理压缩数据的组件(或瓶颈),和一个解码(输出)部分。当数据输入自动编码器时,它被编码并压缩到较小的尺寸。然后,网络被训练在编码/压缩的数据上,并输出该数据的重构版本。
那么,为什么要训练一个网络仅仅是重构给定的数据?原因是网络学习输入数据的“本质”或最重要的特征。在训练网络后,可以创建一个模型来合成类似的数据,并添加或删除某些目标特征。例如,您可以训练自动编码器以去除图像中的噪点/干扰。
自动编码器架构
让我们来看看自动编码器的架构。我们将在这里讨论自动编码器的主要架构。在下面的部分中,我们将讨论这种一般架构的变体。

图片:Michela Massi via Wikimedia Commons,(https://commons.wikimedia.org/wiki/File:Autoencoder_schema.png)
如前所述,自动编码器可以基本上分为三个不同的组件:编码器、瓶颈和解码器。
自动编码器的编码器部分通常是一个前馈、密集连接的网络。编码层的目的是将输入数据压缩到潜在空间表示中,生成数据的新表示,该表示具有降低的维度。
代码层或瓶颈处理数据的压缩表示。瓶颈代码的设计目的是确定观察到的数据中最相关的部分,或者说,数据重构中最重要的特征。目标是确定哪些方面的数据需要保留,哪些可以丢弃。瓶颈代码需要在表示大小(表示的紧凑性)和变量/特征相关性之间取得平衡。瓶颈执行网络的权重和偏差的逐元素激活。瓶颈层有时也称为潜在表示或潜在变量。
解码器层负责将压缩的数据转换回与原始、未修改的数据具有相同维度的表示。转换是使用由编码器创建的潜在空间表示来完成的。
自动编码器最基本的架构是一个前馈架构,具有类似于多层感知器中使用的单层感知器的结构。与常规的前馈神经网络一样,自动编码器通过反向传播来训练。
自动编码器的属性
有各种类型的自动编码器,但它们都有一些共同的属性。
自动编码器可以自动学习。它们不需要标签,如果给予足够的数据,很容易让自动编码器在特定类型的输入数据上达到高性能。
自动编码器是数据特定的。这意味着它们只能压缩与自动编码器已训练的数据非常相似的数据。自动编码器也是有损的,这意味着模型的输出将比输入数据退化。
在设计自动编码器时,机器学习工程师需要注意四个不同的模型超参数:代码大小、层数、每层节点数和损失函数。
代码大小决定了网络中间部分的节点数,节点越少,数据压缩越多。在深度自动编码器中,虽然层的数量可以是工程师认为合适的任何数字,但编码器中的层的节点数应该随着编码器的进行而减少。相反,解码器中的情况相反,即解码器层的节点数应该随着解码器层接近最终层而增加。最后,自动编码器的损失函数通常是二元交叉熵或均方误差。二元交叉熵适用于输入值在0-1范围内的实例。
自动编码器类型
如上所述,经典自动编码器架构有变体。让我们来看看不同的自动编码器架构。
稀疏

图片:Michela Massi via Wikimedia Commons,CC BY SA 4.0(https://commons.wikimedia.org/wiki/File:Autoencoder_sparso.png)
虽然自动编码器通常具有通过节点减少来压缩数据的瓶颈,但稀疏自动编码器是对这种典型操作模式的替代。在稀疏网络中,隐藏层的大小与编码器和解码器层相同。相反,层内的激活被惩罚,使得损失函数能够更好地捕捉输入数据的统计特征。换句话说,虽然稀疏自动编码器的隐藏层比传统自动编码器具有更多的单位,但在任何时候只有一定百分比的单位是活跃的。最有影响力的激活函数被保留,其他函数被忽略,这个约束有助于网络确定输入数据中最显著的特征。
收缩
收缩自动编码器的设计目的是能够抵御数据的微小变化,同时保持对数据的一致表示。这是通过对损失函数施加惩罚来实现的。这种正则化技术基于输入编码器激活的雅可比矩阵的弗罗贝尼乌斯范数。这种正则化技术的效果是,模型被迫构造一个编码,其中类似的输入将具有类似的编码。
卷积
卷积自动编码器通过将数据分成子部分,然后将这些子部分转换为简单的信号来编码输入数据,这些信号被汇总以创建数据的新表示。与卷积神经网络一样,卷积自动编码器专门用于学习图像数据,并且使用一个滤器,该滤器在整个图像部分上移动。编码层生成的编码可以用于重构图像、反映图像或修改图像的几何形状。一旦网络学习了滤波器,就可以将其用于任何足够相似的输入以提取图像的特征。
去噪

图片:MAL via Wikimedia Commons,CC BY SA 3.0(https://en.wikipedia.org/wiki/File:ROF_Denoising_Example.png)
去噪自动编码器将噪声引入编码中,导致编码成为原始输入数据的损坏版本。这个损坏的数据版本用于训练模型,但损失函数将输出值与原始输入进行比较,而不是与损坏的输入进行比较。目标是网络能够复制原始、未损坏的图像版本。通过比较损坏的数据与原始数据,网络学习到数据中哪些特征最重要,哪些特征是无关紧要的/损坏的。换句话说,为了使模型能够去噪损坏的图像,它必须提取图像数据的重要特征。
变分
变分自动编码器通过对数据的潜在变量的分布做出假设来运作。变分自动编码器为训练图像的不同特征生成一个概率分布。当训练时,编码器为输入图像的不同特征创建潜在分布。

训练网络时,编码数据被分析,识别模型输出两个向量,提取图像的均值和标准差。根据这些值创建一个分布。这是针对不同潜在状态完成的。然后,解码器从相应分布中采样,并使用它们来重构输入网络的初始输入。
自动编码器应用
自动编码器可以用于广泛的应用,但它们通常用于诸如降维、数据去噪、特征提取、图像生成、序列到序列预测和推荐系统等任务。
数据去噪是使用自动编码器从图像中去除噪点/干扰。同样,自动编码器可以用于修复其他类型的图像损坏,例如模糊图像或缺失部分的图像。降维可以帮助高容量网络学习图像的有用特征,这意味着自动编码器可以用于增强其他类型神经网络的训练。这也适用于使用自动编码器进行特征提取,因为自动编码器可以用于识别其他训练数据集的特征以训练其他模型。
在图像生成方面,自动编码器可以用于生成假人脸或动画角色,这在设计面部识别系统或自动化某些动画方面具有应用。序列到序列预测模型可以用于确定数据的时间结构,这意味着自动编码器可以用于生成视频。最后,深度自动编码器可以用于创建推荐系统,通过识别与用户兴趣相关的模式来实现,编码器分析用户参与数据,解码器创建符合已建立模式的推荐。












