前言
这里通过自己的学习和理解简单介绍一下自编码器的定义和作用,希望大家可以有所收获~
一、自编码器是什么?
自编码器(Autoencoder,AE),是一种利用反向传播算法使得输出值等于输入值的神经网络,它先将输入压缩成潜在空间表征,然后通过这种表征来重构输出。
简单来说,就是可以自动实现编码与解码操作过程的网络模型,并且它的输入 x 与标签 y 相同,我们通过最小化标签 y 与输出 r 之间的误差,来优化自编码器模型。
因此,自编码器由两部分组成:
- 编码器:这部分能将输入压缩成潜在空间表征,可以用编码函数 h =f(x)表示。
- 解码器:这部分能重构来自潜在空间表征的输入,可以用解码函数 r =g(h)表示。
整个自编码器可以用函数 g(f(x)) = r 来描述,其中 f 为编码器, g 为译码器,使得输出 r 与原始输入 x 相近。
自编码器原理和各种变换的原理相似,都是将原始特征空间通过编码映射到一个新的编码空间,再由编码空间通过解码映射到解码空间。而当编码变换与解码变换符合某种条件时,解码空间和原始特征空间可以近似一致。
就像大名鼎鼎的傅里叶变换,通过它,可以把原始时域信号变换为频域信号,并且,频域信号可以通过反变换变换为时域信号。之所以要变换为频域信号,是为了获取原始信号在频域上的特征。同样的,对于自编码器的编码变换,也是为了获取不同角度,不同维度的特征(类似于SVM的核函数)。
按照Hinton的说法,自编码器的隐含层如果只有一层,其原理类似主成分分析(PCA);如果有多个隐含层,每个隐含层都是受限玻尔兹曼机神经网。训练时,相当于先对每两层间进行无监督学习,将整个网络达到理想的初始化分布,最后再通过反向传播算法的有监督学习调整模型权重,这样可以解决网络过深带来的梯度弥散问题。
二、为什么要用输入来重构输出?
如果自编码器的唯一目的是让输出值等于输入值,那这个算法将毫无用处。事实上,我们希望通过训练输出值等于输入值的自编码器,让潜在表征h将具有价值属性。
这可通过在重构任务中构建约束来实现。
从自编码器获得有用特征的一种方法是,限制h的维度使其小于输入x,这种情况下称作有损自编码器。通过训练有损表征,使得自编码器能学习到数据中最重要的特征。
如果自编码器的容量过大,它无需提取关于数据分布的任何有用信息,即可较好地执行重构任务。
如果潜在表征的维度与输入相同,或是在过完备案例中潜在表征的维度大于输入,上述结果也会出现。
在这些情况下,即使只使用线性编码器和线性解码器,也能很好地利用输入重构输出,且无需了解有关数据分布的任何有用信息。
在理想情况下,根据要分配的数据复杂度,来准确选择编码器和解码器的编码维数和容量,就可以成功地训练出任何所需的自编码器结构。
补充:PCA(Principal Component Analysis),即主成分分析方法,是一种使用最广泛的数据降维算法。具体内容可看此网址:主成分分析(PCA)原理详解
三、自编码器的作用
- 数据可视化、降维:使用适当的维度和稀疏性约束,自编码器可以得到比PCA或其他类似技术更好的数据投影;在自编码器中,中间的隐藏表达的维度往往维度比较低,因此可以被用作数据压缩,或者是特征降维。
- 数据降噪:学习丢失数据特征,进行弥补。
- 消除工况波动引起的数据分布变化:将特征进行公共区域映射解决领域漂移问题,提升跨工况设备故障诊断的准确率。
不过自编码器原本不是专门用来做数据压缩的,它的作用就是可以作为很多神经网络的预训练,帮助提高模型的准确率。神经网络模型的训练需要大量具有标签的样本,而这样的数据通常是比较少的,更多的是无标签样本,而自编码器自监督的特性可以充分利用这些无标签样本,提前学习到有用的特征。接下来,把自编码器的编码器接入神经网络,进行训练。
关于自编码器的更详细的讲解,例如降维与可视化可参考下面第一个网址。
总结
以上就是此节所有内容,其中参考网址如下:
神经网络(neural network)的应用——自编码器(Autoencoder)——>数据可视化、降维
自编码器是什么?有什么用?这里有一份入门指南(附代码)
降噪自动编码器(Denoising Autoencoder)——>数据降噪