5、 SDAE模型
SDAE(stacked denoised autoencoder ,堆栈去噪自编码器)是vincent大神提出的无监督的神经网络模型,论文:Stacked Denoising Autoencoders: Learning Useful Representations ina Deep Network with a Local Denoising Criterion,原文作者从不同角度解释了模型架构设计理念,非常值得一读。原文请戳:http://www.jmlr.org/papers/volume11/vincent10a/vincent10a.pdf
sDAE的思想就是将多个DAE堆叠在一起形成一个深度的架构. 需要注意的是, 只有在训练的时候才会对输入进行腐蚀(加噪), 一旦训练完成, 就不需要在进行腐蚀, 如下图所示
SDAE只是一个特征提取器,并不具有分类功能。为了使SDAE具有分类功能,需在其顶层添加分类器,如SVM、softmax等,并使用带标签的数据对SDAE进行有监督训练,最后使用利用BP算法对整个网络参数进行微调,便得到具有分类功能的SDAE。
具体步骤如下:
- Step1 初始化SDAE网络参数;
- Step2 训练第一层DAE,将其隐含层作为第2个DAE的输入,并进行同样的训练,直到第n层DAE训练完成;
- Step3 将训练好的n层DAE进行堆叠形成SDAE,向SDAE网络顶层添加输出层;
- Step4 利用样本数据和标签对整个网络进行有监督的微调。
来自李宏毅的PPT的图可能更清楚理解其训练过程:
逐层贪婪训练:每层自编码层都单独进行非监督训练,以最小化输入(输入为前一层的隐层输出)与重构结果之间的误差为训练目标。前K层训练好了,就可以训练K+1层,因为已经前向传播求出K层的输出,再用K层的输出当作K+1的输入训练K+1层。
一旦SDAE训练完成, 其高层的特征就可以用做传统的监督算法的输入。当然,也可以在最顶层添加一层logistic regression layer(softmax层),然后使用带label的数据来进一步对网络进行微调(fine-tuning),即用样本进行有监督训练(如上图中最上层是10类分类)。
看代码吧: