第1章 什么是深度学习
本章包括以下内容:
- 基本概念的定义
- 机器学习发展的时间线
- 深度学习日益流行的关键因素及其未来潜力
在过去的几年里,人工智能( AI)一直是媒体大肆炒作的热点话题。机器学习、深度学习和人工智能都出现在不计其数的文章中,而这些文章通常都发表于非技术出版物。我们的未来被描绘成拥有智能聊天机器人、自动驾驶汽车和虚拟助手,这一未来有时被渲染成可怕的景象,有时则被描绘为乌托邦,人类的工作将十分稀少,大部分经济活动都由机器人或人工智能体(AI agent)来完成。对于未来或当前的机器学习从业者来说,重要的是能够从噪声中识别出信号,从而在过度炒作的新闻稿中发现改变世界的重大进展。我们的未来充满风险,而你可以在其中发挥积极的作用:读完本书后,你将会成为人工智能体的开发者之一。那么我们首先来回答下列问题:到目前为止,深度学习已经取得了哪些进展?深度学习有多重要?接下来我们要做什么?媒体炒作是否可信?
本章将介绍关于人工智能、机器学习以及深度学习的必要背景。
1.1 人工智能、机器学习与深度学习
首先,在提到人工智能时,我们需要明确定义所讨论的内容。什么是人工智能、机器学习与深度学习(见图 1-1)?这三者之间有什么关系?
图 1-1 人工智能、机器学习与深度学习
1.1.1 人工智能
人工智能诞生于 20世纪 50年代,当时计算机科学这一新兴领域的少数先驱开始提出疑问:计算机是否能够“思考”?我们今天仍在探索这一问题的答案。人工智能的简洁定义如下:努力将通常由人类完成的智力任务自动化。因此,人工智能是一个综合性的领域,不仅包括机器学习与深度学习,还包括更多不涉及学习的方法。例如,早期的国际象棋程序仅包含程序员精心编写的硬编码规则,并不属于机器学习。在相当长的时间内,许多专家相信,只要程序员精心编写足够多的明确规则来处理知识,就可以实现与人类水平相当的人工智能。这一方法被称为符号主义人工智能(symbolic AI),从 20世纪 50年代到 80年代末是人工智能的主流范式。在 20世纪 80年代的专家系统(expert system)热潮中,这一方法的热度达到了顶峰。
虽然符号主义人工智能适合用来解决定义明确的逻辑问题,比如下国际象棋,但它难以给出明确的规则来解决更加复杂、模糊的问题,比如图像分类、语音识别和语言翻译。于是出现了一种新的方法来替代符号主义人工智能,这就是机器学习(machine learning)。
1.1.2 机器学习
在维多利亚时代的英格兰,埃达 •洛夫莱斯伯爵夫人是查尔斯 •巴贝奇的好友兼合作者,后者发明了分析机(Analytical Engine),即第一台通用的机械式计算机。虽然分析机这一想法富有远见,并且相当超前,但它在 19世纪三四十年代被设计出来时并没有打算用作通用计算机,因为当时还没有“通用计算”这一概念。它的用途仅仅是利用机械操作将数学分析领域的某些计算自动化,因此得名“分析机”。1843年,埃达 •洛夫莱斯伯爵夫人对这项发明评论道:“分析机谈不上能创造什么东西。它只能完成我们命令它做的任何事情……它的职责是帮助我们去实现我们已知的事情。”
随后,人工智能先驱阿兰 •图灵在其 1950年发表的具有里程碑意义的论文“计算机器和智能”中,引用了上述评论并将其称为“洛夫莱斯伯爵夫人的异议”。图灵在这篇论文中介绍了图灵测试以及日后人工智能所包含的重要概念。在引述埃达 •洛夫莱斯伯爵夫人的同时,图灵还思考了这样一个问题:通用计算机是否能够学习与创新?他得出的结论是“能”。
机器学习的概念就来自于图灵的这个问题:对于计算机而言,除了“我们命令它做的任何事情”之外,它能否自我学习执行特定任务的方法?计算机能否让我们大吃一惊?如果没有程序员精心编写的数据处理规则,计算机能否通过观察数据自动学会这些规则?
图灵的这个问题引出了一种新的编程范式。在经典的程序设计(即符号主义人工智能的范式)中,人们输入的是规则(即程序)和需要根据这些规则进行处理的数据,系统输出的是答案(见图 1-2)。利用机器学习,人们输入的是数据和从这些数据中预期得到的答案,系统输出的是规则。这些规则随后可应用于新的数据,并使计算机自主生成答案。
图 1-2 机器学习:一种新的编程范式
机器学习系统是训练出来的,而不是明确地用程序编写出来的。将与某个任务相关的许多示例输入机器学习系统,它会在这些示例中找到统计结构,从而最终找到规则将任务自动化。举个例子,你想为度假照片添加标签,并且希望将这项任务自动化,那么你可以将许多人工打好标签的照片输入机器学习系统,系统将学会将照片与特定标签联系在一起的统计规则。
虽然机器学习在 20世纪 90年代才开始蓬勃发展,但它迅速成为人工智能最受欢迎且最成功的分支领域。这一发展的驱动力来自于速度更快的硬件与更大的数据集。机器学习与数理统计密切相关,但二者在几个重要方面有所不同。不同于统计学,机器学习经常用于处理复杂的大型数据集(比如包含数百万张图像的数据集,每张图像又包含数万个像素),用经典的统计分析(比如贝叶斯分析)来处理这种数据集是不切实际的。因此,机器学习(尤其是深度学习)呈现出相对较少的数学理论(可能太少了),并且是以工程为导向的。这是一门需要上手实践的学科,想法更多地是靠实践来证明,而不是靠理论推导。
1.1.3 从数据中学习表示
为了给出深度学习的定义并搞清楚深度学习与其他机器学习方法的区别,我们首先需要知道机器学习算法在做什么。前面说过,给定包含预期结果的示例,机器学习将会发现执行一项数据处理任务的规则。因此,我们需要以下三个要素来进行机器学习。
- 输入数据点。例如,你的任务是语音识别,那么这些数据点可能是记录人们说话的声音文件。如果你的任务是为图像添加标签,那么这些数据点可能是图像。‰
- 预期输出的示例。对于语音识别任务来说,这些示例可能是人们根据声音文件整理生成的文本。对于图像标记任务来说,预期输出可能是“狗”“猫”之类的标签。
- 衡量算法效果好坏的方法。这一衡量方法是为了计算算法的当前输出与预期输出的差距。衡量结果是一种反馈信号,用于调节算法的工作方式。这个调节步骤就是我们所说的学习。
机器学习模型将输入数据变换为有意义的输出,这是一个从已知的输入和输出示例中进行“学习”的过程。因此,机器学习和深度学习的核心问题在于有意义地变换数据,换句话说,在于学习输入数据的有用表示(representation)——这种表示可以让数据更接近预期输出。在进一步讨论之前,我们需要先回答一个问题:什么是表示?这一概念的核心在于以一种不同的方式来查看数据(即表征数据或将数据编码)。例如,彩色图像可以编码为 RGB(红 -绿 -式或 HSV(色相 -饱和度 -蓝)格明度)格式,这是对相同数据的两种不同表示。在处理某些任务时,使用某种表示可能会很困难,但换用另一种表示就会变得很简单。举个例子,对于“选择图像中所有红色像素”这个任务,使用 RGB格式会更简单,而对于“降低图像饱和度”这个任务,使用 HSV格式则更简单。机器学习模型都是为输入数据寻找合适的表示——对数据进行变换,使其更适合手头的任务(比如分类任务)。
图 1-3 一些样本数据
我们来具体说明这一点。考虑 x轴、y轴和在这个 (x, y)坐标系中由坐标表示的一些点,如图 1-3所示。
可以看到,图中有一些白点和一些黑点。假设我们想要开发一个算法,输入一个点的坐标 (x, y),就能够判断这个点是黑色还是白色。在这个例子中:
- 输入是点的坐标;
- 预期输出是点的颜色;
- 衡量算法效果好坏的一种方法是,正确分类的点所占的百分比。
这里我们需要的是一种新的数据表示,可以明确区分白点与黑点。可用的方法有很多,这里用的是坐标变换,如图 1-4所示。
图 1-4 坐标变换
在这个新的坐标系中,点的坐标可以看作数据的一种新的表示。这种表示很棒!利用这种新的表示,用一条简单的规则就可以描述黑 /白分类问题:“x>0的是黑点”或“x<0的是白点”。这种新的表示基本上解决了该分类问题。
在这个例子中,我们人为定义了坐标变换。但是,如果我们尝试系统性地搜索各种可能的坐标变换,并用正确分类的点所占百分比作为反馈信号,那么我们做的就是机器学习。机器学习中的学习指的是,寻找更好数据表示的自动搜索过程。
所有机器学习算法都包括自动寻找这样一种变换:这种变换可以根据任务将数据转化为更加有用的表示。这些操作可能是前面提到的坐标变换,也可能是线性投影(可能会破坏信息)、平移、非线性操作(比如“选择所有 x>0的点”),等等。机器学习算法在寻找这些变换时通常没有什么创造性,而仅仅是遍历一组预先定义好的操作,这组操作叫作假设空间(hypothesis space)。
这就是机器学习的技术定义:在预先定义好的可能性空间中,利用反馈信号的指引来寻找输入数据的有用表示。这个简单的想法可以解决相当多的智能任务,从语音识别到自动驾驶都能解决。
现在你理解了学习的含义,下面我们来看一下深度学习的特殊之处。
1.1.4 深度学习之“深度”
深度学习是机器学习的一个分支领域:它是从数据中学习表示的一种新方法,强调从连续的层(layer)中进行学习,这些层对应于越来越有意义的表示。“深度学习”中的“深度”指的并不是利用这种方法所获取的更深层次的理解,而是指一系列连续的表示层。数据模型中包含多少层,这被称为模型的深度(depth)。这一领域的其他名称包括分层表示学习(layered representations learning)和层级表示学习(hierarchical representations learning)。现代深度学习通常包含数十个甚至上百个连续的表示层,这些表示层全都是从训练数据中自动学习的。与此相反,其他机器学习方法的重点往往是仅仅学习一两层的数据表示,因此有时也被称为浅层学习(shallow learning)。
在深度学习中,这些分层表示几乎总是通过叫作神经网络(neural network)的模型来学习得到的。神经网络的结构是逐层堆叠。神经网络这一术语来自于神经生物学,然而,虽然深度学习的一些核心概念是从人们对大脑的理解中汲取部分灵感而形成的,但深度学习模型不是大脑模型。没有证据表明大脑的学习机制与现代深度学习模型所使用的相同。你可能会读到一些流行科学的文章,宣称深度学习的工作原理与大脑相似或者是根据大脑的工作原理进行建模的,但事实并非如此。对于这一领域的新人来说,如果认为深度学习与神经生物学存在任何关系,那将使人困惑,只会起到反作用。你无须那种“就像我们的头脑一样”的神秘包装,最好也忘掉读过的深度学习与生物学之间的假想联系。就我们的目的而言,深度学习是从数据中学习表示的一种数学框架。
深度学习算法学到的表示是什么样的?我们来看一个多层网络(见图 1-5)如何对数字图像进行变换,以便识别图像中所包含的数字。
图 1-5 用于数字分类的深度神经网络
如图 1-6所示,这个网络将数字图像转换成与原始图像差别越来越大的表示,而其中关于最终结果的信息却越来越丰富。你可以将深度网络看作多级信息蒸馏操作:信息穿过连续的过滤器,其纯度越来越高(即对任务的帮助越来越大)。
这就是深度学习的技术定义:学习数据表示的多级方法。这个想法很简单,但事实证明,非常简单的机制如果具有足够大的规模,将会产生魔法般的效果。
图 1-6 数字图像分类模型学到的深度表示
1.1.5 用三张图理解深度学习的工作原理
现在你已经知道,机器学习是将输入(比如图像)映射到目标(比如标签“猫”),这一过程是通过观察许多输入和目标的示例来完成的。你还知道,深度神经网络通过一系列简单的数据变换(层)来实现这种输入到目标的映射,而这些数据变换都是通过观察示例学习到的。下面来具体看一下这种学习过程是如何发生的。
神经网络中每层对输入数据所做的具体操作保存在该层的权重(weight)中,其本质是一串数字。用术语来说,每层实现的变换由其权重来参数化(parameterize,见图 1-7)。权重有时也被称为该层的参数(parameter)。在这种语境下,学习的意思是为神经网络的所有层找到一组权重值,使得该网络能够将每个示例输入与其目标正确地一一对应。但重点来了:一个深度神经网络可能包含数千万个参数。找到所有参数的正确取值可能是一项非常艰巨的任务,特别是考虑到修改某个参数值将会影响其他所有参数的行为。
图 1-7 神经网络是由其权重来参数化
想要控制一件事物,首先需要能够观察它。想要控制神经网络的输出,就需要能够衡量该输出与预期值之间的距离。这是神经网络损失函数(loss function)的任务,该函数也叫目标函数(objective function)。损失函数的输入是网络预测值与真实目标值(即你希望网络输出的结果),然后计算一个距离值,衡量该网络在这个示例上的效果好坏(见图 1-8)。
图 1-8 损失函数用来衡量网络输出结果的质量
深度学习的基本技巧是利用这个距离值作为反馈信号来对权重值进行微调,以降低当前示例对应的损失值(见图 1-9)。这种调节由优化器(optimizer)来完成,它实现了所谓的反向传播(backpropagation)算法,这是深度学习的核心算法。下一章中会详细地解释反向传播的工作原理。
图 1-9 将损失值作为反馈信号来调节权重
一开始对神经网络的权重随机赋值,因此网络只是实现了一系列随机变换。其输出结果自然也和理想值相去甚远,相应地,损失值也很高。但随着网络处理的示例越来越多,权重值也在向正确的方向逐步微调,损失值也逐渐降低。这就是训练循环(training loop),将这种循环重复足够多的次数(通常对数千个示例进行数十次迭代),得到的权重值可以使损失函数最小。具有最小损失的网络,其输出值与目标值尽可能地接近,这就是训练好的网络。再次强调,这是一个简单的机制,一旦具有足够大的规模,将会产生魔法般的效果。
1.1.5 用三张图理解深度学习的工作原理
现在你已经知道,机器学习是将输入(比如图像)映射到目标(比如标签“猫”),这一过程是通过观察许多输入和目标的示例来完成的。你还知道,深度神经网络通过一系列简单的数据变换(层)来实现这种输入到目标的映射,而这些数据变换都是通过观察示例学习到的。下面来具体看一下这种学习过程是如何发生的。
神经网络中每层对输入数据所做的具体操作保存在该层的权重(weight)中,其本质是一串数字。用术语来说,每层实现的变换由其权重来参数化(parameterize,见图 1-7)。权重有时也被称为该层的参数(parameter)。在这种语境下,学习的意思是为神经网络的所有层找到一组权重值,使得该网络能够将每个示例输入与其目标正确地一一对应。但重点来了:一个深度神经网络可能包含数千万个参数。找到所有参数的正确取值可能是一项非常艰巨的任务,特别是考虑到修改某个参数值将会影响其他所有参数的行为。
图 1-7 神经网络是由其权重来参数化
想要控制一件事物,首先需要能够观察它。想要控制神经网络的输出,就需要能够衡量该输出与预期值之间的距离。这是神经网络损失函数(loss function)的任务,该函数也叫目标函数(objective function)。损失函数的输入是网络预测值与真实目标值(即你希望网络输出的结果),然后计算一个距离值,衡量该网络在这个示例上的效果好坏(见图 1-8)。
图 1-8 损失函数用来衡量网络输出结果的质量
深度学习的基本技巧是利用这个距离值作为反馈信号来对权重值进行微调,以降低当前示例对应的损失值(见图 1-9)。这种调节由优化器(optimizer)来完成,它实现了所谓的反向传播(backpropagation)算法,这是深度学习的核心算法。下一章中会详细地解释反向传播的工作原理。
图 1-9 将损失值作为反馈信号来调节权重
一开始对神经网络的权重随机赋值,因此网络只是实现了一系列随机变换。其输出结果自然也和理想值相去甚远,相应地,损失值也很高。但随着网络处理的示例越来越多,权重值也在向正确的方向逐步微调,损失值也逐渐降低。这就是训练循环(training loop),将这种循环重复足够多的次数(通常对数千个示例进行数十次迭代),得到的权重值可以使损失函数最小。具有最小损失的网络,其输出值与目标值尽可能地接近,这就是训练好的网络。再次强调,这是一个简单的机制,一旦具有足够大的规模,将会产生魔法般的效果。
1.1.6 深度学习已经取得的进展
虽然深度学习是机器学习一个相当有年头的分支领域,但在 21 世纪前十年才崛起。在随后的几年里,它在实践中取得了革命性进展,在视觉和听觉等感知问题上取得了令人瞩目的成果,而这些问题所涉及的技术,在人类看来是非常自然、非常直观的,但长期以来却一直是机器难以解决的。
特别要强调的是,深度学习已经取得了以下突破,它们都是机器学习历史上非常困难的领域:
- 接近人类水平的图像分类
- 接近人类水平的语音识别
- 接近人类水平的手写文字转录
- 更好的机器翻译
- 更好的文本到语音转换
- 数字助理,比如谷歌即时(Google Now)和亚马逊 Alexa
- 接近人类水平的自动驾驶
- 更好的广告定向投放,Google、百度、必应都在使用
- 更好的网络搜索结果
- 能够回答用自然语言提出的问题
- 在围棋上战胜人类
我们仍然在探索深度学习能力的边界。我们已经开始将其应用于机器感知和自然语言理解之外的各种问题,比如形式推理。如果能够成功的话,这可能预示着深度学习将能够协助人类进行科学研究、软件开发等活动。
1.1.7 不要相信短期炒作
虽然深度学习近年来取得了令人瞩目的成就,但人们对这一领域在未来十年间能够取得的成就似乎期望过高。虽然一些改变世界的应用(比如自动驾驶汽车)已经触手可及,但更多的应用可能在长时间内仍然难以实现,比如可信的对话系统、达到人类水平的跨任意语言的机器翻译、达到人类水平的自然语言理解。我们尤其不应该把达到人类水平的通用智能(human-level general intelligence)的讨论太当回事。在短期内期望过高的风险是,一旦技术上没有实现,那么研究投资将会停止,而这会导致在很长一段时间内进展缓慢。
这种事曾经发生过。人们曾对人工智能极度乐观,随后是失望与怀疑,进而导致资金匮乏。这种循环发生过两次,最早始于 20 世纪 60 年代的符号主义人工智能。在早期的那些年里,人们激动地预测着人工智能的未来。马文 • 闵斯基是符号主义人工智能方法最有名的先驱和支持者之一,他在 1967 年宣称:“在一代人的时间内……将基本解决创造‘人工智能’的问题。”三年后的 1970 年,他做出了更为精确的定量预测:“在三到八年的时间里,我们将拥有一台具有人类平均智能的机器。”在 2016 年,这一目标看起来仍然十分遥远,遥远到我们无法预测需要多长时间才能实现。但在 20 世纪 60 年代和 70 年代初,一些专家却相信这一目标近在咫尺(正如今天许多人所认为的那样)。几年之后,由于这些过高的期望未能实现,研究人员和政府资金均转向其他领域,这标志着第一次人工智能冬天(AI winter)的开始(这一说法来自“核冬天”,因为当时是冷战高峰之后不久)。
这并不是人工智能的最后一个冬天。20 世纪 80 年代,一种新的符号主义人工智能——专家系统(expert system)——开始在大公司中受到追捧。最初的几个成功案例引发了一轮投资热潮,进而全球企业都开始设立人工智能部门来开发专家系统。1985 年前后,各家公司每年在这项技术上的花费超过 10 亿美元。但到了 20 世纪 90 年代初,这些系统的维护费用变得很高,难以扩展,并且应用范围有限,人们逐渐对其失去兴趣。于是开始了第二次人工智能冬天。
我们可能正在见证人工智能炒作与让人失望的第三次循环,而且我们仍处于极度乐观的阶段。最好的做法是降低我们的短期期望,确保对这一技术领域不太了解的人能够清楚地知道深度学习能做什么、不能做什么。
1.1.8 人工智能的未来
虽然我们对人工智能的短期期望可能不切实际,但长远来看前景是光明的。我们才刚刚开始将深度学习应用于许多重要的问题,从医疗诊断到数字助手,在这些问题上深度学习都发挥了变革性作用。过去五年里,人工智能研究一直在以惊人的速度发展,这在很大程度上是由于人工智能短短的历史中前所未见的资金投入,但到目前为止,这些进展却很少能够转化为改变世界的产品和流程。深度学习的大多数研究成果尚未得到应用,至少尚未应用到它在各行各业中能够解决的所有问题上。你的医生和会计师都还没有使用人工智能。你在日常生活中可能也不会用到人工智能。当然,你可以向智能手机提出简单的问题并得到合理的回答,也可以在亚马逊网站上得到相当有用的产品推荐,还可以在谷歌相册(Google Photos)网站搜索“生日”并立刻找到上个月你女儿生日聚会的照片。与过去相比,这些技术已大不相同,但这些工具仍然只是日常生活的陪衬。人工智能仍需进一步转变为我们工作、思考和生活的核心。
眼下,我们似乎很难相信人工智能会对世界产生巨大影响,因为它还没有被广泛地部署应用——正如 1995 年,我们也难以相信互联网在未来会产生的影响。当时,大多数人都没有认识到互联网与他们的关系,以及互联网将如何改变他们的生活。今天的深度学习和人工智能也是如此。但不要怀疑:人工智能即将到来。在不远的未来,人工智能将会成为你的助手,甚至成为你的朋友。它会回答你的问题,帮助你教育孩子,并关注你的健康。它还会将生活用品送到你家门口,并开车将你从 A 地送到 B 地。它还会是你与日益复杂的、信息密集的世界之间的接口。更为重要的是,人工智能将会帮助科学家在所有科学领域(从基因学到数学)取得突破性进展,从而帮助人类整体向前发展。
在这个过程中,我们可能会经历一些挫折,也可能会遇到新的人工智能冬天,正如互联网行业那样,在 1998—1999 年被过度炒作,进而在 21 世纪初遭遇破产,并导致投资停止。但我们最终会实现上述目标。人工智能最终将应用到我们社会和日常生活的几乎所有方面,正如今天的互联网一样。
不要相信短期的炒作,但一定要相信长期的愿景。人工智能可能需要一段时间才能充分发挥其潜力。这一潜力的范围大到难以想象,但人工智能终将到来,它将以一种奇妙的方式改变我们的世界。
1.2 深度学习之前:机器学习简史
深度学习已经得到了人工智能历史上前所未有的公众关注度和产业投资,但这并不是机器学习的第一次成功。可以这样说,当前工业界所使用的绝大部分机器学习算法都不是深度学习算法。深度学习不一定总是解决问题的正确工具:有时没有足够的数据,深度学习不适用;有时用其他算法可以更好地解决问题。如果你第一次接触的机器学习就是深度学习,那你可能会发现手中握着一把深度学习“锤子”,而所有机器学习问题看起来都像是“钉子”。为了避免陷入这个误区,唯一的方法就是熟悉其他机器学习方法并在适当的时候进行实践。
关于经典机器学习方法的详细讨论已经超出了本书范围,但我们将简要回顾这些方法,并介绍这些方法的历史背景。这样我们可以将深度学习放入机器学习的大背景中,并更好地理解深度学习的起源以及它为什么如此重要。
1.2.1 概率建模
概率建模(probabilistic modeling)是统计学原理在数据分析中的应用。它是最早的机器学习形式之一,至今仍在广泛使用。其中最有名的算法之一就是朴素贝叶斯算法。
朴素贝叶斯是一类基于应用贝叶斯定理的机器学习分类器,它假设输入数据的特征都是独立的。这是一个很强的假设,或者说“朴素的”假设,其名称正来源于此。这种数据分析方法比计算机出现得还要早,在其第一次被计算机实现(很可能追溯到 20 世纪 50 年代)的几十年前就已经靠人工计算来应用了。贝叶斯定理和统计学基础可以追溯到 18 世纪,你学会了这两点就可以开始使用朴素贝叶斯分类器了。
另一个密切相关的模型是 logistic 回归(logistic regression,简称 logreg),它有时被认为是现代机器学习的“hello world”。不要被它的名称所误导——logreg 是一种分类算法,而不是回归算法。与朴素贝叶斯类似,logreg 的出现也比计算机早很长时间,但由于它既简单又通用,至今仍然很有用。面对一个数据集,数据科学家通常会首先尝试使用这个算法,以便初步熟悉手头的分类任务。
1.2.2 早期神经网络
神经网络早期的迭代方法已经完全被本章所介绍的现代方法所取代,但仍有助于我们了解深度学习的起源。虽然人们早在 20 世纪 50 年代就将神经网络作为玩具项目,并对其核心思想进行研究,但这一方法在数十年后才被人们所使用。在很长一段时间内,一直没有训练大型神经网络的有效方法。这一点在 20 世纪 80 年代中期发生了变化,当时很多人都独立地重新发现了反向传播算法——一种利用梯度下降优化来训练一系列参数化运算链的方法(本书后面将给出这些概念的具体定义),并开始将其应用于神经网络。
贝尔实验室于 1989 年第一次成功实现了神经网络的实践应用,当时 Yann LeCun 将卷积神经网络的早期思想与反向传播算法相结合,并将其应用于手写数字分类问题,由此得到名为 LeNet 的网络,在 20 世纪 90 年代被美国邮政署采用,用于自动读取信封上的邮政编码。
1.2.3 核方法
上节所述神经网络取得了第一次成功,并在 20 世纪 90 年代开始在研究人员中受到一定的重视,但一种新的机器学习方法在这时声名鹊起,很快就使人们将神经网络抛诸脑后。这种方法就是核方法(kernel method)。核方法是一组分类算法,其中最有名的就是支持向量机(SVM,support vector machine)。虽然 Vladimir Vapnik 和 Alexey Chervonenkis 早在 1963 年就发表了较早版本的线性公式 2,但 SVM 的现代公式由 Vladimir Vapnik 和 Corinna Cortes 于 20 世纪 90 年代初在贝尔实验室提出,并发表于 1995 年 3。
2VAPNIK V, CHERVONENKIS A. A note on one class of perceptrons [J]. Automation and Remote Control, 1964, 25(1).
3VAPNIK V, CORTES C. Support-vector networks [J]. Machine Learning, 1995, 20(3): 273-297.
SVM 的目标是通过在属于两个不同类别的两组数据点之间找到良好决策边界(decision boundary,见图 1-10)来解决分类问题。决策边界可以看作一条直线或一个平面,将训练数据划分为两块空间,分别对应于两个类别。对于新数据点的分类,你只需判断它位于决策边界的哪一侧。
图 1-10 决策边界
SVM 通过两步来寻找决策边界。
(1) 将数据映射到一个新的高维表示,这时决策边界可以用一个超平面来表示(如果数据像图 1-10 那样是二维的,那么超平面就是一条直线)。
(2) 尽量让超平面与每个类别最近的数据点之间的距离最大化,从而计算出良好决策边界(分割超平面),这一步叫作间隔最大化(maximizing the margin)。这样决策边界可以很好地推广到训练数据集之外的新样本。
将数据映射到高维表示从而使分类问题简化,这一技巧可能听起来很不错,但在实践中通常是难以计算的。这时就需要用到核技巧(kernel trick,核方法正是因这一核心思想而得名)。其基本思想是:要想在新的表示空间中找到良好的决策超平面,你不需要在新空间中直接计算点的坐标,只需要在新空间中计算点对之间的距离,而利用核函数(kernel function)可以高效地完成这种计算。核函数是一个在计算上能够实现的操作,将原始空间中的任意两点映射为这两点在目标表示空间中的距离,完全避免了对新表示进行直接计算。核函数通常是人为选择的,而不是从数据中学到的——对于 SVM 来说,只有分割超平面是通过学习得到的。
SVM 刚刚出现时,在简单的分类问题上表现出了最好的性能。当时只有少数机器学习方法得到大量的理论支持,并且适合用于严肃的数学分析,因而非常易于理解和解释,SVM 就是其中之一。由于 SVM 具有这些有用的性质,很长一段时间里它在实践中非常流行。
但是,SVM 很难扩展到大型数据集,并且在图像分类等感知问题上的效果也不好。SVM 是一种比较浅层的方法,因此要想将其应用于感知问题,首先需要手动提取出有用的表示(这叫作特征工程),这一步骤很难,而且不稳定。
1.2.4 决策树、随机森林与梯度提升机
决策树(decision tree)是类似于流程图的结构,可以对输入数据点进行分类或根据给定输入来预测输出值(见图 1-11)。决策树的可视化和解释都很简单。在 21 世纪前十年,从数据中学习得到的决策树开始引起研究人员的广泛关注。到了 2010 年,决策树经常比核方法更受欢迎。
图 1-11 决策树:需要学习的参数是关于数据的问题。举个例子,问题可能是:“数据中第 2 个系数是否大于 3.5 ?”
特别是随机森林(random forest)算法,它引入了一种健壮且实用的决策树学习方法,即首先构建许多决策树,然后将它们的输出集成在一起。随机森林适用于各种各样的问题——对于任何浅层的机器学习任务来说,它几乎总是第二好的算法。广受欢迎的机器学习竞赛网站 Kaggle 在 2010 年上线后,随机森林迅速成为平台上人们的最爱,直到 2014 年才被梯度提升机所取代。与随机森林类似,梯度提升机(gradient boosting machine)也是将弱预测模型(通常是决策树)集成的机器学习技术。它使用了梯度提升方法,通过迭代地训练新模型来专门解决之前模型的弱点,从而改进任何机器学习模型的效果。将梯度提升技术应用于决策树时,得到的模型与随机森林具有相似的性质,但在绝大多数情况下效果都比随机森林要好。它可能是目前处理非感知数据最好的算法之一(如果非要加个“之一”的话)。和深度学习一样,它也是 Kaggle 竞赛中最常用的技术之一。
1.2.5 回到神经网络
虽然神经网络几乎被整个科学界完全忽略,但仍有一些人在继续研究神经网络,并在 2010 年左右开始取得重大突破。这些人包括:多伦多大学 Geoffrey Hinton 的小组、蒙特利尔大学的 Yoshua Bengio、纽约大学的 Yann LeCun 和瑞士的 IDSIA。
2011 年,来自 IDSIA 的 Dan Ciresan 开始利用 GPU 训练的深度神经网络赢得学术性的图像分类竞赛,这是现代深度学习第一次在实践中获得成功。但真正的转折性时刻出现在 2012 年,当年 Hinton 小组参加了每年一次的大规模图像分类挑战赛 ImageNet。ImageNet 挑战赛在当时以困难著称,参赛者需要对 140 万张高分辨率彩色图像进行训练,然后将其划分到 1000 个不同的类别中。2011 年,获胜的模型基于经典的计算机视觉方法,其 top-5 精度 4 只有 74.3%。到了 2012 年,由 Alex Krizhevsky 带领并由 Geoffrey Hinton 提供建议的小组,实现了 83.6% 的 top-5 精度——这是一项重大突破。此后,这项竞赛每年都由深度卷积神经网络所主导。到了 2015 年,获胜者的精度达到了 96.4%,此时 ImageNet 的分类任务被认为是一个已经完全解决的问题。
4top-5 精度是指给定一张图像,如果模型预测的前 5 个标签中包含正确标签,即为预测正确。——译者注
自 2012 年以来,深度卷积神经网络(convnet)已成为所有计算机视觉任务的首选算法。更一般地说,它在所有感知任务上都有效。在 2015 年和 2016 年的主要计算机视觉会议上,几乎所有演讲都与 convnet 有关。与此同时,深度学习也在许多其他类型的问题上得到应用,比如自然语言处理。它已经在大量应用中完全取代了 SVM 与决策树。举个例子,欧洲核子研究中心(CERN)多年来一直使用基于决策树的方法来分析来自大型强子对撞机(LHC)ATLAS 探测器的粒子数据,但 CERN 最终转向基于 Keras 的深度神经网络,因为它的性能更好,而且在大型数据集上易于训练。
1.2.6 深度学习有何不同
深度学习发展得如此迅速,主要原因在于它在很多问题上都表现出更好的性能。但这并不是唯一的原因。深度学习还让解决问题变得更加简单,因为它将特征工程完全自动化,而这曾经是机器学习工作流程中最关键的一步。
先前的机器学习技术(浅层学习)仅包含将输入数据变换到一两个连续的表示空间,通常使用简单的变换,比如高维非线性投影(SVM)或决策树。但这些技术通常无法得到复杂问题所需要的精确表示。因此,人们必须竭尽全力让初始输入数据更适合用这些方法处理,也必须手动为数据设计好的表示层。这叫作特征工程。与此相反,深度学习完全将这个步骤自动化:利用深度学习,你可以一次性学习所有特征,而无须自己手动设计。这极大地简化了机器学习工作流程,通常将复杂的多阶段流程替换为一个简单的、端到端的深度学习模型。
你可能会问,如果问题的关键在于有多个连续表示层,那么能否重复应用浅层方法,以实现和深度学习类似的效果?在实践中,如果连续应用浅层学习方法,其收益会随着层数增加迅速降低,因为三层模型中最优的第一表示层并不是单层或双层模型中最优的第一表示层。深度学习的变革性在于,模型可以在同一时间共同学习所有表示层,而不是依次连续学习(这被称为贪婪学习)。通过共同的特征学习,一旦模型修改某个内部特征,所有依赖于该特征的其他特征都会相应地自动调节适应,无须人为干预。一切都由单一反馈信号来监督:模型中的每一处变化都是为了最终目标服务。这种方法比贪婪地叠加浅层模型更加强大,因为它可以通过将复杂、抽象的表示拆解为很多个中间空间(层)来学习这些表示,每个中间空间仅仅是前一个空间的简单变换。
深度学习从数据中进行学习时有两个基本特征:第一,通过渐进的、逐层的方式形成越来越复杂的表示;第二,对中间这些渐进的表示共同进行学习,每一层的变化都需要同时考虑上下两层的需要。总之,这两个特征使得深度学习比先前的机器学习方法更加成功。
1.2.7 机器学习现状
要想了解机器学习算法和工具的现状,一个好方法是看一下 Kaggle 上的机器学习竞赛。Kaggle 上的竞争非常激烈(有些比赛有数千名参赛者,并提供数百万美元的奖金),而且涵盖了各种类型的机器学习问题,所以它提供了一种现实方法来评判哪种方法有效、哪种方法无效。那么哪种算法能够可靠地赢得竞赛呢?顶级参赛者都使用哪些工具?
在 2016 年和 2017 年,Kaggle 上主要有两大方法:梯度提升机和深度学习。具体而言,梯度提升机用于处理结构化数据的问题,而深度学习则用于图像分类等感知问题。使用前一种方法的人几乎都使用优秀的 XGBoost 库,它同时支持数据科学最流行的两种语言:Python 和 R。使用深度学习的 Kaggle 参赛者则大多使用 Keras 库,因为它易于使用,非常灵活,并且支持 Python。
要想在如今的应用机器学习中取得成功,你应该熟悉这两种技术:梯度提升机,用于浅层学习问题;深度学习,用于感知问题。用术语来说,你需要熟悉 XGBoost 和 Keras,它们是目前主宰 Kaggle 竞赛的两个库。有了本书,你已经向这个目标迈出了一大步。
1.3 为什么是深度学习,为什么是现在
深度学习用于计算机视觉的两个关键思想,即卷积神经网络和反向传播,在 1989 年就已经为人们所知。长短期记忆(LSTM,long short-term memory)算法是深度学习处理时间序列的基础,它在 1997 年就被开发出来了,而且此后几乎没有发生变化。那么为什么深度学习在 2012 年之后才开始取得成功?这二十年间发生了什么变化?
总的来说,三种技术力量在推动着机器学习的进步:
- 硬件
- 数据集和基准
- 算法上的改进由于这一领域是靠实验结果而不是理论指导的,所以只有当合适的数据和硬件可用于尝试
新想法时(或者将旧想法的规模扩大,事实往往也是如此),才可能出现算法上的改进。机器学习不是数学或物理学,靠一支笔和一张纸就能实现重大进展。它是一门工程科学。
在 20 世纪 90 年代和 21 世纪前十年,真正的瓶颈在于数据和硬件。但在这段时间内发生了下面这些事情:互联网高速发展,并且针对游戏市场的需求开发出了高性能图形芯片。
1.3.1 硬件
从 1990 年到 2010 年,非定制 CPU 的速度提高了约 5000 倍。因此,现在可以在笔记本电脑上运行小型深度学习模型,但在 25 年前是无法实现的。
但是,对于计算机视觉或语音识别所使用的典型深度学习模型,所需要的计算能力要比笔记本电脑的计算能力高几个数量级。在 20 世纪前十年里,NVIDIA 和 AMD 等公司投资数十亿美元来开发快速的大规模并行芯片(图形处理器,GPU),以便为越来越逼真的视频游戏提供图形显示支持。这些芯片是廉价的、单一用途的超级计算机,用于在屏幕上实时渲染复杂的 3D 场景。这些投资为科学界带来了好处。2007 年,NVIDIA 推出了 CUDA,作为其 GPU 系列的编程接口。少量 GPU 开始在各种高度并行化的应用中替代大量 CPU 集群,并且最早应用于物理建模。深度神经网络主要由许多小矩阵乘法组成,它也是高度并行化的。2011 年前后,一些研究人员开始编写神经网络的 CUDA 实现,而 Dan Ciresan 5 和 Alex Krizhevsky 6 属于第一批人。
5参见“Flexible, high performance convolutional neural networks for image classification”,刊载于 Proceedings of the 22nd International Joint Conference on Artificial Intelligence,2011 年。
6参见“ImageNet classification with deep convolutional neural networks”,刊载于 Advances in Neural Information Processing Systems,2012 年第 25 辑。
这样,游戏市场资助了用于下一代人工智能应用的超级计算。有时候,大事件都是从游戏开始的。今天,NVIDIA TITAN X(一款游戏 GPU,在 2015 年底售价 1000 美元)可以实现单精度 6.6 TFLOPS 的峰值,即每秒进行 6.6 万亿次 float32
运算。这比一台现代笔记本电脑的速度要快约 350 倍。使用一块 TITAN X 显卡,只需几天就可以训练出几年前赢得 ILSVRC 竞赛的 ImageNet 模型。与此同时,大公司还在包含数百个 GPU 的集群上训练深度学习模型,这种类型的 GPU 是专门针对深度学习的需求开发的,比如 NVIDIA Tesla K80。如果没有现代 GPU,这种集群的超级计算能力是不可能实现的。
此外,深度学习行业已经开始超越 GPU,开始投资于日益专业化的高效芯片来进行深度学习。2016 年,Google 在其年度 I/O 大会上展示了张量处理器(TPU)项目,它是一种新的芯片设计,其开发目的完全是为了运行深度神经网络。据报道,它的速度比最好的 GPU 还要快 10 倍,而且能效更高。
1.3.2 数据
人工智能有时被称为新的工业革命。如果深度学习是这场革命的蒸汽机,那么数据就是煤炭,即驱动智能机器的原材料,没有煤炭一切皆不可能。就数据而言,除了过去 20 年里存储硬件的指数级增长(遵循摩尔定律),最大的变革来自于互联网的兴起,它使得收集与分发用于机器学习的超大型数据集变得可行。如今,大公司使用的图像数据集、视频数据集和自然语言数据集,如果没有互联网的话根本无法收集。例如,Flickr 网站上用户生成的图像标签一直是计算机视觉的数据宝库。YouTube 视频也是一座宝库。维基百科则是自然语言处理的关键数据集。
如果有一个数据集是深度学习兴起的催化剂的话,那么一定是 ImageNet 数据集。它包含 140 万张图像,这些图像已经被人工划分为 1000 个图像类别(每张图像对应 1 个类别)。但 ImageNet 的特殊之处不仅在于其数量之大,还在于与它相关的年度竞赛 7。
7ImageNet 大规模视觉识别挑战赛(ILSVRC)。
正如 Kaggle 自 2010 年以来所展示的那样,公开竞赛是激励研究人员和工程师挑战极限的极好方法。研究人员通过竞争来挑战共同基准,这极大地促进了近期深度学习的兴起。
1.3.3 算法
除了硬件和数据之外,直到 20 世纪前十年的末期,我们仍没有可靠的方法来训练非常深的神经网络。因此,神经网络仍然很浅,仅使用一两个表示层,无法超越更为精确的浅层方法,比如 SVM 和随机森林。关键问题在于通过多层叠加的梯度传播。随着层数的增加,用于训练神经网络的反馈信号会逐渐消失。
这一情况在 2009—2010 年左右发生了变化,当时出现了几个很简单但很重要的算法改进,可以实现更好的梯度传播。
- 更好的神经层激活函数(activation function)。
- 更好的权重初始化方案(weight-initialization scheme),一开始使用逐层预训练的方法,不过这种方法很快就被放弃了。
- 更好的优化方案(optimization scheme),比如 RMSProp 和 Adam。
只有这些改进可以训练 10 层以上的模型时,深度学习才开始大放异彩。
最后,在 2014 年、2015 年和 2016 年,人们发现了更先进的有助于梯度传播的方法,比如批标准化、残差连接和深度可分离卷积。今天,我们可以从头开始训练上千层的模型。
1.3.4 新的投资热潮
随着深度学习于 2012—2013 年在计算机视觉领域成为新的最优算法,并最终在所有感知任务上都成为最优算法,业界领导者开始注意到它。接下来就是逐步升温的业界投资热潮,远远超出了人工智能历史上曾经出现过的任何投资。
2011 年,就在深度学习大放异彩之前,在人工智能方面的风险投资总额大约为 1900 万美元,几乎全都投给了浅层机器学习方法的实际应用。到了 2014 年,这一数字已经涨到了惊人的 3.94 亿美元。这三年里创办了数十家创业公司,试图从深度学习炒作中获利。与此同时,Google、Facebook、百度、微软等大型科技公司已经在内部研究部门进行投资,其金额很可能已经超过了风险投资的现金流。其中只有少数金额被公之于众:2013 年,Google 收购了深度学习创业公司 DeepMind,报道称收购价格为 5 亿美元,这是历史上对人工智能公司的最高收购价格。2014 年,百度在硅谷启动了深度学习研究中心,为该项目投资 3 亿美元。2016 年,深度学习硬件创业公司 Nervana Systems 被英特尔收购,收购价格逾 4 亿美元。
机器学习,特别是深度学习,已成为这些科技巨头产品战略的核心。2015 年末,Google 首席执行官 Sundar Pichai 表示:“机器学习这一具有变革意义的核心技术将促使我们重新思考做所有事情的方式。我们用心将其应用于所有产品,无论是搜索、广告、YouTube 还是 Google Play。我们尚处于早期阶段,但你将会看到我们系统性地将机器学习应用于所有这些领域。”8
8参见“Alphabet earnings call”,2015 年 10 月 22 日。
由于这波投资热潮,短短五年间从事深度学习的人数从几千人涨到数万人,研究进展也达到了惊人的速度。目前没有迹象表明这种趋势会在短期内放缓。
1.3.5 深度学习的大众化
有许多新面孔进入深度学习领域,而主要的驱动因素之一是该领域所使用工具集的大众化。在早期,从事深度学习需要精通 C++ 和 CUDA,而它们只有少数人才能掌握。如今,具有基本的 Python 脚本技能,就可以从事高级的深度学习研究。这主要得益于 Theano 及随后的 TensorFlow 的开发,以及 Keras 等用户友好型库的兴起。Theano 和 TensorFlow 是两个符号式的张量运算的 Python 框架,都支持自动求微分,这极大地简化了新模型的实现过程。Keras 等用户友好型库则使深度学习变得像操纵乐高积木一样简单。Keras 在 2015 年初发布,并且很快就成为大量创业公司、研究生和研究人员转向该领域的首选深度学习解决方案。
1.3.6 这种趋势会持续吗
深度神经网络成为企业投资和研究人员纷纷选择的正确方法,它究竟有何特别之处?换句话说,深度学习是否只是难以持续的昙花一现?20 年后我们是否仍在使用深度神经网络?
深度学习有几个重要的性质,证明了它确实是人工智能的革命,并且能长盛不衰。20 年后我们可能不再使用神经网络,但我们那时所使用的工具都是直接来自于现代深度学习及其核心概念。这些重要的性质可大致分为以下三类。
- 简单。深度学习不需要特征工程,它将复杂的、不稳定的、工程量很大的流程替换为简单的、端到端的可训练模型,这些模型通常只用到五六种不同的张量运算。
- 可扩展。深度学习非常适合在 GPU 或 TPU 上并行计算,因此可以充分利用摩尔定律。此外,深度学习模型通过对小批量数据进行迭代来训练,因此可以在任意大小的数据集上进行训练。(唯一的瓶颈是可用的并行计算能力,而由于摩尔定律,这一限制会越来越小。)
- 多功能与可复用。与之前的许多机器学习方法不同,深度学习模型无须从头开始就可以在附加数据上进行训练,因此可用于连续在线学习,这对于大型生产模型而言是非常重要的特性。此外,训练好的深度学习模型可用于其他用途,因此是可以重复使用的。举个例子,可以将一个对图像分类进行训练的深度学习模型应用于视频处理流程。这样我们可以将以前的工作重新投入到日益复杂和强大的模型中。这也使得深度学习可以适用于较小的数据集。
深度学习数年来一直备受关注,我们还没有发现其能力的界限。每过一个月,我们都会学到新的用例和工程改进,从而突破先前的局限。在一次科学革命之后,科学发展的速度通常会遵循一条 S 形曲线:首先是一个快速发展时期,接着随着研究人员受到严重限制而逐渐稳定下来,然后进一步的改进又逐渐增多。深度学习在 2017 年似乎处于这条 S 形曲线的前半部分,在未来几年将会取得更多进展。