原文链接: TensorFlow 栈式自编码神经网络(Stacked Autoencoder,SA)
下一篇: TensorFlow 变分自编码(Variational Auto-Encoder)
参考
https://www.cnblogs.com/zyly/p/9078786.html
栈式自编码
1、简单介绍
栈式自编码神经网络(Stacked Autoencoder,SA)是自编码网络的一种使用方法,是一个由多层训练好的自编码器组成的神经网络。由于网络中的每一层都是单独训练而来,相当于都初始化了一个合理的数值。所以,这样的网络会更容易训练,并且有更快的收敛性及更高的准确度。
栈式自编码常常被用于预训练(初始化)深度神经网络之前的权重预训练步骤。例如,在一个分类问题上,可以按照从前向后的顺序执行每一层通过自编码器来训练,最终将网络中最深层的输出作为softmax分类器的输入特征,通过softmax层将其分开。
单独训练三个网络,然后合并训练第四个网络
2、栈式自编码器在深度学习中的意义
看到这里或许你会奇怪?为什么要这么麻烦,之间使用多层神经网络来训练不是也可以吗?在这里是为大家介绍一种训练方法,而这个训练更像是手动训练,之所以我们愿意这么麻烦,主要是因为有如下几个有点:
- 每一层都是单独训练,保证降维特征的可控性。
- 对于高维度的分类问题,一下拿出一套完整可用的模型相对来讲并不是容易的事,因为节点太多,参数太多,一味地增加深度只会使结果越来越不可控,成为彻底的黑盒,而使用栈式自编码器逐层降维,可以将复杂问题简单化,更容易完成任务。
- 任意深层 ,理论上是越深层的神经网络对现实的拟合度越高,但是传统的多层神经网络,由于使用的是误差反向传播方式,导致层越深,传播的误差越小,栈式自编码巧妙的绕过这个问题,直接使用降维后的特征值进行二次训练,可以任意层数的加深。
- 栈式自编码神经网络具有强大的表达能力和深度神经网络的所有优点,但是它通常能够获取到输入的"层次型分组"或者"部分-整体分解"结构,自编码器倾向于学习得到与样0本相对应的低位向量,该向量可以更好地表示高维样0本的数据特征。
如果网络输入的是图像,第一层会学习识别边,第二层会学习组合边,构成轮廓等,更高层会学习组合更形象的特征。例如:人脸识别,学习如何识别眼睛、鼻子、嘴等。
3、代替和级联
栈式自编码会将网络中的中间层作为下一个网络的输入进行训练。我们可以得到网络中每一个中间层的原始值,我了能有更好的效果,还可以使用级联的方式进一步优化网络的参数。
在已有的模型上接者优化参数的步骤习惯上成为"微调"。该方法不仅在自编码网络,在整个深度学习里都是常见的技术。
微调通常在有大量已标注的训练数据的情况下使用。在这样的情况下,微调能显著提高分类器的性能。但如果有大量未标记数据集,却只有相对较少的已标注数据集,则微调的作用有限。
四 自编码器的应用场合
在之前我们使用自编码器和去噪自编码器演示了MNIST的例子,主要是为了得到一个很好的可视化效果。但是在实际应用中,全连接网络的自编码器并不适合处理图像类的问题(网络参数太多)。
自编码器更像是一种技巧,任何一种网络及方法不可能不变化就可以满足所有的问题,现实环境中,需要使用具体的模型配合各种技巧来解决问题。明白其原理,知道它的优缺点才是核心。在任何一个多维数据的分类中也可以使用自编码,或者在大型图片分类任务中,卷积池化后的特征数据进行自编码降维也是一个好办法。
五 去噪自编码器和栈式自编码器的综合实现
- 我们首先建立一个去噪自编码器(包含输入层四层的网络)
- 然后再对第一层的输出做一次简单的自编码压缩(包含输入层四层的网络)
- 然后再将第二层的输出做一个softmax分类
- 最后把这3个网络里的中间层拿出来,组成一个新的网络进行微调
'''
去燥自编码器和栈式自编码器的综合实现
1.我们首先建立一个去噪自编码器(包含输入层四层的网络)
2.然后再对第一层的输出做一次简单的自编码压缩(包含输入层三层的网络)
3.然后再将第二层的输出做一个softmax分类
4.最后把这3个网络里的中间层拿出来,组成一个