深度学习

目录:php

1、概述html

2、背景git

3、人脑视觉机理web

4、关于特征算法

4.一、特征表示的粒度数据库

4.二、初级(浅层)特征表示编程

4.三、结构性特征表示网络

4.四、须要有多少个特征?架构

5、Deep Learning的基本思想app

6、浅层学习(Shallow Learning)和深度学习(Deep Learning)

7、Deep learning与Neural Network

8、Deep learning训练过程

8.一、传统神经网络的训练方法

8.二、deep learning训练过程

9、Deep Learning的经常使用模型或者方法

9.一、AutoEncoder自动编码器

9.二、Sparse Coding稀疏编码

9.三、Restricted Boltzmann Machine(RBM)限制波尔兹曼机

9.四、Deep BeliefNetworks深信度网络

9.五、Convolutional Neural Networks卷积神经网络

10、总结与展望

11、参考文献和Deep Learning学习资源

 

1、概述

       Artificial Intelligence,也就是人工智能,就像长生不老和星际漫游同样,是人类最美好的梦想之一。虽然计算机技术已经取得了长足的进步,可是到目前为止,尚未一台电脑能产生“自我”的意识。是的,在人类和大量现成数据的帮助下,电脑能够表现的十分强大,可是离开了这二者,它甚至都不能分辨一个喵星人和一个汪星人。

       图灵(图灵,你们都知道吧。计算机和人工智能的鼻祖,分别对应于其著名的“图灵机”和“图灵测试”)在 1950 年的论文里,提出图灵试验的设想,即,隔墙对话,你将不知道与你谈话的,是人仍是电脑。这无疑给计算机,尤为是人工智能,预设了一个很高的指望值。可是半个世纪过去了,人工智能的进展,远远没有达到图灵试验的标准。这不只让多年翘首以待的人们,心灰意冷,认为人工智能是忽悠,相关领域是“伪科学”。

        可是自 2006 年以来,机器学习领域,取得了突破性的进展。图灵试验,至少不是那么可望而不可及了。至于技术手段,不只仅依赖于云计算对大数据的并行处理能力,并且依赖于算法。这个算法就是,Deep Learning。借助于 Deep Learning 算法,人类终于找到了如何处理“抽象概念”这个亘古难题的方法。

1365435331_4283.jpg

 

 2012年6月,《纽约时报》披露了Google Brain项目,吸引了公众的普遍关注。这个项目是由著名的斯坦福大学的机器学习教授Andrew Ng和在大规模计算机系统方面的世界顶尖专家JeffDean共同主导,用16000个CPU Core的并行计算平台训练一种称为“深度神经网络”(DNN,Deep Neural Networks)的机器学习模型(内部共有10亿个节点。这一网络天然是不能跟人类的神经网络相提并论的。要知道,人脑中但是有150多亿个神经元,互相链接的节点也就是突触数更是如银河沙数。曾经有人估算过,若是将一我的的大脑中全部神经细胞的轴突和树突依次链接起来,并拉成一根直线,可从地球连到月亮,再从月亮返回地球),在语音识别和图像识别等领域得到了巨大的成功。

       项目负责人之一Andrew称:“咱们没有像一般作的那样本身框定边界,而是直接把海量数据投放到算法中,让数据本身说话,系统会自动从数据中学习。”另一名负责人Jeff则说:“咱们在训练的时候历来不会告诉机器说:‘这是一只猫。’系统实际上是本身发明或者领悟了“猫”的概念。

1365435367_5076.jpg

 

2012年11月,微软在中国天津的一次活动上公开演示了一个全自动的同声传译系统,讲演者用英文演讲,后台的计算机一鼓作气自动完成语音识别、英中机器翻译和中文语音合成,效果很是流畅。据报道,后面支撑的关键技术也是DNN,或者深度学习(DL,DeepLearning)。

       2013年1月,在百度年会上,创始人兼CEO李彦宏高调宣布要成立百度研究院,其中第一个成立的就是“深度学习研究所”(IDL,Institue of Deep Learning)。


 

1365435390_9783.jpg

 

       为何拥有大数据的互联网公司争相投入大量资源研发深度学习技术。听起来感受deeplearning很牛那样。那什么是deep learning?为何有deep learning?它是怎么来的?又能干什么呢?目前存在哪些困难呢?这些问题的简答都须要慢慢来。我们先来了解下机器学习(人工智能的核心)的背景。

 

2、背景

      机器学习(Machine Learning)是一门专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,从新组织已有的知识结构使之不断改善自身的性能的学科。机器可否像人类同样能具备学习能力呢?1959年美国的塞缪尔(Samuel)设计了一个下棋程序,这个程序具备学习能力,它能够在不断的对弈中改善本身的棋艺。4年后,这个程序打败了设计者本人。又过了3年,这个程序打败了美国一个保持8年之久的常胜不败的冠军。这个程序向人们展现了机器学习的能力,提出了许多使人深思的社会问题与哲学问题(呵呵,人工智能正常的轨道没有很大的发展,这些什么哲学伦理啊倒发展的挺快。什么将来机器愈来愈像人,人愈来愈像机器啊。什么机器会反人类啊,ATM是开第一枪的啊等等。人类的思惟无穷啊)。

        机器学习虽然发展了几十年,但仍是存在不少没有良好解决的问题:

1365435414_9821.jpg


 


        例如图像识别、语音识别、天然语言理解、天气预测、基因表达、内容推荐等等。目前咱们经过机器学习去解决这些问题的思路都是这样的(以视觉感知为例子):

1365435432_2281.jpg


 


        从开始的经过传感器(例如CMOS)来得到数据。而后通过预处理、特征提取、特征选择,再到推理、预测或者识别。最后一个部分,也就是机器学习的部分,绝大部分的工做是在这方面作的,也存在不少的paper和研究。

        而中间的三部分,归纳起来就是特征表达。良好的特征表达,对最终算法的准确性起了很是关键的做用,并且系统主要的计算和测试工做都耗在这一大部分。但,这块实际中通常都是人工完成的。靠人工提取特征。

1365435468_8350.jpg


 


       截止如今,也出现了很多NB的特征(好的特征应具备不变性(大小、尺度和旋转等)和可区分性):例如Sift的出现,是局部图像特征描述子研究领域一项里程碑式的工做。因为SIFT对尺度、旋转以及必定视角和光照变化等图像变化都具备不变性,而且SIFT具备很强的可区分性,的确让不少问题的解决变为可能。但它也不是万能的。

1365435491_6508.jpg


 


       然而,手工地选取特征是一件很是费力、启发式(须要专业知识)的方法,能不能选取好很大程度上靠经验和运气,并且它的调节须要大量的时间。既然手工选取特征不太好,那么能不能自动地学习一些特征呢?答案是能!Deep Learning就是用来干这个事情的,看它的一个别名UnsupervisedFeature Learning,就能够顾名思义了,Unsupervised的意思就是不要人参与特征的选取过程。

       那它是怎么学习的呢?怎么知道哪些特征好哪些很差呢?咱们说机器学习是一门专门研究计算机怎样模拟或实现人类的学习行为的学科。好,那咱们人的视觉系统是怎么工做的呢?为何在茫茫人海,芸芸众生,滚滚红尘中咱们均可以找到另外一个她(由于,你存在我深深的脑海里,个人梦里 个人内心 个人歌声里……)。人脑那么NB,咱们能不能参考人脑,模拟人脑呢?(好像和人脑扯上点关系的特征啊,算法啊,都不错,但不知道是否是人为强加的,为了使本身的做品变得神圣和高雅。)

        近几十年以来,认知神经科学、生物学等等学科的发展,让咱们对本身这个神秘的而又神奇的大脑再也不那么的陌生。也给人工智能的发展推波助澜。

 

3、人脑视觉机理

       1981 年的诺贝尔医学奖,颁发给了 David Hubel(出生于加拿大的美国神经生物学家) 和TorstenWiesel,以及 Roger Sperry。前两位的主要贡献,是“发现了视觉系统的信息处理”:可视皮层是分级的:

1365435513_7934.jpg


 


        咱们看看他们作了什么。1958 年,DavidHubel 和Torsten Wiesel 在 JohnHopkins University,研究瞳孔区域与大脑皮层神经元的对应关系。他们在猫的后脑头骨上,开了一个3 毫米的小洞,向洞里插入电极,测量神经元的活跃程度。

      而后,他们在小猫的眼前,展示各类形状、各类亮度的物体。而且,在展示每一件物体时,还改变物体放置的位置和角度。他们指望经过这个办法,让小猫瞳孔感觉不一样类型、不一样强弱的刺激。

       之因此作这个试验,目的是去证实一个猜想。位于后脑皮层的不一样视觉神经元,与瞳孔所受刺激之间,存在某种对应关系。一旦瞳孔受到某一种刺激,后脑皮层的某一部分神经元就会活跃。经历了数日反复的枯燥的试验,同时牺牲了若干只可怜的小猫,David Hubel 和Torsten Wiesel 发现了一种被称为“方向选择性细胞(Orientation Selective Cell)”的神经元细胞。当瞳孔发现了眼前的物体的边缘,并且这个边缘指向某个方向时,这种神经元细胞就会活跃。

       这个发现激发了人们对于神经系统的进一步思考。神经-中枢-大脑的工做过程,或许是一个不断迭代、不断抽象的过程。

       这里的关键词有两个,一个是抽象,一个是迭代。从原始信号,作低级抽象,逐渐向高级抽象迭代。人类的逻辑思惟,常用高度抽象的概念。

        例如,从原始信号摄入开始(瞳孔摄入像素 Pixels),接着作初步处理(大脑皮层某些细胞发现边缘和方向),而后抽象(大脑断定,眼前的物体的形状,是圆形的),而后进一步抽象(大脑进一步断定该物体是只气球)。

1365435554_6921.jpg

 


 这个生理学的发现,促成了计算机人工智能,在四十年后的突破性发展。

      总的来讲,人的视觉系统的信息处理是分级的。从低级的V1区提取边缘特征,再到V2区的形状或者目标的部分等,再到更高层,整个目标、目标的行为等。也就是说高层的特征是低层特征的组合,从低层到高层的特征表示愈来愈抽象,愈来愈能表现语义或者意图。而抽象层面越高,存在的可能猜想就越少,就越利于分类。例如,单词集合和句子的对应是多对一的,句子和语义的对应又是多对一的,语义和意图的对应仍是多对一的,这是个层级体系。

      敏感的人注意到关键词了:分层。而Deep learning的deep是否是就表示我存在多少层,也就是多深呢?没错。那Deep learning是如何借鉴这个过程的呢?毕竟是归于计算机来处理,面对的一个问题就是怎么对这个过程建模?

       由于咱们要学习的是特征的表达,那么关于特征,或者说关于这个层级特征,咱们须要了解地更深刻点。因此在说Deep Learning以前,咱们有必要再啰嗦下特征(呵呵,其实是看到那么好的对特征的解释,不放在这里有点惋惜,因此就塞到这了)。


接上

 

       由于咱们要学习的是特征的表达,那么关于特征,或者说关于这个层级特征,咱们须要了解地更深刻点。因此在说Deep Learning以前,咱们有必要再啰嗦下特征(呵呵,其实是看到那么好的对特征的解释,不放在这里有点惋惜,因此就塞到这了)。

 

4、关于特征

        特征是机器学习系统的原材料,对最终模型的影响是毋庸置疑的。若是数据被很好的表达成了特征,一般线性模型就能达到满意的精度。那对于特征,咱们须要考虑什么呢?

4.一、特征表示的粒度

        学习算法在一个什么粒度上的特征表示,才有能发挥做用?就一个图片来讲,像素级的特征根本没有价值。例以下面的摩托车,从像素级别,根本得不到任何信息,其没法进行摩托车和非摩托车的区分。而若是特征是一个具备结构性(或者说有含义)的时候,好比是否具备车把手(handle),是否具备车轮(wheel),就很容易把摩托车和非摩托车区分,学习算法才能发挥做用。


1365438575_9396.jpg

 

1365438590_4831.jpg

 

 

4.二、初级(浅层)特征表示

        既然像素级的特征表示方法没有做用,那怎样的表示才有用呢?

        1995 年先后,Bruno Olshausen和 David Field 两位学者任职 Cornell University,他们试图同时用生理学和计算机的手段,左右开弓,研究视觉问题。

        他们收集了不少黑白风景照片,从这些照片中,提取出400个小碎片,每一个照片碎片的尺寸均为 16x16 像素,不妨把这400个碎片标记为 S, i = 0,.. 399。接下来,再从这些黑白风景照片中,随机提取另外一个碎片,尺寸也是 16x16 像素,不妨把这个碎片标记为 T。

        他们提出的问题是,如何从这400个碎片中,选取一组碎片,S[k], 经过叠加的办法,合成出一个新的碎片,而这个新的碎片,应当与随机选择的目标碎片 T,尽量类似,同时,S[k] 的数量尽量少。用数学的语言来描述,就是:

        Sum_k (a[k] * S[k]) --> T,     其中 a[k] 是在叠加碎片 S[k] 时的权重系数。

        为解决这个问题,Bruno Olshausen和 David Field 发明了一个算法,稀疏编码(Sparse Coding)。

        稀疏编码是一个重复迭代的过程,每次迭代分两步:

1)选择一组 S[k],而后调整 a[k],使得Sum_k (a[k] * S[k]) 最接近 T。

2)固定住 a[k],在 400 个碎片中,选择其它更合适的碎片S’[k],替代原先的 S[k],使得Sum_k (a[k] * S’[k]) 最接近 T。

        通过几回迭代后,最佳的 S[k] 组合,被遴选出来了。使人惊奇的是,被选中的 S[k],基本上都是照片上不一样物体的边缘线,这些线段形状类似,区别在于方向。

        Bruno Olshausen和 David Field 的算法结果,与 David Hubel 和Torsten Wiesel 的生理发现,不谋而合!

        也就是说,复杂图形,每每由一些基本结构组成。好比下图:一个图能够经过用64种正交的edges(能够理解成正交的基本结构)来线性表示。好比样例的x能够用1-64个edges中的三个按照0.8,0.3,0.5的权重调和而成。而其余基本edge没有贡献,所以均为0 。

1365438649_2577.jpg

 


        另外,大牛们还发现,不只图像存在这个规律,声音也存在。他们从未标注的声音中发现了20种基本的声音结构,其他的声音能够由这20种基本结构合成。


1365438664_7093.jpg

 

1365438678_4293.jpg

 

 

4.三、结构性特征表示

        小块的图形能够由基本edge构成,更结构化,更复杂的,具备概念性的图形如何表示呢?这就须要更高层次的特征表示,好比V2,V4。所以V1看像素级是像素级。V2看V1是像素级,这个是层次递进的,高层表达由底层表达的组合而成。专业点说就是基basis。V1取提出的basis是边缘,而后V2层是V1层这些basis的组合,这时候V2区获得的又是高一层的basis。即上一层的basis组合的结果,上上层又是上一层的组合basis……(因此有大牛说Deep learning就是“搞基”,由于难听,因此美其名曰Deep learning或者Unsupervised Feature Learning)

1365438722_9668.jpg

 


        直观上说,就是找到make sense的小patch再将其进行combine,就获得了上一层的feature,递归地向上learning feature。

        在不一样object上作training是,所得的edge basis 是很是类似的,但object parts和models 就会completely different了(那我们分辨car或者face是否是容易多了):

1365438750_9009.jpg

 


        从文原本说,一个doc表示什么意思?咱们描述一件事情,用什么来表示比较合适?用一个一个字嘛,我看不是,字就是像素级别了,起码应该是term,换句话说每一个doc都由term构成,但这样表示概念的能力就够了嘛,可能也不够,须要再上一步,达到topic级,有了topic,再到doc就合理。但每一个层次的数量差距很大,好比doc表示的概念->topic(千-万量级)->term(10万量级)->word(百万量级)。

        一我的在看一个doc的时候,眼睛看到的是word,由这些word在大脑里自动切词造成term,在按照概念组织的方式,先验的学习,获得topic,而后再进行高层次的learning。

 

4.四、须要有多少个特征?

       咱们知道须要层次的特征构建,由浅入深,但每一层该有多少个特征呢?

任何一种方法,特征越多,给出的参考信息就越多,准确性会获得提高。但特征多意味着计算复杂,探索的空间大,能够用来训练的数据在每一个特征上就会稀疏,都会带来各类问题,并不必定特征越多越好。


1365438778_9193.jpg

 

      

       好了,到了这一步,终于能够聊到Deep learning了。上面咱们聊到为何会有Deep learning(让机器自动学习良好的特征,而免去人工选取过程。还有参考人的分层视觉处理系统),咱们获得一个结论就是Deep learning须要多层来得到更抽象的特征表达。那么多少层才合适呢?用什么架构来建模呢?怎么进行非监督训练呢?



接上

 

       好了,到了这一步,终于能够聊到Deep learning了。上面咱们聊到为何会有Deep learning(让机器自动学习良好的特征,而免去人工选取过程。还有参考人的分层视觉处理系统),咱们获得一个结论就是Deep learning须要多层来得到更抽象的特征表达。那么多少层才合适呢?用什么架构来建模呢?怎么进行非监督训练呢?

 

5、Deep Learning的基本思想

       假设咱们有一个系统S,它有n层(S1,…Sn),它的输入是I,输出是O,形象地表示为: I =>S1=>S2=>…..=>Sn => O,若是输出O等于输入I,即输入I通过这个系统变化以后没有任何的信息损失(呵呵,大牛说,这是不可能的。信息论中有个“信息逐层丢失”的说法(信息处理不等式),设处理a信息获得b,再对b处理获得c,那么能够证实:a和c的互信息不会超过a和b的互信息。这代表信息处理不会增长信息,大部分处理会丢失信息。固然了,若是丢掉的是没用的信息那多好啊),保持了不变,这意味着输入I通过每一层Si都没有任何的信息损失,即在任何一层Si,它都是原有信息(即输入I)的另一种表示。如今回到咱们的主题Deep Learning,咱们须要自动地学习特征,假设咱们有一堆输入I(如一堆图像或者文本),假设咱们设计了一个系统S(有n层),咱们经过调整系统中参数,使得它的输出仍然是输入I,那么咱们就能够自动地获取获得输入I的一系列层次特征,即S1,…, Sn。

       对于深度学习来讲,其思想就是对堆叠多个层,也就是说这一层的输出做为下一层的输入。经过这种方式,就能够实现对输入信息进行分级表达了。

       另外,前面是假设输出严格地等于输入,这个限制太严格,咱们能够略微地放松这个限制,例如咱们只要使得输入与输出的差异尽量地小便可,这个放松会致使另一类不一样的Deep Learning方法。上述就是Deep Learning的基本思想。

 

6、浅层学习(Shallow Learning)和深度学习(Deep Learning)

       浅层学习是机器学习的第一次浪潮。

       20世纪80年代末期,用于人工神经网络的反向传播算法(也叫Back Propagation算法或者BP算法)的发明,给机器学习带来了但愿,掀起了基于统计模型的机器学习热潮。这个热潮一直持续到今天。人们发现,利用BP算法可让一我的工神经网络模型从大量训练样本中学习统计规律,从而对未知事件作预测。这种基于统计的机器学习方法比起过去基于人工规则的系统,在不少方面显出优越性。这个时候的人工神经网络,虽也被称做多层感知机(Multi-layer Perceptron),但实际是种只含有一层隐层节点的浅层模型。

        20世纪90年代,各类各样的浅层机器学习模型相继被提出,例如支撑向量机(SVM,Support Vector Machines)、 Boosting、最大熵方法(如LR,Logistic Regression)等。这些模型的结构基本上能够当作带有一层隐层节点(如SVM、Boosting),或没有隐层节点(如LR)。这些模型不管是在理论分析仍是应用中都得到了巨大的成功。相比之下,因为理论分析的难度大,训练方法又须要不少经验和技巧,这个时期浅层人工神经网络反而相对沉寂。

        深度学习是机器学习的第二次浪潮。

        2006年,加拿大多伦多大学教授、机器学习领域的泰斗Geoffrey Hinton和他的学生RuslanSalakhutdinov在《科学》上发表了一篇文章,开启了深度学习在学术界和工业界的浪潮。这篇文章有两个主要观点:1)多隐层的人工神经网络具备优异的特征学习能力,学习获得的特征对数据有更本质的刻画,从而有利于可视化或分类;2)深度神经网络在训练上的难度,能够经过“逐层初始化”(layer-wise pre-training)来有效克服,在这篇文章中,逐层初始化是经过无监督学习实现的。

        当前多数分类、回归等学习方法为浅层结构算法,其局限性在于有限样本和计算单元状况下对复杂函数的表示能力有限,针对复杂分类问题其泛化能力受到必定制约。深度学习可经过学习一种深层非线性网络结构,实现复杂函数逼近,表征输入数据分布式表示,并展示了强大的从少数样本集中学习数据集本质特征的能力。(多层的好处是能够用较少的参数表示复杂的函数)

1365439310_9542.jpg

 

        深度学习的实质,是经过构建具备不少隐层的机器学习模型和海量的训练数据,来学习更有用的特征,从而最终提高分类或预测的准确性。所以,“深度模型”是手段,“特征学习”是目的。区别于传统的浅层学习,深度学习的不一样在于:1)强调了模型结构的深度,一般有5层、6层,甚至10多层的隐层节点;2)明确突出了特征学习的重要性,也就是说,经过逐层特征变换,将样本在原空间的特征表示变换到一个新特征空间,从而使分类或预测更加容易。与人工规则构造特征的方法相比,利用大数据来学习特征,更可以刻画数据的丰富内在信息。

 

7、Deep learning与Neural Network

        深度学习是机器学习研究中的一个新的领域,其动机在于创建、模拟人脑进行分析学习的神经网络,它模仿人脑的机制来解释数据,例如图像,声音和文本。深度学习是无监督学习的一种。

        深度学习的概念源于人工神经网络的研究。含多隐层的多层感知器就是一种深度学习结构。深度学习经过组合低层特征造成更加抽象的高层表示属性类别或特征,以发现数据的分布式特征表示。

       Deep learning自己算是machine learning的一个分支,简单能够理解为neural network的发展。大约二三十年前,neural network曾经是ML领域特别火热的一个方向,可是后来确慢慢淡出了,缘由包括如下几个方面:

1)比较容易过拟合,参数比较难tune,并且须要很多trick;

2)训练速度比较慢,在层次比较少(小于等于3)的状况下效果并不比其它方法更优;

       因此中间有大约20多年的时间,神经网络被关注不多,这段时间基本上是SVM和boosting算法的天下。可是,一个痴心的老先生Hinton,他坚持了下来,并最终(和其它人一块儿Bengio、Yann.lecun等)提成了一个实际可行的deep learning框架。

        Deep learning与传统的神经网络之间有相同的地方也有不少不一样。

        两者的相同在于deep learning采用了神经网络类似的分层结构,系统由包括输入层、隐层(多层)、输出层组成的多层网络,只有相邻层节点之间有链接,同一层以及跨层节点之间相互无链接,每一层能够看做是一个logistic regression模型;这种分层结构,是比较接近人类大脑的结构的。

1365439360_3108.jpg

 

        而为了克服神经网络训练中的问题,DL采用了与神经网络很不一样的训练机制。传统神经网络中,采用的是back propagation的方式进行,简单来说就是采用迭代的算法来训练整个网络,随机设定初值,计算当前网络的输出,而后根据当前输出和label之间的差去改变前面各层的参数,直到收敛(总体是一个梯度降低法)。而deep learning总体上是一个layer-wise的训练机制。这样作的缘由是由于,若是采用back propagation的机制,对于一个deep network(7层以上),残差传播到最前面的层已经变得过小,出现所谓的gradient diffusion(梯度扩散)。这个问题咱们接下来讨论。

 

8、Deep learning训练过程

8.一、传统神经网络的训练方法为何不能用在深度神经网络

       BP算法做为传统训练多层网络的典型算法,实际上对仅含几层网络,该训练方法就已经很不理想。深度结构(涉及多个非线性处理单元层)非凸目标代价函数中广泛存在的局部最小是训练困难的主要来源。

BP算法存在的问题:

(1)梯度愈来愈稀疏:从顶层越往下,偏差校订信号愈来愈小;

(2)收敛到局部最小值:尤为是从远离最优区域开始的时候(随机值初始化会致使这种状况的发生);

(3)通常,咱们只能用有标签的数据来训练:但大部分的数据是没标签的,而大脑能够从没有标签的的数据中学习;

 

8.二、deep learning训练过程

       若是对全部层同时训练,时间复杂度会过高;若是每次训练一层,误差就会逐层传递。这会面临跟上面监督学习中相反的问题,会严重欠拟合(由于深度网络的神经元和参数太多了)。

       2006年,hinton提出了在非监督数据上创建多层神经网络的一个有效方法,简单的说,分为两步,一是每次训练一层网络,二是调优,使原始表示x向上生成的高级表示r和该高级表示r向下生成的x'尽量一致。方法是:

1)首先逐层构建单层神经元,这样每次都是训练一个单层网络。

2)当全部层训练完后,Hinton使用wake-sleep算法进行调优。

       将除最顶层的其它层间的权重变为双向的,这样最顶层仍然是一个单层神经网络,而其它层则变为了图模型。向上的权重用于“认知”,向下的权重用于“生成”。而后使用Wake-Sleep算法调整全部的权重。让认知和生成达成一致,也就是保证生成的最顶层表示可以尽量正确的复原底层的结点。好比顶层的一个结点表示人脸,那么全部人脸的图像应该激活这个结点,而且这个结果向下生成的图像应该可以表现为一个大概的人脸图像。Wake-Sleep算法分为醒(wake)和睡(sleep)两个部分。

1)wake阶段:认知过程,经过外界的特征和向上的权重(认知权重)产生每一层的抽象表示(结点状态),而且使用梯度降低修改层间的下行权重(生成权重)。也就是“若是现实跟我想象的不同,改变个人权重使得我想象的东西就是这样的”。

2)sleep阶段:生成过程,经过顶层表示(醒时学得的概念)和向下权重,生成底层的状态,同时修改层间向上的权重。也就是“若是梦中的景象不是我脑中的相应概念,改变个人认知权重使得这种景象在我看来就是这个概念”。

 

deep learning训练过程具体以下:

1)使用自下上升非监督学习(就是从底层开始,一层一层的往顶层训练):

       采用无标定数据(有标定数据也可)分层训练各层参数,这一步能够看做是一个无监督训练过程,是和传统神经网络区别最大的部分(这个过程能够看做是feature learning过程):

       具体的,先用无标定数据训练第一层,训练时先学习第一层的参数(这一层能够看做是获得一个使得输出和输入差异最小的三层神经网络的隐层),因为模型capacity的限制以及稀疏性约束,使得获得的模型可以学习到数据自己的结构,从而获得比输入更具备表示能力的特征;在学习获得第n-1层后,将n-1层的输出做为第n层的输入,训练第n层,由此分别获得各层的参数;

2)自顶向下的监督学习(就是经过带标签的数据去训练,偏差自顶向下传输,对网络进行微调):

       基于第一步获得的各层参数进一步fine-tune整个多层模型的参数,这一步是一个有监督训练过程;第一步相似神经网络的随机初始化初值过程,因为DL的第一步不是随机初始化,而是经过学习输入数据的结构获得的,于是这个初值更接近全局最优,从而可以取得更好的效果;因此deep learning效果好很大程度上归功于第一步的feature learning过程。



接上

 

9、Deep Learning的经常使用模型或者方法

9.一、AutoEncoder自动编码器

        Deep Learning最简单的一种方法是利用人工神经网络的特色,人工神经网络(ANN)自己就是具备层次结构的系统,若是给定一个神经网络,咱们假设其输出与输入是相同的,而后训练调整其参数,获得每一层中的权重。天然地,咱们就获得了输入I的几种不一样表示(每一层表明一种表示),这些表示就是特征。自动编码器就是一种尽量复现输入信号的神经网络。为了实现这种复现,自动编码器就必须捕捉能够表明输入数据的最重要的因素,就像PCA那样,找到能够表明原信息的主要成分。

       具体过程简单的说明以下:

1)给定无标签数据,用非监督学习学习特征:

1365439723_4504.jpg

 

       在咱们以前的神经网络中,如第一个图,咱们输入的样本是有标签的,即(input, target),这样咱们根据当前输出和target(label)之间的差去改变前面各层的参数,直到收敛。但如今咱们只有无标签数据,也就是右边的图。那么这个偏差怎么获得呢?

1365439745_1862.jpg

 

        如上图,咱们将input输入一个encoder编码器,就会获得一个code,这个code也就是输入的一个表示,那么咱们怎么知道这个code表示的就是input呢?咱们加一个decoder解码器,这时候decoder就会输出一个信息,那么若是输出的这个信息和一开始的输入信号input是很像的(理想状况下就是同样的),那很明显,咱们就有理由相信这个code是靠谱的。因此,咱们就经过调整encoder和decoder的参数,使得重构偏差最小,这时候咱们就获得了输入input信号的第一个表示了,也就是编码code了。由于是无标签数据,因此偏差的来源就是直接重构后与原输入相比获得。

1365439780_9725.jpg

 

2)经过编码器产生特征,而后训练下一层。这样逐层训练:

       那上面咱们就获得第一层的code,咱们的重构偏差最小让咱们相信这个code就是原输入信号的良好表达了,或者牵强点说,它和原信号是如出一辙的(表达不同,反映的是一个东西)。那第二层和第一层的训练方式就没有差异了,咱们将第一层输出的code当成第二层的输入信号,一样最小化重构偏差,就会获得第二层的参数,而且获得第二层输入的code,也就是原输入信息的第二个表达了。其余层就一样的方法炮制就好了(训练这一层,前面层的参数都是固定的,而且他们的decoder已经没用了,都不须要了)。

1365439805_4681.jpg

 

3)有监督微调:

      通过上面的方法,咱们就能够获得不少层了。至于须要多少层(或者深度须要多少,这个目前自己就没有一个科学的评价方法)须要本身试验调了。每一层都会获得原始输入的不一样的表达。固然了,咱们以为它是越抽象越好了,就像人的视觉系统同样。

       到这里,这个AutoEncoder还不能用来分类数据,由于它尚未学习如何去连结一个输入和一个类。它只是学会了如何去重构或者复现它的输入而已。或者说,它只是学习得到了一个能够良好表明输入的特征,这个特征能够最大程度上表明原输入信号。那么,为了实现分类,咱们就能够在AutoEncoder的最顶的编码层添加一个分类器(例如罗杰斯特回归、SVM等),而后经过标准的多层神经网络的监督训练方法(梯度降低法)去训练。

        也就是说,这时候,咱们须要将最后层的特征code输入到最后的分类器,经过有标签样本,经过监督学习进行微调,这也分两种,一个是只调整分类器(黑色部分):

1365439828_1081.jpg

 

       另外一种:经过有标签样本,微调整个系统:(若是有足够多的数据,这个是最好的。end-to-end learning端对端学习)

1365439852_7450.jpg

 

       一旦监督训练完成,这个网络就能够用来分类了。神经网络的最顶层能够做为一个线性分类器,而后咱们能够用一个更好性能的分类器去取代它。

       在研究中能够发现,若是在原有的特征中加入这些自动学习获得的特征能够大大提升精确度,甚至在分类问题中比目前最好的分类算法效果还要好!

        AutoEncoder存在一些变体,这里简要介绍下两个:

Sparse AutoEncoder稀疏自动编码器:

      固然,咱们还能够继续加上一些约束条件获得新的Deep Learning方法,如:若是在AutoEncoder的基础上加上L1的Regularity限制(L1主要是约束每一层中的节点中大部分都要为0,只有少数不为0,这就是Sparse名字的来源),咱们就能够获得Sparse AutoEncoder法。

1365439878_3585.jpg

 

       如上图,其实就是限制每次获得的表达code尽可能稀疏。由于稀疏的表达每每比其余的表达要有效(人脑好像也是这样的,某个输入只是刺激某些神经元,其余的大部分的神经元是受到抑制的)。

Denoising AutoEncoders降噪自动编码器:

        降噪自动编码器DA是在自动编码器的基础上,训练数据加入噪声,因此自动编码器必须学习去去除这种噪声而得到真正的没有被噪声污染过的输入。所以,这就迫使编码器去学习输入信号的更加鲁棒的表达,这也是它的泛化能力比通常编码器强的缘由。DA能够经过梯度降低算法去训练。

1365439902_7892.jpg

 


接上

 

9.二、Sparse Coding稀疏编码

       若是咱们把输出必须和输入相等的限制放松,同时利用线性代数中基的概念,即O = a1*Φ1 + a2*Φ2+….+ an*Φn, Φi是基,ai是系数,咱们能够获得这样一个优化问题:

Min |I – O|,其中I表示输入,O表示输出。

       经过求解这个最优化式子,咱们能够求得系数ai和基Φi,这些系数和基就是输入的另一种近似表达。

1365483354_9315.jpg

 

       所以,它们能够用来表达输入I,这个过程也是自动学习获得的。若是咱们在上述式子上加上L1的Regularity限制,获得:

Min |I – O| + u*(|a1| + |a2| + … + |an |)

        这种方法被称为Sparse Coding。通俗的说,就是将一个信号表示为一组基的线性组合,并且要求只须要较少的几个基就能够将信号表示出来。“稀疏性”定义为:只有不多的几个非零元素或只有不多的几个远大于零的元素。要求系数 ai 是稀疏的意思就是说:对于一组输入向量,咱们只想有尽量少的几个系数远大于零。选择使用具备稀疏性的份量来表示咱们的输入数据是有缘由的,由于绝大多数的感官数据,好比天然图像,能够被表示成少许基本元素的叠加,在图像中这些基本元素能够是面或者线。同时,好比与初级视觉皮层的类比过程也所以获得了提高(人脑有大量的神经元,但对于某些图像或者边缘只有不多的神经元兴奋,其余都处于抑制状态)。

         稀疏编码算法是一种无监督学习方法,它用来寻找一组“超完备”基向量来更高效地表示样本数据。虽然形如主成分分析技术(PCA)能使咱们方便地找到一组“完备”基向量,可是这里咱们想要作的是找到一组“超完备”基向量来表示输入向量(也就是说,基向量的个数比输入向量的维数要大)。超完备基的好处是它们能更有效地找出隐含在输入数据内部的结构与模式。然而,对于超完备基来讲,系数ai再也不由输入向量惟一肯定。所以,在稀疏编码算法中,咱们另加了一个评判标准“稀疏性”来解决因超完备而致使的退化(degeneracy)问题。(详细过程请参考:UFLDL Tutorial稀疏编码

1365483386_5095.jpg

 

       好比在图像的Feature Extraction的最底层要作Edge Detector的生成,那么这里的工做就是从Natural Images中randomly选取一些小patch,经过这些patch生成可以描述他们的“基”,也就是右边的8*8=64个basis组成的basis,而后给定一个test patch, 咱们能够按照上面的式子经过basis的线性组合获得,而sparse matrix就是a,下图中的a中有64个维度,其中非零项只有3个,故称“sparse”。

       这里可能你们会有疑问,为何把底层做为Edge Detector呢?上层又是什么呢?这里作个简单解释你们就会明白,之因此是Edge Detector是由于不一样方向的Edge就可以描述出整幅图像,因此不一样方向的Edge天然就是图像的basis了……而上一层的basis组合的结果,上上层又是上一层的组合basis……(就是上面第四部分的时候我们说的那样)

       Sparse coding分为两个部分:

1)Training阶段:给定一系列的样本图片[x1, x 2, …],咱们须要学习获得一组基[Φ1, Φ2, …],也就是字典。

       稀疏编码是k-means算法的变体,其训练过程也差很少(EM算法的思想:若是要优化的目标函数包含两个变量,如L(W, B),那么咱们能够先固定W,调整B使得L最小,而后再固定B,调整W使L最小,这样迭代交替,不断将L推向最小值。EM算法能够见个人博客:“从最大似然到EM算法浅解”)。

       训练过程就是一个重复迭代的过程,按上面所说,咱们交替的更改a和Φ使得下面这个目标函数最小。

1365483429_5706.jpg

 

      每次迭代分两步:

a)固定字典Φ[k],而后调整a[k],使得上式,即目标函数最小(即解LASSO问题)。

b)而后固定住a [k],调整Φ [k],使得上式,即目标函数最小(即解凸QP问题)。

      不断迭代,直至收敛。这样就能够获得一组能够良好表示这一系列x的基,也就是字典。

2)Coding阶段:给定一个新的图片x,由上面获得的字典,经过解一个LASSO问题获得稀疏向量a。这个稀疏向量就是这个输入向量x的一个稀疏表达了。

1365483467_1398.jpg

 

例如:

1365483491_9524.jpg

 



接上

 

注:下面的两个Deep Learning方法说明须要完善,但为了保证文章的连续性和完整性,先贴一些上来,后面再修改好了。

 

9.三、Restricted Boltzmann Machine (RBM)限制波尔兹曼机

       假设有一个二部图,每一层的节点之间没有连接,一层是可视层,即输入数据层(v),一层是隐藏层(h),若是假设全部的节点都是随机二值变量节点(只能取0或者1值),同时假设全几率分布p(v,h)知足Boltzmann 分布,咱们称这个模型是Restricted BoltzmannMachine (RBM)。

1365561323_7932.jpg

下面咱们来看看为何它是Deep Learning方法。首先,这个模型由于是二部图,因此在已知v的状况下,全部的隐藏节点之间是条件独立的(由于节点之间不存在链接),即p(h|v)=p(h1|v)…p(hn|v)。同理,在已知隐藏层h的状况下,全部的可视节点都是条件独立的。同时又因为全部的v和h知足Boltzmann 分布,所以,当输入v的时候,经过p(h|v) 能够获得隐藏层h,而获得隐藏层h以后,经过p(v|h)又能获得可视层,经过调整参数,咱们就是要使得从隐藏层获得的可视层v1与原来的可视层v若是同样,那么获得的隐藏层就是可视层另一种表达,所以隐藏层能够做为可视层输入数据的特征,因此它就是一种Deep Learning方法。

1365561362_2427.jpg

 

       如何训练呢?也就是可视层节点和隐节点间的权值怎么肯定呢?咱们须要作一些数学分析。也就是模型了。

1365561384_7276.jpg

 

        联合组态(jointconfiguration)的能量能够表示为:

1365561400_3303.jpg

 

        而某个组态的联合几率分布能够经过Boltzmann 分布(和这个组态的能量)来肯定:

1365561427_1491.jpg

 

      由于隐藏节点之间是条件独立的(由于节点之间不存在链接),即:

1365561464_9047.jpg

 

      而后咱们能够比较容易(对上式进行因子分解Factorizes)获得在给定可视层v的基础上,隐层第j个节点为1或者为0的几率:

1365561492_4178.jpg

 

       同理,在给定隐层h的基础上,可视层第i个节点为1或者为0的几率也能够容易获得:

1365561523_2700.jpg

 

       给定一个知足独立同分布的样本集:D={v(1), v(2),…, v(N)},咱们须要学习参数θ={W,a,b}。

       咱们最大化如下对数似然函数(最大似然估计:对于某个几率模型,咱们须要选择一个参数,让咱们当前的观测样本的几率最大):

1365561551_7458.jpg

 

        也就是对最大对数似然函数求导,就能够获得L最大时对应的参数W了。

1365561570_5666.jpg

 

 

       若是,咱们把隐藏层的层数增长,咱们能够获得Deep Boltzmann Machine(DBM);若是咱们在靠近可视层的部分使用贝叶斯信念网络(即有向图模型,固然这里依然限制层中节点之间没有连接),而在最远离可视层的部分使用Restricted Boltzmann Machine,咱们能够获得DeepBelief Net(DBN)。

1365561611_3496.jpg


 

 

9.四、Deep Belief Networks深信度网络

        DBNs是一个几率生成模型,与传统的判别模型的神经网络相对,生成模型是创建一个观察数据和标签之间的联合分布,对P(Observation|Label)和 P(Label|Observation)都作了评估,而判别模型仅仅而已评估了后者,也就是P(Label|Observation)。对于在深度神经网络应用传统的BP算法的时候,DBNs遇到了如下问题:

(1)须要为训练提供一个有标签的样本集;

(2)学习过程较慢;

(3)不适当的参数选择会致使学习收敛于局部最优解。

1365561636_9432.jpg

 

       DBNs由多个限制玻尔兹曼机(Restricted Boltzmann Machines)层组成,一个典型的神经网络类型如图三所示。这些网络被“限制”为一个可视层和一个隐层,层间存在链接,但层内的单元间不存在链接。隐层单元被训练去捕捉在可视层表现出来的高阶数据的相关性。

       首先,先不考虑最顶构成一个联想记忆(associative memory)的两层,一个DBN的链接是经过自顶向下的生成权值来指导肯定的,RBMs就像一个建筑块同样,相比传统和深度分层的sigmoid信念网络,它能易于链接权值的学习。

       最开始的时候,经过一个非监督贪婪逐层方法去预训练得到生成模型的权值,非监督贪婪逐层方法被Hinton证实是有效的,并被其称为对比分歧(contrastive divergence)。

       在这个训练阶段,在可视层会产生一个向量v,经过它将值传递到隐层。反过来,可视层的输入会被随机的选择,以尝试去重构原始的输入信号。最后,这些新的可视的神经元激活单元将前向传递重构隐层激活单元,得到h(在训练过程当中,首先将可视向量值映射给隐单元;而后可视单元由隐层单元重建;这些新可视单元再次映射给隐单元,这样就获取新的隐单元。执行这种反复步骤叫作吉布斯采样)。这些后退和前进的步骤就是咱们熟悉的Gibbs采样,而隐层激活单元和可视层输入之间的相关性差异就做为权值更新的主要依据。

       训练时间会显著的减小,由于只须要单个步骤就能够接近最大似然学习。增长进网络的每一层都会改进训练数据的对数几率,咱们能够理解为愈来愈接近能量的真实表达。这个有意义的拓展,和无标签数据的使用,是任何一个深度学习应用的决定性的因素。

1365561659_1933.jpg

 

       在最高两层,权值被链接到一块儿,这样更低层的输出将会提供一个参考的线索或者关联给顶层,这样顶层就会将其联系到它的记忆内容。而咱们最关心的,最后想获得的就是判别性能,例如分类任务里面。

       在预训练后,DBN能够经过利用带标签数据用BP算法去对判别性能作调整。在这里,一个标签集将被附加到顶层(推广联想记忆),经过一个自下向上的,学习到的识别权值得到一个网络的分类面。这个性能会比单纯的BP算法训练的网络好。这能够很直观的解释,DBNs的BP算法只须要对权值参数空间进行一个局部的搜索,这相比前向神经网络来讲,训练是要快的,并且收敛的时间也少。

       DBNs的灵活性使得它的拓展比较容易。一个拓展就是卷积DBNs(Convolutional Deep Belief Networks(CDBNs))。DBNs并无考虑到图像的2维结构信息,由于输入是简单的从一个图像矩阵一维向量化的。而CDBNs就是考虑到了这个问题,它利用邻域像素的空域关系,经过一个称为卷积RBMs的模型区达到生成模型的变换不变性,并且能够容易得变换到高维图像。DBNs并无明确地处理对观察变量的时间联系的学习上,虽然目前已经有这方面的研究,例如堆叠时间RBMs,以此为推广,有序列学习的dubbed temporal convolutionmachines,这种序列学习的应用,给语音信号处理问题带来了一个让人激动的将来研究方向。

       目前,和DBNs有关的研究包括堆叠自动编码器,它是经过用堆叠自动编码器来替换传统DBNs里面的RBMs。这就使得能够经过一样的规则来训练产生深度多层神经网络架构,但它缺乏层的参数化的严格要求。与DBNs不一样,自动编码器使用判别模型,这样这个结构就很难采样输入采样空间,这就使得网络更难捕捉它的内部表达。可是,降噪自动编码器却能很好的避免这个问题,而且比传统的DBNs更优。它经过在训练过程添加随机的污染并堆叠产生场泛化性能。训练单一的降噪自动编码器的过程和RBMs训练生成模型的过程同样。

 

接上

 

9.五、Convolutional Neural Networks卷积神经网络

       卷积神经网络是人工神经网络的一种,已成为当前语音分析和图像识别领域的研究热点。它的权值共享网络结构使之更相似于生物神经网络,下降了网络模型的复杂度,减小了权值的数量。该优势在网络的输入是多维图像时表现的更为明显,使图像能够直接做为网络的输入,避免了传统识别算法中复杂的特征提取和数据重建过程。卷积网络是为识别二维形状而特殊设计的一个多层感知器,这种网络结构对平移、比例缩放、倾斜或者共他形式的变形具备高度不变性。

       CNNs是受早期的延时神经网络(TDNN)的影响。延时神经网络经过在时间维度上共享权值下降学习复杂度,适用于语音和时间序列信号的处理。

       CNNs是第一个真正成功训练多层网络结构的学习算法。它利用空间关系减小须要学习的参数数目以提升通常前向BP算法的训练性能。CNNs做为一个深度学习架构提出是为了最小化数据的预处理要求。在CNN中,图像的一小部分(局部感觉区域)做为层级结构的最低层的输入,信息再依次传输到不一样的层,每层经过一个数字滤波器去得到观测数据的最显著的特征。这个方法可以获取对平移、缩放和旋转不变的观测数据的显著特征,由于图像的局部感觉区域容许神经元或者处理单元能够访问到最基础的特征,例如定向边缘或者角点。

1)卷积神经网络的历史

       1962年Hubel和Wiesel经过对猫视觉皮层细胞的研究,提出了感觉野(receptive field)的概念,1984年日本学者Fukushima基于感觉野概念提出的神经认知机(neocognitron)能够看做是卷积神经网络的第一个实现网络,也是感觉野概念在人工神经网络领域的首次应用。神经认知机将一个视觉模式分解成许多子模式(特征),而后进入分层递阶式相连的特征平面进行处理,它试图将视觉系统模型化,使其可以在即便物体有位移或轻微变形的时候,也能完成识别。

       一般神经认知机包含两类神经元,即承担特征抽取的S-元和抗变形的C-元。S-元中涉及两个重要参数,即感觉野与阈值参数,前者肯定输入链接的数目,后者则控制对特征子模式的反应程度。许多学者一直致力于提升神经认知机的性能的研究:在传统的神经认知机中,每一个S-元的感光区中由C-元带来的视觉模糊量呈正态分布。若是感光区的边缘所产生的模糊效果要比中央来得大,S-元将会接受这种非正态模糊所致使的更大的变形容忍性。咱们但愿获得的是,训练模式与变形刺激模式在感觉野的边缘与其中心所产生的效果之间的差别变得愈来愈大。为了有效地造成这种非正态模糊,Fukushima提出了带双C-元层的改进型神经认知机。

       Van Ooyen和Niehuis为提升神经认知机的区别能力引入了一个新的参数。事实上,该参数做为一种抑制信号,抑制了神经元对重复激励特征的激励。多数神经网络在权值中记忆训练信息。根据Hebb学习规则,某种特征训练的次数越多,在之后的识别过程当中就越容易被检测。也有学者将进化计算理论与神经认知机结合,经过减弱对重复性激励特征的训练学习,而使得网络注意那些不一样的特征以助于提升区分能力。上述都是神经认知机的发展过程,而卷积神经网络可看做是神经认知机的推广形式,神经认知机是卷积神经网络的一种特例。

2)卷积神经网络的网络结构

      卷积神经网络是一个多层的神经网络,每层由多个二维平面组成,而每一个平面由多个独立神经元组成。

1365562094_2229.jpg

 

       图:卷积神经网络的概念示范:输入图像经过和三个可训练的滤波器和可加偏置进行卷积,滤波过程如图一,卷积后在C1层产生三个特征映射图,而后特征映射图中每组的四个像素再进行求和,加权值,加偏置,经过一个Sigmoid函数获得三个S2层的特征映射图。这些映射图再进过滤波获得C3层。这个层级结构再和S2同样产生S4。最终,这些像素值被光栅化,并链接成一个向量输入到传统的神经网络,获得输出。

       通常地,C层为特征提取层,每一个神经元的输入与前一层的局部感觉野相连,并提取该局部的特征,一旦该局部特征被提取后,它与其余特征间的位置关系也随之肯定下来;S层是特征映射层,网络的每一个计算层由多个特征映射组成,每一个特征映射为一个平面,平面上全部神经元的权值相等。特征映射结构采用影响函数核小的sigmoid函数做为卷积网络的激活函数,使得特征映射具备位移不变性。

       此外,因为一个映射面上的神经元共享权值,于是减小了网络自由参数的个数,下降了网络参数选择的复杂度。卷积神经网络中的每个特征提取层(C-层)都紧跟着一个用来求局部平均与二次提取的计算层(S-层),这种特有的两次特征提取结构使网络在识别时对输入样本有较高的畸变容忍能力。

3)关于参数减小与权值共享

      上面聊到,好像CNN一个牛逼的地方就在于经过感觉野和权值共享减小了神经网络须要训练的参数的个数。那到底是啥的呢?

       下图左:若是咱们有1000x1000像素的图像,有1百万个隐层神经元,那么他们全链接的话(每一个隐层神经元都链接图像的每个像素点),就有1000x1000x1000000=10^12个链接,也就是10^12个权值参数。然而图像的空间联系是局部的,就像人是经过一个局部的感觉野去感觉外界图像同样,每个神经元都不须要对全局图像作感觉,每一个神经元只感觉局部的图像区域,而后在更高层,将这些感觉不一样局部的神经元综合起来就能够获得全局的信息了。这样,咱们就能够减小链接的数目,也就是减小神经网络须要训练的权值参数的个数了。以下图右:假如局部感觉野是10x10,隐层每一个感觉野只须要和这10x10的局部图像相链接,因此1百万个隐层神经元就只有一亿个链接,即10^8个参数。比原来减小了四个0(数量级),这样训练起来就没那么费力了,但仍是感受不少的啊,那还有啥办法没?

1365562155_9356.jpg

 

       咱们知道,隐含层的每个神经元都链接10x10个图像区域,也就是说每个神经元存在10x10=100个链接权值参数。那若是咱们每一个神经元这100个参数是相同的呢?也就是说每一个神经元用的是同一个卷积核去卷积图像。这样咱们就只有多少个参数??只有100个参数啊!!!亲!无论你隐层的神经元个数有多少,两层间的链接我只有100个参数啊!亲!这就是权值共享啊!亲!这就是卷积神经网络的主打卖点啊!亲!(有点烦了,呵呵)也许你会问,这样作靠谱吗?为何可行呢?这个……共同窗习。

       好了,你就会想,这样提取特征也忒不靠谱吧,这样你只提取了一种特征啊?对了,真聪明,咱们须要提取多种特征对不?假如一种滤波器,也就是一种卷积核就是提出图像的一种特征,例如某个方向的边缘。那么咱们须要提取不一样的特征,怎么办,加多几种滤波器不就好了吗?对了。因此假设咱们加到100种滤波器,每种滤波器的参数不同,表示它提出输入图像的不一样特征,例如不一样的边缘。这样每种滤波器去卷积图像就获得对图像的不一样特征的放映,咱们称之为Feature Map。因此100种卷积核就有100个Feature Map。这100个Feature Map就组成了一层神经元。到这个时候明了了吧。咱们这一层有多少个参数了?100种卷积核x每种卷积核共享100个参数=100x100=10K,也就是1万个参数。才1万个参数啊!亲!(又来了,受不了了!)见下图右:不一样的颜色表达不一样的滤波器。

1365562217_2880.jpg

 

       嘿哟,遗漏一个问题了。刚才说隐层的参数个数和隐层的神经元个数无关,只和滤波器的大小和滤波器种类的多少有关。那么隐层的神经元个数怎么肯定呢?它和原图像,也就是输入的大小(神经元个数)、滤波器的大小和滤波器在图像中的滑动步长都有关!例如,个人图像是1000x1000像素,而滤波器大小是10x10,假设滤波器没有重叠,也就是步长为10,这样隐层的神经元个数就是(1000x1000 )/ (10x10)=100x100个神经元了,假设步长是8,也就是卷积核会重叠两个像素,那么……我就不算了,思想懂了就好。注意了,这只是一种滤波器,也就是一个Feature Map的神经元个数哦,若是100个Feature Map就是100倍了。因而可知,图像越大,神经元个数和须要训练的权值参数个数的贫富差距就越大。

1365562245_8389.jpg

 

      须要注意的一点是,上面的讨论都没有考虑每一个神经元的偏置部分。因此权值个数须要加1 。这个也是同一种滤波器共享的。

      总之,卷积网络的核心思想是将:局部感觉野、权值共享(或者权值复制)以及时间或空间亚采样这三种结构思想结合起来得到了某种程度的位移、尺度、形变不变性。

4)一个典型的例子说明

       一种典型的用来识别数字的卷积网络是LeNet-5(效果和paper等见这)。当年美国大多数银行就是用它来识别支票上面的手写数字的。可以达到这种商用的地步,它的准确性可想而知。毕竟目前学术界和工业界的结合是最受争议的。

1365562301_9590.jpg

 

      那下面我们也用这个例子来讲明下。

1365562321_2400.jpg

 

        LeNet-5共有7层,不包含输入,每层都包含可训练参数(链接权重)。输入图像为32*32大小。这要比Mnist数据库(一个公认的手写数据库)中最大的字母还大。这样作的缘由是但愿潜在的明显特征如笔画断电或角点可以出如今最高层特征监测子感觉野的中心。

        咱们先要明确一点:每一个层有多个Feature Map,每一个Feature Map经过一种卷积滤波器提取输入的一种特征,而后每一个Feature Map有多个神经元。

        C1层是一个卷积层(为何是卷积?卷积运算一个重要的特色就是,经过卷积运算,能够使原信号特征加强,而且下降噪音),由6个特征图Feature Map构成。特征图中每一个神经元与输入中5*5的邻域相连。特征图的大小为28*28,这样能防止输入的链接掉到边界以外(是为了BP反馈时的计算,不致梯度损失,我的看法)。C1有156个可训练参数(每一个滤波器5*5=25个unit参数和一个bias参数,一共6个滤波器,共(5*5+1)*6=156个参数),共156*(28*28)=122,304个链接。

       S2层是一个下采样层(为何是下采样?利用图像局部相关性的原理,对图像进行子抽样,能够减小数据处理量同时保留有用信息),有6个14*14的特征图。特征图中的每一个单元与C1中相对应特征图的2*2邻域相链接。S2层每一个单元的4个输入相加,乘以一个可训练参数,再加上一个可训练偏置。结果经过sigmoid函数计算。可训练系数和偏置控制着sigmoid函数的非线性程度。若是系数比较小,那么运算近似于线性运算,亚采样至关于模糊图像。若是系数比较大,根据偏置的大小亚采样能够被当作是有噪声的“或”运算或者有噪声的“与”运算。每一个单元的2*2感觉野并不重叠,所以S2中每一个特征图的大小是C1中特征图大小的1/4(行和列各1/2)。S2层有12个可训练参数和5880个链接。

1365562371_3221.jpg

 

图:卷积和子采样过程:卷积过程包括:用一个可训练的滤波器fx去卷积一个输入的图像(第一阶段是输入的图像,后面的阶段就是卷积特征map了),而后加一个偏置bx,获得卷积层Cx。子采样过程包括:每邻域四个像素求和变为一个像素,而后经过标量Wx+1加权,再增长偏置bx+1,而后经过一个sigmoid激活函数,产生一个大概缩小四倍的特征映射图Sx+1。

       因此从一个平面到下一个平面的映射能够看做是做卷积运算,S-层可看做是模糊滤波器,起到二次特征提取的做用。隐层与隐层之间空间分辨率递减,而每层所含的平面数递增,这样可用于检测更多的特征信息。

       C3层也是一个卷积层,它一样经过5x5的卷积核去卷积层S2,而后获得的特征map就只有10x10个神经元,可是它有16种不一样的卷积核,因此就存在16个特征map了。这里须要注意的一点是:C3中的每一个特征map是链接到S2中的全部6个或者几个特征map的,表示本层的特征map是上一层提取到的特征map的不一样组合(这个作法也并非惟一的)。(看到没有,这里是组合,就像以前聊到的人的视觉系统同样,底层的结构构成上层更抽象的结构,例如边缘构成形状或者目标的部分)。

       刚才说C3中每一个特征图由S2中全部6个或者几个特征map组合而成。为何不把S2中的每一个特征图链接到每一个C3的特征图呢?缘由有2点。第一,不彻底的链接机制将链接的数量保持在合理的范围内。第二,也是最重要的,其破坏了网络的对称性。因为不一样的特征图有不一样的输入,因此迫使他们抽取不一样的特征(但愿是互补的)。

      例如,存在的一个方式是:C3的前6个特征图以S2中3个相邻的特征图子集为输入。接下来6个特征图以S2中4个相邻特征图子集为输入。而后的3个以不相邻的4个特征图子集为输入。最后一个将S2中全部特征图为输入。这样C3层有1516个可训练参数和151600个链接。

       S4层是一个下采样层,由16个5*5大小的特征图构成。特征图中的每一个单元与C3中相应特征图的2*2邻域相链接,跟C1和S2之间的链接同样。S4层有32个可训练参数(每一个特征图1个因子和一个偏置)和2000个链接。

       C5层是一个卷积层,有120个特征图。每一个单元与S4层的所有16个单元的5*5邻域相连。因为S4层特征图的大小也为5*5(同滤波器同样),故C5特征图的大小为1*1:这构成了S4和C5之间的全链接。之因此仍将C5标示为卷积层而非全相联层,是由于若是LeNet-5的输入变大,而其余的保持不变,那么此时特征图的维数就会比1*1大。C5层有48120个可训练链接。

        F6层有84个单元(之因此选这个数字的缘由来自于输出层的设计),与C5层全相连。有10164个可训练参数。如同经典神经网络,F6层计算输入向量和权重向量之间的点积,再加上一个偏置。而后将其传递给sigmoid函数产生单元i的一个状态。

      最后,输出层由欧式径向基函数(Euclidean Radial Basis Function)单元组成,每类一个单元,每一个有84个输入。换句话说,每一个输出RBF单元计算输入向量和参数向量之间的欧式距离。输入离参数向量越远,RBF输出的越大。一个RBF输出能够被理解为衡量输入模式和与RBF相关联类的一个模型的匹配程度的惩罚项。用几率术语来讲,RBF输出能够被理解为F6层配置空间的高斯分布的负log-likelihood。给定一个输入模式,损失函数应能使得F6的配置与RBF参数向量(即模式的指望分类)足够接近。这些单元的参数是人工选取并保持固定的(至少初始时候如此)。这些参数向量的成分被设为-1或1。虽然这些参数能够以-1和1等几率的方式任选,或者构成一个纠错码,可是被设计成一个相应字符类的7*12大小(即84)的格式化图片。这种表示对识别单独的数字不是颇有用,可是对识别可打印ASCII集中的字符串颇有用。

      使用这种分布编码而非更经常使用的“1 of N”编码用于产生输出的另外一个缘由是,当类别比较大的时候,非分布编码的效果比较差。缘由是大多数时间非分布编码的输出必须为0。这使得用sigmoid单元很难实现。另外一个缘由是分类器不只用于识别字母,也用于拒绝非字母。使用分布编码的RBF更适合该目标。由于与sigmoid不一样,他们在输入空间的较好限制的区域内兴奋,而非典型模式更容易落到外边。

        RBF参数向量起着F6层目标向量的角色。须要指出这些向量的成分是+1或-1,这正好在F6 sigmoid的范围内,所以能够防止sigmoid函数饱和。实际上,+1和-1是sigmoid函数的最大弯曲的点处。这使得F6单元运行在最大非线性范围内。必须避免sigmoid函数的饱和,由于这将会致使损失函数较慢的收敛和病态问题。

5)训练过程

        神经网络用于模式识别的主流是有指导学习网络,无指导学习网络更多的是用于聚类分析。对于有指导的模式识别,因为任同样本的类别是已知的,样本在空间的分布再也不是依据其天然分布倾向来划分,而是要根据同类样本在空间的分布及不一样类样本之间的分离程度找一种适当的空间划分方法,或者找到一个分类边界,使得不一样类样本分别位于不一样的区域内。这就须要一个长时间且复杂的学习过程,不断调整用以划分样本空间的分类边界的位置,使尽量少的样本被划分到非同类区域中。

       卷积网络在本质上是一种输入到输出的映射,它可以学习大量的输入与输出之间的映射关系,而不须要任何输入和输出之间的精确的数学表达式,只要用已知的模式对卷积网络加以训练,网络就具备输入输出对之间的映射能力。卷积网络执行的是有导师训练,因此其样本集是由形如:(输入向量,理想输出向量)的向量对构成的。全部这些向量对,都应该是来源于网络即将模拟的系统的实际“运行”结果。它们能够是从实际运行系统中采集来的。在开始训练前,全部的权都应该用一些不一样的小随机数进行初始化。“小随机数”用来保证网络不会因权值过大而进入饱和状态,从而致使训练失败;“不一样”用来保证网络能够正常地学习。实际上,若是用相同的数去初始化权矩阵,则网络无能力学习。

       训练算法与传统的BP算法差很少。主要包括4步,这4步被分为两个阶段:

第一阶段,向前传播阶段:

a)从样本集中取一个样本(X,Yp),将X输入网络;

b)计算相应的实际输出Op。

      在此阶段,信息从输入层通过逐级的变换,传送到输出层。这个过程也是网络在完成训练后正常运行时执行的过程。在此过程当中,网络执行的是计算(实际上就是输入与每层的权值矩阵相点乘,获得最后的输出结果):

          Op=Fn(…(F2(F1(XpW(1))W(2))…)W(n))

第二阶段,向后传播阶段

a)算实际输出Op与相应的理想输出Yp的差;

b)按极小化偏差的方法反向传播调整权矩阵。

6)卷积神经网络的优势

        卷积神经网络CNN主要用来识别位移、缩放及其余形式扭曲不变性的二维图形。因为CNN的特征检测层经过训练数据进行学习,因此在使用CNN时,避免了显式的特征抽取,而隐式地从训练数据中进行学习;再者因为同一特征映射面上的神经元权值相同,因此网络能够并行学习,这也是卷积网络相对于神经元彼此相连网络的一大优点。卷积神经网络以其局部权值共享的特殊结构在语音识别和图像处理方面有着独特的优越性,其布局更接近于实际的生物神经网络,权值共享下降了网络的复杂性,特别是多维输入向量的图像能够直接输入网络这一特色避免了特征提取和分类过程当中数据重建的复杂度。

        流的分类方式几乎都是基于统计特征的,这就意味着在进行分辨前必须提取某些特征。然而,显式的特征提取并不容易,在一些应用问题中也并不是老是可靠的。卷积神经网络,它避免了显式的特征取样,隐式地从训练数据中进行学习。这使得卷积神经网络明显有别于其余基于神经网络的分类器,经过结构重组和减小权值将特征提取功能融合进多层感知器。它能够直接处理灰度图片,可以直接用于处理基于图像的分类。

       卷积网络较通常神经网络在图像处理方面有以下优势: a)输入图像和网络的拓扑结构能很好的吻合;b)特征提取和模式分类同时进行,并同时在训练中产生;c)权重共享能够减小网络的训练参数,使神经网络结构变得更简单,适应性更强。

7)小结

       CNNs中这种层间联系和空域信息的紧密关系,使其适于图像处理和理解。并且,其在自动提取图像的显著特征方面还表现出了比较优的性能。在一些例子当中,Gabor滤波器已经被使用在一个初始化预处理的步骤中,以达到模拟人类视觉系统对视觉刺激的响应。在目前大部分的工做中,研究者将CNNs应用到了多种机器学习问题中,包括人脸识别,文档分析和语言检测等。为了达到寻找视频中帧与帧之间的相干性的目的,目前CNNs经过一个时间相干性去训练,但这个不是CNNs特有的。

        呵呵,这部分讲得太啰嗦了,又没讲到点上。没办法了,先这样的,这样这个过程我尚未走过,因此本身水平有限啊,望各位明察。须要后面再改了,呵呵。


接上

 

10、总结与展望

1)Deep learning总结

      深度学习是关于自动学习要建模的数据的潜在(隐含)分布的多层(复杂)表达的算法。换句话来讲,深度学习算法自动的提取分类须要的低层次或者高层次特征。高层次特征,一是指该特征能够分级(层次)地依赖其余特征,例如:对于机器视觉,深度学习算法从原始图像去学习获得它的一个低层次表达,例如边缘检测器,小波滤波器等,而后在这些低层次表达的基础上再创建表达,例如这些低层次表达的线性或者非线性组合,而后重复这个过程,最后获得一个高层次的表达。

       Deep learning可以获得更好地表示数据的feature,同时因为模型的层次、参数不少,capacity足够,所以,模型有能力表示大规模数据,因此对于图像、语音这种特征不明显(须要手工设计且不少没有直观物理含义)的问题,可以在大规模训练数据上取得更好的效果。此外,从模式识别特征和分类器的角度,deep learning框架将feature和分类器结合到一个框架中,用数据去学习feature,在使用中减小了手工设计feature的巨大工做量(这是目前工业界工程师付出努力最多的方面),所以,不只仅效果能够更好,并且,使用起来也有不少方便之处,所以,是十分值得关注的一套框架,每一个作ML的人都应该关注了解一下。

       固然,deep learning自己也不是完美的,也不是解决世间任何ML问题的利器,不该该被放大到一个无所不能的程度。

2)Deep learning将来

       深度学习目前仍有大量工做须要研究。目前的关注点仍是从机器学习的领域借鉴一些能够在深度学习使用的方法,特别是降维领域。例如:目前一个工做就是稀疏编码,经过压缩感知理论对高维数据进行降维,使得很是少的元素的向量就能够精确的表明原来的高维信号。另外一个例子就是半监督流行学习,经过测量训练样本的类似性,将高维数据的这种类似性投影到低维空间。另一个比较鼓舞人心的方向就是evolutionary programming approaches(遗传编程方法),它能够经过最小化工程能量去进行概念性自适应学习和改变核心架构。

Deep learning还有不少核心的问题须要解决:

(1)对于一个特定的框架,对于多少维的输入它能够表现得较优(若是是图像,多是上百万维)?

(2)对捕捉短时或者长时间的时间依赖,哪一种架构才是有效的?

(3)如何对于一个给定的深度学习架构,融合多种感知的信息?

(4)有什么正确的机理能够去加强一个给定的深度学习架构,以改进其鲁棒性和对扭曲和数据丢失的不变性?

(5)模型方面是否有其余更为有效且有理论依据的深度模型学习算法?

       探索新的特征提取模型是值得深刻研究的内容。此外有效的可并行训练算法也是值得研究的一个方向。当前基于最小批处理的随机梯度优化算法很难在多计算机中进行并行训练。一般办法是利用图形处理单元加速学习过程。然而单个机器GPU对大规模数据识别或类似任务数据集并不适用。在深度学习应用拓展方面,如何合理充分利用深度学习在加强传统学习算法的性能还是目前各领域的研究重点。

 

11、参考文献和Deep Learning学习资源(持续更新……)

       先是机器学习领域大牛的微博:@余凯_西二旗民工;@老师木;@梁斌penny;@张栋_机器学习;@邓侃;@大数据皮东;@djvu9……

(1)Deep Learning

http://deeplearning.net/

(2)Deep Learning Methods for Vision

http://cs.nyu.edu/~fergus/tutorials/deep_learning_cvpr12/

(3)Neural Network for Recognition of Handwritten Digits[Project]

http://www.codeproject.com/Articles/16650/Neural-Network-for-Recognition-of-Handwritten-Digi

(4)Training a deep autoencoder or a classifier on MNIST digits

http://www.cs.toronto.edu/~hinton/MatlabForSciencePaper.html

(5)Ersatz:deep neural networks in the cloud

http://www.ersatz1.com/

(6)Deep Learning

http://www.cs.nyu.edu/~yann/research/deep/

(7)Invited talk "A Tutorial on Deep Learning" by Dr. Kai Yu (余凯)

http://vipl.ict.ac.cn/News/academic-report-tutorial-deep-learning-dr-kai-yu

(8)CNN - Convolutional neural network class

http://www.mathworks.cn/matlabcentral/fileexchange/24291

(9)Yann LeCun's Publications

http://yann.lecun.com/exdb/publis/index.html#lecun-98

(10) LeNet-5, convolutional neural networks

http://yann.lecun.com/exdb/lenet/index.html

(11) Deep Learning 大牛Geoffrey E. Hinton's HomePage

http://www.cs.toronto.edu/~hinton/

(12)Sparse coding simulation software[Project]

http://redwood.berkeley.edu/bruno/sparsenet/

(13)Andrew Ng's homepage

http://robotics.stanford.edu/~ang/

(14)stanford deep learning tutorial

http://deeplearning.stanford.edu/wiki/index.php/UFLDL_Tutorial

(15)「深度神经网络」(deep neural network)具体是怎样工做的

http://www.zhihu.com/question/19833708?group_id=15019075#1657279

(16)A shallow understanding on deep learning

http://blog.sina.com.cn/s/blog_6ae183910101dw2z.html

(17)Bengio's Learning Deep Architectures for AI

http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf

(18)andrew ng's talk video:

http://techtalks.tv/talks/machine-learning-and-ai-via-brain-simulations/57862/

(19)cvpr 2012 tutorial:

http://cs.nyu.edu/~fergus/tutorials/deep_learning_cvpr12/tutorial_p2_nnets_ranzato_short.pdf

(20)Andrew ng清华报告听后感

http://blog.sina.com.cn/s/blog_593af2a70101bqyo.html

(21)Kai Yu:CVPR12 Tutorial on Deep Learning Sparse Coding

(22)Honglak Lee:Deep Learning Methods for Vision

(23)Andrew Ng :Machine Learning and AI via Brain simulations

(24)Deep Learning 【2,3】

http://blog.sina.com.cn/s/blog_46d0a3930101gs5h.html

(25)deep learning这件小事……

http://blog.sina.com.cn/s/blog_67fcf49e0101etab.html

(26)Yoshua Bengio, U. Montreal:Learning Deep Architectures

(27)Kai Yu:A Tutorial on Deep Learning

(28)Marc'Aurelio Ranzato:NEURAL NETS FOR VISION

(29)Unsupervised feature learning and deep learning

http://blog.csdn.net/abcjennifer/article/details/7804962

(30)机器学习前沿热点–Deep Learning

http://elevencitys.com/?p=1854

(31)机器学习——深度学习(Deep Learning)

http://blog.csdn.net/abcjennifer/article/details/7826917

(32)卷积神经网络

http://wenku.baidu.com/view/cd16fb8302d276a200292e22.html

(33)浅谈Deep Learning的基本思想和方法

http://blog.csdn.net/xianlingmao/article/details/8478562

(34)深度神经网络

http://blog.csdn.net/txdb/article/details/6766373

(35)Google的猫脸识别:人工智能的新突破

http://www.36kr.com/p/122132.html

(36)余凯,深度学习-机器学习的新浪潮,Technical News程序天下事

http://blog.csdn.net/datoubo/article/details/8577366

(37)Geoffrey Hinton:UCLTutorial on: Deep Belief Nets

(38)Learning Deep Boltzmann Machines

http://web.mit.edu/~rsalakhu/www/DBM.html

(39)Efficient Sparse Coding Algorithm

http://blog.sina.com.cn/s/blog_62af19190100gux1.html

(40)Itamar Arel, Derek C. Rose, and Thomas P. Karnowski: Deep Machine Learning—A New Frontier in Artificial Intelligence Research

(41)Francis Quintal Lauzon:An introduction to deep learning

(42)Tutorial on Deep Learning and Applications

(43)Boltzmann神经网络模型与学习算法

http://wenku.baidu.com/view/490dcf748e9951e79b892785.html

(44)Deep Learning 和 Knowledge Graph 引爆大数据革命

http://blog.sina.com.cn/s/blog_46d0a3930101fswl.html