第二部分 我们是怎么走到这一步的
第二章 黄金年代
图灵在他发表的论文《计算机器与智能》中介绍了图灵测试,为人工智能学科迈出第一步做出了重大贡献。只是在当年,这个划时代的贡献显得颇为孤独。那时候,人工智能还没有命名,没有形成一门学科,也没有研究团队。彼时图灵的贡献都只是概念性的,比如图灵测试——因为人工智能系统还未出现。仅仅过了10年,到了20世纪50年代末,一切都发生了天翻地覆的改变:新的学科建立,并有了专属的名称,研究人员可以自豪地展示用以揭示智能行为基础组成部分的第一个试验性系统。
接下来的20年是人工智能的第一个繁荣期。1956年到1974年间,人工智能研究领域掀起了乐观积极、迅速发展的浪潮,这一时期被称为人工智能的黄金年代。在这个年代里,研究人员不知失望为何物,一切皆有可能。这一时期构造的人工智能系统,堪称人工智能史上传奇的经典标准。它们拥有奇奇怪怪的名称,比如SHRDLU、STRIPS或者SHAKEY——都是简短的名字,很多来源于首字母缩写,全用大写字母表示。这大概是源于当时计算机文件名的限制(以这种方式命名人工智能的习惯一直沿用至今,尽管已经毫无必要)。按照现代标准,用来建立这些人工智能的计算机运行速度慢得难以想象,内存也小得难以置信,使用起来也麻烦得难以忍受。今天我们开发软件理所当然会使用到的那些工具,当时并不存在,事实上,即使存在,也没法在当时的计算机上运行。那时候“黑客”文化已经悄悄抬头,人工智能研究人员大多在晚上工作,因为他们需要的计算机资源在白天要用在更重要的工作上。他们还必须发明各种巧妙的编程技巧[14],让复杂的程序能在当时简陋的计算机上运行——许多技巧后来成为各种技术标准,它们起源于20世纪60到70年代的人工智能实验室,现在的人们只能模糊地回忆起来——如果还有人记得的话。
但到了20世纪70年代中期,人工智能的研究开始停滞不前,除了最初的简单试验,并没有多少有意义的进展。这门初生的学科几乎被研究资助者扼杀于摇篮中,科学界也逐渐开始相信,人工智能这种被寄予了无限希望的新生儿,实则前途渺茫。
本章将回顾人工智能发展的前20年,我们将研究在此期间构建的一些关键系统,并讨论当时在人工智能领域最重要的技术之一:被称为“搜索”的技术。即使时至今日,它仍然是诸多人工智能系统的核心组件。我们还会接触到一个抽象的数学理论——计算复杂性,这是在20世纪60年代末到70年代初建立并发展起来的理论,用以解释为什么人工智能所面临的诸多问题从本质上来说难以解决。计算复杂性给人工智能的发展蒙上了一层阴影。
我们将从公认的黄金年代起点开始:1956年的夏天,一位名叫约翰·麦卡锡(John McCarthy)的年轻美国学者,为这一领域命了名。
人工智能元年的盛夏
麦卡锡生活在美国现代科技创建的年代,在20世纪50到60年代,他以近乎不可能的才华,为计算机领域贡献了一系列新的理念。这些理念在现代被认为理所当然,以至于我们很难想象当年如果不是因为这些理念,计算机科学就不可能有进一步发展。他最著名的成就应该是被称为LISP的编程语言,几十年来,LISP一直是人工智能研究人员首选的编程语言。虽然编程语言一向是难以阅读的,即使以我这种专业程度为标准来看,LISP语言也是个怪胎。因为在LISP语言中,(所有(程序(看(起来(都(是(这样的)))))))。一代又一代的程序员总是开玩笑说LISP就是“一堆毫无关联的傻括号”[15]。
麦卡锡在20世纪50年代中期发明了LISP语言,令人惊讶的是,近70年后,全世界仍然在教授和使用它(反正我每天都要用)。想一想吧,麦卡锡发明LISP语言时,美国总统还是德怀特·戴维·艾森豪威尔,尼基塔·谢尔盖耶维奇·赫鲁晓夫还是苏联共产党总书记;在中国,毛泽东主席正在如火如荼地领导第一个五年计划,全世界电脑总数才几台。而时至今日,LISP语言竟然还在广泛使用中!
麦卡锡出生在波士顿的一个移民家庭,在很小的时候就展露出非凡的数学天赋。从加州理工学院数学专业毕业以后,这个20岁出头的小伙子被任命为新罕布什尔州达特茅斯学院的副教授。麦卡锡在加入达特茅斯学院之前就对计算机产生了浓厚兴趣,1955年,他向洛克菲勒研究所提交了一份提案,希望获得资金来在达特茅斯学院开办一所暑期学校。如果你不是一名学者,成年人的暑期学校听上去似乎还挺奇怪的。不过即使在今天,这也是一个久负盛名且受人喜爱的学术传统,主要目的是召集世界各地有共同兴趣的研究人员,让他们有机会在一段时间里见面交流及共事。之所以选择暑期,显然是因为一年的教学任务已经结束,学者们大多可以卸下沉重的教学压力,轻松一下。当然啦,既然选择在如此迷人的地方组织暑期学校,必要的社交活动也是不可缺少的。
对一所令人难忘的暑期学校来说,另一个不可或缺的要素就是一张星光四射的学员名单。当时的人们可能没预见到,达特茅斯暑期学校会集了未来几十年内在人工智能领域起决定性作用的大部分关键人物。不过邀请名单上还有一个特别令人沉痛的名字:普林斯顿大学数学家小约翰·福布斯·纳什(John Forbes Nash, Jr)。他于6年前刚刚取得博士学位,在一篇论文(只有短短28页)中引入了一个叫作“非合作博弈”的概念。纳什提出的概念在随后的几十年里成为经济理论的基石,并最终在1994年荣获诺贝尔经济学奖。但纳什本人并没有享受到他这项工作的乐趣:就在获得博士学位的几年后,他就被妄想症和偏执狂等精神疾病所吞噬,这使得他在之后几十年都远离了学术生活。不过令人高兴的是,他凭着惊人的毅力恢复良好,最终在1994年获奖。他的故事被写成了书籍《美丽心灵》,同名电影于2002年荣获奥斯卡金像奖最佳影片奖等多项殊荣[16]。
达特茅斯暑期学校名单令人好奇的原因还有一个。除了学术界的大佬们,暑期学校还接待了来自工业界、政府及军方的代表(甚至还有兰德公司——这家以加州智囊团为班底的智库公司,在20世纪60年代因为毫无感情地争辩如何“赢得”核战争而臭名昭著。而仅仅在十来年前,学术界、工业界、政府和军方联合起来执行曼哈顿计划,制造出了全世界第一颗原子弹——这也是美国科技实力的明确体现)。这种联合体——学术界、工业界、政府和军方联合,是美国在第二次世界大战后几十年里计算机技术发展的特色,也是美国在未来60年内确立人工智能领域国际领先地位的核心。
1955年,麦卡锡向洛克菲勒研究所撰写计划书申请经费的时候,他不得不给这项活动起个名字,他选择了“人工智能”这一名称。麦卡锡对他的活动抱有不切实际的高度期待——这也成了人工智能领域令人生厌的传统——他高呼:“我认为我们可以取得重大进展……如果这些经过精挑细选的科学家能在一起共事一个夏天的话[17]。”
到暑期学校结束之时,共事的科学家们也没取得什么重大进展,但麦卡锡选择的名字却流传下来,逐渐形成了一门新生的学科。
不幸的是,麦卡锡选择的这个名字在很长的时间里受到了无数诟病。首先,人工智能中的“人工”一词,英文为“artificial”,它还有一层意思是“虚假”“赝品”——谁会乐意研究虚假的智能呢?另外,“智能”(intelligence)这个词汇来源于“智力”(intellect),而事实上,自1956年以来,人工智能界一直在努力完成的诸多挑战,人类去做的时候似乎并不需要太高的智能。相反,正如我们在上一章所讨论的,过去60多年中,人工智能一直致力于解决的许多最重要也是最困难的问题,似乎一点都体现不出智能——这样的事实一再让那些新入该领域的人感到惊愕和困惑。
不过,“人工智能”这个由麦卡锡选择的名字,至今仍然沿用。那些参与暑期学校的学者,以及他们的学术继承人,多年来不断地致力于人工智能领域的研究,直至今日。那年夏天,是公认的人工智能学科诞生元年,当时,它听上去前途无量。
达特茅斯暑期学校之后那些年是人工智能令人兴奋的成长期,并且,在某段时间里似乎处于飞速发展状态。几十年里,四名暑期学校的成员主导着人工智能的发展。麦卡锡本人在斯坦福大学创立了人工智能实验室,位于现在的硅谷中心地带,马文·明斯基在马萨诸塞州剑桥市的麻省理工学院也创立了一个实验室,艾伦·纽维尔(Alan Newell)和他的博士生导师赫伯特·西蒙(Herbert Simon)则去了卡内基-梅隆大学。这四位天才带领着他们的学生建立的人工智能系统,是我们这一代人工智能研究工作者的图腾。
然而,黄金年代也有着幼稚、盲目乐观的特点,研究人员对这个领域可能的发展速度做出了鲁莽的预测,令人工智能的实际发展受到阻碍。到了20世纪70年代,美丽的梦幻结束了,一场恶性循环开始——人工智能的繁荣和萧条不断上演,在未来几十年内反复交替。但是,不管历史如何去批判这一时期,我都满怀喜爱之情去思考这一时期涌现出的人物,以及他们所做出的伟大成就。
分治策略
正如我们所知,通用人工智能是一个庞大而模糊的目标,很难直接达成。因而,黄金年代采用的策略是分而治之。也就是说,与其一口气尝试构建完整的通用智能系统,不如识别出通用人工智能系统所需的各项不同能力,分别构建具备这些能力的体系。这一概念隐含的假设是,如果我们能够成功构建通用人工智能所必需的每一种智能系统,那么,以后将它们组合成一个整体,比起直接构建完整的通用智能系统简单得多。这一基本假设——通用人工智能的研究方向是将精力集中在解决智能行为的各种组件上——成为人工智能研究的标准方案。人们争先恐后地建造各种能够表现智能行为能力的组件。
那么,研究人员关注的主要问题有哪些?首要的也是最难解决的问题,又偏偏是我们认为理所当然应该具备的:感知。一台机器要在特定的环境中智能地工作,就必须能够获取周围环境的信息。我们人类通过各种机制感知世界,包括五种感觉:视觉、听觉、嗅觉、触觉和味觉。因此,就得研究制作能够感知外界的传感器。如今的机器人使用各式各样的人工传感器来接收有关环境的信息——雷达、激光雷达、红外线测距仪、超声波测距仪等。但是制造这些传感器本身就是一项复杂的工程,但这还只是问题的一部分。不管数码相机的光学系统有多好,不管相机的图像传感器有几百万还是几千万像素,最终相机所做的事情只是把看到的图像解析成一个个网格,然后为网格中的每一个单元格分配数字,表示它的颜色和亮度。所以,哪怕配备了质量最好的数码相机的机器人,最终它收到的信息也只是一连串的数字。因此,感知领域的第二个挑战是如何解析这些原始的数字,理解它所“看到”的图像。这项挑战远比制作传感器难得多。
通用智能系统的另一个关键能力是通过学习积累经验,这引出了一个名叫机器学习的人工智能研究分支。就像“人工智能”这个名字本身一样,机器学习也是一个极其不恰当的术语,听起来像是一台机器自己在引导自己学习,从无知开始,变得越来越聪明。事实上,机器学习跟人类学习是完全不同的,它的学习指的是解析和预测数据。例如,在过去数十年里,机器学习的一个巨大成就是出现了可应用的人脸图像识别技术,通常的实现方法是给予程序诸多希望它学习的例子。因此,通过许多人脸图片以及对应人名来训练人脸图像识别程序,最终达到的效果是给它呈现一张图片时,程序就能正确地给出所示图片对应的人名。
问题解决和制订计划是两个相关联的能力,它们也与智能行为有关。它们都要求用给定的动作组合来达成目标,而实现的关键在于找到正确的动作序列。例如,象棋或者围棋之类的棋盘游戏,目标是赢得比赛,行动是在棋盘上移动(或放置)棋子,挑战是要找出正确的下棋步数以达到赢得比赛的目的。而如我们所了解的,在解决问题和制订计划中最根本的难点在于,只需要考虑移动棋子的所有可能结果,虽然从原理上看起来很容易做到,但是实际上执行起来却非常困难,因为棋子可能移动的步骤实在是太多了。
推理也许是诸多与智能相关的行为中最令人崇拜的一种:它基于现有的事实,用强大的逻辑方式获取新的知识。举一个著名的例子,若你知道“所有的人都是凡人”,你也知道“迈克尔是一个人”,那么就可以推理得出“迈克尔是凡人”的结论。一个真正的智能系统很容易做到这一步,然后,利用新的知识做出进一步推理。例如,知道“迈克尔是凡人”之后,就能推论出“迈克尔有朝一日会死去”“迈克尔死去以后,将不会复活”等等。自动推理就是赋予计算机这样的逻辑推理能力。在第三章中,我们将看到,长期以来,人们都认为这种推理能力应该是人工智能的主攻方向。虽然现在已经不是主流了,但自动推理仍然是人工智能领域中一个重要的分支。
最后是自然语言理解,这涉及让计算机理解人类的语言,比如中文或者英文。目前,计算机程序员为计算机编程时,必须使用人造的机器语言:某种有着精确定义、明确规则、专门为计算机构造的语言。这些语言(目前最著名的应该是Python、Java和C语言)比起自然语言(如中文或英文)简单得多。很长一段时间以来,让计算机理解自然语言的主要方法是试图为自然语言加以精准的定义和明确的规则,就像我们定义计算机语言一样。而事实证明,这是不可能的。自然语言太过灵活、模糊和易变,无法用这种方式严格定义,而语言在日常生活中的使用方式更是阻碍了对其进行精确定义的尝试。
SHRDLU和积木世界
SHRDLU系统是黄金年代最受欢迎的成就之一(这个奇怪的名字来源于当时印刷机上的字母排列——程序员就喜欢弄点晦涩的笑话)。1971年[18],斯坦福大学博士生特里·威诺格拉德(Terry Winograd)开发了SHRDLU系统,旨在展示人工智能的两个关键能力:解决问题和自然语言理解。
SHRDLU的问题解决组件是基于人工智能界最著名的实验场景之一:积木世界。积木世界是一个包含了许多彩色物体(方块、盒子和锥体)的模拟环境。使用模拟环境而不是真实环境去构建机器人,初衷在于将问题的复杂性降低到可管理的程度。在积木世界中,SHRDLU的问题解决模块可以根据用户的指令来排列对象,也可以使用模拟机械手臂来操作对象。我们可以在图2中看到积木世界的初始状态和目标状态。人工智能要完成的挑战是如何将初始状态转换为目标状态。并且,你只能使用固定的操作集合来完成状态转换:
图2 积木世界上图是初始状态,下图是目标状态,你要怎么转换呢?
·从桌面拾取对象x。此处指的是用机械臂将对象x(可能是积木或者锥体)从桌面上拿起来,只有当同时满足对象x在桌面上,以及机械臂当前为空的时候,才能执行此操作。
·将对象x放在桌面上。只有当机械臂携带对象x的时候,才能执行此操作。
·从对象y上拾取对象x。只有满足机械臂当前为空,对象x必须在对象y的上方,并且对象x上方没有其他对象的时候,才能执行此操作。
·将对象x放在对象y的上面。只有当机械臂携带对象x,以及对象y的顶部没有其他物品的时候,才能执行此操作。
积木世界里的一切行为,最终都会简化为这四个操作步骤,且只能执行这四种操作。所以,要实现图2中的状态转化,可以先按照如下步骤执行:
·从对象B上拾取对象A
·将对象A放在桌面上
·从桌面上拾取对象B
上述行动完成以后,积木世界会是什么状态?你能补写出剩下的操作步骤吗?(当然,这不难,但是挺无趣。)
积木世界可能是整个人工智能领域中研究得最多的场景,因为在积木世界中,机械臂完成拾取物品并移动它的操作,听上去与现实世界中我们为机器人设想的任务类似。但是,在SHRDLU(以及诸多后续研究)的积木世界,如果要作为开发使用人工智能技术的场景,还有着严重的局限性。
首先,积木世界是一个封闭的世界,这意味着引起世界变化的唯一因素就是SHRDLU。这就像你一个人住的时候可以笃定地相信,你睡觉前把房门钥匙放在哪里,醒来以后它仍然在原处。如果你家里还有其他人,就会存在别人拿走你钥匙的可能。因此,当SHRDLU把对象 x放在对象 y上面之后,就可以笃定地认为对象 x一定位于对象 y的上方,除非它对相关对象进行过操作。而现实世界并非如此,人工智能系统不能假设自己是世界上唯一的行动者,这样的假设只会让运行结果错误百出。
其次,也是更重要的一点,积木世界是模拟世界,SHRDLU并没有真正操作一个机械臂来拾取对象并移动它们——它只是作为程序假设这么做而已。它模拟了一个世界,并模拟出自己的行为对这个世界产生的影响。SHRDLU从来没有构建一个基于真实世界的模型,也没有检查模拟世界的模型是否和现实世界相匹配,这就是一个极简的假设而已。积木世界是否忽略了机器人在现实世界中运行所面临的绝大多数困难,这也是一个后来研究人员争论颇多的话题。
为了更好地理解这一点,我们以“从对象 y上拾取对象 x”为例,考虑它的操作。站在SHRDLU的角度,这就是一个简单、明了的动作:机器人只需要径直从指定的目的地拿起指定的对象就算执行完成,无须考虑这个动作涉及的其他东西。因此,程序只需要找到执行任务所需的正确方法和步骤顺序,就能“控制”整个过程,它不会考虑在执行任务的过程中所遇见的各种麻烦事。但想想现实世界,假设机器人在仓库的环境里,那么它就必须识别出哪个是对象 x,哪个是对象 y,这才能成功执行这条命令。好吧,即使解决了对象识别的问题,单单抓取这最后一步,也不是件简单的事情——让机器人在现实世界中操作哪怕是最简单的物件,困难都远比想象的大,即使在今天都是一个富有挑战性的难题。1994年,我以一个年轻学者的身份前往西雅图参加美国人工智能协会会议时,就对这个问题有了一定的了解。我仍然清晰地记得那些参加“清理办公室”竞赛的机器人,其不称职的程度简直令人惊讶。顾名思义,竞赛的目的是制造一个机器人,它可以在类似办公室的环境中安全地移动,识别和收集垃圾——这个环境就类似于现实版的积木世界。此时已经是SHRDLU问世20年后了——结果,哪怕是在比赛中表现最好的机器人,它的执行速度也慢得令人发指,让人差点以为无法完成任务。当然,问题不在于机器人,而在于人们天真地低估了这些问题的难度。事实上,我们错误地以为,某些人类执行起来轻而易举的任务,机器人执行起来也应该同样轻松。
因此,积木世界之所以引起人们关注,是因为它直观且易于理解。看上去它构造出了类似现实世界的机器人工作环境,其实都是我们自己臆想出来的。深入研究一下就能发现,积木世界所研究和解决的,只是用一系列可执行的动作来解决问题的方法。虽然这确实是一个值得关注的领域,但这只解决了机器人在现实环境所面临的问题中极小的一部分,并且绝不是最困难的那部分。
SHRDLU最为人称赞的特性之一,是用户可以向系统发送指令,并且能从系统中接收到类似自然语言的反馈。下面是一段人类与SHRDLU的对话(SHRDLU的话用斜体字表示):
拾取一个大的红色方块。
好的。(执行命令)
抓取一个锥体。
我不明白你指的是哪个锥体?
寻找一个比你拾取的方块更高的物块,并把它放进盒子里。
我想你所说的“它”指的是比我拾取的方块更高的那个。
好的。(执行命令)
盒子里面有什么东西?
蓝色的锥体和蓝色的方块。
蓝色的锥体由什么支撑?
由盒子支撑。
有几个积木不在盒子里?
四个。
至少有一个比我叫你拾取的那个更窄吗?
是的,红色立方体。
它有支撑吗?
有,桌子。
桌子能拾取方块吗?
不能。
一个锥体能被一个方块支撑吗?
能。
这段对话远比ELIZA有意义得多——这个系统更加自然、丰富,能够处理复杂结构的句子(比如“至少有一个比我叫你拾取的那个更窄吗?”)以及明白代词“它”在对话中指代的具体对象[19]。正是SHRDLU系统的类似自然语言的交互方式,让它在20世纪70年代初受到了热烈的追捧。然而,后来人们发现,SHRDLU之所以能够产生如此丰富的对话,仅仅是因为它处于一个非常受限的环境——积木世界。虽然不像ELIZA那样事先预设了各种处理对话的模式,但它的对话发生场景是受限的,所以对话内容的局限性非常明显。这个系统首次出现时,人们希望它可以提供一条通向处理自然语言的道路,然而,这个希望落空了。
我们这些身在50年后的人很容易发现SHRDLU的局限性,但无论如何,它仍然是一个影响巨大的里程碑式的人工智能系统。
机器人SHAKEY
机器人与人工智能一直密切相关——尤其对于媒体而言。1927年,弗里兹·朗(Fritz Lang)在其导演的经典电影《大都会》中塑造的机器人形象,成为后世无数机器人荧幕形象的模板:长着一个脑袋、两只胳膊、两条腿的类人的机器,再加点儿冷酷凶残的性情。即使在如今,似乎大众媒体上每一篇有关人工智能的文章都得配上机器人的图,长得就像《大都会》里机器人的直系后代。机器人,尤其是类人的机器人,成为人工智能的标志,这并不让人感到惊奇。毕竟,最能体现人工智能梦想的,就是有长得跟我们差不多、拥有类似我们智力的机器人,与我们同吃同住同劳动。再说了,我想大多数人都会乐意拥有一个机器人管家来帮忙处理生活中的各种问题。
不过在黄金年代,机器人只是人工智能故事中占比相对较小的一部分。原因相当简单:制造机器人又昂贵又费时,坦率地说,还很困难。一个在20世纪60或70年代独立工作的博士生,绝对承担不起建造一个研究级的人工智能机器人的费用。它需要一个完整的研究实验室、专业的工程师、一整套生产车间流水线、专业的生产设备等。另外,能够驱动人工智能系统的计算机太过庞大和沉重,机器人无法携带。所以,对研究人员而言,构建一个类似SHRDLU的程序要比构建一个现实的、可操作的机器人简单得多,也经济得多——反正系统的复杂性和混乱性是能满足现实需求的。
不过,尽管实体机器人的研究很少,但在黄金年代,还是有一个光辉灿烂的人工智能机器人实验成果:在1966年至1972年间斯坦福研究所开展的SHAKEY项目。
SHAKEY是人类第一次认真尝试构建可移动的、实体的机器人,它可以在现实世界完成各项任务,并且自己想出完成这些任务的方法。要做到这些,SHAKEY需要感知所处环境,了解自己身处的位置和周围的状况;还要能接收任务,并自己制订完成任务所需要的步骤;然后按步骤执行任务,同时确保在执行过程中一切顺利,达到预期效果。它所需要完成的任务主要是在类似办公室这样的环境里移动各种盒子。听上去跟SHRDLU很像,不过SHAKEY可不是SHRDLU那样虚拟的系统,它是一个真实的机器人,能够真真正正地操作物体,这可是一项伟大的挑战。
要想达成目标,SHAKEY要集成好多令人望而生畏的智能系统。首先,建造它的工程师得解决一个大难题:开发人员要自行建造机器人,它必须足够小,足够灵活,才能在类似办公室的环境里移动。还得拥有足够强大和精准的传感器,使机器人能够了解周围的情况。为此,SHAKEY配备了一个电视摄像机和激光测距仪,用来确定它和各物体之间的距离。为了探知障碍物,它还配备了一个名叫“猫须”的碰撞探测器。然后,SHAKEY必须拥有在环境中导航的能力,它还能够制订执行任务所需要的步骤。为此,开发人员设计了一个名为STRIPS(斯坦福研究所问题解决系统Stanford Research Institute Problem Solver的缩写)[20]的系统,现在,人们公认STRIPS系统是人工智能规划技术的鼻祖。最后,所有的智能系统必须流畅、完美地彼此配合,协同工作。任何人工智能研究人员都会告诉你,上述的所有系统,能成功实现其中一个,都是攻克了大难关;若是能让它们作为一个整体工作,其难度会直线跃升好几个数量级。
当然,听上去SHAKEY很神奇,不过它也充分暴露了当时人工智能的局限性。为了让SHAKEY正常工作,设计者不得不大大简化机器人所处的环境,还要降低任务难度。比如,SHAKEY解析它自带的电视摄像机的数据的能力非常有限,几乎只能用来探测障碍物。即便如此,它所处的环境都必须经过特别的粉刷,还需要精心的照明。因为电视摄像机功率太大,所以只在有需要的时候才能打开,打开电源后10秒左右才能产生可用的图像。当时的开发人员一直在与计算机的局限做斗争:比如SHAKEY需要花费15分钟的时间才能设计好怎么完成一项任务,在此期间,它像个傻瓜一样站在那里,一动不动,与周围环境完全隔绝。由于能够完成SHAKEY相关软件运算的计算机体积都太大,重量也太重,所以得用无线电把SHAKEY连接到一台操控计算机上[21]。总之,SHAKEY这种机器人没有任何实用意义。
SHAKEY可以说是第一个成为现实的自动移动机器人,它开创了一系列令人惊叹的人工智能新技术,和SHRDLU一样,由于这些成就,它理应在人工智能历史中获得殊荣。但是SHAKEY的局限性,证明了人工智能离实用的、拥有自主能力的机器人梦想有多遥远,完成这一挑战有多艰巨。
问题解决与搜索
解决问题的能力无疑是区分人类和其他动物的关键能力之一。互联网上充斥着松鼠[22]和乌鸦[23]的视频,这些动物虽然可以解决一些复杂的问题以获取食物,但就解决抽象问题而言,还没有任何动物能够接近人类的水平(哪怕没有食物作为直接奖励也会去解决问题)。当然,解决问题是需要智慧的,如果我们能构建某种程序,解决人类认为难以解决的问题,这算不算人工智能走向现实的关键一步呢?因此,在黄金年代,人们在解决问题这个领域投入了大量研究,当时研究人员的标准做法是让电脑来解决人们经常在报纸趣味谜题版面能够看到的东西。我们以经典的汉诺塔为例:
在一个偏僻的寺院里,立着三根柱子,还有64个金环。每一个金环的尺寸都不同,并且金环都可以套在柱子上。最初,所有的金环按照上小下大的顺序,都套在最左边的柱子上,然后,僧侣们要利用这三根柱子,一个一个移动金环。他们的目标是把所有金环都移动到最右边的柱子上,移动的时候,僧侣们必须遵从两个原则:
1. 一次只能把一个金环从一根柱子移动到另一根柱子上。
2. 任何一个金环都不能位于比它小的金环之上。
要解决这个问题,僧侣们必须找到正确的移动顺序,使得所有的金环从左边柱子移动到右边柱子,并且遵循大金环不能放在小金环之上的规则。
按照传说,当僧侣们完成任务的时候,世界就会毁灭[1]。当然,我们很快就会知道,哪怕这个传说是真的,也无须为此担忧,因为宇宙在僧侣们移动完所有64个金环之前早就灭亡了。所以现实中的汉诺塔只会有极少的金环,如图3所示。
图3 汉诺塔
人工智能黄金年代的经典谜题,图a展示了汉诺塔的初始状态(所有的金环都在最左边的柱子上),图b展示了目标状态(所有的金环都被挪到最右边的柱子上),图c展示了错误的移动状态(大金环放在了小金环上面)。
那么,我们将如何着手解决汉诺塔这样的问题呢?答案是使用一种名叫搜索的技术。在这一点上,我得首先澄清,在人工智能领域使用“搜索”一词时,并非指打开谷歌或者百度对网站进行搜索。人工智能领域的搜索,是一种基本的问题解决技术,它涉及让系统全盘考虑所有进程。任何像下棋一样的程序都是基于搜索技术的,汽车上的卫星导航系统也是。它一次又一次地出现在诸多领域,是人工智能技术的基石之一。
所有类似汉诺塔的问题都有着相通的解决方案。在积木世界里,我们希望能够找到相应的步骤,把初始状态的物体转变为指定的目标状态。“状态”这个术语在人工智能领域指的是某个事物或者问题在某个特定时刻呈现的结构。
用搜索的方式来解决类似汉诺塔的问题,我们可以遵照以下步骤:
·首先,从初始状态开始,我们考虑每个可能的动作对初始状态的影响,执行每一步操作都会将初始状态转换为一个新的状态。
·如果其中某个新状态是我们的目标状态,那就意味着操作成功:这个问题的解决步骤就是从初始状态达到目标状态所执行的操作。
·否则,在每一个新状态上,继续考虑所有可能导致状态变更的操作,重复这样的过程,以此类推。
应用搜索的方法会得到一个树状的结构图,被称为搜索树,图4为我们展示了解决汉诺塔问题的搜索树的一小部分片段。
·最初,我们只能选择移动最小的金环,只有将它移动到中间或者最右边的柱子上。所以对应第一步,我们只有两种移动可能,以及两种不同的新状态。
·如果我们选择将最小的金环移动到中间柱子(初始状态左下方箭头对应的状态),那么我们随后可以执行三种操作:将最小的金环移动到最左侧或者最右侧的柱子,或者将第二个金环移动到最右侧柱子(不能将第二个金环移动到中间柱子,因为它会位于最小金环的上方,这就违背了移动规则)。
·以此类推。
图4 汉诺塔问题搜索树的一小部分片段
因为我们逐级逐级地在生成搜索树,这就意味着我们考虑到了所有的移动可能性,因此,如果这个问题确定是有解决方案的,我们就可以确保使用搜索的方法最终能够找到它(“最终”这个词在句中是至关重要的,至于为什么,很快就会揭晓)。
那么,解决汉诺塔问题需要移动的最少次数是多少呢?也就是说,从初始状态到目标状态,最少需要移动多少次?对于三个金环而言,答案很简单,是7次。你不可能找到少于7次的解决方案了。当然,也有很多方案可以用超过七步的方式解决问题(实际上是有无穷多方案),但它们不是最优的,因为我们想用最少的步骤、在最短的时间内解决问题。现在,考虑到我们所描述的搜索过程是详细无遗漏的——考虑到了每一步搜索树的所有可能性——搜索技术不光能保证寻找到解决方案,也能保证寻找到最优解决方案。
这就意味着,穷举搜索的方式不仅能保证在问题可解的时候寻找到问题的解,还能保证寻找到问题的最优解。另外,作为计算机的算法,穷举搜索非常简单——编写一个程序来实现它非常容易。
不过,哪怕我们只是粗略研究图4所示的片段都能够看出来,如刚才所描述的那样,采用穷举搜索的方式来解决问题是个相当愚蠢的过程。比如,仔细看看搜索树最左边的分支,仅仅移动两步以后,问题又返回到了初始状态,这是在无谓地浪费精力。如果是你来研究解决汉诺塔问题,可能会在寻找解决方案的时候犯一两次类似的错误,不过你会很快发现问题所在,并且学会避免做一些徒劳的移动。然而,一台简单执行穷举搜索的计算机却无法做到:它只能穷举出所有移动下的所有新状态,哪怕某些穷举步骤就是在浪费时间,它也会走回头路,回到已经被确认过失败的状态。
除了太多重复和低效率以外,穷举搜索还有一个根本的问题。如果你做过一些实验,会发现在大部分状态下,汉诺塔问题都有三种移动的可能性,即分支因子为3。不同的问题对应着不同的分支因子。比如,围棋的分支因子为250,这就意味着在游戏给定的任意状态下,每个玩家约有250种落子的可能性,当然,这只是平均值。所以,我们来看看搜索树随着分支因子能增长到多大——对确定了分支因子数的搜索树,在不同层级有多少种状态。以围棋为例[24]:
·搜索树的第一级有250种状态,因为在游戏棋盘的初始状态下,可以有250种新出现的状态。
·第二级搜索树有250×250 = 62 500种状态,因为我们必须考虑到250种落子选择后,每一种状态都有250种可能出现的新状态。
·第三级搜索树有62 500×250,大约有1560多万种状态。
·以此类推,第四级搜索树就会有大约39亿种状态。
到此为止吧,在我撰写这篇文章的时候,一台普通的台式机已经没有足够的内存来存储四级围棋搜索树的状态了。而通常一局围棋游戏要走大概200步,在围棋搜索树中存储200步走棋的搜索树状态数目,那是一个大到你我都无法想象的天文数字,它比我们宇宙中所有原子的数目还大几百个数量级。无论对传统计算机技术做出怎样的改进,它们都无法完成这样可怕的搜索树。
搜索树这种迅速、荒唐的增长速度导致了无法想象的问题,我们称之为组合爆炸,它是人工智能所面临的最重要的实际问题,因为搜索技术在人工智能领域使用得非常广泛[25]。如果你能够寻找到一个快速并且万无一失的办法解决搜索树的难题——发明一种方法,既能达成穷举搜索的目标,又无须占用这么恐怖的资源——恭喜你,你将青史留名,并且让许多人工智能目前所面临的困难迎刃而解。可我不得不遗憾地说,你做不到。我们没办法回避组合爆炸的问题,只能想办法处理它。
在人工智能发展初期,组合爆炸被认为是根本性问题,麦卡锡将其确定为1956年人工智能暑期学校的重要研究课题之一。人们的关注点主要集中在提高搜索效率上,对此,有几种不同的解决方案。
一种是以某种方式集中搜索。其中一种典型的方式是并非逐级建立完整的搜索树,而是沿着其中一个分支构建搜索树。这种方式被称为深度优先搜索。通过深度优先搜索,我们沿着一个分支往下扩展,直到得到解决方案或者确信无法得到解决方案。如果遇到困难(比如类似图4中最左边的分支,又回到一个已经出现过的状态),那么我们就停止在该分支上的扩展,返回到上一级,选择另外的分支。
深度搜索的主要优点在于不用存储整个搜索树,只需要存储当前正在处理的分支即可。但它有一个很大的缺陷:如果选择了错误的分支进行探索,可能会在错误的路上越走越远,永远找不到解决方案。所以,要想使用深度优先搜索,首先我们得确认哪个分支最值得搜索。这时候,我们就需要启发式搜索来帮忙了。
启发式搜索的概念就是使用所谓的“经验法则”来指导搜索的重点。通常我们也无法寻找到直指正确搜索路径的启发式方法,但我们往往可以在感兴趣的问题上找到启发式搜索方向。当然,我们也明白,有些情况下,启发式搜索的运行情况并不那么尽如人意。
启发式搜索是一个自然而然产生的概念,多年来它被重新定义了很多次,所以争论到底是谁发明了它已经毫无意义。但是,我们可以确定,第一个应用在人工智能程序的启发式搜索来自一个玩跳棋游戏的程序[26],由IBM的亚瑟·塞缪尔(Aithur Samuel)于20世纪50年代中期创造。塞缪尔编写的跳棋程序,在许多方面为人工智能领域开辟了新天地。首先,以棋盘为人工智能技术的试验场,这一传统就是塞缪尔的跳棋程序开创的。即使在今天,这也是一种常见的技巧,虽然也有不少人提出反对意见。其次,正如我们所提到的,也是即将展开详细讨论的一点,该程序是基于启发式搜索编写的。最后,我们会在之后详细讨论,塞缪尔的跳棋程序是第一个真正意义上的机器学习程序:他的程序自学了怎么玩跳棋。
塞缪尔跳棋程序的关键点在于给棋盘的各个位置赋予不同的权重,用以评估对选手而言位置“好”的程度:从直觉来说,某些“好”的位置可能让某位选手更容易取得胜利,而一些“坏”的位置则会导致失败。为此,塞缪尔用一系列特征值来计算棋盘上的点位价值。例如,某些比较关键的位置,能够让你形成连跳,这样的连跳越多,就意味着你在棋盘上的形势越占上风。然后,程序将不同的评估参数整合起来,给出棋盘位置的一个综合评估价值分数,形成一个量化的评估标准。再根据启发式搜索方法来选择最佳的棋盘移动路径。
在实践中,要考虑比简单的启发式算法更复杂的情况:因为跳棋是一种对抗游戏,你必须考虑到对手可能如何行动。塞缪尔的跳棋程序会认为你的对手会做出对你最不利的举动。这种“最坏情况推理”的方法(即假设对手的行为会使得自己的得分最大化,让你的得分最小化)称为极大极小值搜索,是对抗性游戏的基本概念。
塞缪尔的程序玩跳棋的水准相当高,从许多方面来看都是一个令人惊叹的成就。尤其是考虑到当年所使用的计算机配置——塞缪尔使用的是IBM701计算机,只能处理相当于几页文本长度的程序代码——那就更了不得了。现代的台式计算机内存是当年的数百万倍,运行速度也是数百万倍。在当年计算机条件如此有限的情况下,跳棋程序能够达到这样的水准,简直是超乎想象。
大部分早期的启发式搜索算法,包括塞缪尔的程序,都使用了某种特别的启发方式——“尝试—实践—判断”。20世纪60年代末,美国SRI人工智能研究中心的尼尔斯·尼尔森(Nils Nilsson)和他的同事取得了突破,他们开发出名为A*的技术,作为我们之前讨论过的SHAKEY项目的一部分。A*定义了一些简单的规则,让我们可以确定哪些启发是“有益的”。在A*之前,启发式搜索不过是一个猜谜游戏;而在A*之后,它是一个数学上很容易理解的过程[27]。A*现在被视为计算机科学中的基础算法之一,并且在实践中得到了广泛的应用。其实,我们在生活中经常会遇见使用A*算法的程序,比如车载卫星导航系统等。尽管A*很惊艳,但它仍然依赖于使用特定的启发式搜索:好的启发能很快地找到解决方案,而差的启发就没什么价值。对如何为特定问题找到更优秀的启发,A*本身并没有给出答案。
人工智能遇上了复杂性障碍
我们在上一章讲过,计算机的出现源自艾伦·图灵想解决一个彼时数学界的世纪难题。图灵发明计算机可能算是计算机科学史上最大的讽刺之一,因为他的本意是证明有些事情计算机永远也办不到。
在图灵的研究成果问世后的几十年里,探索计算机能做和不能做的事情的范围形成世界各地数学系的小分支的研究方向。这项工作的重点在于把那些固有的不可判定问题(无法用计算机解决的问题)和可判定问题(能够用计算机解决的问题)区分开来。从那时起,人们发现了十分有意思的现象——不可判定的问题存在层次结构:即存在某些问题,不仅不可判定,还是高阶不可判定的(这对某些研究特定领域的数学家而言很棘手)。
不过在20世纪60年代,确定一个问题是否可判定,还远远不够。一个问题在图灵看来是可以解决的,并不意味着它在实际操作上是可以实现的:图灵只是从理论上证实某些问题有解,但是有些问题的解决方式需要消耗庞大的计算资源——需要动用的计算机内存大到不可估量,或者计算机的运行速度慢得出奇,能计算出结果的时间遥遥无期。很明显,许多人工智能问题陷入了这样尴尬的境地。
下面就是一个例子,按照图灵的理论,很容易证明它能被解决:
你的办公室里有四个才华横溢的人为你工作:约翰、保罗、乔治和林戈。现在有个项目,你需要成立一个三人团队。但很遗憾,由于个人竞争因素,约翰和保罗不能跟彼此合作。
你能组建一支合适的队伍吗?
这道问题的答案显然是“能”,你可以选择约翰、乔治和林戈,或者保罗、乔治和林戈(请注意,这是该问题仅有的两种解法)。
然后我们再加上一个限制:约翰和乔治不能一起工作。那么答案就明显了:保罗、乔治和林戈。
现在我们加上最后一个限制:保罗和乔治不能一起工作。那么我们的答案就变为“不能”,因为没有一种组合可以同时满足三个“禁止组队”的要求。
我们用抽象的方式来描述这个问题[28]:
首先给出一个包含n个人的列表(在上述例子中,这些人就是约翰、保罗、乔治和林戈,因此n = 4),以及一个“禁止组队”的列表(例如,“约翰和保罗不能在一起工作”)。那么,我们能否得到一个包含m个人的团队,使得所有禁止组队的条件都能得到满足?(显然,要使得这个问题有意义,m必须小于n。)
必须指出的是,这个问题在原则上是很容易解决的。简单地列出所有含有m个成员的团队名单,并检查每一个团队名单是否与禁止组队列表有冲突即可。用计算机编程来做这个步骤非常容易。因此,在图灵的观念里,这个问题很容易求解。
那么,问题的关键来了,我们需要检查多少种组合的可能性呢?如果是4人团队里面选3人,那很容易,你需要检查4个有可能的选择。但当团队人数增多,会出现什么情况,我们来看看吧。
如果是10人团队选5人,你就得检测252种可能性。好吧,很枯燥,但是还能忍受。不过可以看到的是,选择可能性的增长速度远远大于整个团队成员或者目标团队成员的数量增长的速度。
如果是100人团队里面选50人,那你就得检测大约1029这么多种可能性了。一台当代的大型计算机每秒可以评估大约1010种可能性——听起来挺多的,但是,稍微计算一下你就能意识到,即便算到宇宙末日,也无法检测完毕。期待英特尔的工程师们提供计算速度更快的芯片也无济于事:传统计算机技术再怎么突飞猛进,也无法在合理的时间内完成这个数量级的计算任务。
我们在这里所看到的现象也是组合爆炸的例子。在研究搜索树的时候我介绍过组合爆炸的概念,搜索树中的每个层级都呈指数型增长。所以在层级增多的时候,组合爆炸会导致可能出现结果的增长速度超乎想象。在团队建设的案例中,只要团队总人数增加1个人,我们必须考虑的潜在组合型就会翻倍。
所以,这种彻底列举每一种组合可能性的方式,是不可行的。理论上它行得通(如果时间足够,总会得到正确的答案),但在实践中它毫无意义(因为对每种可能的组合做判断需要的时间是天文数字)。
正如我们之前提到过的,简单的穷尽式搜索是一项非常原始的技术。我们可以使用启发式方法来对它进行优化,但是并不保证一定有效。有没有一种更聪明的方法可以寻找到合适的组合,又不用彻底检查所有的备选方案?很遗憾,答案是没有。你会发现对搜索方式的优化可以改善一些东西,但是,最终你仍然无法绕过组合爆炸。在大多数情况下,能在理论上确保问题可以解决的方案,在实践中都会遇到这个问题。
因为我们的问题是一个NP完全问题的案例[2]。恐怕这个首字母缩写对不熟悉计算机编程的人而言太过陌生:“NP”代表“不确定多项式时间”,具体的技术定义相当复杂。幸运的是,NP完全问题背后的逻辑很简单。
组合问题是一个NP完全问题,就像我们团队建设的例子。在这个问题中你很难找到解决方案(我们在上文讨论过,因为要彻底检查每一种组合需要耗费无尽的时间),但是又很容易验证是否找到了解决方案(在这个示例中,我们可以简单地验证它是否与禁止组队的规则相冲突)。
NP完全问题还有一个重要特征,为了理解它,我们要引入另一个问题(请相信我,这个真的很有必要),这个问题相当著名,你可能听说过它。它被称为旅行推销员问题[29]:
有一位推销员要去被道路连接的若干城市推销商品,走完所有城市以后他必须回到起点。并非所有城市都有公路直接相连接,而有公路连接的城市,推销员知道每条公路的具体长短。请问:推销员走遍所有的城市,最终回到起点,怎样选择一条最短的路径?
这个问题跟团队建设类似,都是组合类问题。我们可以用蛮力计算来解决它,只要列出所有可能的路线,并检查每条路线的长短,然后选择最短的一条即可。然而,正如你现在所想的那样,随着城市数量的增加,可能存在的行进路线会呈指数级增长:如果要走遍10座城市,就得考虑360多万种可能性,11座城市就会激增为4000万种。
所以,旅行推销员问题和团队建设问题一样,都会面临组合爆炸的难题。但除此之外,这两个问题似乎没什么共通之处,毕竟团队建设和寻找最短路径有什么关联呢?但是在NP完全问题的范畴内讨论的话,这两个问题,虽然看上去差别很大,但本质上是同一个问题。
我这句话的意思可以这么理解:假设我已经发明了一种巧妙的方法,可以保障高效又准确地找到团队建设问题的正确答案,现在你给我一个旅行推销员问题的案例,我就可以把这个旅行推销员问题转化为团队建设问题的一个特例,我的方法可以迅速解决它,你则可以得到想要的答案。这就意味着,如果你发明了一种可以高效又准确解决团队建设问题的方法,那么就等同于你发明了可以高效又准确解决旅行推销员问题的方法。这种神奇的方法并不仅仅适用于这两个问题,而是可以解决所有NP完全问题。
所有的NP完全问题都能共通,可以互相转换。这就意味着一个很明显的事实:要么所有NP完全问题存在通用的解,要么它们都无解。如果你能找到高效又准确解决某个NP完全问题的方法,就意味着你能够解决所有NP完全问题。但是,到目前为止,还没有任何人寻找到解决NP完全问题的高效准确的方法。事实上NP完全问题能否有效解决,是当今科学界最重要的开放性问题之一。这个问题被称为P与NP问题[30],如果你能证明这个问题是否有解,并且能让科学界认同,你将获得克雷数学研究所提供的100万美元奖金,正是该研究所于2000年将其确定为“千年问题”之一。精明的投资商认为NP完全问题不能得到有效解决,同样也是精明的投资商告诉我们,要确切知道这一点,还有很长的路得走。
如果你发现自己要解决的问题是NP完全问题,这就意味着传统意义上的计算机技术在解决该问题上是行不通的:从精准的数学意义来说,你的问题太难了。
NP完全问题的基本结构早在20世纪70年代就已成形。1971年美籍加拿大数学家斯蒂芬·库克(Stephen Cook)的一篇论文确定了NP完全问题的核心思想,随后美国人理查德·卡普(Richard Karp)证明了库克NP完全问题的范畴比最初想象的要广泛得多。整个20世纪70年代,人工智能领域的研究人员开始利用NP问题完全性理论来研究他们的课题,结果令人震惊。不管哪个领域——解决问题、玩游戏、计划、学习、推理任何方面——似乎关键性的问题都是NP完全问题(甚至更糟)。这种现象普遍得成了一个笑话——所谓的“AI完全问题”[3]意味着“一个和AI本身一样难的问题”,如果你能解决一个AI完全问题,你就能解决所有AI问题了。
发现你正在研究的问题是NP完全问题——或者更糟——真是个沉重的打击,在NP完全性理论及其论证结果被理解之前,人们总是希望出现重大突破使得这些问题变得简单——用术语来说就是易处理。从技术上讲,这种希望还是存在的,因为我们还没有明确地证明NP完全问题不可解。但到了20世纪70年代,NP完全性理论和组合爆炸成为笼罩在人工智能领域的阴影,以计算复杂性的形式阻拦在人工智能发展道路上,使它陷入停滞。黄金年代发展起来的技术似乎都无法扩大它们的使用范围,走不出玩具或者特定小世界(比如积木世界)的范畴。50到60年代过于乐观的预测遇到了现实难题,这让人工智能领域的先驱者们无比困扰。
人工智能等于炼金术?
20世纪70年代初,人工智能的瓶颈让科学界越来越沮丧,没有太多有用的核心研究进展,而某些研究人员又大肆鼓吹人工智能的未来,于是,到了70年代中期,批评人工智能的风潮达到狂热的程度。
在所有批评者中——相信我,这个数量非常大——最直言不讳、出语刻薄的无疑是美国哲学家休伯特·德莱弗斯(Hubert Derytus)。在20世纪60年代中期,他受兰德公司委托撰写了一份关于人工智能研究进展状况的报告,德莱弗斯选择的报告题目是《炼金术与人工智能》,明白无误地表达了他对这一领域及其工作人员的蔑视。公开地把一门严肃的科学和炼金术类比,这是非常侮辱人的。现在,重读《炼金术与人工智能》,哪怕时隔半个世纪,我仍然不得不说从来没见过这样的报告,其内蕴的蔑视之意如此明显,令人震惊。
虽然我们不赞成德莱弗斯批判人工智能的方式,但很难回避这个现实:他的某些观点是有道理的,特别是关于人工智能先驱者们浮夸的观点和宏伟的预测。赫伯特·西蒙(后来获得了诺贝尔经济学奖)在1958年写道:
这并非耸人听闻,但是……现在世界上出现了能够思考、学习和创造的机器。在可以预见的未来,它们的能力将迅速增强,能够处理的问题范围将迅速扩大到人类思维的范围。
在当时,这样的说法很多,我引用西蒙的观点是因为他最有名气。虽然西蒙是人工智能乐观主义者,但他绝不是最狂热和不讲理的倡导者。令人痛心的是,事后看来,他的乐观预测是不切实际的。时至今日,人工智能界的一些成员认为,当时的研究人员之所以做出这样的乐观声明仅仅是因为他们被兴奋冲昏了头脑——也有人持更为愤世嫉俗的观点,称这种大肆炒作的目的是吸引投资和研究基金。
不管怎么说,我的专业敏感性让我必须声明一下,虽然当年的研究人员乐观得近乎天真,但并没有出现大规模蓄意欺骗或者歪曲人工智能研究状态的事情。研究人员之所以乐观过头,是因为他们热爱这门学科,并且真的相信——也希望其他人相信——他们确确实实建立了可以学习、计划和推理的程序,尽管有诸多局限性。他们只是乐观地认为,扩大这些程序的应用范围应该很容易。
所以,我认为某些乐观过头的情绪是可以被谅解的。尤其是,当年的研究人员没有意识到正在研究的问题本质上是计算机无法处理的,因而总存在出现突破性进展,使得问题迎刃而解的可能性。但当NP完全问题无解的概念开始普及以后,社会各界才慢慢明白,人工智能所面临的问题有多艰难。
黄金年代的终结
1972年,英国一个重要的科研资助机构要求著名数学家詹姆斯·莱特希尔(James Lighthill)爵士评估人工智能的现状和前景。据说因当年世界最先进的人工智能研究中心之一(如今也是)——爱丁堡大学人工智能社区出现学术斗争的相关报道,所以才要求做这样的评估。莱特希尔荣列当年剑桥大学卢卡斯数学教授席位,这是英国数学家所能担任的最负盛名的学术职务,斯蒂芬·霍金(Stephen Hawking)后来也曾担任过。莱特希尔在实际应用数学方面有着丰富经验,时至今日,重读莱特希尔报告,可以看出他为当年人工智能的繁荣感到相当迷惑:
那些能力卓绝又受人尊敬的科学家写道:……所谓的人工智能……代表了进化过程中的另一条路。20世纪80年代,在人类规模的知识基础上,会实现多用途的人工智能。预测结果令人惊叹:到了2000年,机器智能将全面超越人类。
莱特希尔在报告中对当时的主流人工智能相当不屑一顾,他明确指出组合爆炸是人工智能领域无法解决的关键问题之一。他的报告立刻导致英国各地对人工智能研究经费的严重削减。
在美国,人工智能研究的资金大多来自军方,以国防高级研究计划局(DARPA)及其前身高级研究计划局(ARPA)为主。但到了20世纪70年代初,因为未能兑现诸多乐观的承诺,美国对人工智能研究的资助也随之削减。
20世纪70年代初到80年代初这10年被称为人工智能寒冬,更确切地说应该是人工智能的第一个寒冬,因为此后还有类似事件发生。人们得出了一个普遍结论,人工智能研究人员对这一领域充满了盲目乐观和毫无根据的预测,结果什么都没有。当时人工智能的名声就像医学界的顺势疗法[4],作为一门严肃的学科,它似乎正在走向衰落。