一、说明
在本文中,我们将讨论自编码器.自编码器是一种特殊的神经网络架构,基本原理是通过压缩来学习重建输入数据。它们在特定领域有很多应用,例如异常检测、聚类和特征重建。阅读本文后,您将了解到:1 什么是自编码器以及它的作用. 2 构成自编码的架构结构. 3 如何在 Python 中实现自编码器并训练二元分类器。
二、什么是自编码器?
自编码器是一种特定的神经网络架构,旨在学习输入数据的压缩表示,称为编码。
主要目标是从这种压缩表示中重建原始输入。简单来说,我们可以把它想象成一台相机:自编码器就像拍照一样,它试图只捕捉图像的基本细节(压缩),然后忠实地重建图像。在这个过程中,自编码器“学习”数据的基本特征。
自编码器工作时,会将输入数据转换成一种更紧凑的表示形式,称为潜在空间。潜在空间是潜在变量的集合,这些变量我们无法直接观察,但它们代表了原始数据的重要特征。例如,如果输入是一张人脸图像,那么潜在变量可能包含诸如人脸朝向、光照情况或是否佩戴眼镜等信息。
三、自编码器有什么用?
自编码器是人工智能领域中用途极其广泛的工具,并应用于各个领域,例如:
• 数据压缩:它们减少了表示数据所需的信息量,这对于在更小的空间内存储图像或视频非常有用。
• 降噪:它们可以去除图像中的噪点,从而提高图像质量。例如,它们可以改善在弱光条件下拍摄的照片。
• 异常检测:它们可以识别金融系统中的异常情况,例如欺诈交易。
• 面部识别:它们从面部提取关键特征,简化图像比较。
以上仅列举了几个最重要的应用,一旦理解了自编码器,就可以根据具体情况将其应用于各种场景。
四、自编码器的剖析
自编码器始终由两个主要部分组成:编码器,用于将输入数据转换为紧凑的表示;解码器,用于利用该表示重构原始输入。然而,并非所有编码器-解码器模型都是自编码器。
4.1 什么是编码器-解码器模型?
编码器-解码器模型是一种灵活的架构,广泛应用于深度学习领域。在这种模型中,编码器从输入中提取关键特征,解码器则基于这些特征生成输出。与自编码器不同,编码器-解码器的输出不一定是输入的副本。
例如,在机器翻译(序列到序列模型,seq2seq)中,编码器将一种语言(例如意大利语)的句子转换为潜在表示,解码器使用该潜在表示生成另一种语言(例如英语)的翻译。
在像 U-Net 这样的图像分割模型中,编码器提取图像特征(例如边缘或纹理),而解码器则利用这些特征构建分割掩码,以识别图像中的特定对象。在这种情况下,编码器-解码器模型采用监督学习的方式进行训练,使用已标注的数据。在图像分割中,模型通过将其预测结果(生成的掩码)与专家提供的掩码进行比较来学习。
4.2 自编码器:一个特例
另一方面,自编码器是编码器-解码器模型的一种特殊情况,用于重构原始输入。它们的特点是无监督学习:它们不需要带标签的数据进行训练。
自编码器的目标是发现数据中隐藏的特征。然而,自编码器的独特之处在于其学习方式,通常被称为自监督学习。虽然它不需要外部标签,但它有一个明确的目标来衡量其预测的准确性:原始输入。这使得自编码器能够评估其数据重构的效果,而这在无监督学习中通常是无法实现的。
五、自编码器是如何工作的?
自编码器是一种神经网络,其设计目的是压缩并重构输入数据。为此,它们会将输入数据通过一个称为瓶颈的结构,该结构会强制模型仅提取必要信息。这一过程使自编码器能够识别数据中隐藏的模式,并将大量信息压缩成紧凑的表示形式。
5.1 自动编码器的基本结构
所有自编码器都遵循一个基本结构,该结构由三个主要部分组成:
• 编码器:负责数据压缩。输入数据经过编码器层时,其维度会逐步降低。例如,如果图像包含数百万像素,编码器会将图像压缩成一组数量少得多的数字,这些数字仅代表最相关的信息。这个过程类似于压缩 ZIP 文件:去除不必要的信息,只保留核心内容。
• 瓶颈:这是架构中最紧凑的部分。生成的代码代表了原始输入的简化和抽象版本。这就像用一段话概括一本1000页的书:代码必须包含足够的细节,以便解码器能够重构整个故事。
• 解码器:解码器的功能与编码器相反:它接收压缩后的代码,并将其“解压缩”以重建原始数据。例如,如果原始输入是一幅图像,解码器会尝试根据代码逐像素地重建这幅图像。
5.2 自动编码器的独特功能
与其他降维技术(例如主成分分析 (PCA))相比,自编码器的主要优势之一是能够捕捉数据中的非线性关系。这得益于非线性激活函数的使用,例如sigmoid 函数或 ReLU 函数。
自编码器可以根据不同的数据类型和应用场景进行定制:
• 序列数据:通过 RNN 或 LSTM 处理,适用于文本或时间序列。
• 图像:采用 CNN 技术,最适合处理照片和视频。
• 复杂数据:采用混合架构或Transformer架构。
5.3 设计自编码器的关键因素
瓶颈(也称为代码)的大小决定了数据表示的压缩程度。过大的代码虽然可以实现近乎完美的重建,但会降低压缩的价值。相反,过小的代码可能包含的信息不足以进行良好的重建。
此外,增加自编码器的深度可以使模型捕捉更复杂的模式,但可能会减慢训练过程。然后,编码器层逐渐减少节点数量,在瓶颈处达到最小值。之后,解码器层增加节点数量,以将数据恢复到原始状态。总之,损失函数的选择取决于数据类型和应用场景。
六、不完全自编码器
不完全自编码器是最简单、最基本的自编码器变体之一,主要用于降维。这种架构的显著特征是存在一个固定的瓶颈,其隐藏层包含的节点数少于输入层和输出层。
6.1 不完全自编码器是如何工作的?
瓶颈压缩对网络容量起到约束作用,迫使模型将输入压缩成低维表示。
这种压缩迫使编码器仅保留输入的基本特征,即精确重构所必需的特征。如果不限制瓶颈容量,网络很容易过拟合训练数据,学习到简单的恒等函数:输出 = 输入。这是因为模型在没有约束的情况下,可以直接将输入数据复制到输出,而无法捕捉到任何重要的模式或有用的结构。
这种类型的自编码器尤其擅长将高维数据压缩成更紧凑的表示,这对于特征提取或在降维空间中进行可视化等应用非常有用。尽管不完全自编码器具有诸多优势,但它们也存在一些局限性,限制了其在复杂场景中的适用性。即使存在瓶颈,如果模型的编码器和解码器由多层和多个节点组成,它仍然可以学习恒等函数,从而使模型无法用于实际应用。瓶颈的固定容量使得这种架构缺乏灵活性:它可能不适合处理复杂或多样化的数据,从而限制了其在数据生成或图像分割等高级应用中的使用。
6.2 何时应该使用不完全自编码器?
不完全自编码器在以下场景中特别有用:
• 主要目标是降低维度。
• 数据相对简单,不需要对非常复杂的非线性相关性进行建模。
• 你想探索或可视化压缩潜在空间中的数据。
七、正则化自编码器
正则化自编码器代表了不完全自编码器的演进,旨在克服后者在灵活性和泛化能力方面的局限性。其关键在于引入正则化技术: 通过调整或限制训练过程中重构误差的计算方式。其目标不仅在于降低过拟合的风险,还在于确保模型能够从数据集中学习到有用且结构良好的特征。
7.1 正则化自编码器是如何工作的?
正则化是在自编码器的优化目标(通常通过损失函数表示)中添加一个项或约束。这个附加项引导模型学习有意义的模式,避免出现简单的解决方案,例如简单地复制输入数据。一些最常见的正则化技术包括:
- 稀疏自编码器:它使用正则化项,强制潜在空间中只有部分神经元同时处于活动状态,使潜在空间更易于解释,从而有利于数据的紧凑和本质表示。
- 去噪自编码器:它们会人为地向输入数据中引入噪声,并训练模型重构原始的无噪声输入。从而提高模型对噪声数据的鲁棒性,并增强其泛化能力。
- 变分自编码器:它们对潜在空间施加概率分布(通常是高斯分布),迫使学习到的表示遵循统计结构,从而增加生成与原始输入相似的新数据的可能性。
7.2 稀疏自编码器
它们是自编码器的一种变体,对神经网络的节点引入了稀疏性约束。这种方法即使在网络容量较大(即节点和层数较多)的情况下,也能学习到有意义的表示,而不会出现过拟合的风险。
在标准的不完全自编码器中,信息瓶颈是通过减少隐藏层中的节点数量来造成的。相反,在稀疏自编码器中,每次观测同时激活的神经元数量是有限的。
每个激活值超过特定阈值(例如,期望的平均激活水平)的神经元都会受到惩罚,惩罚机制是在损失函数中添加一个正则化项。这种稀缺性约束迫使网络高效地表示数据,并且仅当输入数据中存在与特定神经元所代表的特征相匹配的特征时才激活这些神经元。
7.2.1 Kullback-Leibler 散度
Kullback -Leibler散度是衡量两个概率分布之间差异的指标。当应用于稀疏自编码器时,KL散度允许对神经元施加稀疏性约束,惩罚偏离目标分布的激活值。
给定目标分布p(期望的稀疏度)和实际分布q(激活值的分布),KL 散度计算如下:
其中:
• p(i) 是节点 i 的期望激活概率。
• q(i) 是节点 i 的实际激活概率。
• 对数函数按比例惩罚 p(i) 和 q(i) 之间的差异。
(有关吉隆坡市场分化的更多信息,请点击此处。)
在稀疏自编码器(SAE)中,KL散度被用作训练过程中的正则化项。具体过程如下:
• 目标分布:每个隐藏神经元都有一个期望的稀疏度ρ,它代表期望的平均激活值。例如,如果ρ = 0.05,则该神经元应该只在5%的观测值中处于激活状态。
• 实际分布:在训练过程中,计算一批数据的隐藏神经元实际激活值 ρ̂ 的平均值。
• 稀缺性惩罚:在损失函数中添加一个项,对每个 ρ̂ 偏离 ρ 的神经元进行惩罚。稀缺性惩罚与 ρ 和 ρ̂ 之间的 KL 散度成正比:
其中j为隐藏节点的索引。
7.2.2 KL发散在SAE中的优势
KL散度允许精确调整神经元的激活水平,使其适应数据的复杂性。通过确保同时激活的神经元数量有限,SAE有助于发现有用且稀疏的潜在特征。限制神经元的激活可以降低网络记忆训练数据特定细节的可能性,从而提高泛化能力。
KL散度也广泛应用于变分自编码器(VAE)中,但用途不同。实际上,在VAE中,KL散度衡量的是从潜在空间学习到的分布(例如,参数化的高斯分布)与目标分布(通常是标准正态分布)之间的差异。这种约束引导VAE生成一个结构良好且易于解释的潜在空间。
八、去噪自编码器
去噪自编码器(DAE)是自编码器的一种变体,旨在通过去除输入中添加的噪声来学习恢复损坏的数据。它们的降噪能力使它们非常适合用于预处理任务和构建鲁棒的潜在表示。
8.1 DAE 的工作原理
在训练过程中,输入数据会被故意添加噪声(例如,高斯噪声、椒盐噪声或掩蔽部分数据),从而进行修改。目标并非重建受损数据,而是恢复原始的、无噪声的数据。编码器将受损数据降维为压缩且鲁棒的表示,解码器通过去除噪声来重建原始数据,并通过将输出与原始的、未受损的数据版本(“真实值”)进行比较来衡量重建误差。
损失函数用于评估重建输出与原始数据的偏差程度。损失函数的一个常见例子是原始数据和重建数据之间的均方误差 (MSE):
8.2 自编码器去噪的优势
DAE 学习的表示与数据中无关的变化无关,因此它们适用于处理噪声或部分损坏的输入。
添加噪声会隐式地增加训练数据的变异性,起到一种正则化的作用,降低记忆数据特定细节的风险。离散自动机(DAE)用于“清理”图像和音频文件等噪声数据,从而提高数据质量以进行后续分析。去噪原理已被应用于诸如稳定扩散(Stable Diffusion)等先进的生成式架构中,以从噪声输入中生成高质量图像。
九、变分自编码器
变分自编码器(VAE)是自编码器的高级演进,其设计目的不仅在于压缩数据,还在于基于从训练数据中学习到的分布生成新的样本。这使得它们作为概率生成模型尤为强大。更多详细讨论请参见上方链接。
与将输入编码成单个离散向量的标准自编码器不同,变分自编码器(VAE)将潜在空间建模为连续概率分布。潜在空间由两个向量表示:
• 均值(μ):代表潜在分布的中心。
• 标准差(σ):表示均值周围的变异程度。
VAE并非将输入映射到潜在空间中的单个点,而是映射到一个分布,从而能够生成更多样化的数据。训练完成后,VAE可以使用标准正态分布从潜在空间中采样新的点。由于学习到了概率分布,新生成的样本与训练数据的原始分布保持一致。
9.1 VAE中的损失函数
VAE中的损失函数由两个部分组成:
重建误差(L_rec ):
• 衡量解码器从潜在向量中重构原始输入的效果。
• 通常基于均方误差(MSE)或交叉熵损失。
基于KL散度的正则化(L_KL ):
• 它会惩罚学习到的潜在分布 (q(z|x)) 与预定义的先验分布 (p(z)) 之间的差异,通常为标准正态分布 (N(0,I))。
• 它确保从潜在空间生成的样本与原始数据一致。
总体损失函数由下式给出:
VAE 的一个关键要素是重参数化技巧,它允许从潜在空间进行可微采样,从而能够通过反向传播进行训练。
其中
• ϵ∼N(0,1) 是来自标准正态分布的随机样本。
• μ 和 σ 分别是编码器学习到的均值和标准差。
该过程将随机部分(ϵ)与学习部分(μ 和 σ)分离,从而确保梯度流是可计算的。
9.2 VAE 的优势
变分自编码器(VAE)可以生成与原始分布一致的新数据,这在图像、信号和文本生成等应用中非常有用。由于潜在空间是连续的,VAE 允许在潜在空间中的两点之间进行插值,从而生成平滑的数据过渡。诸如条件 VAE 之类的变体允许您通过提供额外的条件输入来控制生成样本的特征。