第一部分 人工智能是什么 第一章 图灵的电子大脑(第2页)
将A与B相加
如果结果大于C,则执行D,否则执行E
重复执行指令F,直到遇见情况G
所有的计算机程序都能归结为类似的指令列表,不管是MicrosoftWord还是PowerPoint,不管是《使命召唤》还是《我的世界》,不管是脸书、谷歌还是淘宝,不管是浏览器还是手机App,抑或是支付宝、微信、QQ……全都能归结为类似的指令列表。如果我们要制造智能机器,它的智能最终必须缩减到遵从这些简单的、明确的指令上。这从本质上对人工智能提出了挑战:把这些简单的指令排列组合起来,真的可以产生智能行为吗?
在本章的剩余部分,我会深入挖掘这个问题,并试图明确它在人工智能发展历程上所产生的影响。然而,在讲述之前,我得先为计算机正名。本章截至目前,我向你描述的计算机似乎就是一坨无用的废铁,我觉得有必要强调一下它的伟大之处,以免误导大家。
首先,计算机的运算速度非常快,非常、非常、非常快。虽然这点尽人皆知,但是我们在日常生活中很难直观地感受到。所以,我们来量化一下这个陈述。在我写这本书的时候,一台普通的台式机以全速运行,每秒可以处理1000亿条指令。1000亿大概是银河系所有恒星的数量,不过这么说还是不太直观。所以,请你想象一下自己要通过手动执行指令来和计算机进行一次较量。你大概每10秒执行一条指令。你得做到不吃不喝、不眠不休(全年365天,全天24小时,每小时60分钟,每分钟60秒),那么大概需要31710年,你才能完成计算机1秒钟就能搞定的工作。
当然,除了速度慢得令人发指以外,跟计算机比起来,你还有一个最关键的劣势:你不可能在执行海量任务的时候保证不出错。相比人类,计算机的错误率极低。当然,程序崩溃是常见的,但那几乎全是程序员编写程序时出的错,而不是计算机本身的问题。现代计算机的处理器可靠性非常高,它们的平均无故障运行时间高达50000小时,每秒钟都能忠实地执行数百亿条指令。
最后,虽然计算机只是遵循指令的机器,但并不意味着它不能做决定。计算机当然可以做决策,只是我们必须给出它做决策所需要的精准指令。计算机随后可以自行调整这些指令,只要我们指导它在何种情况下应该如何做——这就意味着,计算机可以随着时间推移改变其行为——它能够学习。
人工智能的产生为何如此艰难
现在我们了解到,计算机可以非常迅捷而精准地执行简单的指令,另外,只要输入精准定义过的指令,它就能够做决策。我们可以顺理成章地得出结论,某些需要计算机为我们处理的事务可以用非常简单的方式进行编码,可有些功能则不然。要理解人工智能的产生为何如此艰难,为什么如此难以定义何为人工智能真正的“进步”,我们需要了解一下到底哪些问题是容易用编程来解决的,而哪些问题则很难用编程解决,以及为什么。图1展示了我们希望计算机能够完成的任务,以及它们的难易程度及实现时间。
排在最前面的是计算。让计算机做计算是最简单不过的,因为所有的基础运算(加、减、乘、除)都可以用非常简单的步骤来运行——你在学校里都学过,哪怕现在已经不记得了。这些步骤可以直接编译成计算机程序,早期的计算机本身就是为了解决计算问题而生的(1948年,图灵加入曼彻斯特大学团队,为计算机“曼彻斯特宝贝”编写的第一条程序就是执行长除法。在解决了20世纪最深刻的数学问题之一以后,又回到了学校里学过的基础数学上来,这对图灵而言定然是一次奇特的经历)。
图1 我们希望计算机能完成的任务,按照难易程度排序括号中的年份表示问题解决的大致时间,而目前为止,对于“远未实现”的任务,我们毫无头绪。
接下来是排序,是指把一系列随机的数字按照升序排列,或者一系列姓名按照字母顺序排列。这听起来一点儿都不人工智能,事实上排序的步骤并不复杂。然而,传统的笨办法慢得令人发指。一直到1959年,快速排序法才被发明出来,排序这个老大难问题才算得到了一个有效率的解决方法(快速排序法诞生后50年内,都没出现比它更优秀的排序算法)[8]。
然后我们要讨论需要攻克重重难关才能解决的问题。下棋就是重大挑战之一,它也是人工智能故事中非常重要的一环。事实上,有一种简单粗暴的方式可以玩好棋类游戏,基于一种名为搜索的技术,我们将在下一章详细讨论它。问题在于,尽管基于搜索进行编程是最简单不过的事情,但它除了能适应一些简单的游戏以外毫无用处,因为它需要占用太多内存,消耗太多时间——哪怕我们把整个宇宙的每一个原子都用来建造计算机,它也承担不起用“简单粗暴”的搜索方式来下一盘围棋或者象棋。为了让搜索具有可行性,我们需要增加一些额外的东西——就如我们在下一章即将看到的那样,至此,人工智能开始登场。
我们知道有办法解决问题,但是在实践技术中却无法实施——因为它们需要的计算资源太过庞大。这种情况在人工智能研究领域司空见惯,围绕着怎么处理这类问题,人们也进行了大量的研究。
不过列表中接下来的问题并非此类,人脸识别、自动翻译和实时可用的口语翻译与棋类游戏不一样,传统的计算机技术无法为我们提供解决这类问题的方法,我们需要探索全新的解决方案。当然,在列表上,这类问题已经通过一种名为机器学习的方式得到了解决,我们将在后续章节深入了解有关机器学习的内容。
接下来是一个吸引人的话题,无人驾驶汽车。驾驶对人类而言是一件很简单的事情,开车并不是一项需要高智商的技能。但事实证明,让电脑来控制汽车简直困难重重。主要的问题在于,汽车需要知道它所处的位置以及周围环境。想象一下,一辆无人驾驶的汽车来到纽约繁忙的十字路口,数不尽的汽车从它身边呼啸而过,还有行人、自行车、道路施工、交通标志和各种标线。还有可能遇到下雨、下雪或者大雾,这让周围情况变得更加复杂(在纽约,这三种气象甚至可能同时出现)。这种情况下,难点并不在于你要做什么(减速、加速、左转或者右转等),而是要弄清你的周围发生了什么,即将发生什么——确认你的位置,周围有哪些车辆,它们的位置,它们会朝哪个方向行驶,行人的位置,行人的移动轨迹,等等。如果充分掌握了所有信息,那么你决定接下来该怎么做就非常容易了。(我们会在稍后的章节里面讨论无人驾驶的细节。)
然后就是我们真不知道该怎么解决的问题了:计算机怎么去理解一个复杂的故事,并且回答有关它的问题?计算机如何能把类似小说这种细致入微的文本翻译到信达雅的程度?计算机如何看图说话——不光是识别图中的人物,而是要诠释图中发生的事情?计算机如何能创作出一个有趣的故事,或者解读一件艺术品,比如一幅画?最后,仍然回到我们的“宏伟梦想”上,计算机如何拥有类似人类的智能?
因此,人工智能的进步意味着让计算机能够越来越多地完成图1中所列举的任务,这些任务难以完成的原因通常有两种。第一种是我们虽然知道理论上有某种可以解决问题的方法,但实际上却行不通,因为它需要太过漫长的运算时间,占用太高的内存,像象棋和围棋这样的棋类游戏就属于这一类。第二种是我们不知道解决问题的方法是什么(例如人脸识别),要解决这类问题,我们需要一些全新的东西(例如机器学习)。几乎所有当代的人工智能研究都关注着这两类问题之一。
现在,我们来看看图1中最困难的问题——通用的、人类水准的智能机器这一宏伟梦想。毫无疑问,这一挑战吸引了无数人的关注。而其中最早的以及最有影响力的思想家之一,就是我们的老朋友,艾伦·图灵。
图灵测试
20世纪40年代末至50年代初,第一台计算机的出现引发了一场公开辩论,辩论主题就是这一现代科学奇迹的潜力如何。这场辩论中最瞩目的贡献当归属于一本名叫《控制论》的书,由麻省理工学院数学教授诺伯特·维纳(Wiener)撰写。这本书将机器与动物大脑神经系统做了详细对比,并触及了许多有关人工智能的想法。《控制论》引起了公众的极大兴趣,但事实上,除了特别专注于此的科学家以及专业数学家,大多数人无法理解这本书。诸如机器是否能“思考”的问题开始在新闻界和广播节目中引起了有模有样的争论(1951年,图灵本人还参加了相关主题的一个BBC广播节目)。虽然还没有名字,但人工智能的萌芽开始浮现。
在公众辩论的推动下,图灵开始认真思考人工智能的可能性。他对公众辩论中经常提到的“机器做不到×××”的说法非常恼火(例如思考、推理或者进行类似创造性的工作)。他想让那些认为“机器不能思考”的人彻底闭嘴,于是提出了一个测试,现在,我们称之为图灵测试。自1950年第一次提出以来,图灵测试一直具有巨大的影响力,直至如今,它仍然是一个严肃的研究课题。不过,令人遗憾的是,到目前为止,它仍然没能让怀疑者彻底沉默,我们接下来就来讨论原因。
图灵测试的灵感来源于维多利亚时代一种叫作“模仿游戏”的室内游戏。“模仿游戏”的基本玩法是通过对一个人提问,从回答来判断对方是男是女。图灵建议对人工智能采取类似的测试。测试通常是这样描述的:
人类询问者通过键盘与屏幕彼端的“生物”进行交互聊天,询问者事先并不知道对方是人还是计算机程序。交互纯粹以文本的形式进行:询问者键入一个问题,然后对方给予一个回应。询问者的任务是确定对方是人还是计算机程序。
现在,假设被询问的确实是计算机程序,但是经过一段合理的时间,询问者无法准确判断他是在与人还是计算机交互。图灵认为,你就得承认这样的计算机程序拥有类似人类的智能(或者自主思维以及别的称呼)。
图灵的杰出之处是避开了所有存在争议的问题,直指计算机程序是否“真正”拥有智能(或者意识以及其他说法)、程序是否真正有“思维”(或者意识、自主意识什么的)并不是重点,重点在于它能够做到“乱真”,即让测试者无法分辨出程序和真人。这里的关键词在于“无法分辨”。
图灵测试是科学界中标准技术的一个优秀例子,如果你想确认两种事物是相同的还是不同的,就思考一下如何设计合理的测试来区分它们。若是有一种合理的测试,两种事物其中一种能通过,另一种不能,那么你可以宣称它们是不同的。如果不能通过合理的测试来区分它们,那么就不能声称它们是不同的。图灵测试就是用来区分机器智能与人类智能的方法,测试的方式是人类询问者是否能够分辨出与之交流的是机器还是人。
然而在这个问题上我们得谨慎一些,多年来,许多定义人工智能的方式都遇到过类似的困境,它们总是根据所使用的技术方法来定义人工智能。例如,如果你最喜欢的人工智能技术是“时间递归最优学习”[5](我随机挑了个时下最流行的人工智能相关词汇),那么你可能更倾向将人工智能的挑战定义为能够使用时间递归最优学习方式通过图灵测试,从而排除掉其他的技术方法。我们需要的是智能行为的测试,它独立于实现智能行为所使用的技术方法之外。图灵测试通过将询问者与测试对象分开来实现这一点:询问者只能通过提问和对方的回答来进行判断——询问者发送问题,并接收测试对象发来的答案。就图灵测试而言,被测试的对象是一个黑盒,从某种意义上来说,我们不允许检查其内部结构,只能对其进行输入和输出。
图灵于1950年在著名国际期刊《心智》上发表的《计算机器与智能》论文中[9],描述了他的测试。尽管在此前有许多关于人工智能思想的论文,但图灵是第一个从现代数字计算机的角度探讨这个问题的,因此,他的文章被公认为首篇有关人工智能的论文。
毫无意义的图灵测试
图灵测试简单、优雅、易懂,然而很不幸,若是将它奉为人工智能测试的圭臬,则无法回避一个致命问题——哪怕时至今日,它仍然存在。
这个问题在于,大多数试图通过图灵测试的程序员都倾向于使用一些简单的小技巧来“骗过”询问者,使他们相信自己正在与真人打交道,即用小伎俩去迷惑询问者,而并非真正去探寻与解决智能行为的本质。最著名的例子应该是名为ELIZA的程序,它诞生于20世纪60年代中期,由美籍德国人、麻省理工学院计算机科学家约瑟夫·魏岑鲍姆(JosephWeizenbaum)创造。魏岑鲍姆本人倒是无意让ELIZA挑战图灵测试——ELIZA原本是一项严肃的、富有影响力的心理治疗科学实验——但遗憾的是,自此以后,ELIZA就成了采用肤浅的小伎俩伪装人工智能的代名词,尤其在图灵测试领域。
ELIZA扮演的是一名精神病医生的角色,与病人交谈,提出开放式问题,让病人试图敞开自我。ELIZA学习了一些关键词,比如“家人”“朋友”“孤独”“悲伤”等,然后使用关联了关键词的封装脚本来提出后续问题。明白原理以后,你不用太费劲就能轻易看穿它使用的封装A及镜像反问伎俩。以下是现代版本的一段对话A隐藏编程对象的属性及实现途径,只公布其外部接口进行访问。(ELIZA的回复使用斜体字)[10]:
我很孤独。
你经常感觉到孤独吗?
是的,几乎每天都觉得。