别看本文没有几页纸,本着把经典的文多读几遍的想法,把它彩印出来看,没想到效果很好,比在屏幕上看着舒服。若用蓝色的笔圈出重点,这篇文章中几乎要全蓝。字字珠玑。

Reducing the Dimensionality of Data with Neural Networks

G.E. Hinton and R.R. Salakhutdinov

 摘要

训练一个带有很小的中间层的多层神经网络,可以重构高维空间的输入向量,实现从高维数据到低维编码的效果。(原文为high-dimensional data can be converted to low-dimensional codes)在这样的Autoencoder network中,通常使用Gradient Descent方法来对网络权重进行微调(Fine-tuning),这样做有效的前提是初始的网络权重足够好。(原文this works well only if the initial weights are close to a good solution.)本文提出了一个有效的初始化网络权重的方法,使得采用deep autoencoder network学习到的低维编码优于PCA降维的结果。

背景介绍

PCA(Principal Components Analysis)主成分分析是一个被广泛采用的用来降维的方法。它旨在找到数据点的方差最大的方向,并用这些方向作为坐标来表示数据集中的各个点。(PCA finds the directions of greatest variance in the data set and represents each data points by its coordinates along each of these directions.)

Autoencoder:  我们采用了一种非线性的PCA的泛化版本,该方法使用了一个自适应的多层编码网络,将数据从高维变为低维的编码,以及一个类似的解码网络从低维编码中对数据进行重构。 采用随机权重对网络初始化,通过最小化原始数据与重构数据之间的误差来对网络的整体结构进行训练。采用链式法则计算梯度,并将梯度向后传播以更新网络权重。

问题来了~~~~

对于autoencoder来说,初始权重的设置非常重要,过大,则会导致陷入坏的局部最优;过小,则会导致训练困难。只有找到一个好的初始化权重,才能保证后续的梯度算法能够收敛到一个理想的局部解。找到这样的一个初始化权重需要对每一层尝试许多类型的算法 ,因此本文引入了pretraining的过程。(好好理解:Finding such initial weights requires a very different type of algorithm that learns one layer of features at a time.)

方法概览

以binary data为例,说明pretraining的过程

用RBM(Restricted Boltzmann Machines)来建模binary data,由visible layer与hidden layer构成。以image为例,pixels对应RBM的visible units ,feature detectors对应RBM的hidden units ,则visible与hidden units共同对应的energy函数有如下定义:

通过该能量函数赋予每个image一个概率。通过调节权重以及偏差,来降低真实image的能量,提高虚构image的能量,使得网络更加倾向于那些真实的数据。RBM的结构好:给定h,v之间是条件独立的,给定v,h之间是条件独立的。有如下公式:

权重w的调整方法:注意:该调整策略并非严格按照能量公式所对应的概率目标函数求导得到的~~其中,是学习速率,对应真实图像pixel i与feature detector j一起出现的概率,对应虚构图像的概率。

pretraining的过程:learning one layer of feature detector->将该层的输出作为第二层feature学习的输入数据(原文:treat activities as data for learning a second layer of features.),也就是说第一层的feature detector作为第二层RBM的visible units。(原文:The first layer of feature detectors then become the visible units for learning the next RBM.)这种逐层学习的思想可以重复多次。

可以证明的是,给定每层的单元数目不减少,有正确的初始化weight,多加一层,可以改善模型概率似然的下界。 (原文:Adding an extra layer always improves a lower bound on the log probability that the model assigns to the training data, provided the number of feature detectors per layer does not decrease and their weights are intialized correctly.)

逐层的训练方法对于pretrain deep autoencoder是非常有效的方法。(原文: The layer-by-layer learning algorithm is a very effective way to pretrain the weights of a deep autoencoder. )每层的feature能够很好的捕捉层间activities的强度以及高阶相关性。对于大多数想要揭示数据的低维、非线性特征来说,逐层训练是一个有效的方法。

纵观整个deep autoencoder可以分为pretraining,unfolding以及fine-tuning三个阶段。pretraining就是上述描述的逐层训练的过程。unfolding是将pretraining阶段学到的weight用于编码与解码的过程,从而得到真正的autoencoder的结构。fine-tuning指的是采用bp算法对整个autoencoder的结构的权重进行微调。

泛化到Continuous data

将visible units由原来的stochastic binary variable替换为linear units with Gaussian Noise。在实验中,所有的visible units都是这种情况的。

实验:

模拟数据

MNIST数据集

Reuter Corpus:The autoencoder clearly outperformed latent semantic analysis, a well known document retrieval method based on PCA.(应该是从优化目标函数的角度来说PCA与LDA的关系)

总结:

Pretraining的好处:由于网络权重中的大部分信息来源于原始数据本身,因此pretraining的泛化性能好。

label中所蕴含的有限信息仅仅适合对网络权重做微调。

从以前的实验经验中可以看出这一点是非常正确的。

Deep Autoencoder早在1980年就已经提出,事实上它对于非线性维度归约(nonlinear dimensionality reduction)来说是非常有效的。但是它需要的三个条件迄今才满足:(1)Computers are fast enough; (2)data sets are big enough; (3)the initial weights are close enough to a good solution。

Autoencoders give mappings in both directions between data and code spaces.

一天一经典Reducing the Dimensionality of Data with Neural Networks [Science2006]的更多相关文章

  1. Deep Learning 16:用自编码器对数据进行降维_读论文“Reducing the Dimensionality of Data with Neural Networks”的笔记

    前言 论文“Reducing the Dimensionality of Data with Neural Networks”是深度学习鼻祖hinton于2006年发表于<SCIENCE > ...

  2. Reducing the Dimensionality of data with neural networks / A fast learing algorithm for deep belief net

    Deeplearning原文作者Hinton代码注解 Matlab示例代码为两部分,分别对应不同的论文: . Reducing the Dimensionality of data with neur ...

  3. Reducing the Dimensionality of Data with Neural Networks:神经网络用于降维

    原文链接:http://www.ncbi.nlm.nih.gov/pubmed/16873662/ G. E. Hinton* and R. R. Salakhutdinov .   Science. ...

  4. 【神经网络】Reducing the Dimensionality of Data with Neural Networks

    这篇paper来做什么的? 用神经网络来降维.之前降维用的方法是主成分分析法PCA,找到数据集中最大方差方向.(附:降维有助于分类.可视化.交流和高维信号的存储) 这篇paper提出了一种非线性的PC ...

  5. 论文阅读---Reducing the Dimensionality of Data with Neural Networks

    通过训练多层神经网络可以将高维数据转换成低维数据,其中有对高维输入向量进行改造的网络层.梯度下降可以用来微调如自编码器网络的权重系数,但是对权重的初始化要求比较高.这里提出一种有效初始化权重的方法,允 ...

  6. 【Deep Learning】Hinton. Reducing the Dimensionality of Data with Neural Networks Reading Note

    2006年,机器学习泰斗.多伦多大学计算机系教授Geoffery Hinton在Science发表文章,提出基于深度信念网络(Deep Belief Networks, DBN)可使用非监督的逐层贪心 ...

  7. Reducing the Dimensionality of Data with Neural Networks

    ****************内容加密中********************

  8. 文章“Redcing the Dimensiongality of Data with Neural Networks”的翻译

    注明:本人英语水平有限,翻译不当之处,请以英文原版为准,不喜勿喷,另,本文翻译只限于学术交流,不涉及任何版权问题,若有不当侵权或其他任何除学术交流之外的问题,请留言本人,本人立刻删除,谢谢!! 本文原 ...

  9. 阅读笔记 The Impact of Imbalanced Training Data for Convolutional Neural Networks [DegreeProject2015] 数据分析型

    The Impact of Imbalanced Training Data for Convolutional Neural Networks Paulina Hensman and David M ...

随机推荐

  1. HandlerThread和IntentService

    HandlerThread 为什么要使用HandlerThread? 我们经常使用的Handler来处理消息,其中使用Looper来对消息队列进行轮询,并且默认是发生在主线程中,这可能会引起UI线程的 ...

  2. linux系统的常用命令

    linux系统中常用的命令如下(以后经常补充): cd ..   返回上一级 cd use  进入use目录

  3. 阅读Python官方文档心得

    我会每天都阅读一些python的官方文档,并每天更新心得体会. -------------------------------------------------2016.12.08--------- ...

  4. jQuery学习笔记(在js中增加、删除及定位控件的操作)

    代码内容很多都是从amazeui直接copy过来的,先声明,请不要说在下抄袭- - <!-------------------- HTML代码 ----------------------> ...

  5. js的数据类型

    关于js中的几大数据类型,估计大家都很熟悉:String.Number.Array.Bollean.Null.Undifine.Object: 从这其中,可以延伸出一个感念:基本数据类型和引用类型: ...

  6. MongoDB是一个介于关系数据库和非关系数据库之间的产品

    MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的.他支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型.M ...

  7. PAMI 2010 Context-aware saliency detection

    This is a highly-cited paper. The context aware saliency proposed based on four principles, which ca ...

  8. Jquery--动画

    动画: 1.show(),hide() 2..stop() .slideDown();  向下. .stop().slideUp();  向上 (可以做下拉)        .stop() 执行之前加 ...

  9. mysql存储过程详细教程

    记录mysql存储过程中的关键语法:DELIMITER //  声明语句结束符,用于区分;CREATE PROCEDURE demo_in_parameter(IN p_in int)  声明存储过程 ...

  10. SQL 高效分页查询

    declare @page int --页码 declare @pagecount int;--每一页显示的记录数 select * from (select *,row_number() over( ...