Theano-Deep Learning Tutorials 笔记:Stacked Denoising Autoencoders (SdA)

本文介绍了如何使用Theano库实现堆叠降噪自编码器(SdA)。首先回顾自编码器和降噪自编码器的概念,接着通过逐层预训练和微调步骤展示SdA的训练过程。实验结果显示,SdA在手写数字识别任务上的表现优于UFLDL中的稀疏自编码器,可能是由于降噪自编码器、额外的隐藏层以及预训练数据的处理方式等因素导致。
摘要由CSDN通过智能技术生成
 


教程地址:http://www.deeplearning.net/tutorial/SdA.html

The Stacked Denoising Autoencoder (SdA) is an extension of the stacked autoencoder[Bengio07] and it was introduced in [Vincent08].

推荐先看这个UFLDL,讲得很详细:http://deeplearning.stanford.edu/wiki/index.php/%E6%A0%88%E5%BC%8F%E8%87%AA%E7%BC%96%E7%A0%81%E7%AE%97%E6%B3%95

我之前一个做的UFLDL中栈式自编码的作业(但是不是降噪自编码,是稀疏自编码):UFLDL教程答案(6):Exercise:Implement deep networks for digit classification

Stacked Autoencoders

回顾下自编码:(目标是输出层(重构层)尽量重构输入,即与输入尽量一致,那么隐藏层就相当于抓住了数据的内在特征)

Stacked SparseAE Features1.png

降噪自编码器可以一层一层堆叠成栈式自编码器,(重构层去掉),前一层的隐层输出(latent representation (output code))为后一自编码层的输入下图是UFLDL中两层自编码层堆叠的图例:

Stacked Combined.png

逐层贪婪训练:每层自编码层都单独进行非监督训练,以最小化输入(输入为前一层的隐层输出)与重构结果之间的误差为训练目标。前K层训练好了,就可以训练K+1层,因为已经前向传播求出K层的输出,再用K层的输出当作K+1的输入训练K+1层。

在所有自编码层都完成预训练之后,在对网络进行微调,即用样本进行有监督训练,在网络最后一层加上一层logistic regression layer(softmax层),像Multilayer Perceptron那样训练。

 

构建class SdA

下面这段是如何利用之前实现的LR,MLP,DA等构建SDA

We can see the stacked denoising autoencoder(sda) as having two facades: a list of autoencoders, and an MLP.

在预训练时,sda可以看作很多个自编码器相连,逐个无监督训练;

在微调时,sda可以看作一个多层感知器进行有监督训练。

sigmoid_layer = HiddenLayer(rng=numpy_rng,
                                        input=layer_input,
                                        n_in=input_size,
                                        n_out=hidden_layers_sizes[i],
                                        activation=T.nnet.sigmoid)
dA_layer = dA(numpy_rng=numpy_rng,
                          theano_rng=theano_rng,
                          input=layer_input,
                          n_visible=input_size,
                          n_hidden=hidden_layers_sizes[i],
                          W=sigmoid_layer.W,
                          bhid=sigmoid_layer.b)

代码中可以看出:自编码层和多层感知器的隐层其实是共用的权重,其实每层既是dA,又是HiddenLayer,这样就可以使用之前的mlp.py,dA.py来实现sda。

class SdA(object):
    """Stacked denoising auto-encoder class (SdA)

    A stacked denoising autoencoder model is obtained by stacking several
    dAs. The hidden layer of the dA at layer `i` becomes the input of
    the dA at layer `i+1`. The first layer dA gets as input the input of
    the SdA, 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值