高性能算法深度学习

上传人:沈*** 文档编号:109311159 上传时间:2022-06-16 格式:DOC 页数:34 大小:142KB
收藏 版权申诉 举报 下载
高性能算法深度学习_第1页
第1页 / 共34页
高性能算法深度学习_第2页
第2页 / 共34页
高性能算法深度学习_第3页
第3页 / 共34页
资源描述:

《高性能算法深度学习》由会员分享,可在线阅读,更多相关《高性能算法深度学习(34页珍藏版)》请在装配图网上搜索。

1、-深度学习算法的研究与实现. z.-1 摘要深度学习近几年开展迅速,取得了突破性的进展。借助于深度学习算法,人类终于找到了如何处理抽象概念这个亘古难题的方法。本文首先介绍了深度学习的背景,然后对深度学习的研究过程以及开展现状进展了综述。接下来本文介绍了深度学习的根本原理,并在此根底上介绍了深度学习目前应用比拟成功的几个领域的应用情况。在本文的最后,本文利用伯克利大学开发的Caffe深度学习平台进展了手写数字字符的识别的工程。数据来源于MNIST数据库,在经历生成符合Caffe的LMDB格式数据集、编写深度学习模型文件、本文编写网络求解文件后,通过调用Caffe可执行文件对深度网络进展训练及测试

2、,并得到最终的实验结果。在经历了1万次迭代后,实验结果显示卷积神经网络构成的深度学习网络可以到达99%以上的识别,显示出深度学习强大的识别能力。关键字:深度学习,Caffe,手写数字识别2 ABSTRACTDeep learning has developed rapidly in recent years, and has made breakthrough progress. With the help of the Deep Learning algorithm, human found a way how to deal with the abstract concept in our

3、 mon problem. This paper firstly introduces the background of the Deep Learning study, and then summarizes the research process and the development of the Deep Learning. Next, this paper introduces the basic principles of deep learning, and on the basis of that, the application of the deep learning

4、was also introduced in some excellent area.Next, this paper uses the Caffe deep learning platform developed by Berkeley University to carry out the recognition of handwritten numeral characters. The data is from the MNIST database, through the process of generating LMDB format data set, writing deep

5、 learning model file, writing solver file, finally by calling the Caffe executable file to training and testing of the deep learning network, we get the final experimental results.After 10 thousand iterations, the experimental results show that the deep learning network posed of convolutional neural

6、 networks can reach more than 99% of the right rate, showing the strong ability of deep learning.Keywords: Deep Learning, Caffe, Handwritten numeral character recognition目录1 摘要12 ABSTRACT23 背景介绍24 研究过程与开展现状24.1 研究过程24.1.1 浅层学习和深度学习24.1.2 深度学习与人工神经网络24.2 开展现状24.2.1 初始化方法、网络层数和激活函数的选择24.2.2 模型构造24.2.3

7、 学习算法25 深度学习根本原理25.1 深度学习的根本思想25.2 深度学习训练过程25.3 自动编码机25.4 卷积神经网络25.4.1 卷积神经网络的构造25.4.2 参数减少与权值共享25.4.3 卷积神经网络总结26 应用领域26.1 语音识别26.2 图像识别26.3 自然语言处理26.4 搜索广告CTR预估27 深度学习实战演练27.1 实验坏境的搭建27.1.1 深度学习平台27.1.2 安装依赖库27.1.3 安装Caffe27.2 实验概述27.3 实验过程27.3.1 生成指定的数据格式文件27.3.2 编写深度网络模型文件27.3.3 编写网络求解文件27.4 实验结果

8、28 总结29 参考文献210 附录源代码2. z.-3 背景介绍人工智能很久以来就是人类最美好的梦想之一。虽然计算机技术已经取得了长足的进步,但是到目前为止,还没有一台电脑能产生自我的意识。图灵在 1950 年的论文里,提出图灵试验的设想,即,隔墙对话,你将不知道与你谈话的,是人还是电脑。这无疑给计算机,尤其是人工智能,预设了一个很高的期望值。但是半个世纪过去了,人工智能的进展,远远没有到达图灵试验的标准。这不仅让多年翘首以待的人们,心灰意冷,认为人工智能是忽悠,相关领域是伪科学。自 2006 年以来,在机器学习领域,取得了突破性的进展。图灵试验,至少不是那么可望而不可及了。至于技术手段,不

9、仅仅依赖于云计算对大数据的并行处理能力,而且依赖于算法。这个算法就是深度学习,借助于 Deep Learning 算法,人类终于找到了如何处理抽象概念这个亘古难题的方法,下面本文详细介绍一下机器学习的开展背景。图3-1 人工智能概念图机器学习是一门专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识构造使之不断改善自身的性能的学科。机器能否像人类一样能具有学习能力呢?1959年美国的塞缪尔(Samuel)设计了一个下棋程序,这个程序具有学习能力,它可以在不断的对弈中改善自己的棋艺。4年后,这个程序战胜了设计者本人。又过了3年,这个程序战胜了美国一个保持8年之久的

10、常胜不败的冠军。这个程序向人们展示了机器学习的能力。机器学习虽然开展了几十年,但还是存在很多没有良好解决的问题,目前我们通过机器学习去解决问题的思路大致如下:a) 通过传感器例如CMOS来获得数据b) 预处理、特征提取、特征选择c) 推理、预测或者识别最后一个局部,也就是机器学习的局部,绝大局部的工作是在这方面做的,存在很多的和研究。而中间的三局部,概括起来就是特征表达。良好的特征表达,对最终算法的准确性起了非常关键的作用,而且系统主要的计算和测试工作都耗在这一大局部。但这块实际中一般都是人工完成的,靠人工提取特征。机器学习在开展的过程中出现了不少强大的特征,具有大小、尺度和旋转等的不变性以及

11、可区分性。例如SIFT是局部图像特征描述子研究领域一项里程碑式的工作。由于SIFT对尺度、旋转以及一定视角和光照变化等图像变化都具有不变性,并且SIFT具有很强的可区分性,确实让很多问题的解决变为可能,但它也不是万能的。然而,手工地选取特征是一件非常费力的方法,能不能选取好很大程度上靠经历和运气,而且它的调节需要大量的时间。既然手工选取特征不太好,那么能不能自动地学习一些特征呢?答案是能,深度学习就是用来干这个事情的,这也就是深度学习提出的背景。4 研究过程与开展现状4.1 研究过程4.1.1 浅层学习和深度学习浅层学习是机器学习的第一次浪潮。20世纪80年代末期,用于人工神经网络的反向传播算

12、法的创造,给机器学习带来了希望,掀起了基于统计模型的机器学习热潮。这个热潮一直持续到今天。人们发现,利用BP算法可以让一个人工神经网络模型从大量训练样本中学习统计规律,从而对未知事件做预测。这种基于统计的机器学习方法比起过去基于人工规那么的系统,在很多方面显出优越性。这个时候的人工神经网络,虽也被称作多层感知机,但实际是种只含有一层隐含层节点的浅层模型。20世纪90年代,各种各样的浅层机器学习模型相继被提出,例如支撑向量机、 Boosting、最大熵方法等。这些模型的构造根本上可以看成带有一层隐层节点如SVM、Boosting,或没有隐层节点。这些模型无论是在理论分析还是应用中都获得了巨大的成

13、功。相比之下,由于理论分析的难度大,训练方法又需要很多经历和技巧,这个时期浅层人工神经网络反而相对寂静。深度学习是机器学习的第二次浪潮。2006年,加拿大多伦多大学教授、机器学习领域的泰斗Geoffrey Hinton和他的学生在Science上发表了一篇文章,开启了深度学习在学术界和工业界的浪潮。这篇文章有两个主要观点:1多隐层的人工神经网络具有优异的特征学习能力,学习得到的特征对数据有更本质的刻画,从而有利于可视化或分类;2深度神经网络在训练上的难度,可以通过逐层初始化来有效克制,在这篇文章中,逐层初始化是通过无监视学习实现的。当前多数分类、回归等学习方法为浅层构造算法,其局限性在于有限样

14、本和计算单元情况下对复杂函数的表示能力有限,针对复杂分类问题其泛化能力受到一定制约。深度学习可通过学习一种深层非线性网络构造,实现复杂函数逼近,表征输入数据分布式表示,并展现了强大的从少数样本集中学习数据集本质特征的能力。深度学习的实质,是通过构建具有多隐层的机器学习模型和海量的训练数据,来学习更有用的特征,从而最终提升分类或预测的准确性。因此,深度模型是手段,特征学习是目的。区别于传统的浅层学习,深度学习的不同在于:1强调了模型构造的深度,通常有5层、6层,甚至10多层的隐层节点;2明确突出了特征学习的重要性,也就是说,通过逐层特征变换,将样本在原空间的特征表示变换到一个新特征空间,从而使分

15、类或预测更加容易。与人工规那么构造特征的方法相比,利用大数据来学习特征,更能够刻画数据的丰富在信息。4.1.2 深度学习与人工神经网络深度学习是机器学习研究中的一个新的领域,其动机在于建立、模拟人脑进展分析学习的神经网络,它模仿人脑的机制来解释数据,例如图像,声音和文本。深度学习是无监视学习的一种。深度学习的概念源于人工神经网络的研究。含多隐层的多层感知器就是一种深度学习构造。深度学习通过组合低层特征形成更加抽象的高层表示属性类别或特征,以发现数据的分布式特征表示。深度学习本身算是机器学习的一个分支,简单可以理解为神经网络的开展。大约二三十年前,神经网络曾经是机器学习领域特别炽热的一个方向,但

16、是后来确慢慢淡出了,原因包括以下几个方面:1比拟容易过拟合,参数比拟难调,而且需要不少技巧和经历;2训练速度比拟慢,在层次比拟少小于等于3的情况下效果并不比其它方法更优;所以中间有大约20多年的时间,神经网络被关注很少,这段时间根本上是SVM和Boosting算法的天下。但是,一个痴心的老先生Hinton,他坚持了下来,并最终提成了一个实际可行的深度学习框架。深度学习与传统的神经网络之间有一样的地方也有很多不同。二者的一样在于深度学习采用了神经网络相似的分层构造,系统由包括输入层、隐层多层、输出层组成的多层网络,只有相邻层节点之间有连接,同一层以及跨层节点之间相互无连接,每一层可以看作是一个L

17、ogistic 回归模型;这种分层构造,是比拟接近人类大脑的构造的。而为了克制神经网络训练中的问题,深度学习采用了与神经网络很不同的训练机制。传统神经网络中,采用的是反向传播的方式进展,简单来讲就是采用迭代的算法来训练整个网络,随机设定初值,计算当前网络的输出,然后根据当前输出和标签之间的差去改变前面各层的参数,直到收敛整体是一个梯度下降法。而深度学习整体上是一个逐层的训练机制。这样做的原因是因为,如果采用反向传播的机制,对于一个深度网络7层以上,残差传播到最前面的层已经变得太小,出现所谓的梯度扩散。4.2 开展现状由于深度学习能够很好地解决一些复杂问题,近年来许多研究人员对其进展了深入研究,

18、出现了许多有关深度学习研究的新进展。下面分别从初始化方法、网络层数和激活函数的选择、模型构造、学习算法和实际应用这四个方面对近几年深度学习研究的新进展进展介绍。4.2.1 初始化方法、网络层数和激活函数的选择研究人员试图搞清网络初始值的设定与学习结果之间的关系。Erhan等人在轨迹可视化研究中指出即使从相近的值开场训练深度构造神经网络,不同的初始值也会学习到不同的局部极值,同时发现用无监视预训练初始化模型的参数学习得到的极值与随机初始化学习得到的极值差异比拟大,用无监视预训练初始化模型的参数学习得到的模型具有更好的泛化误差。Bengio与Krueger等人指出用特定的方法设定训练样例的初始分布

19、和排列顺序可以产生更好的训练结果,用特定的方法初始化参数,使其与均匀采样得到的参数不同,会对梯度下降算法训练的结果产生很大的影响。Glorot等人指出通过设定一组初始权值使得每一层深度构造神经网络的Ja-cobian矩阵的奇异值接近于1,在很大程度上减小了监视深度构造神经网络和有预训练过程设定初值的深度构造神经网络之间的学习结果差异。另外,用于深度学习的学习算法通常包含许多超参数,文献2给出了这些超参数的选择指导性意见,推荐一些常用的超参数,尤其适用于基于反向传播的学习算法和基于梯度的优化算法中;并讨论了如何解决有许多可调超参数的问题,描述了实际用于有效训练常用的大型深度构造神经网络的超参数的

20、影响因素,指出深度学习训练中存在的困难。选择不同的网络隐层数和不同的非线性激活函数会对学习结果产生不同的影响。Glorot研究了隐层非线性映射关系的选择和网络的深度相互影响的问题,讨论了随机初始化的标准梯度下降算法用于深度构造神经网络学习得到不好的学习性能的原因。Glorot观察不同非线性激活函数对学习结果的影响,得到Logistic S 型激活单元的均值会驱使顶层和隐层进入饱和,因而Logistic S 型激活单元不适合用随机初始化梯度算法学习深度构造神经网络;并据此提出了标准梯度下降算法的一种新的初始化方案来得到更快的收敛速度,为理解深度构造神经网络使用和不使用无监视预训练的性能差异作出了

21、新的奉献。Bengio 从理论上说明深度学习构造的表示能力随着神经网络深度的增加以指数的形式增加,但是这种增加的额外表示能力会引起相应局部极值数量的增加,使得在其中寻找最优值变得困难。4.2.2 模型构造l DBN的构造及其变种采用二值可见单元和隐单元RBM作为构造单元的DBN,在 MNIST 等数据集上表现出很好的性能。近几年,具有连续值单元的RBM,如 mcRBM、mPoT 模型和 spike-and-slab RBM等已经成功应用。Spike-and-slab RBM 中 Spike 表示以0为中心的离散概率分布,slab表示在连续域上的稠密均匀分布,可以用吉布斯采样对spike-and

22、-slab RBM 进展有效推断,得到优越的学习性能。l 和积网络深度学习最主要的困难是配分函数的学习,如何选择深度构造神经网络的构造使得配分函数更容易计算是一个很困难的问题。Poon 等人提出一种新的深度模型构造,和积网络(SPN) ,引入多层隐单元表示配分函数,使得配分函数更容易计算。SPN 是有根节点的有向无环图,图中的叶节点为变量,中间节点执行和运算与积运算,连接节点的边带有权值,它们在 Caltech-101 和 Olivetti 两个数据集上进展实验证明了SPN的性能优于DBN和最近邻方法。l 卷积神经网络文献4研究了用生成式子抽样单元组成的卷积神经网络,在 MNIST 数字识别任

23、务和 Caltech-101目标分类基准任务上进展实验,显示出非常好的学习性能。Huang 等人提出一种新的卷积学习模型,即局部卷积RBM,利用对象类中的总体构造学习特征,不假定图像具有平稳特征,在实际人脸数据集上进展实验,得到性能很好的实验结果。4.2.3 学习算法l 深度费希尔映射方法Wong 等人提出一种新的特征提取方法,正那么化深度费希尔映射(RDFM) 方法,学习从样本空间到特征空间的显式映射,根据 Fisher 准那么用深度构造神经网络提高特征的区分度。深度构造神经网络具有深度非局部学习构造,从更少的样本中学习变化很大的数据集中的特征,显示出比核方法更强的特征识别能力,同时RDFM

24、 方法的学习过程由于引入正那么化因子,解决了学习能力过强带来的过拟合问题。在各种类型的数据集上进展实验,得到的结果说明了在深度学习微调阶段运用无监视正那么化的必要性。l 非线性变换方法该变换方法使得多层感知器MLP网络的每个隐神经元的输出具有零输出和平均值上的零斜率,使学习 MLP 变得更容易。将学习整个输入输出映射函数的线性局部和非线性局部尽可能分开,用 Shortcut 权值建立线性映射模型,令 Fisher 信息阵接近对角阵,使得标准梯度接近自然梯度。通过实验证明非线性变换方法的有效性,该变换使得根本随机梯度学习与当前的学习算法在速度上不相上下,并有助于找到泛化性能更好的分类器。用这种非

25、线性变换方法实现的深度无监视自编码模型进展图像分类和学习图像的低维表示的实验,说明这些变换有助于学习深度至少到达五个隐层的深度构造神经网络,证明了变换的有效性,提高了根本随机梯度学习算法的速度,有助于找到泛化性更好的分类器。l 稀疏编码对称机算法Ranzato 等人提出一种新的有效的无监视学习算法,稀疏编码对称机(SESM),能够在无须归一化的情况下有效产生稀疏表示。SESM 的损失函数是重构误差和稀疏罚函数的加权总和,基于该损失函数比拟和选择不同的无监视学习机,提出一种迭代在线学习算法,并在理论和实验上将 SESM 与BM 和 PCA 进展比拟,在手写体数字识别 MNIST 数据集和实际图像

26、数据集上进展实验,说明该方法的优越性。l 迁移学习算法在许多常见学习场景中训练和测试数据集中的类标签不同,必须保证训练和测试数据集中的相似性进展迁移学习。Mesnil 等人研究了用于无监视迁移学习场景中学习表示的不同种类模型构造,将多个不同构造的层堆栈使用无监视学习算法用于五个学习任务,并研究了用于少量已标记训练样本的简单线性分类器堆栈深度构造学习算法。Bengio研究了无监视迁移学习问题,讨论了无监视预训练有用的原因,如何在迁移学习场景中利用无监视预训练,以及在什么情况下需要注意从不同数据分布得到的样例上的预测问题。l 学习率自适应方法学习率自适应方法可用于提高深度构造神经网络训练的收敛性并

27、且去除超参数中的学习率参数,包括全局学习率、层次学习率、神经元学习率和参数学习率等。最近研究人员提出了一些新的学习率自适应方法,如 Duchi 等人提出的自适应梯度方法和 Schaul 等人提出的学习率自适应方法;Hinton提出了收缩学习率方法使得平均权值更新在权值大小的 1/1000 数量级上;LeRoux 等人提出自然梯度的对角低秩在线近似方法,并说明该算法在一些学习场景中能加速训练过程5 深度学习根本原理5.1 深度学习的根本思想假设我们有一个系统S,它有N层S1 , SN,它的输入是I,输出是O,如果输出O等于输入I,即输入I经过这个系统变化之后没有任何的信息损失,保持了不变,这意味

28、着输入I经过每一层Si都没有任何的信息损失,即在任何一层Si,它都是原有信息即输入I的另外一种表示。我们需要自动地学习特征,假设我们有一堆输入I如一堆图像或者文本,假设我们设计了一个系统S有N层,我们通过调整系统中参数,使得它的输出仍然是输入I,那么我们就可以自动地获取得到输入I的一系列层次特征。对于深度学习来说,其思想就是对堆叠多个层,也就是说这一层的输出作为下一层的输入。通过这种方式,就可以实现对输入信息进展分级表达了。另外,前面是假设输出严格地等于输入,这个限制太严格,我们可以略微地放松这个限制,例如我们只要使得输入与输出的差异尽可能地小即可,这个放松会导致另外一类不同的Deep Lea

29、rning方法。5.2 深度学习训练过程如果对所有层同时训练,时间复杂度会太高;如果每次训练一层,偏差就会逐层传递。这会面临跟上面监视学习中相反的问题,会严重欠拟合因为深度网络的神经元和参数太多了。2006年,Hinton提出了在非监视数据上建立多层神经网络的一个有效方法,简单的说,分为两步,一是每次训练一层网络,二是调优,使原始表示X向上生成的高级表示R和该高级表示R向下生成的X尽可能一致。方法是:1首先逐层构建单层神经元,这样每次都是训练一个单层网络。2当所有层训练完后,Hinton使用Wake-Sleep算法进展调优。将除最顶层的其它层间的权重变为双向的,这样最顶层仍然是一个单层神经网络

30、,而其它层那么变为了图模型。向上的权重用于认知,向下的权重用于生成。然后使用Wake-Sleep算法调整所有的权重。让认知和生成达成一致,也就是保证生成的最顶层表示能够尽可能正确的复原底层的结点。比方顶层的一个结点表示人脸,那么所有人脸的图像应该激活这个结点,并且这个结果向下生成的图像应该能够表现为一个大概的人脸图像。Deep Learning训练过程具体如下:1使用自下上升非监视学习就是从底层开场,一层一层的往顶层训练:采用无标定数据有标定数据也可分层训练各层参数,这一步可以看作是一个无监视训练过程,是和传统神经网络区别最大的局部这个过程可以看作是特征学习过程:体的,先用无标定数据训练第一层

31、,训练时先学习第一层的参数这一层可以看作是得到一个使得输出和输入差异最小的三层神经网络的隐层,由于模型容量的限制以及稀疏性约束,使得得到的模型能够学习到数据本身的构造,从而得到比输入更具有表示能力的特征;在学习得到第N-1层后,将N-1层的输出作为第N层的输入,训练第N层,由此分别得到各层的参数;2自顶向下的监视学习就是通过带标签的数据去训练,误差自顶向下传输,对网络进展微调:基于第一步得到的各层参数进一步调整个多层模型的参数,这一步是一个有监视训练过程;第一步类似神经网络的随机初始化初值过程,由于深度学习的第一步不是随机初始化,而是通过学习输入数据的构造得到的,因而这个初值更接近全局最优,从

32、而能够取得更好的效果;所以深度学习效果好很大程度上归功于第一步的特征学习过程。5.3 自动编码机深度学习最简单的一种方法是利用人工神经网络的特点,人工神经网络ANN本身就是具有层次构造的系统,如果给定一个神经网络,我们假设其输出与输入是一样的,然后训练调整其参数,得到每一层中的权重。自然地,我们就得到了输入I的几种不同表示每一层代表一种表示,这些表示就是特征。自动编码器就是一种尽可能复现输入信号的神经网络。为了实现这种复现,自动编码器就必须捕捉可以代表输入数据的最重要的因素,就像PCA那样,找到可以代表原信息的主要成分。具体过程简单的说明如下:1给定无标签数据,用非监视学习学习特征:在我们之前

33、的神经网络中,如第一个图,我们输入的样本是有标签的,即input, target,这样我们根据当前输出和targetlabel之间的差去改变前面各层的参数,直到收敛。但现在我们只有无标签数据,也就是右边的图。那么这个误差怎么得到呢?如上图,我们将input输入一个encoder编码器,就会得到一个code,这个code也就是输入的一个表示,那么我们怎么知道这个code表示的就是input呢?我们加一个decoder解码器,这时候decoder就会输出一个信息,那么如果输出的这个信息和一开场的输入信号input是很像的理想情况下就是一样的,那很明显,我们就有理由相信这个code是靠谱的。所以,我

34、们就通过调整encoder和decoder的参数,使得重构误差最小,这时候我们就得到了输入input信号的第一个表示了,也就是编码code了。因为是无标签数据,所以误差的来源就是直接重构后与原输入相比得到。2通过编码器产生特征,然后训练下一层。这样逐层训练:那上面我们就得到第一层的code,我们的重构误差最小让我们相信这个code就是原输入信号的良好表达了,或者牵强点说,它和原信号是一模一样的表达不一样,反映的是一个东西。那第二层和第一层的训练方式就没有差异了,我们将第一层输出的code当成第二层的输入信号,同样最小化重构误差,就会得到第二层的参数,并且得到第二层输入的code,也就是原输入信

35、息的第二个表达了。其他层就同样的方法炮制就行了训练这一层,前面层的参数都是固定的,并且他们的decoder已经没用了,都不需要了。3有监视微调:经过上面的方法,我们就可以得到很多层了。至于需要多少层或者深度需要多少,这个目前本身就没有一个科学的评价方法需要自己试验调了。每一层都会得到原始输入的不同的表达。当然了,我们觉得它是越抽象越好了,就像人的视觉系统一样。到这里,这个Auto Encoder还不能用来分类数据,因为它还没有学习如何去连结一个输入和一个类。它只是学会了如何去重构或者复现它的输入而已。或者说,它只是学习获得了一个可以良好代表输入的特征,这个特征可以最大程度上代表原输入信号。那么

36、,为了实现分类,我们就可以在Auto Encoder的最顶的编码层添加一个分类器例如罗杰斯特回归、SVM等,然后通过标准的多层神经网络的监视训练方法梯度下降法去训练。也就是说,这时候,我们需要将最后层的特征code输入到最后的分类器,通过有标签样本,通过监视学习进展微调,这也分两种,一个是只调整分类器黑色局部:另一种:通过有标签样本,微调整个系统:如果有足够多的数据,这个是最好的。end-to-end learning端对端学习一旦监视训练完成,这个网络就可以用来分类了。神经网络的最顶层可以作为一个线性分类器,然后我们可以用一个更好性能的分类器去取代它。在研究中可以发现,如果在原有的特征中参加

37、这些自动学习得到的特征可以大大提高准确度,甚至在分类问题中比目前最好的分类算法效果还要好!5.4 卷积神经网络卷积神经网络N是人工神经网络的一种,已成为当前语音分析和图像识别领域的研究热点。它的权值共享网络构造使之更类似于生物神经网络,降低了网络模型的复杂度,减少了权值的数量。该优点在网络的输入是多维图像时表现的更为明显,使图像可以直接作为网络的输入,防止了传统识别算法中复杂的特征提取和数据重建过程。卷积网络是为识别二维形状而特殊设计的一个多层感知器,这种网络构造对平移、比例缩放、倾斜或者共他形式的变形具有高度不变性。Ns是受早期的延时神经网络TDNN的影响。延时神经网络通过在时间维度上共享权

38、值降低学习复杂度,适用于语音和时间序列信号的处理。Ns是第一个真正成功训练多层网络构造的学习算法。它利用空间关系减少需要学习的参数数目以提高一般前向BP算法的训练性能。Ns作为一个深度学习架构提出是为了最小化数据的预处理要求。在N中,图像的一小局部局部感受区域作为层级构造的最低层的输入,信息再依次传输到不同的层,每层通过一个数字滤波器去获得观测数据的最显著的特征。这个方法能够获取对平移、缩放和旋转不变的观测数据的显著特征,因为图像的局部感受区域允许神经元或者处理单元可以访问到最根底的特征,例如定向边缘或者角点。5.4.1 卷积神经网络的构造卷积神经网络是一个多层的神经网络,每层由多个二维平面组

39、成,而每个平面由多个独立神经元组成。图5-2 卷积神经网络示意图输入图像通过和三个可训练的滤波器和可加偏置进展卷积,卷积后在C1层产生三个特征映射图,然后特征映射图中每组的四个像素再进展求和,加权值,加偏置,通过一个Sigmoid函数得到三个S2层的特征映射图。这些映射图再进过滤波得到C3层。这个层级构造再和S2一样产生S4。最终,这些像素值被光栅化,并连接成一个向量输入到传统的神经网络,得到输出。一般地,C层为特征提取层,每个神经元的输入与前一层的局部感受野相连,并提取该局部的特征,一旦该局部特征被提取后,它与其他特征间的位置关系也随之确定下来;S层是特征映射层,网络的每个计算层由多个特征映

40、射组成,每个特征映射为一个平面,平面上所有神经元的权值相等。特征映射构造采用影响函数核小的sigmoid函数作为卷积网络的激活函数,使得特征映射具有位移不变性。此外,由于一个映射面上的神经元共享权值,因而减少了网络自由参数的个数,降低了网络参数选择的复杂度。卷积神经网络中的每一个特征提取层C-层都紧跟着一个用来求局部平均与二次提取的计算层S-层,这种特有的两次特征提取构造使网络在识别时对输入样本有较高的畸变容忍能力。5.4.2 参数减少与权值共享N一个牛逼的地方就在于通过感受野和权值共享减少了神经网络需要训练的参数的个数。图5-3 卷积神经网络减少参数示意图如图5-2左,如果我们有1000x1

41、000像素的图像,有1百万个隐层神经元,那么他们全连接的话每个隐层神经元都连接图像的每一个像素点,就有1012个连接,也就是1012个权值参数。然而图像的空间联系是局部的,就像人是通过一个局部的感受野去感受外界图像一样,每一个神经元都不需要对全局图像做感受,每个神经元只感受局部的图像区域,然后在更高层,将这些感受不同局部的神经元综合起来就可以得到全局的信息了。这样,我们就可以减少连接的数目,也就是减少神经网络需要训练的权值参数的个数了。如图5-2右:假设局部感受野是10x10,隐层每个感受野只需要和这10x10的局部图像相连接,所以1百万个隐层神经元就只有一亿个连接,即108个参数。比原来减少

42、了四个数量级,这样训练起来就没那么费力了。我们知道,隐含层的每一个神经元都连接10x10个图像区域,也就是说每一个神经元存在10x10=100个连接权值参数。那如果我们每个神经元这100个参数是一样的呢?也就是说每个神经元用的是同一个卷积核去卷积图像。这样我们就只有100个参数了,这就是权值共享,那问题就是这样做靠谱吗?假设一种滤波器,也就是一种卷积核就是提出图像的一种特征,例如某个方向的边缘。那么我们需要提取不同的特征,怎么办,加多几种滤波器不就行了吗?对了。所以假设我们加到100种滤波器,每种滤波器的参数不一样,表示它提出输入图像的不同特征,例如不同的边缘。这样每种滤波器去卷积图像就得到对

43、图像的不同特征的放映,我们称之为Feature Map。所以100种卷积核就有100个Feature Map。这100个Feature Map就组成了一层神经元。这时这一层有1万个参数。图5-4 卷积神经网络权值共享示意图需要注意的一点是,上面的讨论都没有考虑每个神经元的偏置局部。所以权值个数需要加1。这个也是同一种滤波器共享的。5.4.3 卷积神经网络总结总之,卷积网络的核心思想是将:局部感受野、权值共享或者权值复制以及时间或空间亚采样这三种构造思想结合起来获得了某种程度的位移、尺度、形变不变性。Ns中这种层间联系和空域信息的严密关系,使其适于图像处理和理解。而且,其在自动提取图像的显著特征

44、方面还表现出了比拟优的性能。在一些例子当中,Gabor滤波器已经被使用在一个初始化预处理的步骤中,以到达模拟人类视觉系统对视觉刺激的响应。在目前大局部的工作中,研究者将Ns应用到了多种机器学习问题中,包括人脸识别,文档分析和语言检测等。为了到达寻找视频中帧与帧之间的相干性的目的,目前Ns通过一个时间相干性去训练,但这个不是Ns特有的。6 应用领域6.1 语音识别语音识别系统长期以来,描述每个建模单元的统计概率模型时候,大都是采用的混合高斯模型GMM。这种模型由于估计简单,适合海量数据训练,同时有成熟的区分度训练技术支持,长期以来,一直在语音识别应用中占有垄断性地位。但是这种混合高斯模型本质上是

45、一种浅层网络建模,不能够充分描述特征的状态空间分布。另外,GMM建模的特征维数一般是几十维,不能充分描述特征之间的相关性。最后GMM建模本质上是一种似然概率建模,虽然区分度训练能够模拟一些模式类之间的区分性,但是能力有限。微软研究院的语音识别专家Li和Dong从2009开场和深度学习专家Hinton合作。2011微软基于深度神经网络的语音识别研究取得成果,彻底改变了语音识别原有的技术框架。采用深度神经网络后,可以充分描述特征之间的相关性,可以把连续多帧的语音特征并在一起,构成一个高维特征。最终的深度神经网络可以采用高维特征训练来模拟的。由于深度神经网络采用模拟人脑的多层结果,可以逐级地进展信息

46、特征抽取,最终形成适合模式分类的较理想特征。这种多层构造和人脑处理语音图像信息的时候,是有很大的相似性的。深度神经网络的建模技术,在实际线上效劳时,能够无缝地和传统的语音识别技术相结合,在不引起任何系统额外消耗情况下大幅度地提升了语音识别系统的识别率。其在线的使用方法具体如下:在实际解码过程中,声学模型仍然是采用传统的HMM模型,语音模型仍然是采用传统的统计语言模型,解码器仍然是采用传统的动态WFST解码器。但是在声学模型的输出分布计算时,完全用神经网络的输出后验概率除以一个先验概率来代替传统HMM模型中的GMM的输出似然概率。百度实践中发现,采用DNN进展声音建模的语音识别系统的相比于传统的

47、GMM语音识别系统而言,相对误识别率能降低25%。最终在2012年11月的时候,上线了第一款基于DNN的语音搜索系统,成为最早采用DNN技术进展商业语音效劳的公司之一。国际上谷歌也采用了深度神经网络进展声音建模,和百度一起是最早的突破深度神经网络工业化应用的企业之一。但是谷歌产品中采用的深度神经网络有45层,而百度采用的深度神经网络多达9层。这种构造差异的核心其实是百度更好的解决了深度神经网络在线计算的技术难题,从而百度线上产品可以采用更复杂的网络模型。这将对于未来拓展海量语料的DNN模型训练有更大的优势。6.2 图像识别图像是深度学习最早尝试的应用领域。早在1989,Lecun现纽约大学教授

48、和他的同事们就发表了卷积神经网络(N)的工作。N是一种带有卷积构造的深度神经网络,通常至少有2个非线性可训练的卷积层、2个非线性的固定卷积层又叫Pooling Layer和1个全连接层,一共至少5个隐含层。N的构造受到著名的HubelWiesel生物视觉模型的启发,尤其是模拟视觉皮层V1和V2层中simple cell和plex cell的行为。在很长时间里,N虽然在小规模的问题上,比方说手写数字,取得当时世界最好结果,但一直没有取得巨大成功。这主要原因是N在大规模图像上效果不好,比方像素很多的自然图片容理解,所以没有得到计算机视觉领域的足够重视。这个情况一直持续到2012年10月,Hinto

49、n和他的两个学生在著名的ImageNet问题上用更深的N取得世界最好结果,使得图像识别大踏步前进。在Hinton的模型里,输入就是图像的像素,没有用到任何的人工特征。这个惊人的结果为什么在之前没有发生?原因当然包括算法的提升,比方Dropout等防止过拟合技术,但最重要的是GPU带来的计算能力提升和更多的训练数据。百度在2012将深度学习技术成功应用于自然图像OCR识别和人脸识别等问题,并推出相应的桌面和移动搜索产品,在2013,深度学习模型被成功应用于一般图片的识别和理解。从百度的经历来看,深度学习应用于图像识别不但大大提升了准确性,而且防止了人工特征抽取的时间消耗,从而大大提高了在线计算效

50、率。可以很有把握地说,从现在开场,深度学习将取代人工特征机器学习的方法而逐渐成为主流图像识别方法。6.3 自然语言处理除了语音和图像,深度学习的另一个应用领域问题自然语言处理NLP。经过几十年的开展,基于统计的模型已经成为NLP的主流,但是作为统计方法之一的人工神经网络在NLP领域几乎没有受到重视。加拿大蒙特利尔大学教授Bengio等于2003提出用embedding的方法将词映射到一个矢量表示空间,然后用非线性神经网络来表示N-Gram模型。世界上最早的深度学习用于NLP的研究工作诞生于NEC Labs America,其研究员Collobert和Weston从2008开场采用embeddi

51、ng和多层一维卷积的构造,用于4个典型NLP问题。值得注意的是,他们将同一个模型用于不同任务,都能取得与State Of The Art相当的准确率。最近以来,斯坦福大学教授Manning等人在深度学习用于NLP的工作也值得关注。总的来说,深度学习在NLP上取得的进展没有在语音图像上那么令人影响深刻。一个很有意思的悖论是:相比于声音和图像,语言是唯一的非自然信号,是完全由人类大脑产生和处理的符号系统,但是模仿人脑构造的人工神经网络确似乎在处理自然语言上没有显现明显优势?我们相信深度学习在NLP方面有很大的探索空间。从2006图像深度学习成为学术界热门课题到2012年10月Hinton在Imag

52、eNet上的重大突破,经历了6年时间,我们需要有足够耐心。6.4 搜索广告CTR预估搜索广告是搜索引擎的主要变现方式,而按点击付费CPC又是其中被最广泛应用的计费模式。在CPC模式下,预估的CTR越准确,点击率就会越高,收益就越大。通常,搜索广告的CTR是通过机器学习模型预估得到。提高CTR的准确性,是提升搜索公司、广告主、搜索用户三方利益的最正确途径。传统上,谷歌、百度等搜索引擎公司以Logistic Regression (LR)作为预估模型。而从2012开场,百度开场意识到模型的构造对广告CTR预估的重要性:使用扁平构造的LR严重限制了模型学习与抽象特征的能力。为了突破这样的限制,百度尝

53、试将DNN作用于搜索广告,而这其中最大的挑战在于当前的计算能力还无法承受1011级别的原始广告特征作为输入。作为解决,在百度的DNN系统里,特征数从1011数量级被降到了103,从而能被DNN正常的学习。这套深度学习系统已于2013年5月开场效劳于百度搜索广告系统,每天为数亿网民使用。DNN在搜索广告系统中的应用还远远没到成熟,其中DNN与迁移学习的结合将可能是一个令人振奋的方向。使用DNN,未来的搜索广告将可能借助网页搜索的结果优化特征的学习与提取;亦可能通过DNN将不同的产品线联系起来,使得不同的变现产品不管数据多少,都能互相优化。我们认为未来的DNN一定会在搜索广告中起到更重要的作用。7

54、 深度学习实战演练7.1 实验坏境的搭建7.1.1 深度学习平台目前主要有三个最经常使用的开源深度学习平台,本文做了一个简单的介绍:Caffe:源自加州伯克利分校的Caffe被广泛应用,包括Pinterest这样的web 大户。与TensorFlow一样,Caffe也是由C+开发,Caffe也是Google 今年早些时候发布的DeepDream工程(可以识别猫的人工智能神经网络)的根底。Theano:2008年诞生于蒙特利尔理工学院,Theano派生出了大量深度学习Python 软件包,最著名的包括Blocks和Keras。Torch:诞生已经有十年之久,但是真正起势得益于去年Facebook

55、 开源了大量Torch的深度学习模块和扩展。Torch另外一个特殊之处是采用了不怎么流行的编程语言Lua(该语言曾被用来开发视频游戏)。本次试验,我采用了比拟广泛使用的Caffe深度学习平台。接下来,我主要介绍Caffe的环境搭建方法。7.1.2 安装依赖库首先,我在 s:/github./BVLC/caffe 下载了Caffe的源代码,为了能够顺利的进展编译,首先我们需要安装一下依赖库。libatlas-base-dev libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libboost-all-dev libhdf5-se

56、rial-dev libgflags-dev libgoogle-glog-dev liblmdb-dev protobuf-piler python-numpy python3-numpy python-scipy python3-scipy在Ubutun中,我们只需要使用sudo apt-get install PACKAGE_NAME 即可完成对上述所有依赖库的安装。在安装完依赖库后,我们就可以开场安装Caffe了。7.1.3 安装Caffe在完成了依赖库的安装之后,我们就可以开场Caffe的安装了。为此,我们首先要准备一个Makefile.Config文件。事实上,Caffe已经为我们

57、准备好了一个Makefile.Config.Example文件,只要将该文件重命名并进展相应的修改即可开场进展编译。由于本次实验的机器中没有支持CUDA的显卡,因此我们需要在Makefile.Config文件中将CPU_ONLY选项置为1,然后即可开场编译。我们只要在终端中输入命令make all即可开场编译。在Caffe成功编译完成后,我们输入指令make pycaffe来编译python接口模块,当然如果你的系统中没有python的话需要先安装python。在上述所有编译指令完成后,其实Caffe就已经安装好了,在你的目录中会生成build/tools文件夹,里面的Caffe可执行文件就是

58、以后用来训练深度神经网络的工具。接下来,我们可以进展简单的测试,测试Caffe是否可以正常工作,只需要在终端中输入make test make runtest即可进展Caffe的正确性测试。如果最后的结果显示PASSED那么说明Caffe已经安装完毕。7.2 实验概述本文主要完成一个手写数字体识别的深度学习测试,数据来源于网上的MNIST数据库,数据库一共拥有6万个用于训练的手写数字带标签,同时还拥有1万个用于识别的手写数字字符,局部手写体数字的效果如下列图所示。图7-5 MNIST手写体本文首先在yann.lecun./exdb/mnist/上下载MNIST手写字符集,并得到四个文件,分别是

59、两个图片数据文件以及两个标签文件。接下来,按照MNIST的数据格式,书写Python程序读取程序图片,并生成符合Caffe的LMDB格式数据集。接下来,本文参考已有的深度网络模型,书写模型文件。最后,本文编写求解参数文件,调用Caffe可执行文件对深度网络进展训练,并得到最终的测试结果。本文实验中所采用的环境如下:操作系统OSUbuntu 14.04CPUIntel(R) Core(TM) i5-4217 CPU 3.80GHz运行存大小RAM4.00 GB7.3 实验过程7.3.1 生成指定的数据格式文件为了使用Caffe深度学习平台,我们首先需要将得到的数据集转化为Caffe可以使用的LM

60、DB格式,其具体过程如下。首先在下载的MNIST文件中提取所有的图片源文件,主要使用的是Python编程。本文将所有的训练用手写数字放在train文件夹,测试用放在了val文件夹。并利用Python产生了两个TAG文件,主要用来指示图片的标签。例如上图所示,它代表8.jpg的标签为1,也就是说8.jpg图片中显示的手写数字应该是1。在上述文件全部准备好之后,我们可以调用Caffe提供的数据格式转换工具convert_imageset能完成标准数据集的生成。本文写了一个批处理文件完成了数据集的生成,其效果如下。7.3.2 编写深度网络模型文件按照当前文献的说法,卷积神经网络对手写字符的识别具有较

61、好的效果,我按照标准的Caffe模型编写格式,参考网上的教程,编写了一个深度网络模型。首先定义一个训练输入data层,指定其数据路径,数据文件格式,等参数,代码书写如下:layer name: mnist type: Data top: data top: label include phase: TRAIN transform_param scale: 0.00390625 data_param source: /home/dong/dl2/hand_write_train/ batch_size: 64 backend: LMDB 同理,定义一个测试输入data层用来对训练的网络进展测试。

62、接下来,定义一层卷积神经网络,指定其类型为Convolution层,学习速率,其他参数保持默认。layer name: conv1 /卷积神经网络的第一层,卷积层 type: Convolution /这层操作为卷积 bottom: data /这一层的前一层是data层 top: conv1 param lr_mult: 1 param lr_mult: 2 convolution_param num_output: 20 /定义输出特征图个数 kernel_size: 5 /定义卷积核大小 stride: 1 weight_filler type: xavier bias_filler t

63、ype: constant 在此之后,定义一层池化层,第二层卷积神经网络层,第二层池化层,以及两个积层,具体的模型代码见附录。7.3.3 编写网络求解文件和Makefile一样,网络求解文件是由模板的,根据自己的需要进展修改即可。一个典型的模板如下。net: path/to/your/net /定义网络构造文件,也就是我们上一步编写的文件test_iter: 100 test_interval: 500 /每隔500次用测试数据,做一次验证base_lr: 0.01 /学习速率momentum: 0.9 /动量参数weight_decay: 0.0005 /权重衰减系数lr_policy: inv /梯度下降的相关优化策略gamma: 0.0001 power: 0.75 display: 100 max_iter: 10000 /最大迭代次数snapshot: 5000 /每迭代5000次,保存一次结果snapshot_prefix: examples/mnist/lenet /保

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!