深度学习:卷积神经网络从入门到精通(txt+pdf+epub+mobi电子书下载)


发布时间:2020-07-08 09:51:16

点击下载

作者:李玉鑑

出版社:机械工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

深度学习:卷积神经网络从入门到精通

深度学习:卷积神经网络从入门到精通试读:

前言

随着谷歌的AlphaGo、IBM的Watson和百度的小度机器人等智能产品的问世,人工智能成为大众热烈讨论的焦点。深度学习作为其中的核心技术之一,经过学术界与工业界的积极推动,已经被广泛应用于计算机视觉、语音识别和自然语言处理等诸多领域。如果读者想了解深度学习的总体概况,可参考作者编写的《深度学习导论及案例分

[1]析》一书。

本书专注讨论深度学习中应用非常广泛的模型——卷积神经网络,该模型特别适用于图像分类和识别、目标分割和检测以及人工智能游戏方面,受众对象包括计算机、自动化、信号处理、机电工程、应用数学等相关专业的研究生、教师以及算法工程师和科研工作者。

卷积神经网络是一种特殊的多层感知器或前馈神经网络,具有局部连接、权值共享的特点,其中大量神经元按照一定方式组织起来对视野中的交叠区域产生反应。其前身是日本学者Fukushima在感受野概念的基础上提出的神经认知机模型。利用神经认知机的思想,LeCun等人在1998年提出了卷积神经网络的现代雏形LeNet。2012年,Krizhevsky等人取得了卷积神经网络研究的重大突破,提出了著名的AlexNet。AlexNet在ImageNet的大规模图像分类竞赛中取得优异成绩,为深度学习的全面推广立下了汗马功劳。随后,卷积神经网络模型如雨后春笋般出现,如VGGNet、GoogLeNet、SPPNet、ResNet、DenseNet、Faster R-CNN、YOLO、SSD、FCN、PSPNet、Mask R-CNN、SiameaseNet、SqueezeNet、DCGAN、NIN,以及在人工智能游戏中用到的深度强化模型等。

本书的最大特色是对卷积神经网络进行由浅入深的分类描述,依次包括:现代雏形、突破模型、应变模型、加深模型、跨连模型、区域模型、分割模型、特殊模型、强化模型和顶尖成就。这种分类框架是在模型概述和预备知识的基础上逐步展开的,既方便读者入门学习,又有助于读者深入钻研。

本书的另一大特色是结合Caffe或TensorFlow的代码来说明各种卷积神经网络模型的具体实现过程,并通过应用案例说明其价值和意义所在。典型的应用案例包括:字符识别、交通标志识别、交通路网提取、大规模图像分类、人脸图像性别分类、图像目标检测、图像语义分割、图像实例分割、人脸图像生成、Flappy Bird智能体、AlphaGo的仿效围棋程序等。读者可以通过运行各个应用案例的程序代码和实验数据,检验其演示效果。

与其他深度学习的书籍相比,本书对卷积神经网络的内容涵盖更为广泛、模型讨论更为深入、应用实践更为细致。特别是,还总结了一些运行卷积神经网络的配置技巧和操作经验。比如,在运行Mask R-CNN的时候,需要先安装读取COCO数据集的程序,然后再进行训练或测试。在运行SSD的时候,可视化结果只给出了类别编号而没有给出类别名,作者对此已进行了修改,以方便读者按照书中所示代码显示相应的类别名。把这些经过摸索得到的技巧和经验分享给读者,对提高读者的深度学习技术水平,无疑具有很好的加速作用。

本书是集体努力的成果,主要作者包括北京工业大学的李玉鑑、张婷、单传辉、刘兆英、聂小广和欧军。他们对全书的内容进行了精心的布局、认真的编写和细致的整理。同时,曾少锋、刘博文、穆红章、余华擎和方皓达等人在文献资料、实现代码和软件工具的收集方面也提供了积极的帮助。此外,华章公司的温莉芳副总经理和张梦玲编辑对本书的排版提出了许多宝贵的意见。最后,需要特别感谢家人的支持,他们也在不知不觉中以各种方式对此书出版做出了贡献。

限于作者水平,本书难免在内容取材和结构编排上有不妥之处,希望读者不吝赐教,提出宝贵的批评和建议,我们将不胜感激。作者2018年4月于北京工业大学

[1] 此书已由机械工业出版社出版,书号为ISBN 978-7-111-55075-4。——编辑注第1章概述

深度学习是一种实现人工智能的强大技术,已经在图像视频处理、语音处理、自然语言处理等领域获得了大量成功的应用,并对学术界和工业界产生了非常广泛的影响。卷积神经网络是深度学习中最为重要的模型,2012年以来极大地推进了图像分类、识别和理解技术的发展。而且通过与其他技术相结合,卷积神经网络还可用于设计实现游戏智能体Q网络、围棋程序AlphaGo,以及语音识别和机器翻译软件等各种应用系统,所取得的成就已经使人工智能迈进了盛况空前、影响深远的新时代。本章主要介绍深度学习的起源和发展,说明卷积神经网络的形成和演变,分析卷积神经网络的应用和影响,讨论卷积神经网络的缺陷和视图,总结卷积神经网络的平台和工具,并概括本书的内容结构及案例数据。1.1 深度学习的起源和发展

深度学习的概念起源于人工神经网络,本质上是指一类对具有深层结构的神经网络进行有效训练的方法。神经网络是一种由许多非线性计算单元(或称神经元、节点)组成的分层系统,通常网络的深度就是其中不包括输入层的层数。

最早的神经网络是心理学家McCulloch和数理逻辑学家Pitts在[1]1943年建立的MP模型,如图1.1所示。MP模型实际上只是单个神经元的形式化数学描述,具有执行逻辑运算的功能,虽然不能进行学习,但开创了人工神经网络研究的时代。1949年,Hebb首先对生物[2]神经网络提出了有关学习的思想。1958年,Rosenblatt提出了感知[3]器模型及其学习算法。在随后的几十年间,尽管神经网络的研究出[4]现过一段与Minsky对感知器的批评有关的低潮期,但仍然在逐步向[5-10]前推进,并产生了许多神经网络的新模型。到20世纪八九十年代,这些新模型终于引发了神经网络的重生,并掀起了对神经网络研究的[11][8]世界性高潮。其中最受欢迎的模型至少包括:Hopfield神经网络、[9][10]波耳兹曼机和多层感知器。最早的深度学习系统也许就是那些[12]通过数据分组处理方法训练的多层感知器。多层感知器,在隐含层数大于1时常常称为深层感知器,实际上是一种由多层节点有向图[13]构成的前馈神经网络,其中每一个非输入节点是具有非线性激活函数的神经元,每一层与其下一层是全连接的。此外,Fukushima提[14-16]出的神经认知机可能是第一个具有“深度”属性的神经网络,[17-18]并且也是第一个集成了“感受野”思想的神经网络,以便有效地对视觉输入的某些特性起反应。更重要的是,神经认知机促成了卷[19]积神经网络结构的诞生和发展。而卷积神经网络作为一种判别模型,极大地推进了图像分类、识别和理解技术的发展,在大规模评测[20]比赛中成绩卓著,盛誉非凡。图 1.1

在训练神经网络方面,反向传播无疑是最常用、最著名的算法[10,21]。这是一种有监督学习算法,需要教师指导信号。也就是说,应提供一组训练样本,对给定的输入,指明相应的输出。然而,直到20世纪80年代末期,反向传播似乎还只是对浅层网络有效,尽管原理上也应对深层网络有效。浅层网络主要是指具有1个隐含层的神经网络,如图1.2所示。深层网络则主要是指具有2个及以上隐含层的神经网络,如图1.3所示。在早期的应用中,大多数多层感知器都只用1个或很少的隐含层,增加隐含层几乎没有什么经验上的收益。这似乎[22,23]可以从神经网络的单隐层感知器逼近定理中找到某种解释,该定理指出,只要单隐层感知器包含的隐含神经元足够多,就能够在闭区间上以任意精度逼近任何一个多变量连续函数。直到1991年的时候,关于多层感知器在增加层数时为什么难学习的问题,才开始作为一个深度学习的基本问题,得到了完全的理解。图1.2 浅层(单隐层)神经网络图1.3 深层神经网络

1991年,Hochreteir正式指出,典型的深层网络存在梯度消失或[24]爆炸问题,从而明确确立了深度学习的一个里程碑。该问题是说,累积反向传播误差信号在神经网络的层数增加时会出现指数衰减或增长的现象,从而导致数值计算快速收缩或越界。这就是深层网络很难用反向传播算法训练的主要原因。需要指出的是,梯度消失或爆[25]炸问题又称为长时滞后问题,在循环神经网络中也会出现。

为了在一定程度上克服梯度消失或爆炸问题,1990~2000年,[26-28]Hochreiter的深邃思想推动了若干新方法的探索。但除了卷积神[29]经网络以外,训练深层网络的问题直到2006年才开始得到严肃认真的对待。一个重要的原因是,1995年之后支持向量机的快速发展[30]减缓了神经网络的有关工作进展。

普遍认为,深度学习正式发端于2006年,以Hinton及其合作者发表的两篇重要论文为标志:一篇发表在《Neural Computation》上,[31]题目为“A fast learning algorithm for deep belief nets”;另一篇发表在《Science》上,题目为“Reducing the dimensionality of data [32]with neural networks”。从那以后,大量的深度学习模型开始重新受到广泛关注,或如雨后春笋般迅速发展起来,其中主要包括受限波[33]耳兹曼机(Restricted Boltzman Machine,RBM)、深层自编码器[32](deep AutoEncoder,deep AE)、深层信念网络(deep belief net)[31][34]、深层波耳兹曼机(Deep Boltzman Machine,DBM)、和积网[35]络(Sum-Product Network,SPN)、深层堆叠网络(Deep [36]Stacked Network,DSN)、卷积神经网络(Convolutional Neural [19]Network,CNN)、循环神经网络(Recurrent Neural Network,[25]RNN)、长短期记忆网络(Long Short-Term Memory network,[27]LSTM network)、强化学习网络(Reinforcement Learning [37]Network,RLN)、生成对抗网络(Generative Adversarial Network,[38]GAN)等。通过结合各种有效的训练技巧,比如最大池化(max [39]pooling)、丢失输出(dropout)[40]和丢失连接(dropconnect)[41],这些深度学习模型取得了许多历史性的突破和成就,例如手写[32][20][42]数字识别、ImageNet分类和语音识别。而这些历史性的突破和成就,使深度学习很快在学术界掀起了神经网络的一次新浪潮。其中最主要的原因,当然是深度学习在解决大量实际问题时所表现的性[30]能超越了机器学习的其他替代方法,例如支持向量机。

在理论上,一个具有浅层结构或层数不够深的神经网络虽然在节点数足够大时也可能充分逼近地表达任意的多元非线性函数,但这种浅层表达在具体实现时往往由于需要太多的节点而无法实际应用。一般说来,对于给定数目的训练样本,如果缺乏其他先验知识,人们更期望使用少量的计算单元来建立目标函数的“紧表达”,以获得更好[43]的泛化能力。而在网络深度不够时,这种紧表达可能根本无法建立起来,因为理论研究表明,深度为k的网络能够紧表达的函数在用[44]深度为k-1的网络来表达时有时需要的计算单元会呈指数增长。这种函数表达的潜在能力说明,深层神经网络(又称深度神经网络)在一定的条件下可能具有非常重要的应用前景。随着深度学习的兴起,这种潜在能力开始逐步显现出来,特别是对卷积神经网络的全面推广应用,使得这种潜在能力几乎得到了淋漓尽致的发挥。1.2 卷积神经网络的形成和演变

卷积神经网络最初是受到视觉系统的神经机制启发、针对二维形状的识别设计的一种生物物理模型,在平移情况下具有高度不变性,在缩放和倾斜情况下也具有一定的不变性。这种生物物理模型集成了“感受野”的思想,可以看作一种特殊的多层感知器或前馈神经网络,具有局部连接、权值共享的特点,其中大量神经元按照一定方式组织起来对视野中的交叠区域产生反应。1962年,Hubel和Wiesel通过对[17-18]猫的视觉皮层细胞的研究,提出了感受野的概念。1979年,日本学者Fukushima在感受野概念的基础上,提出了神经认知机模型[14-16],该模型被认为是实现的第一个卷积神经网络。1989年,[45]LeCun等人首次使用了权值共享技术。1998年,LeCun等人将卷积层和下采样层相结合,设计卷积神经网络的主要结构,形成了现代卷[19]积神经网络的雏形(LeNet)。2012年,卷积神经网络的发展取得了历史性的突破,Krizhevsky等人采用修正线性单元(Rectified Linear Unit,ReLU)作为激活函数提出了著名的AlexNet,并在大规[46]模图像评测中取得了优异成绩,成为深度学习发展史上的重要拐点。

在理论上,卷积神经网络是一种特殊的多层感知器或前馈神经网络。标准的卷积神经网络一般由输入层、交替的卷积层和池化层、全连接层和输出层构成,如图1.4所示。其中,卷积层也称为“检测层”,“池化层”又称为下采样层,它们可以被看作特殊的隐含层。卷积层的权值也称为卷积核。虽然卷积核一般是需要训练的,但有时[47]也可以是固定的,比如直接采用Gabor滤波器。作为计算机视觉领域最成功的一种深度学习模型,卷积神经网络在深度学习兴起之后已经通过不断演化产生了大量变种模型。图1.4 标准卷积神经网络

从结构的角度看,卷积神经网络起初只能处理黑白或灰度图像,变种模型通过把红、绿、蓝3个颜色通道作为一个整体输入已能直接[46][48]处理彩色图像,有些还可以直接处理多帧图像甚至连续图像。同时,变种模型可以使用多个相邻的卷积层或多个相邻的池化层,也可以使用重叠池化和最大池化,还可以使用修正线性单元、渗漏修正线性单元(Leaky ReLU,LReLU)、参数修正线性单元(Parametric ReLU,PReLU)或指数线性单元(Exponential Linear Unit,ELU)[46,49-51]取代sigmoid单元作为激活函数,也可以在输出层采用软最大函数softmax替代sigmoid函数以产生伪概率。此外,卷积神经网络可以设计成孪生结构(siamese architecture),把原始数据映射到目[52]标空间,产生对几何扭曲的鲁棒性。最后,卷积神经网络可以设计成快道结构,允许信息通过快道无阻碍地跨越多层流动,使得用梯[53]度下降训练非常深的网络变得更加容易。

从卷积核的角度看,卷积神经网络可以通过采用非常小的卷积核,比如1×1和3×3大小,被加深成一个更深的网络,比如16层或19[54]层的VGGNet。如果采用参数修正线性单元代替修正线性单元,可[55]以把VGGNet发展成MSRANet。而且,卷积神经网络通过使用小卷积核在保持总体计算代价的条件下增加深度和宽度,并与“摄入模块(inception module)”进行集成,可以用来建立谷歌网络[56](GoogLeNet)。此外,卷积神经网络通过使用微型多层感知器代替卷积核,还可以被扩展成更为复杂的网络,例如“网中网[57](Network In Network,NIN)”。

从区域的角度看,区域卷积神经网络(Region-based CNN,R-CNN)可以用来抽取区域卷积特征,并通过区域提议进行更加鲁棒[58]的定位和分类。空间金字塔池化网络(Spatial Pyramid Pooling Net,SPPNet)可以克服其输入大小固定的缺点,办法是在最后一个[59]卷积层和第一个全连接层之间插入一个空间金字塔池化层。不管输入的大小如何,空间金字塔池化层都能够产生固定大小的输出,并使用多尺度空间箱(spatial bin)代替滑动窗口对在不同尺度上抽取的特征进行池化。虽然与R-CNN相比,空间金字塔池化网络具有能够直接输入可变大小图像的优势,但是它们需要一个多阶段的管道把特征写入硬盘,训练过程较为麻烦。为了解决这个训练问题,可以在R-CNN中插入一个特殊的单级空间金字塔池化层(称为感兴趣区池化层,ROI pooling layer),并将其提取的特征向量输入到一个最终分化成两个兄弟输出层的全连接层,再构造一个单阶段多任务损失函数对所有网络层进行整体训练,建立快速区域卷积神经网络(Fast R-[60]CNN),其优点是可以通过优化一个单阶段多任务损失函数进行联合训练。为了减少区域提议的选择代价,可以插入一个区域提议网络与Fast R-CNN共享所有卷积层,进一步建立更快速区域卷积神经网络(Faster R-CNN),产生几乎零代价的提议预测对象(或称为目[61]标、物体)边界及有关分数。为了获得实时性能极快的对象检测速度,可以把输入图像划分成许多网格,并通过单个网络构造的整体检测管道,直接从整幅图像预测对象的边框和类概率建立YOLO模型,[62]只需看一遍图像就能知道对象的位置和类别。为了更准确地定位对象,还可以在多尺度特征图的每个位置上,使用不同长宽比的缺省[63]框建立单次检测器(SSD)来取代YOLO。此外,采用空间变换模块有助于卷积神经网络学到对平移、缩放、旋转和其他扭曲更鲁棒的[64]不变性。最后,可以把Faster R-CNN扩展成掩膜区域卷积神经网络(Mask R-CNN),在图像中有效检测对象的同时,还能够对每个[65]对象实例生成一个高质量的分割掩膜。

从优化的角度看,许多技术可以用来训练卷积神经网络,比如丢[40,66][41][67]失输出、丢失连接和块归一化(batch normalization)。丢失输出是一种减小过拟合的正则化技术,而丢失连接是丢失输出的推广。块归一化(或批量归一化)则是按迷你块大小对某些层的输入进行归一化处理的方法。此外,残差网络(Residual Network,ResNet)采用跨越2~3层的连接策略也是一种重要的优化技术,可以用来克服极深网络的训练困难。借助残差学习能够快速有效地成功训练超过150层甚至1000层的深层卷积神经网络,它在[68]ILSVRC&COCO 2015的多项任务评测中发挥了关键作用,全部取得了第一名的突出成绩。最后,为了优化模型的结构,还可以采用火焰模块(fire module)建立卷积神经网络的挤压模型[69]SqueezeNet,也可以结合深度压缩(deep compression)技术进[70]一步减少网络的参数。

从模型演变的角度看,卷积神经网络的发展脉络如图1.5所示。从图中可以看出,现代卷积网络以LeNet为雏形,在经过AlexNet的历史突破之后,演化生成了很多不同的网络模型,主要包括:加深模型、跨连模型、应变模型、区域模型、分割模型、特殊模型和强化模型等。加深模型的代表是VGGNet-16、VGGNet-19和GoogLeNet;跨连模型的代表是HighwayNet、ResNet和DenseNet;应变模型的代表是SPPNet;区域模型的代表是R-CNN、Fast R-CNN、Faster R-CNN、YOLO和SSD;分割模型的代表是FCN、PSPNet和Mask R-CNN;特殊模型的代表是SiameseNet、SqueezeNet、DCGAN、NIN;强化模型的代表是DQN和AlphaGo。图1.5 卷积神经网络的演变1.3 卷积神经网络的应用和影响

自从卷积神经网络在深度学习领域闪亮登场之后,很快取得了突飞猛进的进展,不仅显著提高了手写字符识别的准确率,而且屡屡在图像分类与识别、目标定位与检测等大规模数据评测竞赛中名列前茅、战绩辉煌。此外,卷积神经网络在人脸验证、交通标志识别、视频游戏、视频分类、语音识别、机器翻译、围棋程序等各个方面也获得广泛的成功应用。

在手写字符识别方面,LeCun等人早在1998年就采用卷积神经网[19]络模型使MNIST数据集上的错误率达到了0.95%以下,Simard等人在2003年采用交叉熵训练卷积神经网络把MNIST数据集上的错误率进一步降到了0.4%,Ranzato等人在2006年采用大卷积神经网络和无监督预训练又把MNIST数据集上的错误率降到了0.39%,Ciresan等人在2012年采用卷积神经网络的委员会模型把MNIST数据集上的错误率降到了目前的最低水平0.23%。更详细的统计结果请访问网址http://yann.lecun.com/exdb/mnist/。

在图像分类方面,由Krizhevsky、Sutshever和Hinton组织的超级视觉队(SuperVision)于2012年实现了一个深层卷积神经网络,参加大规模视觉识别挑战赛(ImageNet Large Scale Visual Recognition Challenge 2012,ILSVRC-2012)时获得了最好的前5测试错误率[46](16.4%),比第二名的成绩低10%左右。这个卷积神经网络现在称为AlexNet,使用了“dropout”优化技术和“ReLU”激活函数,以及非常有效的GPU实现,显著加快了训练过程。2013~2017年的挑[71][56]战赛中,成绩最好的图像分类系统分别是Claeifai、GoogLeNet、[68][72]残差网络、六模型集成(ensemble of 6model)、双通道网络[73](Dual Path Network,DPN),它们都使用了卷积神经网络的模型结构。这些网络获得的前5测试错误率分别为11.7%、6.7%、3.57%、2.99%和3.41%。

在ILSVR 2012~2017年的单目标定位挑战赛上,获得最好错误[46][74]率的系统都集成了卷积神经网络,分别是AlexNet、Overfeat、[54][68][72]VGGNet、ResNet、集成模型3(ensemble 3)和双通道网络[73],相应的最好错误率分别为34.2%、29.9%、25.3%、9.02%、7.71%和6.22%。在ILSVRC-2014的目标检测挑战赛上,Lin等人将R-[57]CNN和NIN相结合,获得了37.2%的平均准确率,Szegedy等人使[56]用GoogLeNet获得了43.9%的平均准确率。在ILSVRC-2015的目标检测挑战赛上,He等人将Faster R-CNN和ResNet相结合,获得了[68]62.1%的平均准确率,比第二名高出了8.5%。在2016年的目标检测挑战赛上,Zeng等人采用门控双向卷积神经网络(gated bi-[75]directional CNN)获得了66.28%的平均准确率。在2017年的目标检测挑战赛上,Shuai等人将特征金字塔网络与门控双向卷积神经网络相结合,获得了73.14%的平均准确率。

在人脸验证方面,Fan等人于2014年建立了一个金字塔卷积神经网络(pyramid CNN),在LFW数据集上获得了97.3%的准确率,其中[76]LFW是“Labeled Faces in the Wild”的缩写。2015年,Ding等人利用精心设计的卷积神经网络和三层堆叠的自编码器建立了一个复杂[77]的混合模型,在LFW数据集上获得了高于99.0%的准确率。Sun等人提出了一个由卷积层和摄入层(inception layer)堆叠而成的[78]DeepID3模型,在LFW数据集上获得了99.53%的准确率。此外,Schroff等人实现了“FaceNet”系统,在LFW和YouTube人脸数据集[79]上分别获得了99.63%和95.12%的准确率。

在交通标志识别方面,Ciresan等人于2011年实现了一个由卷积神经网络和多层感知器构成的委员会机器,在德国交通标志识别标准数据集(German Traffic Sign Recognition Benchmark,GTSRB)上[80]获得了99.15%的准确率。2012年,Ciresan等人提出了一个多列卷积神经网络,在GTSRB上获得了99.46%的准确率,超过了人类的识[81]别结果。

在视频游戏方面,Mnih等人于2015年通过结合卷积神经网络和[37]强化学习,开发了一个深度Q-网络智能体的机器玩家,只需输入场景像素和游戏得分进行训练,就能够让很多经典的Atari 2600视频游戏成功学会有效的操作策略,达到与人类专业玩家相当的水平。这种深度Q-网络智能体在高维感知输入和行为操纵之间的鸿沟上架起了一座桥梁,能够出色地处理各种具有挑战性的任务。

在视频分类方面,使用独立子空间分析(Independent Subspace Analysis,ISA)方法,Le等人于2011年提出了堆叠卷积ISA网络,能够从无标签视频数据中学习不变的时空特征。该网络在Hollyword 2和[82]YouTube数据集上分别获得了53.3%和75.8%的准确率。2014年,Karpathy等人对卷积神经网络在大规模视频分类上的效果进行了广泛的经验评估,在Sports-1M测试集的200000个视频上获得了63.9%的[83]Hit@1值(即前1准确率)。2015年,Ng等人采用卷积神经网络和长短期记忆循环神经网络的混合模型,在Sports-1M测试集上获得了[84]73.1%的Hit@1值。

在语音识别方面,Abdel-Hamid等人于2012年第一次证实,使用卷积神经网络能够在频率坐标轴上有效归一化说话人的差异,并在[85]TIMIT音素识别任务上将音素错误率从20.7%降到20.0%。这些结果在2013年被微软研究院的Abdel-Hamid等人和Deng等人以及IBM研究院的Sainath等人使用改进的卷积神经网络结构、预训练和池化技[86-87]术拓展到大词汇语音识别上。进一步的研究表明,卷积神经网[88-90]络对训练集或者数据差异较小的任务帮助最大。此外,通过结合卷积神经网络、深度神经网络和基于i-vector的自适应技术,IBM的研究人员在2014年说明他们能够将Switchboard Hub5′00评估集的词错误率降至10.4%。

在机器翻译方面,Gehring等人使用一种全新的卷积神经网络模型进行从序列到序列的学习[91],能够在非常大的标准数据集上超越循环神经网络的性能,不仅可以大幅提高翻译速度,同时也提高了翻译质量。比如,这种全新的模型在WMT’16英语到罗马尼亚语的翻译任务上可比以前最好的系统提高1.8的BLEU分数,在WMT’14英语到法语的翻译任务上可比Wu等人的长短期记忆神经翻译模型提高[92]1.5的BLEU分数,在WMT’14英语到德语的翻译任务上可超过当前最高水平0.5的BLEU分数。

在围棋程序方面,DeepMind开发的AlphaGo利用深层网络和蒙特卡罗树搜索(Monte Carlo tree search),2015年10月首次在完整的围棋比赛中没有任何让子以5比0战胜了人类的专业选手、欧洲冠军、[93]职业围棋二段选手樊麾,这也是计算机围棋程序首次击败围棋职业棋手。2016年3月,AlphaGo又以4比1战胜了人类的顶尖高手、世界冠军、职业围棋九段选手李世石。2016年末2017年初,AlphaGo在中国棋类网站上以Master为注册账号与中日韩数十位围棋高手进行快棋对决,连续60局无一败绩。2017年5月,在中国乌镇围棋峰会上,AlphaGo以3比0战胜排名世界第一的围棋冠军柯洁。1.4 卷积神经网络的缺陷和视图

从上述应用和成果不难看出,卷积神经网络已经使人工智能迈进了盛况空前、影响深远的新时代。不过这并不等于说,可以用卷积神经网络完全实现人类的智能。虽然现在卷积神经网络分类图像中的对[68]象能够达到与人类匹敌的水平,但其视觉与人类的视觉相比仍然[94]是非常不同的。事实上,即使成功训练之后,卷积神经网络也仍然可能错分对抗样本。对抗样本是一种含有人类不可感知的微小扰动的非随机图像,如图1.6所示,在一幅熊猫图像中加入微量噪声后,它可能变成一幅对抗熊猫图像的样本,人类仍然能够轻松识别它为熊[95]猫,但卷积神经网络却一口咬定它是长臂猿,详情请参见文献。另外,有些人类根本不能识别的噪声图像,如图1.7所示,却可能成为卷积神经网络的欺骗图像,让卷积神经网络以高于99%的置信度识[96]别它为一个熟知的对象(比如数字)。因此,卷积神经网络在实际应用中仍然存在一些不易被察觉的潜在缺陷。图1.6 对抗图像样本举例图1.7 欺骗图像举例。随机噪声图像欺骗卷积神经网络,被识别为数字0~9

为了更好地理解卷积神经网络的成功与失败,一种办法是采用可[97-98]视化技术来分析其数据表达并解释其工作机理,例如以某种可见视图方式来显示激活和特征。通过可视化技术,能够按照逐级上升的顺序展现卷积神经网络各层的直觉期望性质,包括组合性、不变性和类别性。常用可视化技术,比如逆变换(inversion)、激活最大化(activation maximization)和卡通化(caricaturization),是以自然原像概念为基础的。自然原像就是那些看起来具有显著自然特征的图像。通常,一幅图像经过卷积神经网络提取特征后,随着层次的深入,可[98]视化结果会变得越来越模糊和抽象。比如,图1.8是用AlexNet处理一幅狗的图像后可视化各层特征的结果,看起来逐层模糊和抽象。图1.8 卷积神经网络的逐层可视化举例1.5 卷积神经网络的GPU实现和cuDNN库

只采用CPU在大规模数据集中训练卷积神经网络的速度很慢,因此可以结合图形处理单元(Graphic Processing Unit,GPU)进行加速。GPU具有单指令多数据流结构,非常适合用一个程序处理各种大规模并行数据的计算问题。最常用的GPU是英伟达(Nvidia)生产的。编写GPU代码可在CUDA环境下进行。CUDA(Compute Unified Device Architecture)是一种用于GPU通用计算的并行计算平台和编程模型。它以C语言为基础,并对C语言进行了扩展,能够在显卡芯片上执行程序。CUDA提供了一个深度神经网络的GPU加速库cuDNN(CUDA Deep Neural Network),完成了对卷积、池化、归一化和激活函数层等标准操作的快速实现。如果读者想了解更多的相关信息,可参考以下网站:

·https://developer.nvidia.com/cuda-toolkit

·https://developer.nvidia.com/deep-learning-software

·https://developer.nvidia.com/cudnn1.6 卷积神经网络的平台和工具

为了在解决各种实际问题中有效地利用深度学习模型,特别是卷积神经网络,现在已经有很多开发平台和工具可以选择。比较常用的有Theano、TensorFlow、Caffe、Caffe 2、CNTK、MXNet、Torch、Deeplearning4J和Keras等,其中TensorFlow、Caffe 2和MXNet之间的竞争可能会比较激烈。目前,这些平台和工具还没有任何一种完善到足以解决“所有”的业务问题,大多通过专有解决方案提供先进的机器学习和人工智能的功能,包括手写字符识别、图像识别、视频识别、语音识别、自然语言处理和对象识别等高级功能。下面分别对它们进行简要的说明。

1)Theano由蒙特利尔大学学习算法学院的30~40名教师和学生集体维护,其创始人是深度学习研究的重要贡献者Yoshua Bengio。Theano通过BSD许可发布,支持快速开发高效的机器学习算法。Theano的结构相当简单,以Python为代码库和接口,其中C/CUDA代码也被打包成Python字符串。这对开发者来说很难驾驭、调试和重构。Theano开创了使用符号图来编程网络的趋势,其符号API支持循环控制,使得循环神经网络的实现更容易、更高效。虽然Theano是一个很好的学术研究工具,在单个CPU上的运行效率较高,但缺乏分布式应用程序管理框架,只支持一种编程开发语言,在开发大型分布式应用程序时可能会遇到挑战。

2)TensorFlow来自早期的Google库DistBelief V2,是作为Google Brain项目的一部分开发的专有深度网络库。由于TensorFlow支持广泛的功能,如图像识别、手写字符识别、语音识别、预测以及自然语言处理,所以在2015年11月9日以Apache 2.0许可开源后,谷歌立即获得了大量的关注。有些人评价TensorFlow是对Theano的重新设计。TensorFlow在2017年2月15日发布了1.0版本,是8个先前版本的累积,解决了很多不完整的核心功能和性能问题。TensorFlow的编程接口包括Python和C++,并支持Java、Go、R和Haskell API的alpha版本接口。另外,TensorFlow支持精细的网格层,允许用户构建新的复杂层类型,允许模型的不同部分在不同的设备上并行训练,还可以使用C++Eigen库在ARM架构上编译和优化。经过训练的TensorFlow模型可以部署在各种服务器或移动设备上,无须实现单独的解码器或加载Python解释器。

3)Caffe开创于2013年年底,可能是第一个主流的行业级深度学习工具包,由领导Facebook AI平台工程的贾扬清负责设计和实现,在BSD 2-Clause开源许可后发布。作为一种在计算机视觉界最受欢迎的工具包,Caffe具有优良的卷积神经网络模型结构,在2014年ImageNet挑战赛中脱颖而出。Caffe的运行速度快,学习速度为4ms/图,推理速度为1ms/图,在单个Nvidia K40GPU上每天处理超过6000万张图片,是研究实验和商业部署的完美选择。Caffe是基于C++的,可以在各种跨平台设备上编译,包括一个Windows的端口,支持C++、Matlab和Python等编程接口。而且,Caffe拥有一个庞大的用户社区为其深层网络存储库做贡献,包括AlexNet和GoogLeNet两种流行的用户网络。Caffe的缺点是不支持细粒度网络层,在构建复合层类型时必须以低级语言完成,对常规网络和语言建模的支持总体上很差。

4)Caffe 2是Caffe的升级版,于2017年4月18日由Facebook根据BSD许可协议开源,继续强力支持视觉类型问题,并增加了自然语言处理、手写识别和时间序列预测的循环神经网络和长短期记忆网络。Caffe 2可以把Caffe模型轻松转换为实用程序脚本,但更侧重于模块化、卓越的移动和大规模部署,能够像TensorFlow一样使用C++Eigen库来支持ARM架构,并在移动设备上部署深度学习模型。随着Facebook最新宣布其改变航向,Caffe 2在深度学习社区中为大众所热捧,可能超越Caffe成为主要的深入学习框架。

5)CNTK开始称为Computational Network Toolkit(计算网络工具包),但在CNTK 2.0Beta1版本根据MIT许可发布后被正式更名为Microsoft Cognitive Toolkit(微软认知套件)。CNTK最早是由微软的计算机科学家开发的,目的是想要更快、更高效地提高语音识别技术,但很快就超越了语音领域并演变成了一个产品,包括一些领先的国际家电制造商和微软的旗舰产品组在内的客户依靠它来执行各种各样的深度学习任务。CNTK可以运行在使用传统CPU或GPU的计算机上,既可以运行在一台笔记本电脑上,也可以运行在数据中心的一系列计算机上,支持使用Python或C++编程接口的64位Linux和Windows操作系统,能够轻松处理从相对较小到非常巨大等各种规模的数据集。与TensorFlow和Theano的组成相似,CNTK的网络被描述为向量运算(如矩阵的加法/乘法或卷积)的符号图,允许用户构建细粒度的网络层并创造新的复合层类型,而不像Caffe那样需要通过低级语言实现。此外,CNTK又有点类似Caffe,也是基于C++的,具有跨平台的CPU/GPU支持,并在Azure GPU Lab提供了最高效的分布式计算性能。目前,CNTK的主要不足是对ARM架构缺乏支持,这限制了其在移动设备上的功能。

6)MXNet(发音为“mix-net”)起源于卡内基-梅隆大学和华盛顿大学,2017年1月30日进入Apache基金会成为孵化器项目,是一个功能齐全、可编程和可扩展的深度学习框架,支持各种深度学习模型(比如卷积神经网络、循环神经网络和长短期记忆网络),也是目前唯一支持生成对抗网络模型的深度学习框架。而且,MXNet提供了混合编程模型(命令式和声明式)的功能、大量编程语言的代码(包括Python、C++、R、Scala、Julia、Matlab和JavaScript),以及强大的扩展能力(如GPU并行性和内存镜像、编程器开发速度和可移植性),甚至被有些人称为世界上最好的图像分类器。此外,MXNet与Apache Hadoop YARN(一种通用的、分布式的应用程序管理框架)集成,使其成为TensorFlow的竞争对手。特别是,亚马逊首席技术官Werner Vogels选择公开支持MXNet,苹果公司在2016年收购Graphlab/Dato/Turi之后也传闻使用它。

7)Torch的主要贡献者是Facebook、Twitter和Nvidia,Google Deep Mind也有一部分功劳。Torch按BSD 3开源许可发布,以非主流编程语言Lua实现,在员工熟练掌握之前很难提高整体效率,限制了其广泛应用。当前的版本Torch7提供了一个比Caffe更详尽的接口库,可以在上面非常方便地对已有模块实现逻辑复杂的调用。相比于Caffe,Torch7开放的接口更多,使用更灵活,很少会通过开发者给它实现新功能,而是依赖它去做扩展。但由于Lua语言本身功能偏弱,有点先天不足,所以Torch7不适合做层本身的组件开发。此外,Torch缺乏TensorFlow的分布式应用程序管理框架。

8)Deeplearning4J,简称DL4J,是用Java和Scala编写的、由Apache 2.0授权的开放源码,支持常用的机器学习向量化工具,以及丰富的深度学习模型,包括受限波耳兹曼机、深信度神经网络、卷积神经网络、循环神经网络、RNTN和长短期记忆网络等。DL4J是SkyMind的Adam Gibson的创意,是唯一与Hadoop和Spark集成的商业级深度学习框架,内置多GPU支持,可协调多个主机线程,使用Map-Reduce来训练网络,同时依靠其他库来执行大型矩阵操作。DL4J在Java中开源,本质上比Python快,速度与Caffe相当,可以实现多个GPU的图像识别、欺诈检测和自然语言处理等出色功能。

9)Keras是一个高层神经网络的应用程序编程接口(Application Programming Interface,API),由纯Python语言编写,并且使用TensorFlow、Theano或者CNTK作为后端。Keras的设计有4个原则:用户友好、模块性、易扩展性和与Python协作。用户友好是指Keras提供一致而简洁的API,以及清晰而有用的bug反馈,极大地减少了用户工作量。模块性是指Keras将网络层、损失函数、优化器、激活函数等方法都表示为独立的模块,作为构建各种模型的基础。易扩展性是指在Keras中只需要仿照现有的模块编写新的类或函数即可添加新的模块,非常方便。与Python协作是指Keras没有单独的模型配置文件,模型完全由Python代码描述,具有更紧凑和更易调试的优点。

如果读者想了解上述开发工具的更多信息和资料,可以访问下面的网址:

·http://www.deeplearning.net/software/theano/

·http://tensorflow.org

·http://caffe.berkeleyvision.org

·https://developer.nvidia.com/caffe2

·http://cntk.codeplex.com/

·http://mxnet.io

·http://torch.ch/

·http://deeplearning4j.org

·https://keras.io/

此外,必须介绍一下CUDA-convnet。这是一个C++/CUDA实现的高性能卷积神经网络库,其中甚至包括更一般的前馈神经网络。目前有CUDA-convnet和CUDA-convnet2两个版本。CUDA-convnet可以建立任意层的连通性和网络深度,实现任何有向无环图,使用反向传播算法进行训练,需要Fermi-generation GPU(GTX 4xx、GTX 5xx或者Teslax系列)。在CUDA-convnet的基础上,CUDA-convnet2主要做了3个改进。一是在Kepler-generation Nvidia GPU上提高了训练速度(Geforce Titan、K20、K40);二是实现了数据并行、模型并行和二[99]者混合并行的方式;三是改进了不太友好的代码,完善了一些不完整的文档,而且仍在不断补充完善。CUDA-convnet和CUDA-convnet2的下载网址如下:

·https://code.google.com/archive/p/cuda-convnet/downloads

·https://github.com/akrizhevsky/cuda-convnet21.7 本书的内容结构和案例数据

卷积神经网络是目前应用最广的深度学习模型。本书旨在介绍其中比较重要的模型,并通过演示案例说明有关模型的应用价值。下面简述本书的内容结构及案例数据。1.7.1 内容结构

本书共分为12章,有关应用案例的章节、框架和平台汇总在表1.1中。表1.1 应用案例的章节、框架和平台

各章的内容结构描述如下:

第1章为概述,介绍深度学习的起源和发展,说明卷积神经网络的形成和演变,分析卷积神经网络的应用和影响,讨论卷积神经网络的缺陷和视图,总结卷积神经网络的平台和工具。

第2章为预备知识,主要介绍卷积神经网络模型有关的数学基础。

第3章为卷积神经网络的现代雏形LeNet。首先介绍LeNet的原始模型,然后描述LeNet的标准模型,接着给出LeNet的学习算法,说明LeNet的Caffe代码,并分析LeNet的手写数字识别案例、交通标志识别案例和交通路网提取案例。

第4章为卷积神经网络的突破模型AlexNet。首先介绍AlexNet的模型结构,然后依次说明AlexNet的Caffe和TensorFlow代码,并分析AlexNet的大规模图像分类案例,最后简介其改进模型ZFNet。

第5章为卷积神经网络的应变模型。主要介绍SPPNet的模型结构,说明SPPNet的Caffe代码,并分析SPPNet的大规模图像分类案例。

第6章为卷积神经网络的加深模型。主要介绍VGGNet和GoogLeNet的模型结构,说明它们的TensorFlow代码,并分析VGGNet的物体图像分类案例和GoogLeNet的鲜花图像分类案例。

第7章为卷积神经网络的跨连模型。主要介绍快道网络、残差网络、密连网络和拼接网络。对于快道网络,只描述了模型结构。对于其余3个网络,还说明了核心模块的Caffe代码实现。此外,还分析了残差网络的大规模图像分类案例、密连网络的物体图像分类案例,以及拼接网络的人脸图像性别分类案例。

第8章为卷积神经网络的区域模型。主要介绍区域卷积神经网络、快速区域卷积网络、更快速区域卷积网络、你只看一次网络和单次检测器。对于前两个网络,只描述了模型结构。对于另外3个网络,还说明了它们的TensorFlow代码,并分析了它们在VOC 2007数据集上的图像目标检测案例。

第9章为卷积神经网络的分割模型。主要介绍全卷积网络、金字塔场景分析网络和掩膜区域卷积网络的模型结构,说明它们的Caffe或TensorFlow代码,并分析它们的图像语义分割、图像几何分割或图像实例分割等应用案例。

第10章为卷积神经网络的特殊模型。主要介绍4种模型,包括孪生网络、挤压网络、生成对抗网络和网中网。不仅给出了它们的模型结构,说明了它们的Caffe或TensorFlow代码,也分析了它们的手写数字验证、大规模图像分类或人脸图像生成等应用案例。

第11章为卷积神经网络的强化模型。主要介绍深层强化学习的标准模型、学习算法和变种模型,并分析一个笨笨鸟Flappy Bird智能体的游戏应用案例。

第12章为卷积神经网络的顶尖成就AlphaGo。主要介绍AlphaGo的设计原理和AlphaGo Zero的新思想,并分析一个仿效围棋程序MuGo的游戏应用案例。1.7.2 案例数据

各章在介绍卷积神经网络的变种模型时,一般还给出了有关的应用案例。这些案例可能重复用到13个不同的数据集(大小信息和下载网址详见表1.2),分别是:MNIST(Mixed National Institute of Standard and Technology)、GTSRB(German Traffic Sign Recognition Benchmark)、RRSI(Road Remote Sensing Image)、ImageNet 2012、CIFAR-10、Oxford-17、AR、VOC 2007、SIFT Flow、ADE20K、COCO(Common Objects in Context)2014、CelebA和Gamerecords。表1.2 案例数据的信息描述和下载网址

下面依次对每个数据集进行详细介绍。

1)MNIST是一个著名的手写数字数据集(如图1.9所示),包括60000个训练样本,10000个测试样本。其中,每个样本图像的大小为28×28像素,仅包含一个单一的手写数字字符。像素的取值范围是[0,255],其中0表示黑,255表示白,中间值表示灰度级。本书在第3章和第10章使用了MNIST数据集。图1.9 MNIST 的手写数字图像举例

2)GTSRB是一个德国交通标志数据集(如图1.10所示)。其中有两套训练集和测试集,都包含43类交通标志。一套有39209个训练样本和12630个测试样本,另一套有26640个训练样本和12569个测试样本。本书在第3章的交通标志识别案例中选用了前一套训练集和测试集,但从中去掉了少量样本,只用了39200个训练样本和12600个测试样本。GTSRB的图片格式是.ppm类型,大小在15×15到250×250之间不等,每个样本的长宽、兴趣区和标签等注释信息存放在相应的.csv文件中。为了便于处理,需要把它们的格式先转换成.jpg图像类型,并归一化为32×32像素大小。图1.10 GTSRB的交通标志图像举例

3)RRSI是一个交通路网遥感图像的数据集(如图1.11所示)。交通路网是指公路、城市道路和单位管辖范围允许社会机动车通行的地方,包括广场、公共停车场等用于公众通行的场所。RRSI实际上共有30幅大小不等的图像和2种标注。本书在第3章选用了11幅来训练,5幅来测试,进行路网自动提取。图1.11 RRSI的交通路网遥感图像举例

4)ImageNet是一个拥有超过1500万幅图像、约22000个类别的数据集(如图1.12所示),可用于大规模图像识别、定位和检测的研究。本书在第4章、第5章、第7章和第10章使用了2012年大规模图像视觉识别比赛(Large Scale Visual Recognition Competition,ILSVRC)的数据集ImageNet(即ImageNet 2012)设计图像分类案例。ImageNet 2012包含1281167幅训练图像和50000幅测试图像,共有1000个类别。训练集中各类图像的数目可能不同,最少为732幅,最多为1300幅。而测试集中各类图像的数目都是50幅。图1.12 ImageNet 2012的物体图像举例

5)CIFAR-10是一个常见物体图像数据集(如图1.13所示),分为10个类别,包含60000幅32×32的彩色图像,50000幅用于训练,10000幅用于测试。注意:根据表1.2中的网址下载的CIFAR-10是经过封装的,有3个版本:Python、Matlab和Binary。本书在第6章和第7章选用了Binary版本。图1.13 CIFAR-10的物体图像举例

6)Oxford-17是一个鲜花图像数据集(如图1.14所示),其中包含1360幅图像,分为17类,每类80幅图像,大小不尽相同。本书在第6章随机选了1088幅图像作为训练集,其余272幅图像作为测试

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载