《Reducing the Dimensionality of Data with Neural Network》阅读心得

本文介绍了G. E. Hinton和R. R. Salakhutdinov在2006年发表的《SCIENCE》论文,探讨如何使用多层神经网络进行数据降维。通过自动编码器,数据经过编码和解码实现高维到低维的转换,以降低数据的交叉熵。论文涉及预训练和展开两个阶段,使用受限波兹曼机(RBM)进行权重初始化,并利用CD-1方法进行训练。在第二阶段,通过反向传播调整参数,优化重构数据与原始数据的差异。
摘要由CSDN通过智能技术生成

      本论文是2006发表在《SCIENCE》上的一篇关于使用神经网络进行数据降维的文章,作者为G. E. Hinton and R. R. Salakhutdinov。

        论文的思想是使用一个多层的神经网络对数据进行处理,中间层神经元个数少,实现从高维数据到低维数据的‘编码’,然后再通过低维到高维的‘解码’进行数据的重构,目标是减少元数据与重构数据的交叉熵。但是如果权重的初始化不合适时结果会表现不够好例如陷于局部最小,因此在前期先对权重进行初始的训练使得初始值接近最优值,整个项目叫做‘自动编码器’。如图


整个过程分两个阶段:pretraining和unrolling

第一阶段:构造神经元依次减少的受限波兹曼机,前一个rbm输出是后一个rbm的输入,然后根据能量最小得到权重和偏置的迭代公式,其中用到了cd-1方法,在收敛时得到初始训练的权重和偏置。

能量函数:


权重更新:

cd-1可以理解为使用重构的数据再次得到隐藏层偏置

第二阶段:将训练出来的受限波兹曼机依次连接起来进行训练,通过编码解码得到重构数据,目标函数是减少原始数据与重构数据之间的差距,方法使用反向传播调整参数。

注:受限波兹曼机RBM知识:点击打开链接

cd-1是一种采样方法,可参见:随机采样方法

    对于作者的代码的我的注释如下:(注:只是本人的理解可能会有错误,欢迎大家指出来)源代码出处

1.mnistdeepauto。m

% Version 1.000
%
% Code provided by Ruslan Salakhutdinov and Geoff Hinton  
%
% Permission is granted for anyone to copy, use, modify, or distribute this
% program and accompanying programs and documents for any purpose, provided
% this copyright notice is retained and prominently displayed, along with
% a note saying that the original programs are available from our 
% web page. 
% The programs and documents are distributed without any warranty, express or
% implied.  As the programs were written for research purposes only, they have
% not been tested to the degree that would be advisable in any important
% application.  All use of these programs is entirely at the user's own risk.


% This program pretrains a deep autoencoder for MNIST dataset
% You can set the maximum number of epochs for pretraining each layer
% and you can set the architecture of the multilayer net.

clear all
close all

maxepoch=10; %In the Science paper we use maxepoch=50, but it works just fine. 最大迭代数
numhid=1000; numpen=500; numpen2=250; numopen=30;%rbm每层神经元个数1000-500-250-30

fprintf(1,'Converting Raw files into Matlab format \n');
converter; 

fprintf(1,'Pretraining a deep autoencoder. \n');
fprintf(1,'The Science paper used 50 epochs. This uses %3i \n', maxepoch);

makebatches;
[numcases numdims numbatches]=size(batchdata);%每批样本数、维度、批数

fprintf(1,'Pretraining Layer 1 with RBM: %d-%d \n',numdims,numhid);
restart=1;
rbm;
hidrecbiases=hidbiases; 
save mnistvh vishid hidrecbiases visbiases;%保存第1个rbm的权值、隐含层偏置项、可视化层偏置项,为mnistvh.mat

fprintf(1,'\nPretraining Layer 2 with RBM: %d-%d \n',numhid,numpen);
batchdata=batchposhidprobs;
numhid=numpen;
restart=1;
rbm;
hidpen=vishid; penrecbiases=hidbiases; hidgenbiases=visbiases;
save mnisthp hidpen penrecbiases hidgenbiases;

fprintf(1,'\nPretraining Layer 3 with RBM: %d-%d \n',numpen,numpen2);
batchdata=batchposhidprobs;
numhid=numpen2;
restart=1;
rbm;
hidpen2=vishid; penrecbiases2=hidbiases; hidgenbiases2=visbiases;
save mnisthp2 hidpen2 penrecbiases2 hidgenbiases2;

fprintf(1,'\nPretraining Layer 4 with RBM: %d-%d \n',numpen2,numopen);
batchdata=batchposhidprobs;
numhid=numopen; 
restart=1;
rbmhidlinear;
hidtop=vishid; toprecbiases=hidbiases; topgenbiases=visbiases;
save mnistpo hidtop toprecbiases topgenbiases;

backprop; 

converter.m

% Version 1.000
%
% Code provided by Ruslan Salakhutdinov and Geoff Hinton
%
% Permission is granted for anyone to copy, use, modify, or distribute this
% program and accompanying programs and documents for any purpose, provided
% this copyright notice is retained and prominently displayed, along with
% a note saying that the original programs are available from our
% web page.
% The programs and documents are distributed without any warranty, express or
% implied.  As the programs were writ
  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值