第五章 深度突破(第1页)
第五章深度突破
2014年1月,英国的科技行业发生了一件前所未有的事情:谷歌在这儿收购了一家小公司。虽然以硅谷的标准来看,这次收购很不起眼,但是在相对平稳的英国计算机行业来说,这是非同寻常的。这家被收购的公司名叫“深度思维”(DeepMind),是一家新成立的公司,当时的员工不足25人,收购报价高达4亿英镑[62]。在外界看来,深度思维公司被收购时似乎没有任何产品、技术或者商业计划,它几乎不为人所知。甚至在它的专业领域——人工智能,亦如此。
谷歌斥巨资收购这家小小的人工智能公司上了新闻头条,全世界都想知道这家神秘的公司有些什么人,以及为什么谷歌认为一家名不见经传的小公司有着如此高的价值。
人工智能突然成了新闻热点——以及商业热点。全球对人工智能的兴趣激增,媒体也注意到了这股热潮,关于人工智能的报道频频见诸报端。各国政府也注意到了,并开始询问应该如何应对。一系列国家人工智能发展倡议很快接踵而至。科技公司都争先恐后投入这个领域,生怕被历史车轮甩落。随之而来的还有投资浪潮,虽然深度思维是人工智能领域最引人注目的收购,但也不乏其他案例。2015年,优步公司从卡内基-梅隆大学机器学习实验室揽获了至少40名研究人员。
在不到10年的时间里,人工智能突然从一潭计算机科学的死水变成最炙手可热、被炒作得最厉害的领域之一。人们对人工智能的态度发生突如其来的巨大变化,是由一项核心人工智能技术——机器学习的快速发展所推动的。机器学习是人工智能的一个分支领域,但在过去60年的绝大部分时间里,它一直在一条独立的道路上发展,正如我们即将在本章看到的,人工智能和这个突然爆发出魅力的分支学科之间,有时候关系会变得挺微妙。
在本章中,我们将了解21世纪机器学习革命是如何发生的,我们会从简要回顾机器学习开始,重点看一下机器学习的一种特殊方法——神经网络是如何在该领域占据主导地位的。就像人工智能本身的故事一样,神经网络的故事也充满了跌宕起伏:它曾经度过了两次寒冬,就在世纪之交的时候,许多人工智能研究人员还把神经网络视为一个毫无希望的研究领域。但是,神经网络最终迎来了胜利,而推动其复兴发展的新思想是一种被称为深度学习的技术。深度学习正是深度思维公司的核心技术,我将告诉你深度思维的故事,以及深度思维构建的系统是如何引来全球赞誉的。但是,虽然深度学习是一门强大又重要的技术,但它并不是人工智能的终点。因此,正如对其他人工智能技术所做的那样,我们也将讨论它的局限性。
机器学习概述
机器学习的目标是让程序能够从给定的输入中计算出期望的输出,而不需要给出一个明确的方法。举个例子,机器学习的一个经典应用是文本识别,即获取手写文本并将其转录成文字。在此,给定的输入是手写文本的图片;期望的输出是手写文本表示的字符串。
任何一位邮政工作者都可以告诉你,文本识别挺难。每个人的字迹都不同,而且还有人笔迹潦草,有时候钢笔墨水会漏在纸上,有些书写的纸又脏又破。回顾一下第一章里面的图1,解读图片是一个未曾解决的问题。这不像玩棋盘类游戏,我们有理论上可以实现的步骤,只是需要启发式应用。我们并不知道图像识别的步骤是什么,所以需要一些特别的方式——这就让机器学习有了用武之地。
对于文本识别的机器学习程序,我们通常需要给它提供许多手写字符的范例来进行训练,每个范例都标有对应的实际字符,如图13所示。
图13 程序训练数据
识别手写字符(本例中为数字)的机器学习程序训练数据,训练目标是这个程序能够自动识别手写数字。
刚才描述的这种机器学习类型被称为监督式学习,它有一个至关重要的要点:机器学习需要数据,大量的数据。事实上,正如我们即将看到的,提供精心制作的训练数据集合对机器学习的成功至关重要。
我们训练程序进行机器学习时,必须仔细设计训练数据集合。首先,我们通常只会使用一小部分可能的输入和输出来训练程序,在手写数字识别示例中,我们不可能向程序展示所有可能存在的手写字符,那根本不现实。再说了,如果我们可以向程序展示所有可能的输入集,那么就根本不需要机器来学习什么了:机器只需要记住每一个输入对应的输出就行了。无论何时对它进行输入,它只需要查找相应的输出即可——这不算机器学习。因此,一个程序必须只能使用可能存在的输入输出集合的一小部分进行训练,但是如果训练数据量太小,那么程序没有足够的信息来学会人们所期望的输入到输出的映射。
训练数据的另一个基本问题是特征提取。假设你在一家银行工作,银行需要一个机器学习程序来学习识别不良信贷风险。程序的训练数据是过去许多客户的记录,每个客户的记录上会标注他信贷记录是否良好。客户记录通常包括他们的姓名、出生日期、住址、年收入、交易记录、贷款记录和相应的还款信息等。这些信息在训练数据中被称为特征。不过,所有的特征在程序训练中都有意义吗?其中某些特征可能和该客户的信贷风险毫无关系。如果你事先不知道哪些特征和机器要学习的目标有关系,那么你可能试图将所有特征都放入训练数据中。但是,这样就会产生一个很严重的问题,被称为维度诅咒:训练数据包含的特征越多,你需要给程序提供的训练数据量就越大,程序学习的速度也就越慢。
最简单的应对方式就是只在训练数据中包含少量的特征,但这也会引起一些问题。一方面,你可能不小心忽略了程序正确学习所必需的特征,即确实标明客户信贷记录不良的特征,另一方面,如果你没有合理地选择特征,可能会在程序中引入偏差。例如,假设你给不良信贷风险评估程序训练数据里面导入的唯一特征是客户地址,那么很可能会导致程序在完成机器学习以后带有地域歧视。人工智能程序或许会变得有偏见,这种可能,以及它所引发的问题,我们将在后面详细探讨。
在另一种机器学习方式——强化学习中,我们不给程序任何明确的训练数据:它通过决策来进行实验,并且接收这些决策的反馈,以判断它们是好是坏。例如,强化学习被广泛应用于训练游戏程序。程序玩某个游戏,如果它赢了,就会得到正反馈,如果它输了,就会得到负反馈。不管正负,它得到的反馈都被称为奖励。程序将会在下一次玩游戏的时候考虑奖励的问题,如果它得到的是正面的奖励,那么下一次玩的时候它更倾向使用同样的玩法,如果是负面的,那它就不太可能这样做。
强化学习的关键困难在于,许多情况下,奖励反馈可能需要很长的时间,这使得程序很难知道哪些行为是好的,哪些行为是坏的。假设强化学习的程序输了一场游戏,那么,究竟是游戏中的哪一步导致了失败呢?如果认为游戏中的每一步都是错误的,那肯定算总结过度。但我们怎么分辨究竟哪一步是错的?这就是信用分配问题[10]。我们在生活中也会遇见信用分配问题。如果你抽烟的话,很可能在未来收到与之有关的负面反馈,但是这种负面反馈通常会在你吸烟很久以后(通常是几十年)才会收到。这种延迟的反馈很难让你戒烟。如果吸烟者在吸烟以后立即就能收到负面反馈(以危及生命和健康的方式),那么我认为,烟民数量一定会锐减。
到目前为止,我们还没提到程序是怎样进行学习的。机器学习作为一个学科领域,拥有同人工智能一样长的历史,也同样庞大。在过去的60年里,人们发展过各式各样的机器学习技术。不过近年来机器学习的成功源自一种特殊的技术:神经网络。其实,神经网络是人工智能中最古老的技术之一:1956年,约翰·麦卡锡在人工智能暑期学校里提出的最初建议就包括神经网络。但直到本世纪,它才再度引起了人们的广泛关注。
神经网络,顾名思义,灵感来自大脑内组成神经系统的神经细胞——神经元的微观结构。神经元是一种能够以简单的方式相互交流的细胞,自神经元发起的纤维突起,被称为轴突,与其他神经元进行连接,连接的“交叉点”被称为突触。一般来说,神经元通过突触连接来接收电化学信号,并且根据接收的信号,产生输出信号,然后由其他神经元通过突触连接接收。关键的是,神经元接收到的输入有着不同的权重:有些输入比其他的更重要,有些输入甚至可能抑制神经元,阻止它产生输出。在动物的神经系统中,神经元组成的网络是相互联系的:人脑大约有1000亿个神经元,人脑中的神经元通常有数千个连接。
因此,神经网络的构想,就是在机器学习的程序中引入类似的结构。毕竟,人类大脑已经充分证明了神经系统能够有效地学习。
感知器(神经网络1。0)
神经网络的研究起源于20世纪40年代美国研究人员沃伦·麦卡洛克(WarrenMcCulloch)和沃尔特·皮茨(itts),他们意识到神经元可以用电路建模,更具体地说,是用简单的逻辑电路,他们用这个想法建立了一个简单但非常通用的数学模型。到了50年代,弗兰克·罗森布拉特(Fra)对这个模型进行了改进,创造出了感知器模型。感知器模型意义重大,因为它是第一个实际出现的神经网络模型,时至今日,它仍然有存在的意义。
图14展示了罗森布拉特的感知器模型,中间的方块代表神经元本身,左边指向方块的箭头代表神经元的输入(对应神经元的突触连接),右边的箭头代表神经元的输出(对应轴突)。在感知器模型中,每一个输入都跟一个被称为权重的数字关联,在图14中,与输入1相关的权重为w1,与输入2相关的权重为w2,与输入3相关的权重为w3。神经元的每一个输入都呈激活和未激活两种状态,如果一个输入被激活,它就会通过相应的权重“刺激”神经元。最后,每一个神经元都有一个触发阈值,由另一个数字表示(在图14中,触发阈值用T表示)。感知器的运作模式是神经元受到的刺激超过了触发阈值T,那么它就会“启动”,这就意味着它的输出被触发。换句话说,我们把激活的输入的权重加在一起,如果总权重超过阈值T,则神经元产生一个输出。
图14 罗森布拉特感知器模型中一个简单的神经元结构
具体来说,假设图14中神经元每个输入的权重都为1,阈值T为2。如果其中任意两个输入被激活,神经元就会启动输出。换言之,在这种情况下,超过半数的输入被激活,则神经元就会被触发。
我们再假设输入1的权重为2,而输入2和3的权重都为1,阈值T为2。在这种情况下,如果输入1激活,或者输入2和3共同激活,或者三个输入都激活,神经元就会被触发。
当然,真实存在的神经网络包括许多神经元,图15展示了由三个人工神经元组成的感知器。注意每个神经元都是完全独立运作的。此外,每个神经元能“看到”每一项输入——然而,对于不同的神经元,输入的权重可能不同。也就是说,输入1对于三个神经元分别有各自的权重值,可能它们并不相同。另外,每个神经元的触发阈值也可能并不相同(图15中分别为T1,T2和T3)。所以,我们可以想象为三个神经元在各自计算不同的东西。
图15 由三个人工神经元组成的单层感知器
然而,图15所展示的感知器并没有反映出大脑高度互联的结构,一个神经元的输出会反馈给其他许多神经元。为了更清楚地反映人脑结构的复杂性,人工神经网络通常是分层组织的,如图16所示,即多层感知器结构。图16的感知器由9个神经元组成,分为3层,每层3个神经元。每一层的每个神经元都接收上一层神经元的输入。
图16 由9个神经元组成的3层感知器
需要注意的是,即使在这个非常简单的感知器中,事情也开始变得复杂了:我们的神经元之间已经有27个连接了,每个连接都有对应的权重,9个神经元都有自己的触发阈值。虽然麦卡洛克和皮茨就在模型中设想了多层神经网络结构,但在罗森布拉特的时代,人们主要关注单层网络,原因很简单:没有人知道如何训练具有多个层面的神经网络。
每个连接所对应的权重值对于神经网络的运行至关重要,事实上,这就是神经网络分解下来的全部内容:一堆数字列表。对于任何一个大小合理的神经网络来说,这个数字列表的长度都相当可观。因此,训练一个神经网络需要用某种方式找到适当的权重值。通常的寻找方式是在每次训练以后调整权重值,试图让网络产生正确的输入到输出的映射。罗森布拉特试验了几种不同的技术,并为一个简单的感知器模型找到了一个被他称为纠错程序的技术。
现在我们知道罗森布拉特的方法肯定是有效的,它可以正确地训练一个网络。但是在当时,存在一个强烈的异议。1969年,马文·明斯基和西摩·帕普特(SeymourPapert)出版了一本名叫《感知器》的书[63],书中指出单层感知器网络有着非常大的局限性。事实上,如图15所示的单层感知器确实如此,它们甚至连许多输入和输出之间的简单关系都学不会。但当时吸引大多数读者注意力的,是明斯基和帕普特的研究表明,感知器模型不能学习一个很简单的逻辑概念——异或(XOR)[11]。举一个例子,假设你的网络只有两个输出,当其中一个输出被激活时,异或函数应该产生一个输出(但当两个输入同时被激活的时候,则不会产生输出)。要证明单层感知器无法表示异或状态很容易,感兴趣的读者可以在附录D中找到更多信息。
明斯基和帕普特的书似乎给出了相当全面的结论,不过时至今日仍然存有争议。该理论结果证明了某些类别的感知器在基础结构层面具有严重局限性,这似乎就意味着基于感知器的通用模型存在局限性。而如图16所示的多层感知器并不受这些限制:从精准的数学定义来说,可以证明多层感知器完全能够普遍适用。然而,在当时,没人知道该如何训练一个具有多层感知器的网络:它只是一个理论上可能出现的网络结构,在现实中无法构造。20年后,随着科学的发展,它才从理论走向实践。
我很怀疑,当年对感知器太过激进的宣传间接导致了对它的负面结论下得如此武断。比如,1958年《纽约时报》上某篇文章兴奋地报道[64]: