自动编码器是一种人工神经网络,用于以无监督的方式学习有效的数据编码。自动编码器的目标是学习一组数据的表示(编码),通常用于降维。最近,autoencoder概念已被广泛用于学习数据生成模型。一些2010年代最强大的人工智能中,有一些模型将稀疏的自动编码器堆放在深层神经网络中。
目标
自编码器学习将输入层中的数据压缩为短代码,然后将代码解压缩为与原始数据紧密匹配的内容。这迫使自动编码器进行降维,例如通过学习如何忽略噪声。
一些架构使用层叠稀疏自编码器层进行图像识别。
第一自编码器可能学会编码简单的特性,如边角;
第二分析第一层的输出,然后编码少地方特征,比如鼻尖;
第三可能编码一个整个鼻子等等,直到最后自编码器编码整个图像变成一个相匹配的代码(例如)“猫”的概念。
自编码器的另一种用途是作为一种生成模型:例如,如果一个系统手动输入它学过的“cat”和“flying”的代码,它可能会尝试生成一个“flying cat”的图像,即使它以前从未见过flying cat。
结构
自编码器的架构上,最简单的形式是一个前馈的、非递归神经网络,非常类似于用多个单层感知器构造出多层感知器(MLP)---有一个输入层、输出层,中间用一个或多个隐层与输出层连接, 但输出层拥有与输入层拥有相同数量的节点,为了重建它自己的输入(而不是预测给定输入X的目标值Y ),因此,自编码器是无监督的学习模型。
自动编码器总是由两部分组成,编码器和译码器,它可以被定义为 变换?和ψ, 比如:
在最简单的情况下,其中有一个隐藏层,自动编码器的编码器阶段对
并且将其映射到
这个z通常表示为代码、隐含变量或隐含表达式。这里,σ是激活函数,比如sigmoid函数或修正线性单元(RLU)。W是一个权值矩阵,b是一个偏置向量。之后,自动编码器的解码阶段映射z到重建的x′(与x同样大小);
是解码阶段的参数,一般与编码阶段的
不同,这取决于自动编码器的设计。
自动编码器也用来训练后最小化重构的错误(比如方差):
其中,x 通常是在某个输入训练集中取平均值。
如果特征空间F 输入空间维数低于X,然后特征向量?(X)可以被看作输入X的压缩表示。如果隐藏层数大于输入层数,自动编码器可能会学习恒等函数而变得无效。然而,实验结果表明,在这些情况下,自动编码器仍然可以学习有用的特征。
变化
有各种各样的技术来防止自动编码器学习恒等函数和提高他们捕捉重要信息和学习更丰富的表示的能力:
降噪自编码器
去噪自动编码器接受部分损坏的输入,同时通过训练恢复原始未失真输入。这种技术是通过一种特定的方法引入的,以获得良好的表示。一个好的表示是可以从损坏的输入中稳定地获取,并且对于恢复相应的纯净输入非常有用。这个定义包含以下隐含的假设:
- 较高层次的表示对于损坏的输入是相对稳定和健壮的;
- 有必要提取对表示输入分布有用的特性。
训练一个自编码器用于降噪数据, 为了腐蚀数据,有必要执行初步随机映射
,并且使用
作为一般自编码器的输入 ,唯一的例外是损失仍然应该计算为初始输入
而不是
稀疏编码器
自动编码器最初是在20世纪80年代发明的;然而,最初的版本很难训练,因为编码必须设置相同的小位集。这是通过“稀疏自编码”解决的。在一个稀疏的自编码器中,实际上有比输入更多(而不是更少)的隐藏单元,但只有少数的隐藏单元被允许同时激活。
稀疏性可以通过训练过程中损失函数中的附加项(通过比较激活的隐藏单元与一些低期望值的概率分布)、或手动调零除少数最强激活的隐藏单元(称为k-稀疏自动编码器)来获得。
变分自编码器
变分自编码器模型继承了自编码器体系结构,但对隐含变量的分布作了明确的假设。它使用变分方法进行隐含的表示学习,这导致额外的损失成分,特定的训练算法称为随机梯度变分贝叶斯(SGVB)。它假设数据是由一个有向图形化模型p(x | z)产生, 编码器是学习一个近似
到后验分布pθ(z | x),其中
和θ分别表示编码器的参数识别模型和解码器(生成模型)。本例中变分自编码器的目标有以下形式:
其中,
表示Kullback-Leibler散度,隐含变量的先验通常设置为中心各向同性多变量高斯函数
然而,最近还考虑了其他配置。
收缩自编码器(CAE)
收缩式自动编码器在其目标函数中添加了一个显式调节器,该调节器强制模型学习一个对输入值的细微变化具有鲁棒性的函数。相对于输入,这个调整器对应于编码器激活函数的雅可比矩阵的Frobenius范数。最终目标函数有以下形式:
与主成分分析(PCA)的关系
如果使用线性激活,或者只使用单个sigmoid形隐层,则自动编码器的最优解与主成分分析(PCA)密切相关。自编码器的权值与第一个p主分量张成的向量子空间相同,并且自编码器的输出是这个子空间上的正交投影。自编码器权值不等于主分量,一般不正交,但是,主成分可以通过奇异值分解得到。
训练
自动编码器的训练算法可以总结为
对于每个输入x,
- 在所有隐藏层执行前馈计算激活函数,然后在输出层获得输出x′
- 从输入x测量x′的偏差 (通常使用平方误差),
- 通过网络反向传播错误并执行权重更新。
自动编码器通常使用许多反向传播的变体之一(如共轭梯度法、最速下降法等)进行训练。虽然这些方法通常相当有效,但是使用反向传播来训练具有许多隐藏层的网络有一些基本问题。一旦错误被反向传播到前几层,它们就变得极小和微不足道。这意味着网络几乎总是能够重新构造所有训练数据的平均值。虽然更先进的反向传播方法(如共轭梯度法)可以在一定程度上解决这一问题,但仍会导致学习过程非常缓慢,解决方案较差。这个问题可以通过使用近似最终解决方案的初始权值来解决。找到这些初始权重的过程通常被称为预训练。
Stephen Luttrell,在RSRE工作时,开发了一种无监督训练分层自组织神经网络的技术,这种神经网络具有“许多隐藏层”,相当于深层自编码器。Geoffrey Hinton开发了一种用于训练多层深层自动编码器的预训练技术。这种方法包括将每个相邻的两层作为受限的玻尔兹曼机器,以便预训练接近一个好的解决方案,然后使用反向传播技术来微调结果。这个模型以深度置信网络的名字命名。
如需转载,请著名出处!
本文暂时没有评论,来添加一个吧(●'◡'●)