TensorFlow:实战Google深度学习框架(第2版)(txt+pdf+epub+mobi电子书下载)


发布时间:2020-08-23 20:39:49

点击下载

作者:郑泽宇,梁博文,等

出版社:电子工业出版社

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

TensorFlow:实战Google深度学习框架(第2版)

TensorFlow:实战Google深度学习框架(第2版)试读:

前言

“深度学习”这个词在过去的一年之中已经轰炸了媒体、技术博客甚至朋友圈。这也许正是你会读到本书的原因之一。数十年来,人工智能技术虽不断发展,但像深度学习这样在学术界和工业界皆具颠覆性的技术实在是十年难遇。可惜的是,理解和灵活运用深度学习并不容易,尤其是其复杂的数学模型,让不少感兴趣的同学很快“从入门到放弃”。在本书第1版前,很难找到从实战出发的深度学习和TensorFlow参考书,这也是笔者在工作之余熬夜撰写这本书的动力。笔者本人作为一枚标准码农、创业党,希望这本书能够帮助码农和准码农们绕过深度学习复杂的数据公式,快速上手深度学习,解决工作、学习中的实际问题。

2016年初,笔者和小伙伴们从美国谷歌辞职,回到祖国并在杭州联合创办了才云科技(Caicloud.io),为企业提供人工智能平台和解决方案。回国之初,很多企业对于TensorFlow都显示出了浓厚的兴趣,然而在深度交流之后,发现TensorFlow虽然是一款非常容易上手的工具,但是深度学习的技术并不是每一家企业都能掌握的。为了让更多的人和企业可以享受到深度学习技术带来的福利,笔者与电子工业出版社的张春雨编辑一拍即合,开始了本书的撰写工作。

使用TensorFlow实现深度学习是本书介绍的重点。本书将从TensorFlow的安装开始,依次介绍TensorFlow的基本概念、使用TensorFlow实现全连接深层神经网络、卷积神经网络和循环神经网络等深度学习算法,以及 TensorFlow 并行化输入数据处理流程、TensorBoard可视化工具、TensorFlow高层封装、带GPU的分布式TensorFlow使用方法。在介绍使用TensorFlow实现不同深度学习算法的同时,也介绍了这些算法背后的理论,并列举了这些算法可以解决的具体问题。本书避开了枯燥复杂的数学公式,从实际问题出发,在实践中介绍深度学习的概念和TensorFlow的用法。

本书第1版出版之后,笔者收到了广大读者的踊跃来信。信中既充分肯定了第1版对他们学习TensorFlow和深度学习的帮助,又提出了对更新TensorFlow版本和其他新内容的期待,这正是笔者开始撰写第2版的强大动力。第1版中大部分示例都是与计算机视觉相关的,为了更好地介绍与自然语言处理相关的内容,笔者特别邀请了在Google翻译组工作了5年的梁博文来撰写这部分内容。第2版中将有专门的一个章节介绍语言模型、Seq2Seq模型、注意力(attention)模型等自然语言应用。

TensorFlow是一个飞速发展的工具。第1版在写作时的最新版本为0.9.0,然而到第1版出版时,谷歌已经推出了TensorFlow的第一个正式版1.0.0。相比第1版中使用的TensorFlow 0.9.0,TensorFlow 1.0.0以后的版本对API也进行了大量调整,之前的大量示例代码已经无法正常运行。第2版在更新示例API版本的同时,对TensorFlow 0.9.0之后推出的重要新功能也进行了详细介绍,希望能够帮助读者更好地使用TensorFlow。

为了让广大读者更好地理解和使用书中的示例代码,我们为大家提供了一个完全公开的 GitHub 代码库来维护 TensorFlow 不同版本的示例程序。该代码库的网址为https://github.com/caicloud/tensorflow-tutorial。笔者衷心地希望各位读者能够从本书中获益,这也是对我们最大的支持和鼓励。对于书中出现的任何错误或者不准确的地方,欢迎大家批评指正,并发送邮件至zeyu@caicloud.io。

读者也可以登录博文视点官网http://www.broadview.com.cn,下载本书代码或提交勘误信息。一旦勘误信息被作者或编辑确认,即可获得博文视点奖励积分,用于兑换电子书。读者可以随时浏览图书页面,查看已发布的勘误信息。致谢

在此我要特别感谢为此书做出贡献的每一个人。

首先,我要感谢所有的读者。在第1版出版之后,我收到了大量的读者来信。这些信中表达了对本书内容的喜爱,同时也给出了非常多的宝贵建议。广大读者的支持和鼓励正是我完成第2版的最大动力。在此,我再次感谢每一位读者,希望第2版中更多的干货值得大家投入宝贵的精力去阅读。

其次,我要感谢加入第2版写作的作者梁博文。在繁重的Google日常工作的同时,梁博文经常深夜撰写自然语言处理的相关内容并调试示例代码,非常辛苦。正是因为梁博文的辛勤付出,才让第2版中的内容更加全面。

最后,我要再次感谢在第1版写作过程中给予过我大力支持的所有人。没有他们的支持也就没有这本书的诞生——

在紧张的创业之余,才云科技CEO张鑫给了我极大的支持和鼓励,让我有足够的时间投入到此书第1版的撰写工作中。

我也要感谢我的妻子温苗苗以及我的父母、岳父岳母,没有他们一直以来的支持和帮助,我不可能完成此书的写作。每当遇到困难的时候,长辈们的鼓励是我前进的最大动力。

最后,我还要感谢所有为本书付出心血的电子工业出版社的编辑们。无论在本书的定位,还是在具体的文字推敲、编辑加工、版式设计上,张春雨、刘佳禾和孙奇俏都给予了巨大的帮助。郑泽宇2017年12月第1章深度学习简介

在人工智能的普及和推广上,AlphaGo系列做出了巨大贡献。从2016年年初AlphaGo战胜李世石,到2016年年底Master取得60连胜,再到最近AlphaGo Zero诞生,人工智能这个概念被推上了历史的新高度。谷歌(Google)、脸书(Facebook)、百度、阿里巴巴等一系列国内外大公司纷纷对外公开宣布了人工智能将作为他们下一个战略重心。在类似AlphaGo、无人驾驶汽车等最新技术的背后,深度学习是推动这些技术发展的核心力量。“深度学习”是本书的核心概念。通过阅读本章,读者将从多个角度了解这一概念。人工智能、机器学习与深度学习这几个关键词时常出现在媒体新闻中,并错误地被认为是等同的概念。1.1节将介绍人工智能、机器学习以及深度学习的概念,并着重解析它们之间的关系。这一节将从不同领域需要解决的问题入手,依次介绍这些领域的基本概念以及解决领域内问题的主要思路。在介绍完深度学习的基本概念之后,1.2节将完整地介绍深度学习发展史。虽然“深度学习”这个名词是在最近几年才提出来的,但深度学习基于的神经网络算法却早在20世纪40年代就出现了。这一节将会介绍神经网络发展过程中的重大事件,并介绍深度学习研究领域的发展历程。

接着,1.3节将从计算机视觉、语音识别、自然语言处理和人机博弈4个不同的方向介绍目前深度学习的应用。从2012年深度学习被成功应用于图像识别上以来,研究人员一直在扩展它的应用范围和影响力。这一节既会介绍在不同方向上深度学习在学术界取得的成就,也会介绍工业界成功应用深度学习的案例。最后,1.4节将引出本书的重点——TensorFlow。TensorFlow是谷歌开源的一个计算框架,该计算框架可以很好地实现各种深度学习算法。这一节将简单介绍TensorFlow的特性以及它目前的应用场景。也将对比不同的开源深度学习工具,并通过具体的数字来说明TensorFlow相比其他工具的优势以及作者将TensorFlow作为本书介绍对象的原因。1.1 人工智能、机器学习与深度学习[1]

从计算机发明之初,人们就希望它能够帮助甚至代替人类完成重复性劳作。利用巨大的存储空间和超高的运算速度,计算机已经可以非常轻易地完成一些对于人类非常困难,但对计算机相对简单的问题。比如,统计一本书中不同单词出现的次数,存储一座图书馆中所有的藏书,或是计算非常复杂的数学公式,都可以轻松通过计算机解决。然而,一些人类通过直觉可以很快解决的问题,目前却很难通过计算机解决。这些问题包括自然语言理解、图像识别、语音识别等。而它们就是人工智能需要解决的问题。

计算机要像人类一样完成更多智能的工作,需要掌握关于这个世界海量的知识。比如要实现汽车自动驾驶,计算机至少需要能够判断哪里是路,哪里是障碍物。这个对人类非常直观的东西,对计算机却是相当困难的。路有水泥的、沥青的,也有石子的甚至土路。这些不同材质铺成的路在计算机看来差距非常大。如何让计算机掌握这些人类看起来非常直观的常识,对于人工智能的发展是一个巨大的挑战。很多早期的人工智能系统只能成功应用于相对特定的环境(specific domain),在这些特定环境下,计算机需要了解的知识很容易被严格并且完整地定义。例如,IBM的深蓝(Deep Blue)在1997年打败了国际象棋冠军卡斯帕罗夫。设计出下象棋软件是人工智能史上的重大成就,但其主要挑战不在于让计算机掌握国际象棋中的规则。国际象棋是一个特定的环境,在这个环境中,计算机只需要了解每一颗棋子规定的行动范围和行动方法即可。虽然计算机早在1997年就可以击败国际象棋的世界冠军,但是直到20年后的今天,让计算机实现大部分成年人都可以完成的汽车驾驶却依旧十分困难。

为了使计算机掌握更多开放环境(open domain)下的知识,研究人员进行了很多尝试。其中一个影响力非常大的领域是知识图库(Ontology[2])。WordNet是在开放环境中建立的一个较大且有影响力的知识图库。WordNet是由普林斯顿大学(Princeton University)的George Armitage Miller教授和Christiane Fellbaum教授带领开发的,它将155 287个单词整理为117 659个近义词集(synsets)。基于这些近义词集,WordNet进一步定义了近义词集之间的关系。比如同义词集“狗”属于同义词集“犬科动物”,它们之间存在种属关系[3](hypernyms/hyponyms)。除了WordNet,也有不少研究人员尝试将Wikipedia中的知识整理成知识图库。谷歌的知识图库中包含大量来自于Wikipedia的信息。

虽然使用知识图库可以让计算机很好地掌握人工定义的知识,但建立知识图库一方面需要花费大量的人力物力,另一方面可以通过知识图库方式明确定义的知识有限,不是所有的知识都可以明确地定义成计算机可以理解的固定格式。很大一部分无法明确定义的知识,就是人类的经验。比如我们需要判断一封邮件是否为垃圾邮件,会综合考虑邮件发出的地址、邮件的标题、邮件的内容以及邮件收件人的长度,等等。这是收到无数垃圾邮件骚扰之后总结出来的经验。这个经验很难以固定的方式表达出来,而且不同人对垃圾邮件的判断也会不一样。如何让计算机可以和人类一样从历史的经验中获取新的知识呢?这就是机器学习需要解决的问题。

卡内基梅隆大学(Carnegie Mellon University)的Tom Michael [4]Mitchell教授在1997年出版的书籍MachineLearning中对机器学习进行过非常专业的定义,这个定义在学术界内被多次引用。在这本书中对机器学习的定义为“如果一个程序可以在任务T上,随着经验E的增加,效果P也可以随之增加,则称这个程序可以从经验中学习”。通过垃圾邮件分类的问题来解释机器学习的定义。在垃圾邮件分类问题中,“一个程序”指的是需要用到的机器学习算法,比如逻辑回归算法;“任务T”是指区分垃圾邮件的任务;“经验E”为已经区分过是否为垃圾邮件的历史邮件,在监督式机器学习问题中,这也被称之为训练数据;“效果P”为机器学习算法在区分是否为垃圾邮件任务上的正确率。

在使用逻辑回归算法解决垃圾邮件分类问题时,会先从每一封邮件中抽取对分类结果可能有影响的因素,比如说上文提到的发邮件的地址、邮件的标题及收件人的长度,等等。每一个因素被称之为一个特征(feature)。逻辑回归算法可以从训练数据中计算出每个特征和预测结果的相关度。比如在垃圾邮件分类问题中,可能会发现如果一个邮件的收件人越多,那么邮件为垃圾邮件的概率也就越高。在对一封未知的邮件做判断时,逻辑回归算法会根据从这封邮件中抽取得到的每一个特征以及这些特征和垃圾邮件的相关度来判断这封邮件是否为垃圾邮件。

在大部分情况下,在训练数据达到一定数量之前,越多的训练数据可以使逻辑回归算法对未知邮件做出的判断越精准。也就是说逻辑回归算法可以根据训练数据(经验E)提高在垃圾邮件分类问题(任务T)上的正确率(效果P)。之所以说在大部分情况下,是因为逻辑回归算法的效果除了依赖于训练数据,也依赖于从数据中提取的特征。假设从邮件中抽取的特征只有邮件发送的时间,那么即使有再多的训练数据,逻辑回归算法也无法很好地利用。这是因为邮件发送的时间和邮件是否为垃圾邮件之间的关联不大,而逻辑回归算法无法从数据中习得更好的特征表达。这也是很多传统机器学习算法的一个共同的问题。

类似从邮件中提取特征,如何数字化地表达现实世界中的实体,一直是计算机科学中一个非常重要的问题。如果将图书馆中的图书名称储存为结构化的数据,比如储存在Excel表格中,那么可以非常容易地通过书名查询一本书是否在图书馆中。如果图书的书名都储存在非结构化的图片中,那么要完成书名查找任务的难度将大大增加。类似的道理,如何从实体中提取特征,对于很多传统机器学习算法的性能有巨大影响。图1-1展示了一个简单的例子。如果通过笛卡儿坐标系(cartesian coordinates)来表示数据,那么不同颜色的结点无法被一条直线划分。如果将这些点映射到极角坐标系(polar coordinates),那么使用直线划分就很容易了。同样的数据使用不同的表达方式会极大地影响解决问题的难度。一旦解决了数据表达和特征提取,很多人工智能任务也就解决了90%。图1-1 不同数据表达方式对使用直线划分不同颜色结点问题难度的影响

然而,对许多机器学习问题来说,特征提取不是一件简单的事情。在一些复杂问题上,要通过人工的方式设计有效的特征集合,需要很多的时间和精力,有时甚至需要整个领域数十年的研究投入。例如,假设想从很多照片中识别汽车。现在已知的是汽车有轮子,所以希望在图片中抽取“图片中是否出现了轮子”这个特征。但实际上,要从图片的像素中描述一个轮子的模式是非常难的。虽然车轮的形状很简单,但在实际图片中,车轮上可能会有来自车身的阴影、金属车轴的反光,周围物品也可能会部分遮挡车轮。实际图片中各种不确定的因素让我们很难直接抽取这样的特征。

既然人工的方式无法很好地抽取实体中的特征,那么是否有自动的方式呢?答案是肯定的。深度学习解决的核心问题之一就是自动地将简单的特征组合成更加复杂的特征,并使用这些组合特征解决问题。深度学习是机器学习的一个分支,它除了可以学习特征和任务之间的关联,还能自动从简单特征中提取更加复杂的特征。图1-2中展示了深度学习和传统机器学习在流程上的差异。如图1-2所示,深度学习算法可以从数据中学习更加复杂的特征表达,使得最后一步权重学习变得更加简单且有效。在图1-3中,展示了通过深度学习解决图像分类问题的具体样例。深度学习可以一层一层地将简单特征逐步转化成更加复杂的特征,从而使得不同类别的图像更加可分。比如图1-3中展示了深度学习算法可以从图像的像素特征中逐渐组合出线条、边、角、简单形状、复杂形状等更加有效的复杂特征。图1-2 传统机器学习和深度学习流程对比图1-3 深度学习在图像分类问题上的算法流程样例

早期的深度学习受到了神经科学的启发,它们之间有着非常密切的联系。科学家们在神经科学上的发现使得我们相信深度学习可以胜任很多人工智能的任务。神经科学家发现,如果将小白鼠的视觉神经连接到听觉中枢,一段时间之后小白鼠可以习得使用听觉中枢“看”世界。这说明虽然哺乳动物大脑分为了很多区域,但这些区域的学习机制却是相似的。在这一假想得到验证之前,机器学习的研究者们通常会为不同的任务设计不同的算法。而且直到今天,学术机构的机器学习领域也被分为了自然语言处理、计算机视觉和语音识别等不同的实验室。因为深度学习的通用性,深度学习的研究者往往可以跨越多个研究方向甚至同时活跃于所有的研究方向。下面的1.3节将具体介绍深度学习在不同方向的应用。

虽然深度学习领域的研究人员相比其他机器学习领域更多地受到了大脑工作原理的启发,而且媒体界也经常强调深度学习算法和大脑工作原理的相似性,但现代深度学习的发展并不拘泥于模拟人脑神经元和人脑的工作机理。模拟人类大脑也不再是深度学习研究的主导方向。我们不应该认为深度学习是在试图模仿人类大脑。目前科学家对人类大脑学习机制的理解还不足以为当下的深度学习模型提供指导。

现代的深度学习已经超越了神经科学观点,它可以更广泛地适用于各种并不是由神经网络启发而来的机器学习框架。值得注意的是,有一个领域的研究者试图从算法层理解大脑的工作机制,它不同于深度学习的领域,被称为“计算神经学”(computational neuroscience)。深度学习领域主要关注如何搭建智能的计算机系统,解决人工智能中遇到的问题。计算神经学则主要关注如何建立更准确的模型来模拟人类大脑的工作。

总的来说,人工智能、机器学习和深度学习是非常相关的几个领域。图1-4总结了它们之间的关系。人工智能是一类非常广泛的问题,机器学习是解决这类问题的一个重要手段。深度学习则是机器学习的一个分支。在很多人工智能问题上,深度学习的方法突破了传统机器学习方法的瓶颈,推动了人工智能领域的发展。图1-4 人工智能、机器学习以及深度学习之间的关系图1.2 深度学习的发展历程

很多读者可能会认为深度学习是一门新技术,所以听到“深度学习的历史”也许会有些惊讶。事实上,目前大家所熟知的“深度学习”基本上是深层神经网络的一个代名词,而神经网络技术可以追溯到1943年。深度学习之所以看起来像是一门新技术,一个很重要的原因是它在21世纪初期并不流行。神经网络的发展史大致可以分为三个阶段,在本节中,我们将简单介绍神经网络发展历史上的这三个阶段。

早期的神经网络模型类似于仿生机器学习,它试图模仿大脑的学习机理。最早的神经网络数学模型是由Warren McCulloch 教授和 Walter Pitts教授于1943年在论文A logical calculus of the ideas [5]immanent in nervous activity中提出的。在论文中,Warren McCulloch 教授和 Walter Pitts教授模拟人类大脑神经元的结构提出了McCulloch-Pitts Neuron的计算结构。图1-5对比了人类神经元结构和McCulloch-Pitts Neuron结构。McCulloch-Pitts Neuron结构大致模拟了人类神经元的工作原理,它们都有一些输入,然后将输入进行一些变换后得到输出结果。虽然人类神经元处理输入信号的原理目前对我们来说还不是完全清晰,但McCulloch-Pitts Neuron结构使用了简单的线性加权和的方式来模拟这个变换。将n个输入值提供给McCulloch-Pitts Neuron结构后,McCulloch-Pitts Neuron结构会通过n个权重12nw,w,L,w来计算这n个输入的加权和,然后用这个加权和经过一个阈值函数得到一个0或1的输出。图1-5 人类神经元结构和Mc Culloch-Pitts Neuron结构对比图

举一个具体的例子来说明McCulloch-Pitts Neuron结构是如何解决实际问题的。假设需要解决的问题是判断邮件是否为垃圾邮件,那么首先可以将从邮件里提取的n个特征值作为输入传入McCulloch-Pitts Neuron结构。McCulloch-Pitts Neuron结构经过加权和及阈值函数处理可以得到一个0或者1的输出。如果这个输出为0,那么相应的邮件为垃圾邮件;相反,如果这个输出为1,那么相应的邮件不是垃圾邮件。

为了使这种方法可以精确地判断垃圾邮件,我们需要对McCulloch-Pitts Neuron结构中的权重进行特殊的设置。手动设置这些权重自然是一种选择,但通过人类经验设置权重的方式既麻烦又很难达到最优的效果。为了让计算机能够更加自动且更加合理地设置权重大小,Frank Rosenblatt教授于1958年提出了感知机模型(perceptron)。感知机是首个可以根据样例数据来学习特征权重的模型。虽然McCulloch-Pitts Neuron结构和感知机模型极大地影响了现代机器学习,但是它们也存在非常大的局限性。

1969年由Marvin Minsky教授和Seymour Papert教授出版的Perceptrons:An Introduction toComputationalGeometry一书中,证明了感知机模型只能解决线性可分问题,在第4章中更加详细地介绍了线性模型、线性可分问题,并明确指出了感知机无法解决异或问题。而且书中也指出在当时的计算能力下,实现多层的神经网络是不可能的事情。这些局限性导致了整个学术界对生物启发的机器学习模型的抨击。在书中,Marvin Minsky教授和Seymour Papert教授甚至做出了“基于感知机的研究注定将失败”的结论。这导致了神经网络的第一次重大低潮期,在之后的十多年内,基于神经网络的研究几乎处于停滞状态。

直到20世纪80年代末,第二波神经网络研究因分布式知识表达(distributed representation)和神经网络反向传播算法的提出而兴起。分布式的知识表达的核心思想是现实世界中的知识和概念应该通过多个神经元(neuron)来表达,而模型中的每一个神经元也应该参与表达多个概念。例如,假设要设计一个系统来识别不同颜色不同型号的汽车,那么可以有两种方法。第一种方法是设计一个模型使得模型中每一个神经元对应一种颜色和汽车型号的组合,比如“白色的小轿车”。如果有n种颜色,m种型号,那么这样的表达方式需要n×m个神经元。另一种方法是使用一些神经元专门表达颜色,比如“白色”,另外一些神经元专门表达汽车型号,比如“小轿车”。这样“白色的小轿车”的概念可以通过这两个神经元的组合来表达。这种方式只需要n+m个神经元就可以表达所有概念。而且即使在训练数据中没有出现概念“红色的卡车”,只要模型能够习得“红色”和“卡车”的概念,就可以推广到概念“红色的卡车”。分布式知识表达大大加强了模型的表达能力,让神经网络从宽度的方向走向了深度的方向。这为之后的深度学习奠定了基础。在本书第4章中将通过具体的样例来说明深层的神经网络是可以很好地解决类似异或问题等线性不可分问题的。

除了解决了线性不可分问题,在20世纪80年代末,研究人员在降低训练神经网络的计算复杂度上也取得了突破性成就。David Everett Rumelhart教授、Geoffrey Everest Hinton教授和Ronald J.Williams教授于1986年在《自然》杂志上发表的Learning Representations by Back-propagating errors文章中首次提出了反向传播的算法(back propagation),此算法大幅降低了训练神经网络所需要的时间。直到今天,反向传播算法仍然是训练神经网络的主要方法。在神经网络训练算法改进的同时,计算机的飞速发展也使得20世纪80年代末的计算能力相比70年代有了突飞猛进的增长。于是神经网络在20世纪80年代末到90年代初又迎来了发展的高峰期。如今使用得比较多的一些神经网络结构,比如卷积神经网络和循环神经网络,在这段时间都得到了很好的发展。Sepp Hochreiter 教授和 Jürgen Schmidhuber教授于1991年提出的LSTM模型(long short-term memory)可以有效地对较长的序列进行建模,比如一句话或者一段文章。直到今天,LSTM都是解决很多自然语言处理、机器翻译、语音识别、时序预测等问题最有效的方法。在第8章中将更加详细地介绍循环神经网络和LSTM模型。

然而,在神经网络发展的同时,传统的机器学习算法也有了突破性的进展,并在90年代末逐步超越了神经网络,成为当时机器学习领域最常用的方法。以手写体识别为例,在1998年,使用支持向量机(support vector machine)的算法可以把错误率降低到0.8%。这样的精确度是当时的神经网络无法达到的。导致这种情况主要有两个原因。首先,虽然训练神经网络的算法得到了改进,但在当时的计算资源下,要训练深层的神经网络仍然是非常困难的。其次,当时的数据量比较小,无法满足训练深层神经网络的需求。

随着计算机性能的进一步提高,以及云计算、GPU的出现,到2010年左右,计算量已经不再是阻碍神经网络发展的问题。与此同时,随着互联网+的发展,获取海量数据也不再困难。这让神经网络面临的几个最大的问题都得到了解决,于是神经网络的发展也迎来了新的高潮。在2012年ImageNet 举办的图像分类竞赛(ImageNet Large Scale Visual Recognition Challenge,ILSVRC)中,由Alex Krizhevsky教授实现的深度学习系统AlexNet赢得了冠军。自此之后,深度学习(deep learning)作为深层神经网络的代名词被大家所熟知。深度学习的发展也开启了一个AI的新时代。图1-6展示了“deep learning”这个词十年内谷歌搜索的热度趋势。从图中可以看出,从2012年之后,深度学习的热度呈指数级上升,到2016年时,深度学习已经成为了谷歌上最热门的搜索词。在2013年,深度学习被麻省[6]理工学院(MIT)评为了年度十大科技突破之一。如今,深度学习已经从最初的图像识别领域扩展到了机器学习的各个领域。下面的1.3节将具体介绍目前深度学习在一些主要人工智能领域的应用。图1-6 “deeplearning”十年内在谷歌搜索的热度趋势(此图片基于谷歌趋势:https://www.google.com/trends/,词汇的热度按0~100分为100个等级:0表示最低的热度,100表示最流行的搜索词)1.3 深度学习的应用

深度学习最早兴起于图像识别,但是在短短几年的时间内,深度学习推广到了机器学习的各个领域。如今,深度学习在很多机器学习领域都有非常出色的表现,在图像识别、语音识别、音频处理、自然语言处理、机器人、生物信息处理、化学、电脑游戏、搜索引擎、网络广告投放、医学自动诊断和金融等各大领域均有应用。本节将选取几个深度学习应用比较广泛的领域进行详细的介绍。但深度学习的应用不仅限于本节所介绍的领域,在每个领域中的应用也不限于列举出的几个方面。1.3.1 计算机视觉

计算机视觉是深度学习技术最早实现突破性成就的领域。在1.2节中介绍过,随着2012年深度学习算法AlexNet赢得图像分类比赛ILSVRC冠军,深度学习开始受到学术界广泛的关注。ILSVRC是基于ImageNet图像数据集举办的图像识别技术比赛,这个比赛在计算机视觉领域有极高的影响力。

图1-7展示了历年ILSVRC比赛的情况。从图1-7中可以看到,在深度学习被使用之前,传统计算机视觉的方法在ImageNet数据集上[7]最低的Top5错误率为26%。从2010年到2011年,基于传统机器学习的算法并没有带来正确率的大幅提升。在2012年时,Geoffrey Everest Hinton教授的研究小组利用深度学习技术将ImageNet图像分类的错误率大幅降低到16%。而且,AlexNet深度学习模型只是一个开始,在2013年的比赛中,排名前20的算法都使用了深度学习。从2013年之后,ILSVRC上基本就只有深度学习算法参赛了。

从2012年到2015年间,通过对深度学习算法的不断研究,ImageNet图像分类的错误率以每年4%的速度递减。这说明深度学习完全打破了传统机器学习算法在图像分类上的瓶颈,让图像分类问题得到了更好的解决。如图1-7所示,到2015年时,深度学习算法的错误率为4%,已经成功超越了人工标注的错误率(5%),实现了计算机视觉研究领域的一个突破。

在ImageNet数据集上,深度学习不仅突破了图像分类的技术瓶颈,同时也突破了物体识别的技术瓶颈。物体识别的难度比图像分类更高。图像分类问题只需判断图片中包含哪一种物体。但在物体识别问题中,需要给出所包含物体的具体位置。而且一张图片中可能出现多个需要识别的物体。图1-8展示了ILSVRC2013物体识别数据集中的样例图片。每一张图片中所有可以被识别的物体都用不同颜色的方框标注了出来。在2013年时,使用传统机器学习算法可以达到的[8]MAP(mean average precision)值为0.23。2016年时,使用了6种不同深度学习模型的集成算法(ensemble algorithm)成功将MAP提[9]高到了0.66。图1-7 历年ILSVRC图像分类比赛最佳算法的错误率[10]图1-8 ILSVRC2013物体识别数据集中的样例图片

在技术革新的同时,工业界也将图像分类、物体识别应用于各种产品中了。在谷歌,图像分类、物体识别技术已经被广泛应用于谷歌无人驾驶车、YouTube、谷歌地图、谷歌图像搜索等产品中。图1-9中展示了使用谷歌图像搜索来辨别动物。谷歌通过图像处理技术可以归纳出图片中的主要内容并实现以图搜图的功能。这些技术在国内的百度、阿里巴巴、腾讯等科技公司也已经得到了广泛的应用。图1-9 通过谷歌图像搜索识别动物

在物体识别问题中,人脸识别是一类应用非常广泛的技术。它既可以应用于娱乐行业,也可以应用于安防、风控行业。在娱乐行业中,基于人脸识别的相机自动对焦、自动美颜基本已经成为每一款自拍软件的必备功能。在安防、风控领域,人脸识别应用更是大大提高了工作效率并节省了人力成本。比如在互联网金融行业,为了控制贷款风险,在用户注册或者贷款发放时需要验证本人信息。个人信息验证中一个很重要的步骤是验证用户提供的证件和用户是否为同一个人。通过人脸识别技术,这个过程可以被更加高效地实现。

在深度学习得到广泛应用之前,基于传统的机器学习技术并不能很好地满足人脸识别的精度要求。人脸识别的最大挑战在于不同人脸的差异较小,有时同一个人在不同光照条件、姿态或者表情下脸部的差异甚至会比不同人脸之间的差异更大。传统的机器学习算法很难抽象出足够有效的特征,使得学习模型既可以区分不同的个体,又可以区分相同个体在不同环境中的变化。深度学习技术通过从海量数据中自动习得更加有效的人脸特征表达,可以很好地解决这个问题。在人[11]脸识别数据集LFW(Labeled Faces in the Wild)上,基于深度学习算法的系统DeepID2可以达到99.47%的识别率。

在计算机视觉领域,光学字符识别(optical character recognition,OCR)也是使用深度学习较早的领域之一。所谓光学字符识别,就是使用计算机程序将计算机无法理解的图片中的字符,比如数字、字母、汉字等符号,转化为计算机可以理解的文本格式。早在1989年,Yann LeCun教授发表的论文Backpropagation Applied to Handwritten Zip Code Recognition将卷积神经网络成功应用到了识别手写邮政编码的问题上,达到了接近95%的正确率。在MNIST手写体数字识别数据集上,最新的深度学习算法可以达到99.77%的正确率,这也超过了人类的表现。第5章将更加详细地介绍MNIST手写体数字识别数据集。

光学字符识别在工业界的应用也十分广泛。在21世纪初期,Yann LeCun将基于卷积神经网络的手写体数字识别系统应用于银行支票的数额识别,这个系统在2000年左右已经处理了美国全部支票[12]数量的10%~20%。谷歌也将数字识别技术用在了谷歌地图的开发中。谷歌实现的数字识别系统可以从谷歌街景图中识别任意长度的数[13][14]字,并在SVHN数据集上可以达到96%的正确率。到2013年为止,这个系统已经帮助谷歌抽取了超过1亿个门牌号码,大大加速了谷歌地图的制作过程并节省了巨额的人力成本。而且,光学字符识别技术在谷歌的应用也不仅限于数字识别。谷歌图书通过文字识别技术将扫描的图书数字化,从而实现图书内容的搜索功能。1.3.2 语音识别

深度学习在语音识别领域取得的成绩也是突破性的。2009年深度学习的概念被引入语音识别领域,并对该领域产生了巨大的影响。[15]在短短几年时间内,深度学习的方法在TIMIT数据集上将基于传统的混合高斯模型(gaussian mixture model,GMM)的错误率从21.7%降低到了使用深度学习模型的17.9%。如此大的提高幅度很快引起了学术界和工业界的广泛关注。从2010年到2014年间,在语音识别领域的两大学术会议IEEE-ICASSP 和Interspeech上,深度学习的文章呈现出逐年递增的趋势。在工业界,包括谷歌、苹果、微软、IBM、百度等在内的国内外大型IT公司提供的语音相关产品,比如谷歌的Google Now、苹果的Siri、微软的Xbox和Skype等,都是基于深度学习算法的。

在2009年谷歌启动语音识别应用时,使用的是在学术界已经研究了30年的混合高斯模型。到2012年时,深度学习的语音识别模型已经取代了混合高斯模型,并成功将谷歌语音识别的错误率降低了20%,这个改进幅度超过了过去很多年的总和。微软的研究人员通过大量实验得出,使用深度学习的算法比使用混合高斯模型的算法更能够从海量数据中获益。随着数据量的加大,使用深度学习模型无论在正确率的增长数值上还是在增长比率上都要优于使用混合高斯模型的[16]算法。这样的增长在语音识别的历史上是从未出现过的,而深度学习之所以能完成这样的技术突破,最主要的原因是它可以自动地从海量数据中提取更加复杂且有效的特征,而不是如高斯混合模型中需要人工提取特征。

基于深度学习的语音识别已经被应用到了各个领域,其中最被大家所熟知的应该是苹果公司推出的Siri系统。Siri系统可以根据用户的语音输入完成相应的操作功能,这大大方便了用户的使用。目前,Siri已经支持包括中文在内的20种不同语言。与Siri类似,谷歌也在安卓(Android)系统上推出了谷歌语音搜索(Google Voice Search)。另外一个成功应用语音识别的系统是微软的同声传译系统。在2012年的微软亚洲研究院(Microsoft Research Asia,MSRA)二十一世纪计算大会(21st Century Computing)上,微软高级副总裁Richard [17]Rashid现场演示了微软开发的从英语到汉语的同声传译系统。该演讲受到了非常广泛的关注,在YouTube网站上已经有超过一百万次的播放量。同声传译系统不仅要求计算机能够对输入的语音进行识别,它还要求计算机将识别出来的结果翻译成另外一门语言,并将翻译好的结果通过语音合成的方式输出。在没有深度学习之前,要完成同声传译系统中的任意一个部分都是非常困难的。而随着深度学习的发展,语音识别、机器翻译以及语音合成都实现了巨大的技术突破。如今,微软研发的同声传译系统已经被成功地应用到了Skype网络电话中。1.3.3 自然语言处理

深度学习在自然语言处理领域的应用也同样广泛。在过去的几年中,深度学习已经在语言模型(language modeling)、机器翻译、词性标注(part-of-speech tagging)、实体识别(named entity recognition,NER)、情感分析(sentiment analysis)、广告推荐以及搜索排序等方向上取得了突出成就。与深度学习在计算机视觉和语音识别等领域的突破类似,深度学习在自然语言处理问题上的突破也是能够更加智能、自动地提取复杂特征。在自然语言处理领域,使用深度学习实现智能特征提取的一个非常重要的技术是单词向量(word [18]embedding)。单词向量是深度学习解决很多上述自然语言处理问[19][20]题的基础。

在自然语言处理领域,一个非常棘手的问题在于自然语言中有很多词表达了相近的意思,比如“狗”和“犬”就几乎表达了同样的意思。然而“狗”和“犬”的编码在计算机中可能差别很大,所以计算机就无法很好地理解自然语言所表达的语义。为了解决这个问题,研究人员人工建立了大量的语料库。通过这些语料库,可以大致刻画自[21]然语言中单词之间的关系。在建立好的语料库中,WordNet、[22][23]ConceptNet和FrameNet是其中影响力比较大的几个。然而语料库的建立需要花费很多人力物力,而且扩展能力有限。单词向量提供了一种更加灵活的方式来刻画单词的语义。

单词向量会将每一个单词表示成一个相对较低维度的向量(比如100维或200维)。对于语义相近的单词,其对应的单词向量在空间中的距离也应该接近。于是单词语义上的相似度可以通过空间中的距离来描述。单词向量不需要通过人工的方式设定,它可以从互联网上海[24]量非标注文本中学习得到。使用斯坦福大学开源的GloVe单词向量可以得到与单词“frog(青蛙)”所对应的单词向量最相似的5个单词分别是“frogs(青蛙复数)”、“toad(蟾蜍)”、“litoria(雨滨蛙属)”、“leptodactylidae(细趾蟾科)”和“rana(中国林蛙)”。从这个样例可以看出,单词向量可以非常有效地刻画单词的语义。通过单词向量还可以进行单词之间的运算。比如用单词“king”所代表的向量减去单词“man”所代表的向量得到的结果向量和单词“queen”减去“woman”得到的结果向量相似。这说明在单词向量中,已经隐含了表达性别的概念。

通过对自然语言中单词更好地抽象与表达,深度学习在自然语言处理的很多核心问题上都有突破性的进展。机器翻译就是其中的一个例子。图1-10展示了谷歌翻译提供的传统算法和深度学习算法翻译不同语言对的质量对比图。从图1-10可以看出,在所有的语言对上,深度学习算法都可以大幅度提高翻译的质量。根据谷歌的实验结果,在主要的语言对上,使用深度学习可以将机器翻译算法的质量提高55%~85%。表1-1对比了不同算法翻译同一句话的结果。从表中可以直观地看到深度学习算法带来翻译质量的提高。在2016年9月,谷歌正式上线了基于深度学习的中译英软件。截至2017年12月,谷歌翻译[25]产品中已经有97种语言是由基于深度学习的翻译算法完成的。[26]图1-10 不同翻译算法在不同语言上的翻译质量(其中0表示最低的质量,6表示最好的质量)[27]表1-1 不同翻译算法的翻译效果对比表

情感分析是自然语言处理问题中另外一个非常经典的应用。情感分析最核心的问题就是从一段自然语言中判断作者对评价的主体是好评还是差评。情感分析在工业界有着非常广泛的应用。随着互联网的发展,用户会在各种不同的地方表达对于不同产品的看法。对于服务行业或者制造业,及时掌握用户对其服务或者产品的评价是提高用户满意度非常有效的途径。在金融行业,通过分析用户对不同产品和公司的态度可以对投资选择提供帮助。Derwent Capital Markets于2012年5月正式上线,它是世界首家通过对社交网络Twitter上的推文进行[28]情感分析来指导证券交易的对冲基金公司。在同年8月的一份调查中显示,该公司的平均收益率1.85%远远超过平均0.76%的收益率。类似的,也有研究表明,在政治选举中,通过对Twitter上推文的情感分析得出的结果和通过传统的调查、投票等方法得出的结果高度一致。[29]在情感分析问题上,深度学习也可以大幅提高算法的准确率。在[30]斯坦福大学开源的Sentiment Treebank数据集上,使用深度学习的算法可以将语句层面的情感分析正确率从80%提高到85.4%。在短语[31]层面上,使用深度学习的算法可以将正确率从71%提高到80.7%。1.3.4 人机博弈

如果说深度学习在图像识别领域上的突破掀起了学术界的研究浪潮,那么深度学习在人机博弈上的突破使得这个概念被全社会所熟悉。在北京时间2016年3月15日的下午,谷歌开发的围棋人工智能系统AlphaGo以总比分4∶1战胜了韩国棋手李世石,成为第一个在19×19棋盘上战胜人类围棋冠军的智能系统。虽然AlphaGo不是第一个战胜人类世界冠军的系统,但AlphaGo的胜利绝对是人工智能历史上的一座里程碑。在1997年IBM的智能国际象棋系统深蓝(deep blue)击败世界冠军卡斯帕罗夫时,所依赖的更多是计算机的计算资源,是通过暴力搜索(brute-force)的方式尝试更多的下棋方法从而战胜人类。然而这种方式在围棋上是完全不适用的,因为搜索围棋下子方法17246的复杂度为10,而国际象棋只有10。

为了战胜人类围棋世界冠军,AlphaGo需要使用更加智能的方式。深度学习技术为这种方式提供了可能。AlphaGo主要由三个部分组成,它们分别是蒙特卡罗树搜索(Monte Carlo tree search,MCTS)、估值网络(value network)和走棋网络(policy network)。蒙特卡罗树搜索算法实现了对不同落子点的搜索,不过和之前的纯暴力搜索不同,AlphaGo中使用的蒙特卡罗树会根据估值网络和走棋网络对落子后局势的评判结果来更加智能地寻找最佳落子点。

AlphaGo背后真正的大脑是估值网络和走棋网络,而这两个组件都是通过深度学习实现的。走棋网络解决的问题是给定当前棋盘,预测下一步应该在哪落子。通过从大量人类围棋高手对弈的棋谱获取的训练数据,走棋网络能够以57%的准确率预测人类围棋高手下一步的落子点。然而,仅仅预测人类高手的落子方法是不够的,为了能够战胜人类冠军,走棋网络还通过自己跟自己对弈的方式来进一步提高落子水平。AlphaGo的另外一个大脑是估值网络,它解决的问题是给定当前的棋盘,判断黑棋赢的概率。训练估值网络所使用的数据就是落子网络自己和自己对弈时产生的。通过蒙特卡罗树搜索的方法将走棋网络和估值网络这两个大脑有机地结合,AlphaGo才最终以悬殊的比分战胜了人类的围棋世界冠军。

仅在一年之后,AlphaGo的改进版Alpha Zero再次在围棋领域实现突破。相比于之前的AlphaGo,其最大的改变在于:第一,AlphaGo Zero极大程度上减少了对训练数据的需求;第二,AlphaGo Zero将原来的两个神经网络归一成了一个。

对于第一点,从学术上看,完全不使用标注数据的算法能够战胜监督式的算法绝对是学术界的一个重大突破,不过,要将这个成果应用于实际问题还有很长的路要走。虽然AlphaGo Zero在训练的过程中没有使用标注数据,但是AlphaGo Zero系统设计中用到了人类对于围棋问题的定义,而在大部分的真实问题中,系统很难将一个问题的边界和规则完全定义清楚。比如在无人驾驶问题中,我们可以定义“撞到人”是绝对不能发生的,但“撞到稻草人”可能可以接受。正如Andrew Ng(吴恩达)所说的,目前人工智能落地主要还是依靠监督式的学习。

AlphaGo战胜人类世界冠军不是人机博弈的终点,相反,这只是一个开始。AlphaGo的开发团队DeepMind最近又宣布了他们的下一个[32]目标——《星际争霸2》。《星际争霸2》是暴雪公司(Blizzard)开发的一款即时战略游戏。在游戏中,玩家需要采集资源、建造建筑、生产战斗单位来消灭对方玩家。相比围棋,《星际争霸2》对于人工智能系统设计的难度又有指数级的提高。首先,围棋的落子方式虽然多,但也是有限的。而人工智能操作《星际争霸2》时,在任意一个时刻,人工智能系统需要同时(几乎同时)操作多个不同单位,而且操作的方式是完全开放的,几乎没有限制,所以确定这些操作很难通过搜索完成。其次,《星际争霸2》是一个信息不对称的系统。下围

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

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载