《高性能算法-深度学习(DOC37页).doc》由会员分享,可在线阅读,更多相关《高性能算法-深度学习(DOC37页).doc(38页珍藏版)》请在三一办公上搜索。
1、深度学习算法的研究与实现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 com
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 w
4、as 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 composed of convolutional neur
6、al 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 背景介绍14 研究过程与发展现状24.1 研究过程24.1.1 浅层学习和深度学习24.1.2 深度学习与人工神经网络34.2 发展现状54.2.1 初始化方法、网络层数和激活函数的选择54.2.2 模型结构64.2
7、.3 学习算法65 深度学习基本原理85.1 深度学习的基本思想85.2 深度学习训练过程85.3 自动编码机105.4 卷积神经网络125.4.1 卷积神经网络的结构135.4.2 参数减少与权值共享145.4.3 卷积神经网络总结156 应用领域166.1 语音识别166.2 图像识别176.3 自然语言处理176.4 搜索广告CTR预估187 深度学习实战演练197.1 实验坏境的搭建197.1.1 深度学习平台197.1.2 安装依赖库197.1.3 安装Caffe197.2 实验概述207.3 实验过程217.3.1 生成指定的数据格式文件217.3.2 编写深度网络模型文件227.
8、3.3 编写网络求解文件237.4 实验结果248 总结259 参考文献2610 附录(源代码)27IV3 背景介绍人工智能很久以来就是人类最美好的梦想之一。虽然计算机技术已经取得了长足的进步,但是到目前为止,还没有一台电脑能产生“自我”的意识。图灵在 1950 年的论文里,提出图灵试验的设想,即,隔墙对话,你将不知道与你谈话的,是人还是电脑。这无疑给计算机,尤其是人工智能,预设了一个很高的期望值。但是半个世纪过去了,人工智能的进展,远远没有达到图灵试验的标准。这不仅让多年翘首以待的人们,心灰意冷,认为人工智能是忽悠,相关领域是“伪科学”。自 2006 年以来,在机器学习领域,取得了突破性的进
9、展。图灵试验,至少不是那么可望而不可及了。至于技术手段,不仅仅依赖于云计算对大数据的并行处理能力,而且依赖于算法。这个算法就是深度学习,借助于 Deep Learning 算法,人类终于找到了如何处理“抽象概念”这个亘古难题的方法,下面本文详细介绍一下机器学习的发展背景。图3-1 人工智能概念图机器学习是一门专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能的学科。机器能否像人类一样能具有学习能力呢?1959年美国的塞缪尔(Samuel)设计了一个下棋程序,这个程序具有学习能力,它可以在不断的对弈中改善自己的棋艺。4年后,这个程序战胜
10、了设计者本人。又过了3年,这个程序战胜了美国一个保持8年之久的常胜不败的冠军。这个程序向人们展示了机器学习的能力。机器学习虽然发展了几十年,但还是存在很多没有良好解决的问题,目前我们通过机器学习去解决问题的思路大致如下:a) 通过传感器(例如CMOS)来获得数据b) 预处理、特征提取、特征选择c) 推理、预测或者识别最后一个部分,也就是机器学习的部分,绝大部分的工作是在这方面做的,存在很多的和研究。而中间的三部分,概括起来就是特征表达。良好的特征表达,对最终算法的准确性起了非常关键的作用,而且系统主要的计算和测试工作都耗在这一大部分。但这块实际中一般都是人工完成的,靠人工提取特征。机器学习在发
11、展的过程中出现了不少强大的特征,具有大小、尺度和旋转等的不变性以及可区分性。例如SIFT是局部图像特征描述子研究领域一项里程碑式的工作。由于SIFT对尺度、旋转以及一定视角和光照变化等图像变化都具有不变性,并且SIFT具有很强的可区分性,的确让很多问题的解决变为可能,但它也不是万能的。然而,手工地选取特征是一件非常费力的方法,能不能选取好很大程度上靠经验和运气,而且它的调节需要大量的时间。既然手工选取特征不太好,那么能不能自动地学习一些特征呢?答案是能,深度学习就是用来干这个事情的,这也就是深度学习提出的背景。4 研究过程与发展现状4.1 研究过程4.1.1 浅层学习和深度学习浅层学习是机器学
12、习的第一次浪潮。20世纪80年代末期,用于人工神经网络的反向传播算法的发明,给机器学习带来了希望,掀起了基于统计模型的机器学习热潮。这个热潮一直持续到今天。人们发现,利用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,他坚持了下来,并最终提成了一个实际可行的深度学习框架。深度学习与传统的神经网络之间有相同的地方也有很多不同。二者的相同在于深度学习采用了神经网络相似的分层结构,系统由包括输入层、隐层(多层)、输出
17、层组成的多层网络,只有相邻层节点之间有连接,同一层以及跨层节点之间相互无连接,每一层可以看作是一个Logistic 回归模型;这种分层结构,是比较接近人类大脑的结构的。而为了克服神经网络训练中的问题,深度学习采用了与神经网络很不同的训练机制。传统神经网络中,采用的是反向传播的方式进行,简单来讲就是采用迭代的算法来训练整个网络,随机设定初值,计算当前网络的输出,然后根据当前输出和标签之间的差去改变前面各层的参数,直到收敛(整体是一个梯度下降法)。而深度学习整体上是一个逐层的训练机制。这样做的原因是因为,如果采用反向传播的机制,对于一个深度网络(7层以上),残差传播到最前面的层已经变得太小,出现所
18、谓的梯度扩散。4.2 发展现状由于深度学习能够很好地解决一些复杂问题,近年来许多研究人员对其进行了深入研究,出现了许多有关深度学习研究的新进展。下面分别从初始化方法、网络层数和激活函数的选择、模型结构、学习算法和实际应用这四个方面对近几年深度学习研究的新进展进行介绍。4.2.1 初始化方法、网络层数和激活函数的选择研究人员试图搞清网络初始值的设定与学习结果之间的关系。Erhan等人在轨迹可视化研究中指出即使从相近的值开始训练深度结构神经网络,不同的初始值也会学习到不同的局部极值,同时发现用无监督预训练初始化模型的参数学习得到的极值与随机初始化学习得到的极值差异比较大,用无监督预训练初始化模型的
19、参数学习得到的模型具有更好的泛化误差。Bengio与Krueger等人指出用特定的方法设定训练样例的初始分布和排列顺序可以产生更好的训练结果,用特定的方法初始化参数,使其与均匀采样得到的参数不同,会对梯度下降算法训练的结果产生很大的影响。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 中 Spik
22、e 表示以0为中心的离散概率分布,slab表示在连续域上的稠密均匀分布,可以用吉布斯采样对spike-and-slab RBM 进行有效推断,得到优越的学习性能。l 和积网络深度学习最主要的困难是配分函数的学习,如何选择深度结构神经网络的结构使得配分函数更容易计算是一个很困难的问题。Poon 等人提出一种新的深度模型结构,和积网络(SPN) ,引入多层隐单元表示配分函数,使得配分函数更容易计算。SPN 是有根节点的有向无环图,图中的叶节点为变量,中间节点执行和运算与积运算,连接节点的边带有权值,它们在 Caltech-101 和 Olivetti 两个数据集上进行实验证明了SPN的性能优于DB
23、N和最近邻方法。l 卷积神经网络文献4研究了用生成式子抽样单元组成的卷积神经网络,在 MNIST 数字识别任务和 Caltech-101目标分类基准任务上进行实验,显示出非常好的学习性能。Huang 等人提出一种新的卷积学习模型,即局部卷积RBM,利用对象类中的总体结构学习特征,不假定图像具有平稳特征,在实际人脸数据集上进行实验,得到性能很好的实验结果。4.2.3 学习算法l 深度费希尔映射方法Wong 等人提出一种新的特征提取方法,正则化深度费希尔映射(RDFM) 方法,学习从样本空间到特征空间的显式映射,根据 Fisher 准则用深度结构神经网络提高特征的区分度。深度结构神经网络具有深度非
24、局部学习结构,从更少的样本中学习变化很大的数据集中的特征,显示出比核方法更强的特征识别能力,同时RDFM 方法的学习过程由于引入正则化因子,解决了学习能力过强带来的过拟合问题。在各种类型的数据集上进行实验,得到的结果说明了在深度学习微调阶段运用无监督正则化的必要性。l 非线性变换方法该变换方法使得多层感知器(MLP)网络的每个隐神经元的输出具有零输出和平均值上的零斜率,使学习 MLP 变得更容易。将学习整个输入输出映射函数的线性部分和非线性部分尽可能分开,用 Shortcut 权值建立线性映射模型,令 Fisher 信息阵接近对角阵,使得标准梯度接近自然梯度。通过实验证明非线性变换方法的有效性
25、,该变换使得基本随机梯度学习与当前的学习算法在速度上不相上下,并有助于找到泛化性能更好的分类器。用这种非线性变换方法实现的深度无监督自编码模型进行图像分类和学习图像的低维表示的实验,说明这些变换有助于学习深度至少达到五个隐层的深度结构神经网络,证明了变换的有效性,提高了基本随机梯度学习算法的速度,有助于找到泛化性更好的分类器。l 稀疏编码对称机算法Ranzato 等人提出一种新的有效的无监督学习算法,稀疏编码对称机(SESM),能够在无须归一化的情况下有效产生稀疏表示。SESM 的损失函数是重构误差和稀疏罚函数的加权总和,基于该损失函数比较和选择不同的无监督学习机,提出一种迭代在线学习算法,并
26、在理论和实验上将 SESM 与 BM 和 PCA 进行比较,在手写体数字识别 MNIST 数据集和实际图像数据集上进行实验,表明该方法的优越性。l 迁移学习算法在许多常见学习场景中训练和测试数据集中的类标签不同,必须保证训练和测试数据集中的相似性进行迁移学习。Mesnil 等人研究了用于无监督迁移学习场景中学习表示的不同种类模型结构,将多个不同结构的层堆栈使用无监督学习算法用于五个学习任务,并研究了用于少量已标记训练样本的简单线性分类器堆栈深度结构学习算法。Bengio研究了无监督迁移学习问题,讨论了无监督预训练有用的原因,如何在迁移学习场景中利用无监督预训练,以及在什么情况下需要注意从不同数
27、据分布得到的样例上的预测问题。l 学习率自适应方法学习率自适应方法可用于提高深度结构神经网络训练的收敛性并且去除超参数中的学习率参数,包括全局学习率、层次学习率、神经元学习率和参数学习率等。最近研究人员提出了一些新的学习率自适应方法,如 Duchi 等人提出的自适应梯度方法和 Schaul 等人提出的学习率自适应方法;Hinton提出了收缩学习率方法使得平均权值更新在权值大小的 1/1000 数量级上;LeRoux 等人提出自然梯度的对角低秩在线近似方法,并说明该算法在一些学习场景中能加速训练过程5 深度学习基本原理5.1 深度学习的基本思想假设我们有一个系统S,它有N层(S1 , SN),它
28、的输入是I,输出是O,如果输出O等于输入I,即输入I经过这个系统变化之后没有任何的信息损失,保持了不变,这意味着输入I经过每一层Si都没有任何的信息损失,即在任何一层Si,它都是原有信息(即输入I)的另外一种表示。我们需要自动地学习特征,假设我们有一堆输入I(如一堆图像或者文本),假设我们设计了一个系统S(有N层),我们通过调整系统中参数,使得它的输出仍然是输入I,那么我们就可以自动地获取得到输入I的一系列层次特征。对于深度学习来说,其思想就是对堆叠多个层,也就是说这一层的输出作为下一层的输入。通过这种方式,就可以实现对输入信息进行分级表达了。另外,前面是假设输出严格地等于输入,这个限制太严格
29、,我们可以略微地放松这个限制,例如我们只要使得输入与输出的差别尽可能地小即可,这个放松会导致另外一类不同的Deep Learning方法。5.2 深度学习训练过程如果对所有层同时训练,时间复杂度会太高;如果每次训练一层,偏差就会逐层传递。这会面临跟上面监督学习中相反的问题,会严重欠拟合(因为深度网络的神经元和参数太多了)。2006年,Hinton提出了在非监督数据上建立多层神经网络的一个有效方法,简单的说,分为两步,一是每次训练一层网络,二是调优,使原始表示X向上生成的高级表示R和该高级表示R向下生成的X尽可能一致。方法是:1)首先逐层构建单层神经元,这样每次都是训练一个单层网络。2)当所有层
30、训练完后,Hinton使用Wake-Sleep算法进行调优。将除最顶层的其它层间的权重变为双向的,这样最顶层仍然是一个单层神经网络,而其它层则变为了图模型。向上的权重用于“认知”,向下的权重用于“生成”。然后使用Wake-Sleep算法调整所有的权重。让认知和生成达成一致,也就是保证生成的最顶层表示能够尽可能正确的复原底层的结点。比如顶层的一个结点表示人脸,那么所有人脸的图像应该激活这个结点,并且这个结果向下生成的图像应该能够表现为一个大概的人脸图像。Deep Learning训练过程具体如下:1)使用自下上升非监督学习(就是从底层开始,一层一层的往顶层训练):采用无标定数据(有标定数据也可)
31、分层训练各层参数,这一步可以看作是一个无监督训练过程,是和传统神经网络区别最大的部分(这个过程可以看作是特征学习过程):体的,先用无标定数据训练第一层,训练时先学习第一层的参数(这一层可以看作是得到一个使得输出和输入差别最小的三层神经网络的隐层),由于模型容量的限制以及稀疏性约束,使得得到的模型能够学习到数据本身的结构,从而得到比输入更具有表示能力的特征;在学习得到第N-1层后,将N-1层的输出作为第N层的输入,训练第N层,由此分别得到各层的参数;2)自顶向下的监督学习(就是通过带标签的数据去训练,误差自顶向下传输,对网络进行微调):基于第一步得到的各层参数进一步调整个多层模型的参数,这一步是
32、一个有监督训练过程;第一步类似神经网络的随机初始化初值过程,由于深度学习的第一步不是随机初始化,而是通过学习输入数据的结构得到的,因而这个初值更接近全局最优,从而能够取得更好的效果;所以深度学习效果好很大程度上归功于第一步的特征学习过程。5.3 自动编码机深度学习最简单的一种方法是利用人工神经网络的特点,人工神经网络(ANN)本身就是具有层次结构的系统,如果给定一个神经网络,我们假设其输出与输入是相同的,然后训练调整其参数,得到每一层中的权重。自然地,我们就得到了输入I的几种不同表示(每一层代表一种表示),这些表示就是特征。自动编码器就是一种尽可能复现输入信号的神经网络。为了实现这种复现,自动
33、编码器就必须捕捉可以代表输入数据的最重要的因素,就像PCA那样,找到可以代表原信息的主要成分。具体过程简单的说明如下:1)给定无标签数据,用非监督学习学习特征:在我们之前的神经网络中,如第一个图,我们输入的样本是有标签的,即(input, target),这样我们根据当前输出和target(label)之间的差去改变前面各层的参数,直到收敛。但现在我们只有无标签数据,也就是右边的图。那么这个误差怎么得到呢?如上图,我们将input输入一个encoder编码器,就会得到一个code,这个code也就是输入的一个表示,那么我们怎么知道这个code表示的就是input呢?我们加一个decoder解码
34、器,这时候decoder就会输出一个信息,那么如果输出的这个信息和一开始的输入信号input是很像的(理想情况下就是一样的),那很明显,我们就有理由相信这个code是靠谱的。所以,我们就通过调整encoder和decoder的参数,使得重构误差最小,这时候我们就得到了输入input信号的第一个表示了,也就是编码code了。因为是无标签数据,所以误差的来源就是直接重构后与原输入相比得到。2)通过编码器产生特征,然后训练下一层。这样逐层训练:那上面我们就得到第一层的code,我们的重构误差最小让我们相信这个code就是原输入信号的良好表达了,或者牵强点说,它和原信号是一模一样的(表达不一样,反映的
35、是一个东西)。那第二层和第一层的训练方式就没有差别了,我们将第一层输出的code当成第二层的输入信号,同样最小化重构误差,就会得到第二层的参数,并且得到第二层输入的code,也就是原输入信息的第二个表达了。其他层就同样的方法炮制就行了(训练这一层,前面层的参数都是固定的,并且他们的decoder已经没用了,都不需要了)。3)有监督微调:经过上面的方法,我们就可以得到很多层了。至于需要多少层(或者深度需要多少,这个目前本身就没有一个科学的评价方法)需要自己试验调了。每一层都会得到原始输入的不同的表达。当然了,我们觉得它是越抽象越好了,就像人的视觉系统一样。到这里,这个Auto Encoder还不
36、能用来分类数据,因为它还没有学习如何去连结一个输入和一个类。它只是学会了如何去重构或者复现它的输入而已。或者说,它只是学习获得了一个可以良好代表输入的特征,这个特征可以最大程度上代表原输入信号。那么,为了实现分类,我们就可以在Auto Encoder的最顶的编码层添加一个分类器(例如罗杰斯特回归、SVM等),然后通过标准的多层神经网络的监督训练方法(梯度下降法)去训练。也就是说,这时候,我们需要将最后层的特征code输入到最后的分类器,通过有标签样本,通过监督学习进行微调,这也分两种,一个是只调整分类器(黑色部分):另一种:通过有标签样本,微调整个系统:(如果有足够多的数据,这个是最好的。en
37、d-to-end learning端对端学习)一旦监督训练完成,这个网络就可以用来分类了。神经网络的最顶层可以作为一个线性分类器,然后我们可以用一个更好性能的分类器去取代它。在研究中可以发现,如果在原有的特征中加入这些自动学习得到的特征可以大大提高精确度,甚至在分类问题中比目前最好的分类算法效果还要好!5.4 卷积神经网络卷积神经网络(CNN)是人工神经网络的一种,已成为当前语音分析和图像识别领域的研究热点。它的权值共享网络结构使之更类似于生物神经网络,降低了网络模型的复杂度,减少了权值的数量。该优点在网络的输入是多维图像时表现的更为明显,使图像可以直接作为网络的输入,避免了传统识别算法中复杂
38、的特征提取和数据重建过程。卷积网络是为识别二维形状而特殊设计的一个多层感知器,这种网络结构对平移、比例缩放、倾斜或者共他形式的变形具有高度不变性。CNNs是受早期的延时神经网络(TDNN)的影响。延时神经网络通过在时间维度上共享权值降低学习复杂度,适用于语音和时间序列信号的处理。CNNs是第一个真正成功训练多层网络结构的学习算法。它利用空间关系减少需要学习的参数数目以提高一般前向BP算法的训练性能。CNNs作为一个深度学习架构提出是为了最小化数据的预处理要求。在CNN中,图像的一小部分(局部感受区域)作为层级结构的最低层的输入,信息再依次传输到不同的层,每层通过一个数字滤波器去获得观测数据的最
39、显著的特征。这个方法能够获取对平移、缩放和旋转不变的观测数据的显著特征,因为图像的局部感受区域允许神经元或者处理单元可以访问到最基础的特征,例如定向边缘或者角点。5.4.1 卷积神经网络的结构卷积神经网络是一个多层的神经网络,每层由多个二维平面组成,而每个平面由多个独立神经元组成。图5-1 卷积神经网络示意图输入图像通过和三个可训练的滤波器和可加偏置进行卷积,卷积后在C1层产生三个特征映射图,然后特征映射图中每组的四个像素再进行求和,加权值,加偏置,通过一个Sigmoid函数得到三个S2层的特征映射图。这些映射图再进过滤波得到C3层。这个层级结构再和S2一样产生S4。最终,这些像素值被光栅化,
40、并连接成一个向量输入到传统的神经网络,得到输出。一般地,C层为特征提取层,每个神经元的输入与前一层的局部感受野相连,并提取该局部的特征,一旦该局部特征被提取后,它与其他特征间的位置关系也随之确定下来;S层是特征映射层,网络的每个计算层由多个特征映射组成,每个特征映射为一个平面,平面上所有神经元的权值相等。特征映射结构采用影响函数核小的sigmoid函数作为卷积网络的激活函数,使得特征映射具有位移不变性。此外,由于一个映射面上的神经元共享权值,因而减少了网络自由参数的个数,降低了网络参数选择的复杂度。卷积神经网络中的每一个特征提取层(C-层)都紧跟着一个用来求局部平均与二次提取的计算层(S-层)
41、,这种特有的两次特征提取结构使网络在识别时对输入样本有较高的畸变容忍能力。5.4.2 参数减少与权值共享CNN一个牛逼的地方就在于通过感受野和权值共享减少了神经网络需要训练的参数的个数。图5-2 卷积神经网络减少参数示意图如图5-2左,如果我们有1000x1000像素的图像,有1百万个隐层神经元,那么他们全连接的话(每个隐层神经元都连接图像的每一个像素点),就有1012个连接,也就是1012个权值参数。然而图像的空间联系是局部的,就像人是通过一个局部的感受野去感受外界图像一样,每一个神经元都不需要对全局图像做感受,每个神经元只感受局部的图像区域,然后在更高层,将这些感受不同局部的神经元综合起来
42、就可以得到全局的信息了。这样,我们就可以减少连接的数目,也就是减少神经网络需要训练的权值参数的个数了。如图5-2右:假如局部感受野是10x10,隐层每个感受野只需要和这10x10的局部图像相连接,所以1百万个隐层神经元就只有一亿个连接,即108个参数。比原来减少了四个数量级,这样训练起来就没那么费力了。 我们知道,隐含层的每一个神经元都连接10x10个图像区域,也就是说每一个神经元存在10x10=100个连接权值参数。那如果我们每个神经元这100个参数是相同的呢?也就是说每个神经元用的是同一个卷积核去卷积图像。这样我们就只有100个参数了,这就是权值共享,那问题就是这样做靠谱吗?假如一种滤波器
43、,也就是一种卷积核就是提出图像的一种特征,例如某个方向的边缘。那么我们需要提取不同的特征,怎么办,加多几种滤波器不就行了吗?对了。所以假设我们加到100种滤波器,每种滤波器的参数不一样,表示它提出输入图像的不同特征,例如不同的边缘。这样每种滤波器去卷积图像就得到对图像的不同特征的放映,我们称之为Feature Map。所以100种卷积核就有100个Feature Map。这100个Feature Map就组成了一层神经元。这时这一层有1万个参数。图5-3 卷积神经网络权值共享示意图需要注意的一点是,上面的讨论都没有考虑每个神经元的偏置部分。所以权值个数需要加1。这个也是同一种滤波器共享的。5.
44、4.3 卷积神经网络总结总之,卷积网络的核心思想是将:局部感受野、权值共享(或者权值复制)以及时间或空间亚采样这三种结构思想结合起来获得了某种程度的位移、尺度、形变不变性。CNNs中这种层间联系和空域信息的紧密关系,使其适于图像处理和理解。而且,其在自动提取图像的显著特征方面还表现出了比较优的性能。在一些例子当中,Gabor滤波器已经被使用在一个初始化预处理的步骤中,以达到模拟人类视觉系统对视觉刺激的响应。在目前大部分的工作中,研究者将CNNs应用到了多种机器学习问题中,包括人脸识别,文档分析和语言检测等。为了达到寻找视频中帧与帧之间的相干性的目的,目前CNNs通过一个时间相干性去训练,但这个
45、不是CNNs特有的。6 应用领域6.1 语音识别语音识别系统长期以来,描述每个建模单元的统计概率模型时候,大都是采用的混合高斯模型(GMM)。这种模型由于估计简单,适合海量数据训练,同时有成熟的区分度训练技术支持,长期以来,一直在语音识别应用中占有垄断性地位。但是这种混合高斯模型本质上是一种浅层网络建模,不能够充分描述特征的状态空间分布。另外,GMM建模的特征维数一般是几十维,不能充分描述特征之间的相关性。最后GMM建模本质上是一种似然概率建模,虽然区分度训练能够模拟一些模式类之间的区分性,但是能力有限。微软研究院的语音识别专家Li和Dong从2009开始和深度学习专家Hinton合作。201
46、1微软基于深度神经网络的语音识别研究取得成果,彻底改变了语音识别原有的技术框架。采用深度神经网络后,可以充分描述特征之间的相关性,可以把连续多帧的语音特征并在一起,构成一个高维特征。最终的深度神经网络可以采用高维特征训练来模拟的。由于深度神经网络采用模拟人脑的多层结果,可以逐级地进行信息特征抽取,最终形成适合模式分类的较理想特征。这种多层结构和人脑处理语音图像信息的时候,是有很大的相似性的。深度神经网络的建模技术,在实际线上服务时,能够无缝地和传统的语音识别技术相结合,在不引起任何系统额外耗费情况下大幅度地提升了语音识别系统的识别率。其在线的使用方法具体如下:在实际解码过程中,声学模型仍然是采
47、用传统的HMM模型,语音模型仍然是采用传统的统计语言模型,解码器仍然是采用传统的动态WFST解码器。但是在声学模型的输出分布计算时,完全用神经网络的输出后验概率除以一个先验概率来代替传统HMM模型中的GMM的输出似然概率。百度实践中发现,采用DNN进行声音建模的语音识别系统的相比于传统的GMM语音识别系统而言,相对误识别率能降低25%。最终在2012年11月的时候,上线了第一款基于DNN的语音搜索系统,成为最早采用DNN技术进行商业语音服务的公司之一。国际上谷歌也采用了深度神经网络进行声音建模,和百度一起是最早的突破深度神经网络工业化应用的企业之一。但是谷歌产品中采用的深度神经网络有45层,而
48、百度采用的深度神经网络多达9层。这种结构差异的核心其实是百度更好的解决了深度神经网络在线计算的技术难题,从而百度线上产品可以采用更复杂的网络模型。这将对于未来拓展海量语料的DNN模型训练有更大的优势。6.2 图像识别图像是深度学习最早尝试的应用领域。早在1989,Lecun(现纽约大学教授)和他的同事们就发表了卷积神经网络(CNN)的工作。CNN是一种带有卷积结构的深度神经网络,通常至少有2个非线性可训练的卷积层、2个非线性的固定卷积层(又叫Pooling Layer)和1个全连接层,一共至少5个隐含层。CNN的结构受到著名的HubelWiesel生物视觉模型的启发,尤其是模拟视觉皮层V1和V2层 中simple cell和complex cell的行为。在很长时间里,CNN虽然在小规模的问题上,比如说手写数字,取得当时世界最好结果,但一直没有取得巨大成功。这主要原因是CNN在大规模图像上效果不好,比如像素很多的自然图片内容理解,所以没有得到计算机视觉领域的足够重视。这个情况一直持续到2012年10月,Hinto