第三章 知识就是力量(第3页)
三段论是古希腊哲学家亚里士多德(Aristotle)提出的,1000多年以来,三段论为逻辑分析提供了主要框架。然而,它能展示的逻辑推理形式十分有限,不适合许多复杂形式的论证。从很早开始,数学家就对理解推理的通用原理有着浓厚兴趣,因为数学的根本性问题都是有关推理的:数学家的工作就是从现有的知识中获取新的知识,换句话说,就是进行推理和演绎。到了19世纪,数学家们普遍对他们的工作原理感到困惑。他们想知道,到底什么是真实的?我们怎样证明数学论证是合理的推论呢?我们怎么确定1+1=2是正确的?
大约始于19世纪中叶,数学家们开始认真研究这些问题。德国的戈特洛布·弗雷格(Ge)发展了普通的逻辑演算,为世人第一次展现了类似现代数理逻辑框架的东西。伦敦的奥古斯都·德·摩根(AugustusdeMan)和来自爱尔兰科克城市的乔治·布尔(GeeBoole)展示了如何将应用于代数问题的相同计算方式应用于逻辑推理(1854年,布尔发表了相关论文,并起了个傲慢的题名:思想法则)。
到了20世纪初,现代逻辑的基本框架已经大致建立起来,当时确立的逻辑运算系统,直至如今仍然能够支撑数学家几乎所有的逻辑推理工作。这个系统被称为一阶逻辑,一阶逻辑是数学和推理的通用语言。这个框架涵盖了亚里士多德、弗雷格、德·摩根、布尔和其他人的所有类型的推理。在人工智能领域,一阶逻辑似乎以同样的方式提供了统一框架,为当时世界各地各式各样、不成体系的知识表述方案提供了统一框架。
基于逻辑的人工智能范式由此诞生,其最早和最具影响力的倡导者之一,就是约翰·麦卡锡——正是那位在1956年主持了达特茅斯暑期学校,并为人工智能命名的麦卡锡。他描述了自己对基于逻辑的人工智能系统的构想[36]:
我的观点是,智能体能够使用逻辑语句来表达其对世界、目标和当前状况的了解,并通过(推断)某个行为或者行动过程是否符合它的目标,来决定它自己的行为。
这里的“智能体”指的就是人工智能,麦卡锡提出的“逻辑语句”正是我们前文所述的类似“凡人皆有一死”或者“所有教授颜值都高”等陈述。一阶逻辑提供了丰富的、数学上能够精准表达的语言,可以用来表述逻辑语句。
图8 麦卡锡对人工智能的构想
麦卡锡设想的基于逻辑的人工智能,一个基于逻辑的人工智能系统能通过逻辑语句明确地表示其对环境的信念,智能决策则被分解为逻辑推理的过程。
图8展示了麦卡锡对逻辑人工智能的构想(相当程序化)。我们看到一个机器人在类似积木世界的环境中工作,它配有机械臂和用于获取环境信息的感应系统。在机器人内部,有关于环境的逻辑描述,包括On(A,Table),On(C,A)等语句。这些语句实际上是一阶逻辑的表达式。对于图8所示场景,它们的含义非常明显:
·On(x,y)表示对象x位于对象y的上方
·Clear(x)表示对象x上没有对象
&y(x)表示x是空的
在基于逻辑的人工智能系统中,关键任务之一是定义表达式词汇表。比如On(x,y)、Clear(x)等等,用来表示所处的场景。
机器人内部的逻辑推理系统用于判断它从所处环境中获取的所有信息,这种认知通常被称为信念。机器人的信念系统包含了“On(A,Table)”就意味着“机器人相信对象A在桌面上”。不过,我们需要谨慎地对待这些术语。虽然使用我们熟悉的词汇来做术语有助于我们理解机器人的“信念”〔对人类而言,“On(A,Table)”是一种非常容易理解的表述〕,但对机器人而言,只有它的知识库里存储了这个表达式的意义,才能和机器人本身的行为产生关联。只有机器人的知识库中有了这一条认知以后,才真正算作一项“信念”。另外,选择“On”作为术语也没什么神奇之处,其实设计者完全可以使用诸如“Qwerty(x,y)”之类的语言来表述物体x位于物体y之上,对机器人而言,其执行结果并没有什么不同。人工智能开发中一个常见的误区,就在于开发者为系统所选择的术语对人类而言太容易理解了,反而增加了许多不必要的误解,这让我们以为机器人也能轻而易举读懂语言本身,而事实并非如此。
机器人的感应系统负责将感应器所提供的原始信息转化成机器人能使用的内部逻辑形式,如图8所示。正如前面我们提到过的,这不是一件容易的事情,我们稍后会详细讨论。
最后,通过机器人的逻辑推理系统(推理机)来决定机器人的实际行为。逻辑人工智能的核心思想就在于机器人的行为是基于逻辑推理的结果:它必须推断出自己接下来应该做什么。
总的来说,我们可以设想机器人的行为模式:在一个周期内不断地通过传感器观察周围环境,更新对环境的认知,推断出下一步该做什么,执行这个动作,然后重新开始整个过程。
基于逻辑的人工智能为什么会有相当的影响力?我想我们有必要理解这一点。或许最重要的原因是它让一切变得单纯:构建智能系统的整体问题被简化成对机器人应该做什么的逻辑描述。而这样一个系统是透明的:要理解机器人为什么这么做,只需要看到它的信念和推理过程就行了。
当然,我认为还有一些不那么明显的原因。首先,想象一下,我们做决定的依据来源于推理,这个想法本身就很吸引人。当我们思考的时候,似乎也是这么做的:我们考虑各种行动方案的优劣,可能会和自己来一场心灵对话,厘清每种方案的利弊。而基于逻辑的人工智能似乎遵循了这一过程。
逻辑编程
从20世纪70年代末到80年代中期,基于逻辑的人工智能范式开始逐步拥有影响力,到了80年代初,它已经成为人工智能的主流。研究人员开始推测,它不仅在人工智能领域有用,甚至可以推广至整个计算机领域。逻辑编程开始广为人知,从根本上改变了人们的编程模式。长期以来,编程是一项烦琐、耗时且容易出错的工作,因为它迫使人们思考计算机程序操作的每一个步骤,并且不能出一丁点儿错,人应付起来相当艰难。而逻辑编程把程序员从这样的诅咒里解脱出来,这是它的最大卖点。在逻辑编程中,你可以利用逻辑的力量来表达你对问题的了解——剩下的事情,交给逻辑推理即可。你没必要详细写出每一个步骤,一个逻辑程序会推断出它实际上需要做什么。
逻辑编程使用的是一种非常有名的语言:PROLOG[37],它可能算是逻辑人工智能时代最卓越的遗产了——这种语言至今仍在广泛使用和传授。PROLOG主要是由美籍英国研究员鲍勃·科瓦尔斯基(BobKowalski),以及两名来自法国马赛的研究员,阿兰·科尔默劳尔(Alainerauer)和菲利普·罗塞尔(PhilippeRoussel)发明的。在20世纪70年代早期,科瓦尔斯基就意识到可以使用一阶逻辑规则来构建编程语言的基础,虽然他有了这个新想法,但是并没有落实细节——这项工作是在1972年科瓦尔斯基拜访之后,由科尔默劳尔和罗塞尔完成的。
PROLOG是一门非常直观的语言,我们来看一个例子。下面是如何用PROLOG表示前文举的“凡人皆有一死”的例子:
human(emma)。
mortal(X):-human(X)。
第一行程序是PROLOG中定义的“事实”,即艾玛是凡人。第二行是PROLOG中的“规则”,表示若是X是凡人,X终有一死。
在实际中运用PROLOG,我们需要给它一个目标。在本例中,我们需要确认艾玛是否会死亡,可以这样表示:
mortal(emma)。
这句语句的目的是向PROLOG询问“艾玛是否终有一死”,或者用更具体的方式表述,即“你能根据已知的事实和规则推断艾玛是否终有一死吗?”有了这个目标,PROLOG就能使用逻辑推理来证明,该语句为真[38]。(有关PROLOG的深入了解,请参阅附录B。)
上述例子只展示了PROLOG强大功能的冰山一角,对于某些问题,你可以用PROLOG编写出非常简洁优雅的程序。1974年大卫·沃伦(DavidWarren)编写的战机计划系统可以解决积木世界内的规划问题,只需要1代码[39]。如果要用Python之类的语言编写同样的系统,大概需要数千行代码以及数月的工作。此外,用PROLOG编写的程序不仅仅是程序,还是逻辑公式。因此,PROLOG程序看上去实现了麦卡锡对基于逻辑的人工智能的设想。
在20世纪70年代末到8开始崭露头角,直到它挑战麦卡锡倍加推崇的LISP语言——人工智能黑客首选的编程语言。8成为日本政府大规模投资的对象,被称为第五代计算机项目。当时,与美国和欧洲的经济相比,日本经济呈现蓬勃发展之势,这也让美国和欧洲政府十分担心。但同时,日本政府也有所顾虑,虽然日本工业擅长技术再开发和商业化,但在根本的创新性方面,尤其在计算机领域,它并不十分出色。第五代计算机项目旨在改变这一现状,试图确立日本全球计算机创新中心的地位,而逻辑编程是定向投资的关键技术之一。在后续的十年里,大约4亿美金被投入到第五代计算机项目中。不过,尽管它在建立日本的计算机科学基础方面发挥了重要作用,却并没有让日本的计算机产业超越美国。PROLOG也没有像逻辑编程界人士所期望的那样,成为一种通用计算机语言。
虽然PROLOG没有征服程序员的世界,但不能将它视为失败。毕竟,在世界各地,程序员每天都在愉快地使用PROLOG编写高效的程序,并感激这种语言的强大和优雅。但对我来说,PROLOG最大的贡献却是无形的:逻辑编程为计算机提供了一个全新的思路,就如何解决计算问题而言,它有着跟传统计算机完全不同的观点。一代又一代程序员因此受益匪浅。
Cyc:终极专家系统
Cyc工程可谓知识型人工智能时代最著名的实验了,Cyc工程是天才的人工智能研究员道格·莱纳特(DougLenat)的智慧结晶,莱纳特拥有卓越的科学能力、坚定不移的信心以及优秀的说服能力,让旁人能够接受他的愿景。在20世纪70年代,他凭借一系列令人印象深刻的人工智能系统崭露头角,1977年,他荣获计算机与思想奖,这是能够授予年轻人工智能科学家的最具声望的奖项。
在80年代初期,莱纳特确信“知识就是力量”理论的应用应该远远超过大家所关注的、狭义的专家系统。他确信,这个理论可以成为打开通用人工智能——人工智能的宏伟梦想的钥匙。他在1990年写下这样的话〔合著者为拉曼内森·古哈(RamanathanGuha)〕[40]:
我们不相信任何通往智能的捷径,世界上不存在尚未被发现的麦克斯韦思想方程式之类的通解……任何强大的思维体都无可避免地需要大量知识。我们所说的知识,不是指枯燥的、专业领域内的知识;更确切地说,是现实世界中的各种常识……它们太普通了,所以参考书里面找不到。例如:生命不可永恒,任何实体不可能同时出现在两个不同的地方,动物不喜欢承受痛苦,等等。恐怕人工智能所面临的最艰难的事实——过去34年来人工智能领域一直致力于摆脱的事实——其实是,要获取如此庞大的知识库,没有一种优雅、轻松的方式。相反,大部分工作(至少在初期)必须经过人类判断以后手工输入。
因此,在80年代中期,莱纳特和他的同事给自己立下了艰难的挑战任务,创建“包罗万象的知识库”,Cyc工程应运而生。
Cyc工程的雄心壮志确实令人难以置信,要实现莱纳特的构想,Cyc的知识库需要对“共识现实”,即我们所理解的整个世界进行完整描述。现在让我们暂停阅读,思考一下这个挑战有多难,也就是说,必须有人明确告诉Cyc很多对人类而言理所当然的常识,比如: