沃卡logo

什么是自动编码器?

2022-10-13来源:

如果您之前阅读过无监督学习技术,您可能会遇到“自动编码器”一词。自编码器是开发无监督学习模型的主要方式之一。然而,究竟什么是自动编码器?

简而言之,自动编码器通过接收数据、压缩和编码数据,然后从编码表示中重构数据来进行操作。对模型进行训练,直到损失最小化并且尽可能接近地再现数据。通过这个过程,自动编码器可以学习数据的重要特征。虽然这是对自动编码器的快速定义,但仔细研究自动编码器并更好地了解它们的功能将是有益的。本文将努力揭开自编码器的神秘面纱,解释自编码器的架构及其应用。

什么是自动编码器?

自编码器是神经网络。神经网络由多个层组成,自动编码器的定义方面是输入层包含与输出层一样多的信息。输入层和输出层具有完全相同数量的单元的原因是自动编码器旨在复制输入数据。它在分析数据并以无监督方式重建数据后输出数据副本。

通过自动编码器移动的数据不仅仅是从输入直接映射到输出,这意味着网络不只是复制输入数据。自动编码器包含三个组件:压缩数据的编码(输入)部分、处理压缩数据(或瓶颈)的组件和解码器(输出)部分。当数据被输入自动编码器时,它会被编码,然后压缩到更小的尺寸。然后对网络进行编码/压缩数据的训练,并输出该数据的重建。

那么为什么要训练一个网络来重建提供给它的数据呢?原因是网络学习了输入数据的“本质”或最重要的特征。训练完网络后,可以创建一个模型来合成相似的数据,并添加或减去某些目标特征。例如,您可以在颗粒状图像上训练自动编码器,然后使用经过训练的模型从图像中去除颗粒/噪声。

自动编码器架构

让我们看一下自动编码器的架构。我们将在这里讨论自动编码器的主要架构。我们将在下面的部分中讨论这种通用架构的变体。

照片:Michela Massi 来自 Wikimedia Commons

如前所述,自动编码器基本上可以分为三个不同的组件:编码器、瓶颈和解码器。

自编码器的编码器部分通常是一个前馈、密集连接的网络。编码层的目的是获取输入数据并将其压缩为潜在空间表示,生成具有降维的数据的新表示。

代码层或瓶颈处理数据的压缩表示。瓶颈代码经过精心设计,以确定观察数据中最相关的部分,或者以另一种方式表示对数据重建最重要的数据特征。这里的目标是确定数据的哪些方面需要保留,哪些可以丢弃。瓶颈代码需要平衡两个不同的考虑:表示大小(表示的紧凑程度)和变量/特征相关性。瓶颈对网络的权重和偏差执行逐元素激活。瓶颈层有时也称为潜在表示或潜在变量。

解码器层负责获取压缩数据并将其转换回与原始未更改数据具有相同维度的表示。转换是使用编码器创建的潜在空间表示完成的。

自编码器最基本的架构是前馈架构,其结构很像多层感知器中使用的单层感知器。与常规的前馈神经网络非常相似,自动编码器是通过使用反向传播来训练的。

自动编码器的属性

有各种类型的自动编码器,但它们都具有将它们结合在一起的某些属性。

自动编码器自动学习。它们不需要标签,如果提供足够的数据,很容易让自动编码器在特定类型的输入数据上达到高性能。

自动编码器是特定于数据的。这意味着他们只能压缩与自动编码器已经训练过的数据高度相似的数据。自动编码器也是有损的,这意味着模型的输出与输入数据相比会下降。

在设计自动编码器时,机器学习工程师需要注意四个不同的模型超参数:代码大小、层数、每层节点和损失函数。

代码大小决定了有多少节点开始网络的中间部分,更少的节点压缩更多的数据。在深度自动编码器中,虽然层数可以是工程师认为合适的任何数量,但随着编码器的继续,层中的节点数应该减少。同时,解码器的情况正好相反,这意味着随着解码器层接近最后一层,每层的节点数应该增加。最后,自动编码器的损失函数通常是二元交叉熵或均方误差。二进制交叉熵适用于数据输入值在 0 – 1 范围内的情况。

自动编码器类型

如上所述,存在经典自动编码器架构的变体。让我们来看看不同的自动编码器架构。

照片:Michela Massi 来自 Wikimedia Commons,CC BY SA 4.0

虽然自动编码器通常具有通过减少节点来压缩数据的瓶颈,但稀疏自动编码器是该典型操作格式的替代方案。在稀疏网络中,隐藏层保持与编码器和解码器层相同的大小。相反,给定层内的激活会受到惩罚,设置它以便损失函数更好地捕捉输入数据的统计特征。换句话说,虽然稀疏自动编码器的隐藏层比传统的自动编码器有更多的单元,但在任何给定时间只有一定百分比的单元是活动的。最有影响的激活函数被保留,其他的被忽略,这个约束有助于网络确定输入数据中最显着的特征。

收缩的

收缩自动编码器旨在抵御数据中的微小变化,保持数据的一致表示。这是通过对损失函数施加惩罚来实现的。这种正则化技术基于雅可比矩阵的 Frobenius 范数,用于输入编码器激活。这种正则化技术的效果是模型被迫构建一个编码,其中相似的输入将具有相似的编码。

卷积

卷积自动编码器通过将数据分成多个小节,然后将这些小节转换为简单的信号来对输入数据进行编码,这些简单的信号相加在一起以创建数据的新表示。与卷积神经网络类似,卷积自动编码器专门研究图像数据的学习,它使用一个过滤器,逐段移动到整个图像。编码层生成的编码可用于重建图像、反映图像或修改图像的几何形状。一旦网络学习了过滤器,就可以在任何足够相似的输入上使用它们来提取图像的特征。

去噪

照片:MAL 来自 Wikimedia Commons,CC BY SA 3.0

去噪自动编码器将噪声引入编码,导致编码是原始输入数据的损坏版本。这个损坏的数据版本用于训练模型,但损失函数将输出值与原始输入进行比较,而不是损坏的输入。目标是网络将能够复制图像的原始、未损坏版本。通过将损坏的数据与原始数据进行比较,网络可以了解数据的哪些特征最重要,哪些特征不重要/损坏。换句话说,为了让模型对损坏的图像进行去噪,它必须提取图像数据的重要特征。

变分

变分自动编码器通过对数据的潜在变量如何分布做出假设来运行。变分自动编码器为训练图像/潜在属性的不同特征生成概率分布。训练时,编码器为输入图像的不同特征创建潜在分布。

因为该模型将特征或图像学习为高斯分布而不是离散值,所以它能够用于生成新图像。对高斯分布进行采样以创建一个向量,该向量被输入解码网络,解码网络根据该样本向量渲染图像。本质上,该模型学习了训练图像的共同特征,并为它们分配了它们发生的概率。然后可以使用概率分布对图像进行逆向工程,生成与原始训练图像相似的新图像。

在训练网络时,对编码数据进行分析,识别模型输出两个向量,得出图像的均值和标准差。基于这些值创建分布。这是针对不同的潜在状态完成的。然后解码器从相应的分布中抽取随机样本,并使用它们来重建网络的初始输入。

自动编码器应用

自动编码器可用于多种应用,但它们通常用于降维、数据去噪、特征提取、图像生成、序列到序列预测和推荐系统等任务。

数据去噪是使用自动编码器从图像中去除颗粒/噪声。同样,自动编码器可用于修复其他类型的图像损坏,例如模糊图像或图像缺失部分。降维可以帮助高容量网络学习图像的有用特征,这意味着自动编码器可用于增强其他类型神经网络的训练。使用自动编码器进行特征提取也是如此,因为自动编码器可用于识别其他训练数据集的特征以训练其他模型。

在图像生成方面,自动编码器可用于生成虚假的人类图像或动画角色,这在设计人脸识别系统或动画的某些方面具有应用。

序列到序列预测模型可用于确定数据的时间结构,这意味着即使在序列中也可以使用自动编码器生成下一个。因此,可以使用自动编码器来生成视频。最后,深度自动编码器可用于通过拾取与用户兴趣相关的模式来创建推荐系统,编码器分析用户参与数据,解码器创建适合已建立模式的推荐。

  图片使用申明:原创文章图片源自‘Canva可画’平台免费版权图片素材;引用文章源自引用平台文章中所使用的原图。