- 自动编码器基本概念
自动编码器(AutoEncoder)是神经网络的一种,一般来讲自动编码器包括两部分:编码器和解码器,编码器和解码器相互串联合作,实现数据的降维或特征学习,现在也广泛用于生成模型中.
在深度学习中,autoencoder可用于在训练阶段开始前,确定权重矩阵的初始值.
左侧为encoder,右侧为decoder.可以看出最简单的自动编码器只有三层,输入层+隐藏层x1+输出层.
自动编码器神经网络是一种无监督机器学习算法,其应用了反向传播,可将目标值设置成与输入值相等。自动编码器的训练目标是将输入复制到输出。在内部,它有一个描述用于表征其输入的代码的隐藏层。
自动编码器可以用一个公式简单的表示:
f(x) = x
从这里也可以看出来自编码器的作用就是用来进行数据降维和特征学习.
****自动编码器的局限****
从上面来看,仅仅经过了20轮训练就可以达到一个不错的可视化效果,但是实际上自动编码器还是有很大的局限性的.
-
自动编码器依据特定的样本进行训练,因此其适用性很大程度上被局限于与训练样本相似的数据;
-
自动编码器很容易过拟合,即最终简单的将样本数据投射回去,这就需要结合深度学习中的各种方法来防止过拟合的产生
(1)给定无标签数据,用非监督学习学习特征:
在我们之前的神经网络中,如第一个图,我们输入的样本是有标签的,即(input, target),这样我们根据当前输出和target(label)之间的差去改变前面各层的参数,直到收敛。但现在我们只有无标签数据,也就是右边的图。那么这个误差怎么得到呢?
如上图,我们将input输入一个encoder编码器,就会得到一个code,这个code也就是输入的一个表示,那么我们怎么知道这个code表示的就是input呢?我们加一个decoder解码器,这时候decoder就会输出一个信息,那么如果输出的这个信息和一开始的输入信号input是很像的(理想情况下就是一样的),那很明显,我们就有理由相信这个code是靠谱的。所以,我们就通过调整encoder和decoder的参数,使得重构误差最小,这时候我们就得到了输入input信号的第一个表示了,也就是编码code了。
因为是无标签数据,所以误差的来源就是直接重构后与原输入相比得到。
到这里,这个AutoEncoder还不能用来分类数据,因为它还没有学习如何去连结一个输入和一个类。**它只是学会了如何去重构或者复现它的输入而已。**或者说,它只是学习获得了一个可以良好代表输入的特征,这个特征可以最大程度上代表原输入信号。
Sparse AutoEncoder稀疏自动编码器:
当然,我们还可以继续加上一些约束条件得到新的Deep Learning方法,如:如果在AutoEncoder的基础上加上L1的Regularity限制(L1主要是约束每一层中的节点中大部分都要为0,只有少数不为0,这就是Sparse名字的来源),我们就可以得到Sparse AutoEncoder法。
如上图,其实就是限制每次得到的表达code尽量稀疏。因为稀疏的表达往往比其他的表达要有效(人脑好像也是这样的,某个输入只是刺激某些神经元,其他的大部分的神经元是受到抑制的)。
来源:CSDN
作者:qq_35482604
链接:https://blog.csdn.net/qq_35482604/article/details/103958292