首页 深度学习学习笔记

深度学习学习笔记

举报
开通vip

深度学习学习笔记目录:一、概述二、背景三、人脑视觉机理四、关于特征      4.1、特征表示的粒度      4.2、初级(浅层)特征表示       4.3、结构性特征表示      4.4、需要有多少个特征?五、DeepLearning的基本思想六、浅层学习(ShallowLea...

深度学习学习笔记
目录:一、概述二、背景三、人脑视觉机理四、关于特征      4.1、特征表示的粒度      4.2、初级(浅层)特征表示       4.3、结构性特征表示      4.4、需要有多少个特征?五、DeepLearning的基本思想六、浅层学习(ShallowLearning)和深度学习(DeepLearning)七、Deeplearning与NeuralNetwork八、Deeplearning训练过程      8.1、传统神经网络的训练方法      8.2、deeplearning训练过程九、DeepLearning的常用模型或者方法      9.1、AutoEncoder自动编码器      9.2、SparseCoding稀疏编码      9.3、RestrictedBoltzmannMachine(RBM)限制波尔兹曼机      9.4、DeepBeliefNetworks深信度网络      9.5、ConvolutionalNeuralNetworks卷积神经网络十、 总结 初级经济法重点总结下载党员个人总结TXt高中句型全总结.doc高中句型全总结.doc理论力学知识点总结pdf 与展望十一、参考文献和DeepLearning学习资源一、概述      ArtificialIntelligence,也就是人工智能,就像长生不老和星际漫游一样,是人类最美好的梦想之一。虽然计算机技术已经取得了长足的进步,但是到目前为止,还没有一台电脑能产生“自我”的意识。是的,在人类和大量现成数据的帮助下,电脑可以表现的十分强大,但是离开了这两者,它甚至都不能分辨一个喵星人和一个汪星人。      图灵(图灵,大家都知道吧。计算机和人工智能的鼻祖,分别对应于其著名的“图灵机”和“图灵测试”)在1950年的 论文 政研论文下载论文大学下载论文大学下载关于长拳的论文浙大论文封面下载 里,提出图灵试验的设想,即,隔墙对话,你将不知道与你谈话的,是人还是电脑。这无疑给计算机,尤其是人工智能,预设了一个很高的期望值。但是半个世纪过去了,人工智能的进展,远远没有达到图灵试验的标准。这不仅让多年翘首以待的人们,心灰意冷,认为人工智能是忽悠,相关领域是“伪科学”。       但是自2006年以来,机器学习领域,取得了突破性的进展。图灵试验,至少不是那么可望而不可及了。至于技术手段,不仅仅依赖于云计算对大数据的并行处理能力,而且依赖于算法。这个算法就是,DeepLearning。借助于DeepLearning算法,人类终于找到了如何处理“抽象概念”这个亘古难 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 的方法。 2012年6月,《纽约时报》披露了GoogleBrain项目,吸引了公众的广泛关注。这个项目是由著名的斯坦福大学的机器学习教授AndrewNg和在大规模计算机系统方面的世界顶尖专家JeffDean共同主导,用16000个CPUCore的并行计算平台训练一种称为“深度神经网络”(DNN,DeepNeuralNetworks)的机器学习模型(内部共有10亿个节点。这一网络自然是不能跟人类的神经网络相提并论的。要知道,人脑中可是有150多亿个神经元,互相连接的节点也就是突触数更是如银河沙数。曾经有人估算过,如果将一个人的大脑中所有神经细胞的轴突和树突依次连接起来,并拉成一根直线,可从地球连到月亮,再从月亮返回地球),在语音识别和图像识别等领域获得了巨大的成功。      项目负责人之一Andrew称:“我们没有像通常做的那样自己框定边界,而是直接把海量数据投放到算法中,让数据自己说话,系统会自动从数据中学习。”另外一名负责人Jeff则说:“我们在训练的时候从来不会告诉机器说:‘这是一只猫。’系统其实是自己发明或者领悟了“猫”的概念。”2012年11月,微软在中国天津的一次活动上公开演示了一个全自动的同声传译系统,讲演者用英文演讲,后台的计算机一气呵成自动完成语音识别、英中机器翻译和中文语音合成,效果非常流畅。据报道,后面支撑的关键技术也是DNN,或者深度学习(DL,DeepLearning)。      2013年1月,在百度年会上,创始人兼CEO李彦宏高调宣布要成立百度研究院,其中第一个成立的就是“深度学习研究所”(IDL,InstitueofDeepLearning)。为什么拥有大数据的互联网公司争相投入大量资源研发深度学习技术。听起来感觉deeplearning很牛那样。那什么是deeplearning?为什么有deeplearning?它是怎么来的?又能干什么呢?目前存在哪些困难呢?这些问题的简答都需要慢慢来。咱们先来了解下机器学习(人工智能的核心)的背景。二、背景     机器学习(MachineLearning)是一门专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能的学科。机器能否像人类一样能具有学习能力呢?1959年美国的塞缪尔(Samuel)设计了一个下棋程序,这个程序具有学习能力,它可以在不断的对弈中改善自己的棋艺。4年后,这个程序战胜了设计者本人。又过了3年,这个程序战胜了美国一个保持8年之久的常胜不败的冠军。这个程序向人们展示了机器学习的能力,提出了许多令人深思的社会问题与哲学问题(呵呵,人工智能正常的轨道没有很大的发展,这些什么哲学伦理啊倒发展的挺快。什么未来机器越来越像人,人越来越像机器啊。什么机器会反人类啊,ATM是开第一枪的啊等等。人类的思维无穷啊)。       机器学习虽然发展了几十年,但还是存在很多没有良好解决的问题:例如图像识别、语音识别、自然语言理解、天气预测、基因表达、内容推荐等等。目前我们通过机器学习去解决这些问题的思路都是这样的(以视觉感知为例子):从开始的通过传感器(例如CMOS)来获得数据。然后经过预处理、特征提取、特征选择,再到推理、预测或者识别。最后一个部分,也就是机器学习的部分,绝大部分的工作是在这方面做的,也存在很多的paper和研究。       而中间的三部分,概括起来就是特征表达。良好的特征表达,对最终算法的准确性起了非常关键的作用,而且系统主要的计算和测试工作都耗在这一大部分。但,这块实际中一般都是人工完成的。靠人工提取特征。 截止现在,也出现了不少NB的特征(好的特征应具有不变性(大小、尺度和旋转等)和可区分性):例如Sift的出现,是局部图像特征描述子研究领域一项里程碑式的工作。由于SIFT对尺度、旋转以及一定视角和光照变化等图像变化都具有不变性,并且SIFT具有很强的可区分性,的确让很多问题的解决变为可能。但它也不是万能的。然而,手工地选取特征是一件非常费力、启发式(需要专业知识)的方法,能不能选取好很大程度上靠经验和运气,而且它的调节需要大量的时间。既然手工选取特征不太好,那么能不能自动地学习一些特征呢?答案是能!DeepLearning就是用来干这个事情的,看它的一个别名UnsupervisedFeatureLearning,就可以顾名思义了,Unsupervised的意思就是不要人参与特征的选取过程。      那它是怎么学习的呢?怎么知道哪些特征好哪些不好呢?我们说机器学习是一门专门研究计算机怎样模拟或实现人类的学习行为的学科。好,那我们人的视觉系统是怎么工作的呢?为什么在茫茫人海,芸芸众生,滚滚红尘中我们都可以找到另一个她(因为,你存在我深深的脑海里,我的梦里我的心里我的歌声里……)。人脑那么NB,我们能不能参考人脑,模拟人脑呢?(好像和人脑扯上点关系的特征啊,算法啊,都不错,但不知道是不是人为强加的,为了使自己的作品变得神圣和高雅。)       近几十年以来,认知神经科学、生物学等等学科的发展,让我们对自己这个神秘的而又神奇的大脑不再那么的陌生。也给人工智能的发展推波助澜。三、人脑视觉机理      1981年的诺贝尔医学奖,颁发给了DavidHubel(出生于加拿大的美国神经生物学家)和TorstenWiesel,以及RogerSperry。前两位的主要贡献,是“发现了视觉系统的信息处理”:我们看看他们做了什么。1958年,DavidHubel和TorstenWiesel在JohnHopkinsUniversity,研究瞳孔区域与大脑皮层神经元的对应关系。他们在猫的后脑头骨上,开了一个3毫米的小洞,向洞里插入电极,测量神经元的活跃程度。     然后,他们在小猫的眼前,展现各种形状、各种亮度的物体。并且,在展现每一件物体时,还改变物体放置的位置和角度。他们期望通过这个办法,让小猫瞳孔感受不同类型、不同强弱的刺激。      之所以做这个试验,目的是去证明一个猜测。位于后脑皮层的不同视觉神经元,与瞳孔所受刺激之间,存在某种对应关系。一旦瞳孔受到某一种刺激,后脑皮层的某一部分神经元就会活跃。经历了很多天反复的枯燥的试验,同时牺牲了若干只可怜的小猫,DavidHubel和TorstenWiesel发现了一种被称为“方向选择性细胞(OrientationSelectiveCell)”的神经元细胞。当瞳孔发现了眼前的物体的边缘,而且这个边缘指向某个方向时,这种神经元细胞就会活跃。      这个发现激发了人们对于神经系统的进一步思考。神经-中枢-大脑的工作过程,或许是一个不断迭代、不断抽象的过程。      这里的关键词有两个,一个是抽象,一个是迭代。从原始信号,做低级抽象,逐渐向高级抽象迭代。人类的逻辑思维,经常使用高度抽象的概念。       例如,从原始信号摄入开始(瞳孔摄入像素Pixels),接着做初步处理(大脑皮层某些细胞发现边缘和方向),然后抽象(大脑判定,眼前的物体的形状,是圆形的),然后进一步抽象(大脑进一步判定该物体是只气球)。这个生理学的发现,促成了计算机人工智能,在四十年后的突破性发展。      总的来说,人的视觉系统的信息处理是分级的。从低级的V1区提取边缘特征,再到V2区的形状或者目标的部分等,再到更高层,整个目标、目标的行为等。也就是说高层的特征是低层特征的组合,从低层到高层的特征表示越来越抽象,越来越能表现语义或者意图。而抽象层面越高,存在的可能猜测就越少,就越利于分类。例如,单词集合和句子的对应是多对一的,句子和语义的对应又是多对一的,语义和意图的对应还是多对一的,这是个层级体系。     敏感的人注意到关键词了:分层。而Deeplearning的deep是不是就表示我存在多少层,也就是多深呢?没错。那Deeplearning是如何借鉴这个过程的呢?毕竟是归于计算机来处理,面对的一个问题就是怎么对这个过程建模?      因为我们要学习的是特征的表达,那么关于特征,或者说关于这个层级特征,我们需要了解地更深入点。所以在说DeepLearning之前,我们有必要再啰嗦下特征(呵呵,实际上是看到那么好的对特征的解释,不放在这里有点可惜,所以就塞到这了)。因为我们要学习的是特征的表达,那么关于特征,或者说关于这个层级特征,我们需要了解地更深入点。所以在说DeepLearning之前,我们有必要再啰嗦下特征(呵呵,实际上是看到那么好的对特征的解释,不放在这里有点可惜,所以就塞到这了)。四、关于特征       特征是机器学习系统的原 材料 关于××同志的政审材料调查表环保先进个人材料国家普通话测试材料农民专业合作社注销四查四问剖析材料 ,对最终模型的影响是毋庸置疑的。如果数据被很好的表达成了特征,通常线性模型就能达到满意的精度。那对于特征,我们需要考虑什么呢?4.1、特征表示的粒度       学习算法在一个什么粒度上的特征表示,才有能发挥作用?就一个图片来说,像素级的特征根本没有价值。例如下面的摩托车,从像素级别,根本得不到任何信息,其无法进行摩托车和非摩托车的区分。而如果特征是一个具有结构性(或者说有含义)的时候,比如是否具有车把手(handle),是否具有车轮(wheel),就很容易把摩托车和非摩托车区分,学习算法才能发挥作用。4.2、初级(浅层)特征表示       既然像素级的特征表示方法没有作用,那怎样的表示才有用呢?       1995年前后,BrunoOlshausen和DavidField两位学者任职CornellUniversity,他们试图同时用生理学和计算机的手段,双管齐下,研究视觉问题。       他们收集了很多黑白风景照片,从这些照片中,提取出400个小碎片,每个照片碎片的尺寸均为16x16像素,不妨把这400个碎片标记为S[i],i=0,..399。接下来,再从这些黑白风景照片中,随机提取另一个碎片,尺寸也是16x16像素,不妨把这个碎片标记为T。        他们提出的问题是,如何从这400个碎片中,选取一组碎片,S[k],通过叠加的办法,合成出一个新的碎片,而这个新的碎片,应当与随机选择的目标碎片T,尽可能相似,同时,S[k]的数量尽可能少。用数学的语言来描述,就是:       Sum_k(a[k]*S[k])-->T,    其中a[k]是在叠加碎片S[k]时的权重系数。       为解决这个问题,BrunoOlshausen和DavidField发明了一个算法,稀疏编码(SparseCoding)。       稀疏编码是一个重复迭代的过程,每次迭代分两步: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],基本上都是照片上不同物体的边缘线,这些线段形状相似,区别在于方向。       BrunoOlshausen和DavidField的算法结果,与DavidHubel和TorstenWiesel的生理发现,不谋而合!       也就是说,复杂图形,往往由一些基本结构组成。比如下图:一个图可以通过用64种正交的edges(可以理解成正交的基本结构)来线性表示。比如样例的x可以用1-64个edges中的三个按照0.8,0.3,0.5的权重调和而成。而其他基本edge没有贡献,因此均为0 。另外,大牛们还发现,不仅图像存在这个规律,声音也存在。他们从未标注的声音中发现了20种基本的声音结构,其余的声音可以由这20种基本结构合成。 4.3、结构性特征表示       小块的图形可以由基本edge构成,更结构化,更复杂的,具有概念性的图形如何表示呢?这就需要更高层次的特征表示,比如V2,V4。因此V1看像素级是像素级。V2看V1是像素级,这个是层次递进的,高层表达由底层表达的组合而成。专业点说就是基basis。V1取提出的basis是边缘,然后V2层是V1层这些basis的组合,这时候V2区得到的又是高一层的basis。即上一层的basis组合的结果,上上层又是上一层的组合basis……(所以有大牛说Deeplearning就是“搞基”,因为难听,所以美其名曰Deeplearning或者UnsupervisedFeatureLearning) 直观上说,就是找到makesense的小patch再将其进行combine,就得到了上一层的feature,递归地向上learningfeature。       在不同object上做training是,所得的edgebasis是非常相似的,但objectparts和models就会completelydifferent了(那咱们分辨car或者face是不是容易多了):       从文本来说,一个doc表示什么意思?我们描述一件事情,用什么来表示比较合适?用一个一个字嘛,我看不是,字就是像素级别了,起码应该是term,换句话说每个doc都由term构成,但这样表示概念的能力就够了嘛,可能也不够,需要再上一步,达到topic级,有了topic,再到doc就合理。但每个层次的数量差距很大,比如doc表示的概念->topic(千-万量级)->term(10万量级)->word(百万量级)。       一个人在看一个doc的时候,眼睛看到的是word,由这些word在大脑里自动切词形成term,在按照概念组织的方式,先验的学习,得到topic,然后再进行高层次的learning。4.4、需要有多少个特征?      我们知道需要层次的特征构建,由浅入深,但每一层该有多少个特征呢?任何一种方法,特征越多,给出的参考信息就越多,准确性会得到提升。但特征多意味着计算复杂,探索的空间大,可以用来训练的数据在每个特征上就会稀疏,都会带来各种问题,并不一定特征越多越好。  好了,到了这一步,终于可以聊到Deeplearning了。上面我们聊到为什么会有Deeplearning(让机器自动学习良好的特征,而免去人工选取过程。还有参考人的分层视觉处理系统),我们得到一个结论就是Deeplearning需要多层来获得更抽象的特征表达。那么多少层才合适呢?用什么架构来建模呢?怎么进行非监督训练呢?五、DeepLearning的基本思想      假设我们有一个系统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)的另外一种表示。现在回到我们的主题DeepLearning,我们需要自动地学习特征,假设我们有一堆输入I(如一堆图像或者文本),假设我们设计了一个系统S(有n层),我们通过调整系统中参数,使得它的输出仍然是输入I,那么我们就可以自动地获取得到输入I的一系列层次特征,即S1,…,Sn。       对于深度学习来说,其思想就是对堆叠多个层,也就是说这一层的输出作为下一层的输入。通过这种方式,就可以实现对输入信息进行分级表达了。      另外,前面是假设输出严格地等于输入,这个限制太严格,我们可以略微地放松这个限制,例如我们只要使得输入与输出的差别尽可能地小即可,这个放松会导致另外一类不同的DeepLearning方法。上述就是DeepLearning的基本思想。 六、浅层学习(ShallowLearning)和深度学习(DeepLearning)      浅层学习是机器学习的第一次浪潮。      20世纪80年代末期,用于人工神经网络的反向传播算法(也叫BackPropagation算法或者BP算法)的发明,给机器学习带来了希望,掀起了基于统计模型的机器学习热潮。这个热潮一直持续到今天。人们发现,利用BP算法可以让一个人工神经网络模型从大量训练样本中学习统计规律,从而对未知事件做预测。这种基于统计的机器学习方法比起过去基于人工规则的系统,在很多方面显出优越性。这个时候的人工神经网络,虽也被称作多层感知机(Multi-layerPerceptron),但实际是种只含有一层隐层节点的浅层模型。       20世纪90年代,各种各样的浅层机器学习模型相继被提出,例如支撑向量机(SVM,SupportVectorMachines)、Boosting、最大熵方法(如LR,LogisticRegression)等。这些模型的结构基本上可以看成带有一层隐层节点(如SVM、Boosting),或没有隐层节点(如LR)。这些模型无论是在理论分析还是应用中都获得了巨大的成功。相比之下,由于理论分析的难度大,训练方法又需要很多经验和技巧,这个时期浅层人工神经网络反而相对沉寂。        深度学习是机器学习的第二次浪潮。       2006年,加拿大多伦多大学教授、机器学习领域的泰斗GeoffreyHinton和他的学生RuslanSalakhutdinov在《科学》上发表了一篇文章,开启了深度学习在学术界和工业界的浪潮。这篇文章有两个主要观点:1)多隐层的人工神经网络具有优异的特征学习能力,学习得到的特征对数据有更本质的刻画,从而有利于可视化或分类;2)深度神经网络在训练上的难度,可以通过“逐层初始化”(layer-wisepre-training)来有效克服,在这篇文章中,逐层初始化是通过无监督学习实现的。       当前多数分类、回归等学习方法为浅层结构算法,其局限性在于有限样本和计算单元情况下对复杂函数的表示能力有限,针对复杂分类问题其泛化能力受到一定制约。深度学习可通过学习一种深层非线性网络结构,实现复杂函数逼近,表征输入数据分布式表示,并展现了强大的从少数样本集中学习数据集本质特征的能力。(多层的好处是可以用较少的参数表示复杂的函数)        深度学习的实质,是通过构建具有很多隐层的机器学习模型和海量的训练数据,来学习更有用的特征,从而最终提升分类或预测的准确性。因此,“深度模型”是手段,“特征学习”是目的。区别于传统的浅层学习,深度学习的不同在于:1)强调了模型结构的深度,通常有5层、6层,甚至10多层的隐层节点;2)明确突出了特征学习的重要性,也就是说,通过逐层特征变换,将样本在原空间的特征表示变换到一个新特征空间,从而使分类或预测更加容易。与人工规则构造特征的方法相比,利用大数据来学习特征,更能够刻画数据的丰富内在信息。七、Deeplearning与NeuralNetwork深度学习是机器学习研究中的一个新的领域,其动机在于建立、模拟人脑进行分析学习的神经网络,它模仿人脑的机制来解释数据,例如图像,声音和文本。深度学习是无监督学习的一种。       深度学习的概念源于人工神经网络的研究。含多隐层的多层感知器就是一种深度学习结构。深度学习通过组合低层特征形成更加抽象的高层表示属性类别或特征,以发现数据的分布式特征表示。      Deeplearning本身算是machinelearning的一个分支,简单可以理解为neuralnetwork的发展。大约二三十年前,neuralnetwork曾经是ML领域特别火热的一个方向,但是后来确慢慢淡出了,原因包括以下几个方面:1)比较容易过拟合,参数比较难tune,而且需要不少trick;2)训练速度比较慢,在层次比较少(小于等于3)的情况下效果并不比其它方法更优;      所以中间有大约20多年的时间,神经网络被关注很少,这段时间基本上是SVM和boosting算法的天下。但是,一个痴心的老先生Hinton,他坚持了下来,并最终(和其它人一起Bengio、Yann.lecun等)提成了一个实际可行的deeplearning框架。       Deeplearning与传统的神经网络之间有相同的地方也有很多不同。       二者的相同在于deeplearning采用了神经网络相似的分层结构,系统由包括输入层、隐层(多层)、输出层组成的多层网络,只有相邻层节点之间有连接,同一层以及跨层节点之间相互无连接,每一层可以看作是一个logisticregression模型;这种分层结构,是比较接近人类大脑的结构的。        而为了克服神经网络训练中的问题,DL采用了与神经网络很不同的训练机制。传统神经网络中,采用的是backpropagation的方式进行,简单来讲就是采用迭代的算法来训练整个网络,随机设定初值,计算当前网络的输出,然后根据当前输出和label之间的差去改变前面各层的参数,直到收敛(整体是一个梯度下降法)。而deeplearning整体上是一个layer-wise的训练机制。这样做的原因是因为,如果采用backpropagation的机制,对于一个deepnetwork(7层以上),残差传播到最前面的层已经变得太小,出现所谓的gradientdiffusion(梯度扩散)。这个问题我们接下来讨论。八、Deeplearning训练过程8.1、传统神经网络的训练方法为什么不能用在深度神经网络      BP算法作为传统训练多层网络的典型算法,实际上对仅含几层网络,该训练方法就已经很不理想。深度结构(涉及多个非线性处理单元层)非凸目标代价函数中普遍存在的局部最小是训练困难的主要来源。BP算法存在的问题:(1)梯度越来越稀疏:从顶层越往下,误差校正信号越来越小;(2)收敛到局部最小值:尤其是从远离最优区域开始的时候(随机值初始化会导致这种情况的发生);(3)一般,我们只能用有标签的数据来训练:但大部分的数据是没标签的,而大脑可以从没有标签的的数据中学习;8.2、deeplearning训练过程如果对所有层同时训练,时间复杂度会太高;如果每次训练一层,偏差就会逐层传递。这会面临跟上面监督学习中相反的问题,会严重欠拟合(因为深度网络的神经元和参数太多了)。2006年,hinton提出了在非监督数据上建立多层神经网络的一个有效方法,简单的说,分为两步,一是每次训练一层网络,二是调优,使原始表示x向上生成的高级表示r和该高级表示r向下生成的x'尽可能一致。方法是:1)首先逐层构建单层神经元,这样每次都是训练一个单层网络。2)当所有层训练完后,Hinton使用wake-sleep算法进行调优。      将除最顶层的其它层间的权重变为双向的,这样最顶层仍然是一个单层神经网络,而其它层则变为了图模型。向上的权重用于“认知”,向下的权重用于“生成”。然后使用Wake-Sleep算法调整所有的权重。让认知和生成达成一致,也就是保证生成的最顶层表示能够尽可能正确的复原底层的结点。比如顶层的一个结点表示人脸,那么所有人脸的图像应该激活这个结点,并且这个结果向下生成的图像应该能够表现为一个大概的人脸图像。Wake-Sleep算法分为醒(wake)和睡(sleep)两个部分。1)wake阶段:认知过程,通过外界的特征和向上的权重(认知权重)产生每一层的抽象表示(结点状态),并且使用梯度下降修改层间的下行权重(生成权重)。也就是“如果现实跟我想象的不一样,改变我的权重使得我想象的东西就是这样的”。2)sleep阶段:生成过程,通过顶层表示(醒时学得的概念)和向下权重,生成底层的状态,同时修改层间向上的权重。也就是“如果梦中的景象不是我脑中的相应概念,改变我的认知权重使得这种景象在我看来就是这个概念”。deeplearning训练过程具体如下:1)使用自下上升非监督学习(就是从底层开始,一层一层的往顶层训练):      采用无标定数据(有标定数据也可)分层训练各层参数,这一步可以看作是一个无监督训练过程,是和传统神经网络区别最大的部分(这个过程可以看作是featurelearning过程):      具体的,先用无标定数据训练第一层,训练时先学习第一层的参数(这一层可以看作是得到一个使得输出和输入差别最小的三层神经网络的隐层),由于模型capacity的限制以及稀疏性约束,使得得到的模型能够学习到数据本身的结构,从而得到比输入更具有表示能力的特征;在学习得到第n-1层后,将n-1层的输出作为第n层的输入,训练第n层,由此分别得到各层的参数;2)自顶向下的监督学习(就是通过带标签的数据去训练,误差自顶向下传输,对网络进行微调):      基于第一步得到的各层参数进一步fine-tune整个多层模型的参数,这一步是一个有监督训练过程;第一步类似神经网络的随机初始化初值过程,由于DL的第一步不是随机初始化,而是通过学习输入数据的结构得到的,因而这个初值更接近全局最优,从而能够取得更好的效果;所以deeplearning效果好很大程度上归功于第一步的featurelearning过程。九、DeepLearning的常用模型或者方法9.1、AutoEncoder自动编码器DeepLearning最简单的一种方法是利用人工神经网络的特点,人工神经网络(ANN)本身就是具有层次结构的系统,如果给定一个神经网络,我们假设其输出与输入是相同的,然后训练调整其参数,得到每一层中的权重。自然地,我们就得到了输入I的几种不同表示(每一层代表一种表示),这些表示就是特征。自动编码器就是一种尽可能复现输入信号的神经网络。为了实现这种复现,自动编码器就必须捕捉可以代表输入数据的最重要的因素,就像PCA那样,找到可以代表原信息的主要成分。具体过程简单的说明如下:1)给定无标签数据,用非监督学习学习特征在我们之前的神经网络中,如第一个图,我们输入的样本是有标签的,即(input,target),这样我们根据当前输出和target(label)之间的差去改变前面各层的参数,直到收敛。但现在我们只有无标签数据,也就是右边的图。那么这个误差怎么得到呢?如上图,我们将input输入一个encoder编码器,就会得到一个code,这个code也就是输入的一个表示,那么我们怎么知道这个code表示的就是input呢?我们加一个decoder解码器,这时候decoder就会输出一个信息,那么如果输出的这个信息和一开始的输入信号input是很像的(理想情况下就是一样的),那很明显,我们就有理由相信这个code是靠谱的。所以,我们就通过调整encoder和decoder的参数,使得重构误差最小,这时候我们就得到了输入input信号的第一个表示了,也就是编码code了。因为是无标签数据,所以误差的来源就是直接重构后与原输入相比得到。2)通过编码器产生特征,然后训练下一层。这样逐层训练:那上面我们就得到第一层的code,我们的重构误差最小让我们相信这个code就是原输入信号的良好表达了,或者牵强点说,它和原信号是一模一样的(表达不一样,反映的是一个东西)。那第二层和第一层的训练方式就没有差别了,我们将第一层输出的code当成第二层的输入信号,同样最小化重构误差,就会得到第二层的参数,并且得到第二层输入的code,也就是原输入信息的第二个表达了。其他层就同样的方法炮制就行了(训练这一层,前面层的参数都是固定的,并且他们的decoder已经没用了,都不需要了。3)有监督微调:经过上面的方法,我们就可以得到很多层了。至于需要多少层(或者深度需要多少,这个目前本身就没有一个科学的评价方法)需要自己试验调了。每一层都会得到原始输入的不同的表达。当然了,我们觉得它是越抽象越好了,就像人的视觉系统一样。到这里,这个AutoEncoder还不能用来分类数据,因为它还没有学习如何去连结一个输入和一个类。它只是学会了如何去重构或者复现它的输入而已。或者说,它只是学习获得了一个可以良好代表输入的特征,这个特征可以最大程度上代表原输入信号。那么,为了实现分类,我们就可以在AutoEncoder的最顶的编码层添加一个分类器(例如罗杰斯特回归、SVM等),然后通过标准的多层神经网络的监督训练方法(梯度下降法)去训练。也就是说,这时候,我们需要将最后层的特征code输入到最后的分类器,通过有标签样本,通过监督学习进行微调,这也分两种,一个是只调整分类器(黑色部分):另一种:通过有标签样本,微调整个系统:(如果有足够多的数据,这个是最好的。end-to-endlearning端对端学习一旦监督训练完成,这个网络就可以用来分类了。神经网络的最顶层可以作为一个线性分类器,然后我们可以用一个更好性能的分类器去取代它。在研究中可以发现,如果在原有的特征中加入这些自动学习得到的特征可以大大提高精确度,甚至在分类问题中比目前最好的分类算法效果还要好!AutoEncoder存在一些变体,这里简要介绍下两个:SparseAutoEncoder稀疏自动编码器:当然,我们还可以继续加上一些约束条件得到新的DeepLearning方法,如:如果在AutoEncoder的基础上加上L1的Regularity限制(L1主要是约束每一层中的节点中大部分都要为0,只有少数不为0,这就是Sparse名字的来源),我们就可以得到SparseAutoEncoder法。如上图,其实就是限制每次得到的表达code尽量稀疏。因为稀疏的表达往往比其他的表达要有效(人脑好像也是这样的,某个输入只是刺激某些神经元,其他的大部分的神经元是受到抑制的)。DenoisingAutoEncoders降噪自动编码器:降噪自动编码器DA是在自动编码器的基础上,训练数据加入噪声,所以自动编码器必须学习去去除这种噪声而获得真正的没有被噪声污染过的输入。因此,这就迫使编码器去学习输入信号的更加鲁棒的表达,这也是它的泛化能力比一般编码器强的原因。DA可以通过梯度下降算法去训练。9.2、SparseCoding稀疏编码如果我们把输出必须和输入相等的限制放松,同时利用线性代数中基的概念,即O=a1*Φ1 +a2*Φ2+….+an*Φn,Φi是基,ai是系数,我们可以得到这样一个优化问题:Min|I–O|,其中I表示输入,O表示输出。通过求解这个最优化式子,我们可以求得系数ai和基Φi,这些系数和基就是输入的另外一种近似表达。因此,它们可以用来表达输入I,这个过程也是自动学习得到的。如果我们在上述式子上加上L1的Regularity限制,得到:Min|I–O|+u*(|a1|+|a2|+…+|an |)       这种方法被称为SparseCoding。通俗的说,就是将一个信号表示为一组基的线性组合,而且要求只需要较少的几个基就可以将信号表示出来。“稀疏性”定义为:只有很少的几个非零元素或只有很少的几个远大于零的元素。要求系数ai 是稀疏的意思就是说:对于一组输入向量,我们只想有尽可能少的几个系数远大于零。选择使用具有稀疏性的分量来表示我们的输入数据是有原因的,因为绝大多数的感官数据,比如自然图像,可以被表示成少量基本元素的叠加,在图像中这些基本元素可以是面或者线。同时,比如与初级视觉皮层的类比过程也因此得到了提升(人脑有大量的神经元,但对于某些图像或者边缘只有很少的神经元兴奋,其他都处于抑制状态)。稀疏编码算法是一种无监督学习方法,它用来寻找一组“超完备”基向量来更高效地表示样本数据。虽然形如主成分分析技术(PCA)能使我们方便地找到一组“完备”基向量,但是这里我们想要做的是找到一组“超完备”基向量来表示输入向量(也就是说,基向量的个数比输入向量的维数要大)。超完备基的好处是它们能更有效地找出隐含在输入数据内部的结构与模式。然而,对于超完备基来说,系数ai不再由输入向量唯一确定。因此,在稀疏编码算法中,我们另加了一个评判标准“稀疏性”来解决因超完备而导致的退化(degeneracy)问题。(详细过程请参考:UFLDLTutorial稀疏编码) 比如在图像的FeatureExtraction的最底层要做EdgeDetector的生成,那么这里的工作就是从NaturalImages中randomly选取一些小patch,通过这些patch生成能够描述他们的“基”,也就是右边的8*8=64个basis组成的basis,然后给定一个testpatch,我们可以按照上面的式子通过basis的线性组合得到,而sparsematrix就是a,下图中的a中有64个维度,其中非零项只有3个,故称“sparse”。       这里可能大家会有疑问,为什么把底层作为EdgeDetector呢?上层又是什么呢?这里做个简单解释大家就会明白,之所以是EdgeDetector是因为不同方向的Edge就能够描述出整幅图像,所以不同方向的Edge自然就是图像的basis了……而上一层的basis组合的结果,上上层又是上一层的组合basis……(就是上面第四部分的时候咱们说的那样)       Sparsecoding分为两个部分:1) Training阶段:给定一系列的样本图片[x1,x2,…],我们需要学习得到一组基[Φ1,Φ2,…],也就是字典。稀疏编码是k-means算法的变体,其训练过程也差不多(EM算法的思想:如果要优化的目标函数包含两个变量,如L(W,B),那么我们可以先固定W,调整B使得L最小,然后再固定B,调整W使L最小,这样迭代交替,不断将L推向最小值。EM算法可以见我的博客:“从最大似然到EM算法浅解”)。训练过程就是一个重复迭代的过程,按上面所说,我们交替的更改a和Φ使得下面这个目标函数最小。  每次迭代分两步:a)固定字典Φ[k],然后调整a[k],使得上式,即目标函数最小(即解LASSO问题)。b)然后固定住a[k],调整Φ[k],使得上式,即目标函数最小(即解凸QP问题)。     不断迭代,直至收敛。这样就可以得到一组可以良好表示这一系列x的基,也就是字典。2)Coding阶段:给定一个新的图片x,由上面得到的字典,通过解一个LASSO问题得到稀疏向量a。这个稀疏向量就是这个输入向量x的一个稀疏表达了。例如:9.3、RestrictedBoltzmannMachine(RBM)限制波尔兹曼机    假设有一个二部图,每一层的节点之间没有链接,一层是可视层,即输入数据层(v),一层是隐藏层(h),如果假设所有的节点都是随机二值变量节点(只能取0或者1值),同时假设全概率分布p(v,h)满足Boltzmann分布,我们称这个模型是RestrictedBoltzmannMachine(RBM)。 下面我们来看看为什么它是DeepLearning方法。首先,这个模型因为是二部图,所以在已知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如果一样,那么得到的隐藏层就是可视层另外一种表达,因此隐藏层可以作为可视层输入数据的特征,所以它就是一种DeepLearning方法。如何训练呢?也就是可视层节点和隐节点间的权值怎么确定呢?我们需要做一些数学分析。也就是模型了。联合组态(jointconfiguration)的能量可以表示为:而某个组态的联合概率分布可以通过Boltzmann分布(和这个组态的能量)来确定:   因为隐藏节点之间是条件独立的(因为节点之间不存在连接),即然后我们可以比较容易(对上式进行因子分解Factorizes)得到在给定可视层v的基础上,隐层第j个节点为1或者为0的概率: 同理,在给定隐层h的基础上,可视层第i个节点为1或者为0的概率也可以容易得到:给定一个满足独立同分布的样本集:D={v(1), v(2),…, v(N)},我们需要学习参数θ={W,a,b}。我们最大化以下对数似然函数(最大似然估计:对于某个概率模型,我们需要选择一个参数,让我们当前的观测样本的概率最大):也就是对最大对数似然函数求导,就可以得到L最大时对应的参数W了。如果,我们把隐藏层的层数增加,我们可以得到DeepBoltzmannMachine(DBM);如果我们在靠近可视层的部分使用贝叶斯信念网络(即有向图模型,当然这里依然限制层中节点之间没有链接),而在最远离可视层的部分使用RestrictedBoltzmannMachine,我们可以得到DeepBeliefNet(DBN)。 9.4、DeepBeliefNetworks深信度网络DBNs是一个概率生成模型,与传统的判别模型的神经网络相对,生成模型是建立一个观察数据和标签之间的联合分布,对P(Observation|Label)和P(Label|Observation)都做了评估,而判别模型仅仅而已评估了后者,也就是P(Label|Observation)。对于在深度神经网络应用传统的BP算法的时候,DBNs遇到了以下问题:(1)需要为训练提供一个有标签的样本集;(2)学习过程较慢;(3)不适当的参数选择会导致学习收敛于局部最优解。    DBNs由多个限制玻尔兹曼机(RestrictedBoltzmannMachines)层组成,一个典型的神经网络类型如图三所示。这些网络被“限制”为一个可视层和一个隐层,层间存在连接,但层内的单元间不存在连接。隐层单元被训练去捕捉在可视层表现出来的高阶数据的相关性。首先,先不考虑最顶构成一个联想记忆(associativememory)的两层,一个DBN的连接是通过自顶向下的生成权值来指导确定的,RBMs就像一个建筑块一样,相比传统和深度分层的sigmoid信念网络,它能易于连接权值的学习。最开始的时候,通过一个非监督贪婪逐层方法去预训练获得生成模型的权值,非监督贪婪逐层方法被Hinton证明是有效的,并被其称为对比分歧(contrastivedivergence)。 在
本文档为【深度学习学习笔记】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
拍拍£宝贝
有多年的行政人事工作经验,现负责公司员工招聘,筛选,面试,培训等管理
格式:doc
大小:1MB
软件:Word
页数:43
分类:企业经营
上传时间:2018-05-30
浏览量:25