深度学习与计算机视觉:算法原理、框架应用与代码实现(txt+pdf+epub+mobi电子书下载)


发布时间:2020-06-24 11:45:27

点击下载

作者:叶韵

出版社:机械工业出版社

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

深度学习与计算机视觉:算法原理、框架应用与代码实现

深度学习与计算机视觉:算法原理、框架应用与代码实现试读:

前言

为什么要写这本书

当本书编辑找到我时,我才意识到,这两年火爆程度堪比一线城市房价的深度学习,在国内竟没有几本专门的中文书籍。目前市场上为数不多的有关深度学习的中文书,有大而全的名家之作,但其中关于深度学习的内容只有很少的一部分;有针对框架的工具书,但其偏重框架本身,缺少基础知识和理论,就好像介绍了一把剑,却没教剑法;有科普型的书,主要作用是提振读者自信,其实读者并不能从中学到任何动手能力。最重要的是,作为深度学习被应用最多,也是最有趣的领域——计算机视觉,却没有专门的书,这是笔者编写这本书的初衷。

我并非计算机科班出身,在转向深度学习的过程中遇到了很多问题,总结了许多经验。从写书的角度来讲,这没准是个优势。希望我在业界实际项目中的经验,加上自学时总结的教训,可以有效地帮助尚未进入深度学习和计算机视觉领域的读者。

本书面向有志于进入深度学习和计算机视觉领域的学生和技术研发人员,通过介绍深度学习及计算机视觉中最基础的知识,并结合最常见的应用场景和大量实例,带领读者进入丰富多彩的计算机视觉领域。作为一本“原理+实践”教程,本书用最基本的公式推导加上大量的配图和实例代码,给读者生动的内容,而不是枯燥的原理堆砌。本书特色

·注重原理和上手实战。力求读者在阅读本书后,不仅能了解常见算法背后的思想,还能具备独立开发常见的基于深度学习的计算机视觉算法的能力。

·原理讲解通俗易懂。本书能通过文字定性讲解的就不用计算和公式,能用图表述的就不用文字。公式虽然不可避免,但尽量做到公式是讲解和图示的辅助,而不是需要细致理解的部分。

·大量原创代码和图示。本书结合作者在实际工作中的经验,将入门实战的例子和其他示例力求做到实用性和趣味性并存,并将代码分享到本书的github页面上供读者下载。本书的github页面地址为https://frombeijingwithlove.github.io/dlcv_for_beginners/。本书内容

本书共13章,分为2篇。

第1篇 基础知识

第1章从历史讲起,介绍了深度学习和计算机视觉的基础概念和常见应用。

第2章介绍了最基础的数学知识,包括线性代数、概率、高维空间、卷积和数学优化。

第3章以神经网络为重点,讲解了机器学习和数据的基础知识。

第4章在第3章的基础上,介绍了卷积神经网络的概念、原理和一些常见结构。

第2篇 实例精讲

第5章介绍Python基础,并通过小例子介绍了NumPy和matplotlib的基本使用。

第6章介绍了基于Python的OpenCV使用,并动手实现了数据增加小工具和物体框标注小工具。

第7章分别通过MXNet和Caffe实现了最简单的神经网络,以及结果的可视化。

第8章从头开始一步步基于MNIST数据集,分别实现了基于MXNet和Caffe的卷积神经网络模型用于手写数字识别,并介绍了如何测试和评估模型。

第9章实现了一个基于Caffe的用卷积神经网络做回归的例子,并介绍了如何制作HDF5格式数据,如何用GPU批量对数据进行运算,以及如何实现可视化训练的模型。

第10章首先实现了一个图片爬虫用于搜集图片数据,并以美食图片分类为例子一步步讲解如何基于Caffe实现迁移学习。然后在此基础上进一步讲解了如何对数据进行预处理,如何使用混淆矩阵、P-R和ROC曲线,最后介绍了如何实现可视化卷积神经网络对输入图片的响应。

第11章针对R-CNN系和YOLO/SSD系这两类算法,简要介绍了基于深度学习的目标检测算法的发展史,并给出了基于MXNet的SSD检测算法实例,以及分析了结果的可视化。

第12章介绍了度量学习的基本概念,并从图片开始,一步步实现了基于Caffe的Siamese网络,还实现了基于τ-SNE的结果可视化。

第13章讲解了最基本的图像风格迁移算法,并给出了基于MXNet的图像风格迁移例子,读者可以用自己喜欢的图片做出算法生成的艺术作品。适合阅读本书的读者

本书适合以下读者阅读:

·对人工智能、机器学习感兴趣的读者;

·对深度学习和计算机视觉感兴趣的读者;

·希望用深度学习完成设计的计算机或电子信息专业的学生;

·讲授机器学习和深度学习实践课的老师;

·希望进一步提升编程水平的开发者;

·机器学习与机器视觉研发人员和算法工程师;

·人工智能产品经理。

阅读本书的读者最好具备以下要求:

·至少具备高中以上的数学基础,本科以上最佳;

·具备基本的编程能力;

·了解Linux的基本使用;

·拥有一台NVIDIA显卡的计算机,最好是2GB以上的显存。

本书虽然定位为入门书,但并不能保证21天或者3个月包会。学习是一件没有捷径可走的事情,希望本书能帮助读者少走弯路,也希望每一位读者翻开书前,都是带着好奇和兴趣。纠错

由于是第一次写书,且时间仓促,错误之处估计难以避免,敬请读者朋友们发现错误后到本书的github页面指出,我会尽快更新在勘误表里,不胜感激!本书作者

本书由叶韵主笔编写。其他参与编写的人员有张昆、张友、赵桂芹、晁楠、高彩琴、郭现杰、刘琳、王凯迪、王晓燕、吴金艳、尹继平、张宏霞、张晶晶、陈冠军、魏春、张燕、范陈琼、孟春燕、王晓玲、顼宇峰、肖磊鑫、薛楠、杨丽娜、闫利娜、王韶、李杨坡、刘春华、黄艳娇、刘雁。致谢

成书过程中,得到了很多人的帮助,在此向他们表示诚挚的谢意。

首先感谢负责本书的编辑,我既不是大V,博客文章也没几篇,是他们的信任让我能通过这次写作梳理知识,并获得稿费。

感谢我的朋友们:NVIDIA(英伟达)的高级工程师华远志,谷歌的软件工程师吕佳楠,清华大学的马晨同学,NVIDIA的高效GPU架构师欧阳晋博士,西门子的高级研究员田疆博士,理光软件研究院的研究员钟诚博士和亚马逊的科学家庄晓天博士。他们几位在成书过程中给予了我很多帮助和建议,特别是田疆博士、钟诚博士和欧阳晋博士,对本书内容给出了全面且独到的建议,并指出了部分错误。

感谢京东从事AI方向的同事们,他们各个都身怀绝技,工作中和他们的交流给了我很多技术上的帮助和灵感。

感谢插画师翟少昂为本书绘制插画,感谢星河互联高级投资经理杨森授权本书使用他于漠河的严冬中拍摄的照片。

感谢我的博士生导师Yu Cao教授和我第一家效力公司的CTO——Bruce McGaughy博士。在应试教育的影响下,我浑浑噩噩求学近20载,未曾找到学习的意义。和他们二位接触的过程中我才渐渐明白,原来学习最重要的是兴趣。也因此,后来我才有勇气放弃了钻研了近10年的老本行,转向自己更感兴趣的算法和机器学习。

最后也是我最想感谢的,是我的家人!写书期间我的家人承担了一切家务劳动,是他们全方位的支持和细致照顾,让我在身体健康的状态下完成了写作。特别是我的妻子,尽管她看不懂我在写什么,却认为写得很棒。是她每天的鼓励和支持才让我没有半途而废,能在此表达我对她的谢意,是我完成这本书的最大动力。叶韵于北京市西郊机场老干部活动中心第1篇基础知识·第1章 引言·第2章 深度学习和计算机视觉中的基础数学知识·第3章 神经网络和机器学习基础·第4章 深度卷积神经网络第1章引言

What magical trick makes us intelligent?The trick is that there is no trick.The power of intelligence stems from our vast diversity,not from any single,perfect principle(是什么魔法让我们拥有智能?其实并没有魔法。智能的力量来源于多样性,而非任何一个完美的原理)。——Marvin Minsky1.1 人工智能的新焦点——深度学习

深度学习并不是什么复杂神秘的新方法,本节将带领大家一起去了解深度学习的前世今生。1.1.1 人工智能——神话传说到影视漫画《荷马史诗》和希腊神话中曾记载,火神赫菲斯托斯(Hephaestus)是一名精通工匠技巧且很土豪的神。他用金子制造机器人作为助手和佣人,用金和银造出了不死猎犬保卫阿尔喀诺俄斯(Alcinous)的宫殿。他造的一套带黄金轮子的三脚桌可以在诸神开会的时候随叫随到,会议结束再自己跑回来。后来不知是不是超出了预算,他没再用黄金而是用铜造出了巨大的机器人塔洛斯(Talos)用来保卫克里特王国。《列子·汤问》中记载过,西周时期,有一名顶级的工匠叫偃师,周穆王西巡返途中召见了他,他把自己制造的文艺机器人带上去见周穆王。这个机器人能歌善舞,以假乱真,甚至还会在表演中向围观的美女抛媚眼。周穆王大喜,说:“人之巧乃可与造化者同功乎!”然后把这个机器人没收了。

我们无从追溯人们到底是什么时候产生了制造机器模仿人类的想法。但是从古时候的传说就可以知道,几千年前人们已经开始思考这件事情,那时也许人们自己都没有一个明确的概念。斗转星移,到了20世纪,伴随着电子计算机的出现,曾只存在于传说中的拟人机器人似乎离现实近了一步。在大众眼中,人工智能也从神话、历史中走进了电影、小说和漫画中。有代表性的机器人如《星球大战》的R2-D2、《瓦力》和《超能查派》,互联网属性很强的《终结者》中的天网,《黑客帝国》的母体(Matrix)和《超验骇客》,还有源于动漫的《变形金刚》等。在这些文化的影响下有人甚至开始担心AlphaGo都战胜了李世石,那么下一步人工智能会不会威胁人类(如图1-1所示)?图1-1 想象中拥有智能的巨大机器人(插画:翟少昂)1.1.2 人工智能的诞生

前面所说的毕竟是传说和电影。我们来看看现实中的人工智能。人工智能的正式概念是在1956年被提出来的。那年秋天,4个重量级科学家齐聚在后来成为美国常春藤联盟之一的达特茅斯(Dartmouth)学院。他们分别是:达特茅斯学院数学系助理教授,后来的图灵奖得主约翰·麦卡锡(John McCarthy);哈佛大学数学和神经科学研究员,同样是后来的图灵奖得主马文·明斯基(Marvin Minsky);IBM第一台商用科学计算机的主设计师内森奈尔·罗彻斯特(Nathaniel Rochester);还有当时就已经德高望重的贝尔实验室研究员,后来被称为信息论之父的克劳德·香农(Claude Shannon)。与会的还有其他几位顶尖的科学家和工程师。不过正式书面提出人工智能(Artificial Intelligence)这个词,是见于以约翰·麦卡锡为主,和另外三位作者联名发表的关于第二届达特茅斯会议的计划书《A Proposal for the Dartmouth Summer Research Project on Artificial Intelligence》。研讨会的计划书是1955年写的,也就是说那个时候人工智能这个词就已经被约翰·麦卡锡提出了。研讨会是1956年召开的,这一年,就成了人工智能元年。

人工智能的概念是从1956年开始。而在此之前早就进行了许多奠基性的工作,比如冯·诺依曼提出的冯·诺依曼体系,以及随后电子计算机的诞生,让工具计算的性能有了质的飞跃,计算理论的实践也蓬勃发展。到了1955前,已经出现了IBM 701这样的商用科学计算工具。1949年,诺伯特·维纳(Norbert Wiener)提出了著名的控制论。控制论的发展为后来人工神经网络的研究奠定了重要的理论基础。20世纪50年代,在电子计算机的辅助下,对基于符号系统进行推理和演算的研究也在迅速发展。艾伦·纽厄尔(Allen Newell)和赫伯特·西蒙(Herbert Simon)在当时是这个领域的活跃研究者,他们于1955年开发的程序证明了《数学原理》中前52个定理中的38个。后来这两人也在1956年参加了达特茅斯会议,并且之后来他们一同获得了图灵奖。赫伯特·西蒙还多得了一个诺贝尔奖。1950年,被誉为计算机科学之父的阿兰·图灵(Alan Turing)发表了那篇提出了图灵测试的著名论文《Computing Machinery and Intelligence》。1951年,英国科学家克里斯托弗·斯特雷奇(Christopher Strachey)在曼彻斯特大学的Ferranti Mark 1编写了第一个人工智能的西洋跳棋程序。同年,迪特里奇·普林茨(Dietrich Prinz)在这台计算机上编写了人工智能国际象棋程序。随后的一年,IBM的亚瑟·塞缪尔(Arthur Samuel)把西洋跳棋的棋力提高到了业余高手的水平。还有许多其他领域的工作,如神经科学、心理学等,都为人工智能的正式出现做了铺垫。除了上面说到的,还有一个领域的工作在20世纪30年代至50年代这段时间迅猛发展起来,这个领域的研究后来成为了深度学习的基础,那就是神经网络。

关于图灵测试介绍如下。

在图灵的论文《Computing Machinery and Intelligence》中,第6部分第2节正文中提到“I believe that in about fifty years’time it will be possible,to programme computers,with a storage capacity of 9about 10,to make them play the imitation game so well that an average interrogator will not have more than 70percent chance of making the right identification after five minutes of questioning.”简单来说,就是让计算机玩一个模仿游戏,一个提问者向一个被提问者,和模仿这个被提问者的计算机提问。如果5分钟内被提问者和计算机的回答有大于30%让测试者无法判定是人还是机器的作答,就认为计算机通过了测试。这就是著名的图灵测试。其实看了原文的话,会发现图灵只不过是举了个例子说明他对人工智能发展的预期而已……

2014年的时候,英国雷丁大学宣布,俄罗斯人弗拉迪米尔·维谢洛夫(Vladimir Veselov)编写的尤金·古斯特曼(Eugene Goostman)程序通过了图灵测试。这说明人工智能被实现了吗?当然不是。首先通过了图灵测试并不代表着拥有了人工智能。其次这次测试中的被模仿者是个13岁的乌克兰小男孩,母语还不是英语,这也太草率了。1.1.3 神经科学的研究

让我们把时间再回退几个世纪。那个年代不要说人工智能,连人的智能是如何工作的人们都不甚清楚。虽然早在17世纪的时候笛卡尔(RenéDescartes)就提出了大脑是精神和意识的居所,而到了18世纪末的时候,因为研究手段的限制,人们对大脑运作细节的认识还处在依靠表象和经验的状态。当时德国的一位解剖学家弗朗兹·约瑟夫·加尔(Franz Joseph Gall)提出一种学说叫颅相学。简单来说就是颅骨的外形结构与大脑结构相关,所以通过观察头骨的外形特征就能判断一个人的性格。有没有觉得和中国的看相算命先生有些类似?这个理论在19世纪初风靡了欧美,尤其是得到了很多上流社会人士的认可。

颅相学虽然不是一个靠谱的学说,但是却对19世纪的脑科学产生了重大影响,由此开启了人们对大脑是如何影响心智的大量研究。到了1973年,意大利解剖学家卡米洛·高尔基(Camillo Golgi)发明了铬酸盐-硝酸银染色法,并第一次借助这个方法在显微镜下观察到了神经细胞的结构。1903年,西班牙科学家圣地亚哥·拉蒙·卡哈尔(Santiago Ramóny Cajal)改良了高尔基染色法,首次观察到了神经细胞里更细微的结构,并于1904年发表著作确立了神经元学说。其中提出的神经活动的基本原则,成了后来启发人工神经网络理论的仿生基础。下面一起来看看图1-2中的神经元的结构示意图。图1-2 神经元的结构示意图(插画:翟少昂)

一个神经元中在细胞周围会有多个呈放射状、杂乱而粗短的突起结构,称为树突。每个神经元会有一个细长而均匀的突起结构,称为轴突。轴突的末端有许多分支,被称为轴突末梢。每个神经元从树突接收输入的信号,当某一时刻累计的信号超过某一个阈值时,通过轴突释放传出。轴突末梢连接其他神经元的树突,形成一个复杂的网络。1.1.4 人工神经网络的兴起

1943年,美国神经生理学家沃伦·麦克洛奇(Warren McCulloch)和逻辑学家沃尔特·匹茨(Walter Pitts)一起提出了一种简单的计算模型来模拟神经元,我们把这种模型称为M-P模型,其形式如图1-3所示。图1-3 M-P模型

M-P模型的论文是人类历史上第一次对人工神经网络的系统性研究。在M-P模型中,所有的值都是0和1,所有输入节点模拟神经元的树突,输入信号的求和通过一个阈值θ比较决定输出值来模拟信号的输出。M-P模型表达成公式的形式如下:

可以看出,M-P模型中所有的值都是0和1,可以用来模拟最基本的二进制逻辑。然而这也成了M-P模型的局限性,即只有用于模拟信号电平的二值(0和1),并且每个输入信号的权重都是一样的。1949年,加拿大心理学家唐纳德·赫布(Donald Hebb)提出了赫布学习(Hebbian Learning)规则。大意是神经系统响应一个信号时,同时被激活的神经元之间的联系会被强化。以这种规律为基础,赫布将神经元之间连接的强弱以权值的方式引入了计算模型,并且提出了一套修改权值的规则让模型可以“学习”。在M-P模型的基础上和赫布学习规则的启发下,1956年,美国心理学家弗兰克·罗森布拉特(Frank Rosenblatt)提出了著名的感知机(Perceptron)。这种模型不仅在M-P模型基础上加入了权值,并且跳出了二值的限制,最重要的是,罗森布拉特给出了这种模型的权值修改方法:通过公式记录感知器对训练数据的正确率,然后根据正确率对权值进行更新。这样就相当于感知机进行了针对某个数据任务的“训练”。不过总体而言这种“训练”是半手动的,非常低效。感知机提出后,罗森布拉特用硬件电路做了简单的实现,并且完成了一些在那个年代非常激动人心的任务,如通过光传感器阵列来模拟视网膜并识别一些简单的字母。

Tips:感知机的结构非常简单,相比起M-P模型更加灵活,后来成为了人工神经网络的基础,关于感知机的细节和作用将留在第3章详细讨论。

前面已经提到过维纳发表的控制论对人工神经网络的研究有重要的影响。提出M-P模型的麦克洛奇和匹茨在麻省理工学院(MIT)时都是维纳的小弟,匹茨还曾是维纳的特招生,然后就是在他们的基础上提出感知机的罗森布拉特,这几位在当时是神经网络研究的代表人物,尤其是罗森布拉特,在感知机发表后不遗余力推广神经网络,于1962年还出版了一本书《Principles of Neurodynamics:Perceptrons and The Theory of Brain Mechanisms》,系统地总结了自己对神经网络的研究。那时第一次神经网络的研究热潮达到了巅峰,罗森布拉特拿各种科研资金拿到手软。1.1.5 神经网络的第一次寒冬

当时在人工智能领域除了以罗森布拉特为首的山寨大脑神经元结构的连接主义(connectionism)外,还有另一个流派,他们推崇的是从逻辑和思维的角度出发,把思维分解成一个个可以用符号操作表示的单元,这一派称为符号主义(Symbolism),更偏向于推理和逻辑。有人的地方,就有江湖。作为当时人工智能领域最大的两个流派,他们并没有和平相处。符号派的代表人物是人工智能的奠基人之一,也是前面提到过的达特茅斯会议的组织者之一马文·明斯基。明斯基事实上最早是连接主义学派的,1954年他在普林斯顿的博士毕业论文题目是《Theory of Neural-Analog Reinforcement Systems and Its Application to the Brain Model Problem》。在第一次达特茅斯会议上他也是连接主义的支持者,后来才转向了符号主义,并成为了领袖级的人物。明斯基和罗森布拉特在高中时期就是师兄弟,不知是不是那个时候就结下了“梁子”,在他们的研究生涯中,这两人总是互相怀有敌意。

这两派的斗争在1969年暂时分出了高下,明斯基在那一年出版了一本《感知机:计算几何学》书(Perceptrons:An Introduction to Computational Geometry),这本书看标题是讲感知机,但是真正产生影响的内容是书中对感知机限制的描述。在那个年代,机器的计算能力还非常有限,所以多层的感知机网络(如图1-4所示)的计算是不实际的。而单层感知机的表达能力又非常有限,明斯基在书中用单层感知机不能解决异或逻辑的例子指出了感知机在实用层面的局限性,并断定感知机的研究没有前途。除了对感知机局限的理性论述,这本书中还用一些非常刻薄的语句来攻击相关研究,如在第一版序言中所写“大部分关于感知机的研究都是没有科学价值的”(Perceptrons have been widely publicized as"pattern recognition"or"learning"machines and as such have been discussed in a large number of books journal articles and voluminous"reports".Most of this writing...is without scientific value)。1969年是个非常微妙的时间点,距感知机的大红大紫已经过去了近10年,却并没有出现之前预期中令人激动的成果,相关研究的进展也越来越慢。明斯基作为人工智能领域的泰斗之一,他对神经网络了如指掌,在这个时间点发布了这样一部直指连接主义缺陷的著作,这对连接主义学派而言无疑是一个致命的打击。随着明斯基著作的发表,许多学者纷纷离开神经网络的研究领域,很多政府资助也被停止。神经网络的研究走入低谷,迎来了第一次寒冬。事实上,研究者和资金的撤离不仅仅限于神经网络方向,而是整个人工智能领域。因为无论是人工智能领域的哪个学派,在人工智能刚开始蓬勃发展的时候都对这个领域做出了过于乐观的预期,而随着时间的推移,研究的进展并没有达到研究者和媒体渲染的那样。伴随神经网络寒冬一同陨落的还有罗森布拉特本人。1971年7月11日,罗森布拉特在43岁生日的当天,在美国东海岸的切萨皮克湾(Chesapeake Bay)泛舟时不幸遭遇事故丧生。图1-4 一个多层感知机/神经网络结构示意1.1.6 神经网络的第一次复兴

在沉寂了近10年之后,神经网络的研究又开始慢慢复苏。1982年,加州理工的生物物理学家约翰·霍普菲尔德(John Hopfield)提出了一种反馈型神经网络,即Hopfield网络。和Hebbian学习规则一样,Hopfield网络提出的最初目的是偏向于神经学科,用于研究记忆的机制,而结果是这种网络成功地解决了一些识别和约束优化的问题,引起了很大的反响。这让神经网络领域的连接主义研究者们非常振奋,渐渐地许多研究者又将目光再次移向了神经网络。同时一些新的研究中心建立起来,并开始吸引许多老一辈的神经网络研究者和后起之秀。这其中就有后来的深度学习“祖师爷”之一的杰弗里·辛顿(Geoffrey Hinton)。

在第一次神经网络的寒冬开始时,辛顿刚刚开始读研究生。凭借着对神经网络的浓厚兴趣,他并没有在这段寒冬岁月放弃对神经网络的研究。到了1978年,他在爱丁堡大学完成了博士学习,然后历经辗转,于1980年到了美国加州大学圣迭戈分校(UCSD)攻读博士后。那时UCSD正走在连接主义学派复兴的前沿,其中两位代表人物是两位心理学家大卫·鲁梅哈特(David Rumelhart)和詹姆斯·麦克利兰德(James McClelland)。在那里辛顿加入了UCSD认知科学中心的研究小组,并与鲁梅哈特和麦克利兰德建立了良好的合作。两年后辛顿到了卡耐基梅隆大学,于1986年和鲁梅哈特合作发表了论文《Learning Representations by Back-Propagating Errors》,提出了后向传播算法(Back Propogation,简称BP算法,关于该算法更详细的内容将于第3章进行介绍)。BP算法解决的正是明斯基在《感知机:计算几何学》中指出的双层网络难以训练的问题。BP算法使一层以上的神经网络进入实用阶段,开启了第二轮神经网络的研究热潮。1987年,鲁梅哈特转到了斯坦福大学当教授,在这里他培养出了后来的机器学习大神,继承了他图论造诣的迈克尔·乔丹(Micheal Jordan)。而乔丹后来的学生里又出现了两个深度学习的代表人物,一个是博士生吴恩达(Andrew Ng),还有一个是博士后,即后来深度学习创始人之一约书亚·本吉奥(Yoshua Bengio)。

再来看辛顿,在祭出了复兴神经网络的“大杀器”BP算法后,又几经辗转,于1987年到了多伦达大学当教授。在这里他又遇到了后来深度学习的又一个始祖级人物杨乐昆(Yann LeCun),杨乐昆出生于法国,并在那里完成了博士的所有学业。就在辛顿到了多伦多的同一年,他也来到了多伦多大学,成为辛顿组里的一名博士后。在那里他做了一些关于BP算法的理论研究,并在一年后加入了贝尔实验室(AT&T Bell Lab)。在贝尔实验室,基于后向传播算法,杨乐昆提出了后来名满天下,第一个真正意义上的深度学习,也是目前深度学习中应用最广的神经网络结构——卷积神经网络(Convolutional Neural Networks)。卷积神经网络在当时就对手写字母达到了很高的识别率,并被广泛应用于欧美许多大银行的自动手写识别系统。更多关于卷积神经网络的细节会在第4章详细介绍。

1989年,美国应用数学家乔治·塞班克(George Cybenko)证明了神经网络可以被看作是一个通用逼近函数,一个隐藏层的网络可以逼近任意连续函数,两个隐藏层的网络可以逼近任意函数。这个理论在后来又被奥地利数学家科特·霍尼克(Kurt Hornik)完善,也就是说神经网络的拟合能力是接近无限强的,任意复杂的分类决策边界都可以被逼近,至此神经网络的研究又进入了一个新的高潮。1.1.7 神经网络的第二次寒冬

虽然BP算法将神经网络带入了实用阶段,可是当时的神经网络仍然存在一些缺陷。首先是神经网络的层数,随着研究的深入,人们发现BP算法的一个缺点是梯度计算存在不稳定的问题。简单来说就是越远离输出层的参数越难以被训练,要么会不变,要么会变化过于剧烈,这被称为梯度消失/爆炸问题,而且层数越多,这个问题越明显。说到这里又要引出一个深度学习的始祖级人物,现居瑞士的德国计算机科学家尤尔根·施米德休(Jürgen Schmidhuber),梯度传播中的消失/爆炸问题正是由他的第一个学生赛普·霍克莱特(Sepp Hochreiter)在毕业论文中第一次正式提出并讨论。不知道是不是因为住的离美国太远,提到深度学习的时候人们往往提到的是和他贡献差不多的另外三巨头辛顿、杨乐昆和本吉奥。而实际上在深度学习领域施米德休也是举足轻重的,他从20世纪90年代就开始研究深度神经网络,从时间上来看他和杨乐昆应该是最早研究深度学习的两个人。他提出的长短期记忆网络(Long-Short Term Memory,LSTM),在语音识别和自然语言处理领域产生了巨大的影响。2016年初靠着AlphaGo大红大紫的公司DeepMind里也有两个创始人都是他的学生。言归正传,一方面BP算法只对浅层网络有效,另一方面两三层的神经网络就已经有了足够强的拟合能力,所以当时应用层面的研究很多都集中在浅层神经网络,对深层网络的了解总体而言知之甚少。

除了浅层的限制,参数过多也成了神经网络被诟病的问题之一。针对一些识别问题,因为底层细节的不直观和过于强大的拟合能力,再加之那个年代很多问题的训练数据量都不大,神经网络的泛化能力确实有隐患,所以很多人认为神经网络就是某种程度上的过拟合,甚至今天很多人还是对深度学习抱有类似的观点。神经网络的调参也是个巨大的问题,因为神经网络的结构让使用者并不关注细节,而只需要关注输入输出,选择诸如隐层数、单元数等参数往往会显得有些无迹可寻,相关的理论研究也乏善可陈,所以调参往往成了一项经验活。另外相对应大量的参数也对计算机的算力提出了要求。除了参数相关的问题,因为BP算法本身依赖于梯度,所以训练陷入局部最小值也成了神经网络的一个大问题。

进入20世纪90年代中期,神经网络的发展又进入了一个相对缓慢的阶段,而那时,一个机器学习领域内的“大神”杀了出来,他就是支持向量机(Support Vector Machine,SVM)的提出者,统计学家弗拉基米尔·万普尼克(Vladimir Vapnik)。万普尼克也是第一批从事人工智能的老一辈研究者,在感知机风靡的年代,他也在那股热潮下做了很多研究,并于1963年提出了原始的SVM。不过那个时候他的SVM和感知机差别并不大,再加上他人在莫斯科,没有产生大的影响。在随后的岁月里,万普尼克一直在莫斯科控制科学研究所潜心研究偏理论的方向,一直做到了研究所计算机部门的老大。1990年,前苏联动荡,万普尼克移居美国加入了贝尔实验室,成了杨乐昆的同事。1995年,万普尼克正式提出了统计学习理论,并将该方法应用到了SVM。虽然广义上来讲,SVM也是个浅层网络,但相比当时其他浅层神经网络,SVM拥有全局最优、调参简单、泛化能力强等优点,并且还有完善的理论支撑。更重要的是,SVM诞生后,在当时的一些诸如手写体识别的问题上一举击败了其他各种浅层神经网络,迅速成了研究的主流。就这样,神经网络进入了第二次寒冬。1.1.8 2006年——深度学习的起点

在科研领域总是有这么一些人,无论热点和资金在哪,他们都不会动摇。在第二次神经网络的寒冬到来时,辛顿、杨乐昆、本吉奥和尤尔根等仍然坚持着神经网络的研究。到了21世纪初的时候,随着随机森林(Random Forest)和AdaBoost等方法的兴起,神经网络研究的处境更是雪上加霜,根据辛顿和杨乐昆的回忆,那个时候他们的学生完成的和神经网络沾边的文章被拒是家常便饭。其实和SVM等方法比起来,神经网络有一个非常大的优点即分布式表征(Distributed Representation。关于分布式表征的更详细内容将在第4章进行介绍)。在浅层神经网络中,虽然这个优点也有,但并不容易体现出来,所以一个重要的努力方向是克服BP算法的误差传播问题,将网络变得更深。1997年,尤尔根提出了LSTM,在一定程度上解决了BP算法中的误差传播问题,形成了一定的影响,但受到计算能力等因素的影响,当时并没有流行起来。到了2004年,神经网络方向的研究进入了最低谷,这年辛顿的重要资金来源加拿大高等研究所(Canadian Institute For Advanced Research,CIFAR),又到了评审项目资助的时候。因为神经网络的颓势,CIFAR在当时已经是极少数还愿意支持神经网络相关研究的机构,当时除了辛顿以外所有其他的受资助人都在做其他方向的研究。在这种举步维艰的情况下,辛顿终于还是成功说服CIFAR的评审委员,拿到了一笔不大的资助让研究得以维持。在这笔资助下,经过两年的卧薪尝胆,辛顿在2006年发表了一篇突破性的文章《A Fast Learning Algorithm for Deep Belief Nets》,这篇论文里辛顿介绍了一种成功训练多层神经网络的办法,他将这种神经网络称为深度信念网络。深度信念网络的基本思想是用一种叫受限波尔兹曼机(Restricted Boltzmann Machine,RBM)的结构得到生成模型(Generative Model)。受限波尔兹曼机的结构如图1-5所示。图1-5 受限玻尔兹曼机结构示意

要注意的是,和常见的神经网络不同,RBM的结构是无向图,本质上讲是一个马尔科夫随机场。因为RBM的应用和本书关系不大,所以这里并不会深入RBM的细节。简单来理解,可以把RBM看作一个输入+单隐层的网络,层内无连接,层间是全连接。其中图1-5中的单元名称为v的是输入层,对应观测(visible)到的数据,h的一层对应于隐(hidden)变量。训练RBM的效果是可以让网络学习及产生输入数据,也就是v的分布。

对于深度神经网络而言,RBM的原理可以简单理解如下:首先学习大量无标注数据,然后在隐藏层提取出数据的特征,而这个特征就可以重现数据的分布。如果隐层单元数量远小于可见单元的数量,则相当于降维,如果隐层单元大部分都是0,则相当于学习到了稀疏的表示。而当这样的结构学习到之后,就有了每个连接的权重,这时候把RBM的结构当作有向图来使用,就相当于得到了一个最简单的神经网络,并且学到了一层特征。而如果接下来继续这个过程,把学到的特征作为另一个RBM的输入进行学习,则相当于又学到了更加高层的表示,于是一层层堆起来就成了一个深层的网络,也就是文章标题里提到的深度信念网络(DBN)。这样一个网络已经有了学习到的权重,可以看作是对网络一个非常好的初始化,这个过程叫做预训练(pre-train)。然后再按照传统的BP算法,结合标注的数据对这个网络进行训练,此时预训练的权重相当于把网络初始化到了一个很好的起点上,所以BP算法只需要进行局部的搜索就可以收敛到一个不错的结果,这个BP算法训练过程也叫做微调(finetune)。

无论是RBM,还是这种一层层训练的办法,在今天的大部分深度学习应用中看来已经没什么特别的优势。但当时这个办法颠覆了之前被学术界大部分人默认的深度网络不能被训练的观点。另外,还有可以利用无标注数据的优点。更重要的是,DBN一出,立刻在效果上打败了风光已久的SVM,这让许多研究者的目光重新回到了神经网络。与辛顿发表论文的同一年,本吉奥和杨乐昆也在之后的神经信息处理系统会议(Conference on Neural Information Processing Systems,NIPS)上发表了两篇深度网络的论文。一篇探讨了辛顿的方法并比较了基于自编码机(auto-encoder)的深度网络,一篇讨论和辛顿方法类似的办法,用于初始化卷积神经网络,并在手写数字识别上达到了当时最好的效果。这三篇论文算是重振神经网络的开山之作,而这三位研究者现在也是领域内公认的三巨头。可能是之前神经网络不招人待见的经历让辛顿郁闷了太久,所以当初他拿到CIFAR资助的时候就给接下来的研究想了一个新的名字——Deep Learning,于是深度学习正式登场。

TIPS:Deep Learning的来源

Deep Learning并不是2006年才出现的新词,最早正式在学术刊物里出现是1986年。加州大学尔湾分校(University of California,Irvine)计算机系的教授丽娜·德科特(Rina Dechter)在发表的论文《Learning While Searching in Constraint-Satisfaction Problems》里第一次提出了Deep Learning这个词。1.1.9 生活中的深度学习

后来的事情和其他任何一个热门算法领域火起来的套路差不多,人才、资金滚滚而来,百花齐放,深度学习越来越热,并开始产出成果。

深度学习首先在语音识别领域取得了成功。微软研究院的邓立、俞栋和辛顿合作的产品于2011年发布,打败了传统的基于混合高斯模型(Gaussian Mixed Model)的办法,取得了不错的效果。在这些成果背后,深度学习,尤其是深度循环神经网络(Recurrent Neural Networks,RNN)在背后发挥着巨大的作用,如前面提到的深度学习巨头尤尔根的LSTM,就是RNN框架下的一个非常有效的技术。后来Google、Facebook等大公司也通过研发或收购分别推出了基于深度学习的语音识别系统。国内也研发了基于深度学习的语音识别系统,比较有代表性的如科大讯飞、百度等。如今无论是苹果的Siri,微软的小娜,还是安卓手机上的语音输入助手,背后的技术都是深度学习。

当然提到语音输入助手就不能不提更上层的自然语言处理,如今我们只需要对微信说句话就能转化成文字消息发给朋友,对着地图说出要去的地方就能返回给我们规划好的路线。英文不好,没关系,在计算机上复制、粘贴就能翻译。这些让我们生活更便利的技术,几乎都是基于深度学习。

除了语言语音领域,另一个深度学习应用最广泛的就是图像和视觉。事实上图像和视觉一直以来就是机器学习领域所钟爱的方向,只不过在深度学习出现之前,能达到实用的应用并不多。而在深度学习出现后,尤其是2012年之后,基于深度学习图像和视觉应用迅速覆盖了生活的方方面面。当你走在街上看到一件好看的衣服,立刻拿出手机用淘宝或者京东的拍照购物功能,就能找到同款或者类似的款式。当你打开计算机,只需要刷一下指纹或者对着摄像头笑一笑,就能进入系统,既方便又安全。去银行办理公积金联名卡,费时又费力,如今银行工作人员带着iPad和便携设备,只需要按照办理系统的提示对着摄像头就能搞定。犯罪分子作案后潜逃,刑警们不需要熬夜看周边的监控视频,智能搜查系统就能搞定。还有现在各大科技公司和汽车企业都在大力发展的无人驾驶,背后的技术都少不了基于深度学习的计算机视觉。

大数据也是近年来的一个热点,其背后的主要技术之一也是深度学习,如通过生物医药海量数据助力药品研发和疾病诊断;又如分析海量的用户行为和数据,帮助银行和P2P金融公司做出更加安全的放贷决定;还有分析海量的商品数据,帮助电商更好地销售商品,用户也更容易买到想要的东西。其他的还有推荐系统、机器人、游戏等,深度学习正在让人们的生活更加便利。1.1.10 常见深度学习框架简介

工欲善其事,必先利其器。深度学习诞生10年有余,已经有了不少成熟的开发框架,下面来看一看当前主流的框架。

Caffe 全称为Convolutional Architecture for Fast Feature Embedding,由伯克利加州大学(University of California,Berkeley)的博士生贾扬清开发,后来一直由伯克利视觉及学习中心(Berkeley Vision and Learning Center,BVLC)进行维护。Caffe基于C++和英伟达(NVIDIA)公司的GPU(Graphic Processing Unit)通用计算架构CUDA(Compute Unified Device Architecture)开发,特点是高效、可配置化的输入、GPU和CPU的无缝切换。当然还有非常重要的一点,Caffe拥有庞大的社区,无论是科研领域还是业界都有大量的用户。每当一些最前沿的深度学习方法发表后,没多久就会有官方的预训练模型或是第三方基于Caffe的实现,所以Caffe是一个对初学者和有经验的人都非常适合的工具。

2013年,贾扬清得到了一块NVIDIA免费提供的K20加速卡。在这个契机下贾扬清一边做毕业论文一边开始写一个用于深度学习的框架。经过了近半年的独立开发,Caffe初具形态并且在伯克利的研究组内获得了良好的试用反响。后来在物体检测领域成为经典的R-CNN(Regions with Convolutional Neural Network features)方法就是在这段时间内基于Caffe实现的。

2013年底,贾扬清将Caffe开源,成为了当时业内第一个较为完整的深度学习开源框架,于是立刻获得了学术界和业界的好评及支持。后来在BLVC和NVIDIA为主的合力推广下,Caffe很快成为了深度学习领域,尤其是基于深度学习的计算机视觉领域最流行的框架。本书使用Caffe作为实例的主要实现框架之一,后面会有更多关于Caffe的内容。

Theano 这个由希腊神话中伊卡里亚岛国王妻子名字命名的框架,是由本吉奥领导的蒙特利尔大学机器学习研究小组(MILA,开发时叫LISA)开发的。作为一个诞生比Caffe早的框架,在早期Theano是深度学习领域最流行的软件包。严格来说,Theano不是专门面向深度学习的,而是一个基于多维数组用于计算和优化数学表达式的数值软件包,因为神经网络的本质其实就是数学表达式,所以用Theano可以非常灵活地从无到有地实现神经网络的各种功能。Theano基于Python,最大的优点是灵活,性能非常出色,缺点是基于函数式的编程方式,还有拗口的API,异常困难的调试等,造就了陡峭的学习曲线。另外,其异常慢的编译速度也常常遭人诟病。

直接在Theano中开发虽然灵活度最高,但开发工作量和难度也不小,所以在Theano基础上有很多封装过后框架,比如MILA官方的Pylearn2,还有第三方开发的Lasagne和Keras等。Pylearn2由于把Theano的缺点又进一步发挥到了极致,在火了一小阵后就被渐渐冷落,如今已经停止了实际意义上的开发。后两个框架正在蓬勃发展中,尤其是Keras,渐渐开始成为一个脱离底层实现的大框架,目前除了Theano也支持了Google的Tensorflow。

TensorFlow Google开源的深度学习框架,一开始主要面向的是分布式系统。从官方介绍上看,具有非常好的延展性,在多GPU/多机上拥有最好的灵活性。另外Google的强有力支持也算是一大优点。初期版本在单机和一些小任务上性能差强人意,在一些基准测试上甚至常常被其他框架甩下一个量级。不过随着TensorFlow的持续改进,以及Google光环的照耀,现在TensorFlow正在变得越来越流行。截至2016年5月,在github上关于TensorFlow的相关讨论的数量已经超过Caffe跃居第一位。

Torch 由卷积神经网络之父杨乐昆领导开发的框架,是Facebook的深度学习开发工具,于2014年开源后,迅速传播开来。Torch的性能非常优秀,其他方面作为一个框架该有的功能都有。另外,作为集合了杨乐昆学术能力和Facebook业界经验的框架,Torch天然对多GPU的支持也胜过了被经常拿来一起比较的Caffe。Torch是基于Lua的,虽然Lua是一个简单又灵活的语言,但是毕竟是小众语言,这在一定程度上限制了Torch的流行程度。

MXNet 由分布式机器学习社区(Distributed/Deep Machine

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

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载