::: {#753a .section .section .section—body .section—first .section—last} ::: section-divider
:::
::: section-content ::: {.section-inner .sectionLayout—insetColumn}
人工智能中的普遍性:约翰·麦卡锡 {#5c64 .graf .graf—h3 .graf—leading .graf—title name=“5c64”}
Generality in artificial intelligence: John McCarthy {#9f0c .graf .graf—h4 .graf-after—h3 .graf—subtitle name=“9f0c”}
我1971年的图灵奖报告题为”人工智能中的普遍性(Generality in artificial intelligence)“。这个论题看起来在当时是过分野心勃勃了,因为我发现那时我无法用书面形式满意地表述出我的思想。当初也许最好应该总结我以前的工作,而不是再辟蹊径,但我那时并没有总结的习惯。
我很感谢ACM给我这样一个机会让我再来一次。不幸的是,对于我们的科学说来,人工智能中的普遍性问题一如既往,没得到解决,虽然我们现在有了许多1971年所没有的思想。但这或许是这个题目的幸运吧。本文在很大程度上就依赖于这些新的思想,但是它远不是什么实现普遍性的方法在1987年的全面综述。因此,这里讨论的思想的详细程度要正比于我对它们的熟悉程度,而不取決于某些客观标准。
在1971年,甚至在1958年,人工智能程序就一直缺乏普遍性,这是很明显的。这牵涉到许多更细的细节,这也是很明显的。第一个明显的迹象是对一程序的思想做一小的增加会导致由数据结构开始的全部重写。在模块化数据结构方面,已经取得了一些进展,但是对于搜索策略的小修小改若不经过重写也不能完成。
另一个迹象是,没人知道怎样做一个常识的通用数据库,任何需要常识的程序都能用它。除了其它信息外,这样一个数据库还应包含这样的知识:一个机器人需要知道的有关移动一个物体的后果的知识,一个人需要知道的关于他的家庭及日常收支的知识。这并不取决于知识是否用逻辑语言或其它形式化机制来表达。当我们研究人工智能采用逻辑方法时,遍普性的缺乏表现我们设计好的用以表示常识的公理在应用到通用常识数据库时限制过多。我认为,找到一种在通用数据库中表示一般常识的语言是人工智能中普遍性问题的为键。
下面列出一些在1971年前后提出的关于实现普遍性的思想。我再次声明我并不想达到全面综述。
用程序表示行为 {#7d61 .graf .graf—h4 .graf-after—p name=“7d61”}
Friedberg讨论了表示行为的完全通用的方法,并提出一种学习方法加以改进。即,行为由计算机程序表示,学习则通过对程序做随机的修改并检査被修改的程序而完成的。Friedberg的方法仅仅在把一个存贮单元的一位移到另一个存贮单元时的学习中才是成功的。这种方法采甩了效益指令(rewarding instruction)的模式,这种指令通过减少修改概率进行成功的运行,Herbert Simon经证明这种模式不如这样的方法:即,彻底而完全地检查每个程序,并修正任何不完美的程序。但是似乎没有人力图沿着这样的思想,通过修改整个程序使之学习。
Friedberg的方法的缺点在于,利用程序表示行为是完全通用的,而通过对程序做些小修改来修改行为却是非常专用的。对行为做一个小小的概念性修改通常并不能由对程序做小的修改来表示的,特别是如果使用机器语言程序并且任何一个对程序正文段所做的小修改可能被视为另一个小修改的时候。
可能试验某种更加类似于遗传进化的方法是值得的,子程序被变成两个副本,某个副本被修改,而另一个则不变。这种学习系统应该进行试验来看看是否有利于把某些原始的子程序的调用改为修改过的子程序的调用。极有可能这种方法也不太灵,除非通过调用经过小修改的子程序就能达到对行为也做相应的小修改。也可能有必要对子程序的变元数进行修改。
Friedberg的问题是从经验中学习,当目标是把完全不同的知识组合起来或者是设计一个能修改知识的程序时,所有用程序来表示知识的模式都会通到类似的困难。
GPS及其后继者 {#3492 .graf .graf—h4 .graf-after—p name=“3492”}
人工智能中的一种普遍性构成了寻找与问题域无关的求解方法。Allen Newell,Herbert Simon和他们的同事及学生是这种方法的先驱,并且现在仍在循此路奋进。
Newell,Simon和Shaw首先提出了通用问题求解程序(GPS)。他们最初的想法是把某些通用的问题类表示为使用一组允许的规则把一个表达式转换为另一个表达式的问题。甚至在文献中还提出对GPS的改进,也可以认为是这类的一个问题。我认为,GPS作为通用问题求解程序是不成功的,因为一般而言问题并没有采取这种形式,而且问题求解及达到目标所需要的有关常识的绝大多数知识并不能简单地用转换表达式的规则来表示。但是,GPS是第一个把目标与子目标的问题求解结构与特定的问题域分开的系统。
如果GPS能达到真正的通用,那么也许Newell和Simon关于人工智能会马上成功的预言也早就兑现了。Newel目前的工作是通用问题表示系统SOAR,按我理解,这个系统涉及把一个状态转换为另一个状态,而状态则不必由表达式来表示。
产生式系统 {#1782 .graf .graf—h4 .graf-after—p name=“1782”}
第一个产生式系统是Newel和Simon于五十年代做成的,文献记录了这个思想。一种人工智能中的普遍性是通过对所有类型的问题使用相同的目的寻求机制,仅仅改变特定的产生式而得到的。这些早期的产生式系统导致了目前专家系统外壳的激增。
产生式系统利用事实与规则的形式来表示知识,在事实与规则之间几乎总存在着一种尖锐的句法上的差别。事实通常对应于逻辑公式的基础例子,即,它们对应于作用到常量表达式的谓词符号。与基于逻辑的系统不同,这些事实不包含变元或量词。新的事实可以由推理、观察及用户输入来产生。在规则中保留变元,但规则通常不采取模式 --- 动作的形式。规则经由程序员或曰”知识工程师”放入系统之中。在绝大多数系统中,规则不能通过系统的动作产生。如果不受这些限制,产生式系统的程序员可以得到较快的程序。
产生式系统的程序很少使用领域内的基本知识。例如,MYCIN有许多关于如何在症状及实验室化验结果的基础上推理哪种细菌引起疾病的规则。但是,它的形式系统却无法表示这样的事实:细菌是生长于体内的有机体。亊实上,MYCIN无法表示随时间发生的过程,虽然其它的产生式系统可以在情况演算(Situation calculus)的层次上表示过程。关于情况演算在下节讨论。
产生式系统模式匹配的结果是把规则的模式部分中的变元替以常量。结果,产生式系统就不能推出普遍性的命题。例如,考虑这样一条定义,若一个容器是密封抗菌的,那么这容器就是无菌的,其内细菌均被杀死。一个产生式系统(或一个逻辑程序)仅能通过用特定的细菌代替变元来使用这个事实。因而,它不能推出若一种被加热的细菌能被杀死,那么加热这个密封的容器就会使这个容器变为无菌的,因为它不能就容器中没有被枚举出的细菌进行推理。在文献中对这些问题进行了更深入的讨论。
用逻辑表示知识 {#0273 .graf .graf—h4 .graf-after—p name=“0273”}
在1958年,在我看来似乎对行为作小的修改很可能可以表示为对世界的信念作小的修改,这就要求一个可以明确地表示信念的系统。
如杲一个人想要机器能够发现抽象,那么似乎极可能这台外器必须能以某种相对简单的方式表示出这种抽象。
在1960年,增加普遍性的思想是用逻辑来表示事实,其表示方式与随后怎样使用该事实无关。那么正如现在一样,当初看起来人进行交际主要是用陈述性句子,而不是用程序设计语言来进行,这是有充分的客观依据的,无论交际者是人,是生物还是计算机中程序,都将如此。更进一步,陈述性信息的优点还应用到内部表示上。陈述性信息的优点是其普遍性。两个物体碰撞产生噪音这一事实在特定的场合下可以用来产生噪音,避免产生噪音,解释噪音,或解释为什么没有噪音。(我猜想那些汽车没有相撞,因为虽然我听到了急刹车声,却没有听见撞击声)。
一个人一旦决计建一个人工智能系统以表示陈述性信息,那么他还必须决定允许什么样的陈述性语言。最简单的系统只允许使用可作用于常量符号的常量谓词,例如,on (Block1,Block2)。为了提髙普遍性,要允许由函数符号,常和谓词符号构成的任意常量项,例如,location (Block1) = stop.(Block2)。Prolog数据库允许包括自由变元的任意Horn子句,例如,P(x, y)^Q(y, z> Z)>R(x, z),以标准逻辑表示法来表示Prolog的规则。除此之外就是完全的一阶逻辑了,它包括存在量词与全称量词,以及仁义的一阶公式。在一阶逻辑中,一个理论的表达能力还取决于变元允许变化的范围。重要的表达能力得自使用集合论,因为集合论包括了理论中任意客体集合的表达式。
非单调性 {#967c .graf .graf—h4 .graf-after—p name=“967c”}
情况演算公理的第二个问题是它们也并非有足够的普遍性。这就是限制问题,直到七十年代末期仍没有发现一个可能的解决方法。考虑把鸟会飞作为一条公理放入常识数据库中,很明显,公理必须以某种方式受到限制,因为企鹅、死鸟,以及其腿被绑结实了的鸟并不能飞。因而对公理进行细心地构造可能在虑及企鹅和死鸟这些例外时会成功,但很明显,我们还需想出许多诸如鸟腿被缚这样的例外情况。形式化的非单调推理提供了一种形式化的方法来说这样一件事情:除了某些异常情况外,鸟会飞;这种形式化方法还用来进行仅考虑那些其存在由已给事实决定的异常情况的推理。
非单调性极大地增加了情况演算中表达有关事件结果的普遍性知识的可能性。它还提供了一种求解框架问题的方法,框架问题是普遍性的又一障碍,文献已经注意到这 --- 点。框架问题(这个术语已被到处使用,但我还是第一次用)发生在这样的时候:有几个现成的动作,每个动作改变情况的某些特性。很有必要这么说:一个动作仅仅改变与它直接相关的情况特性。当有一个动作与特性的固定集合时,能明确地说明哪些特性没被一个动作所改变,尽管用了许多公理。 但是,如果我们设想可以向数据库中加入额外的情况特性及额外的动作,我们就会面临这样的问题:一个动作的公理化从来就没有被完成。在文献中我用界限来处理这个问题,但Lifschitz已经表明界限(circumscription) 需要加以改进,并提出这样一些建议。
具体化 {#11af .graf .graf—h4 .graf-after—p name=“11af”}
关于知识,信念或目标的推理,要求扩充被推理的客体域。例如,一个反向链接目标的程序直接把目标当作句子使用;如,在on(Block1,Block2) 中,符号on被用作语言的谓词常量,然而,一个程序若想直接表述目标on (Blockl, Block2)应该被延迟到已获得目标on(Block2, ,Block3)之后,就需要一个这样的句子precedes (on (Block2,Block3),,on(Blocki,Block2))。如果这是一阶逻辑的句子,那么符号on就必须被取作函数符号,on (Blockt,B丨ock2>必须被当作一阶语言中的客体。
由句子和其它实体产生客体的过程称为具体化(reification)。这个过程对于表达能力是必要的, 但又会导致增加推理的复杂性。
上下文概念的形式化 {#3898 .graf .graf—h4 .graf-after—p name=“3898”}
一当我们写出一个公理,一位批评家就 ,会说这个公萃仅在某些上下文中为真。若这位批评家有些天賦的话,通常他还可以提出一个此公理的精确形式不成立的更普遍的上下文。看一看在语言中反映出的人类推理就强调了这一点。为了从句子”书在桌子上。” (The book is on the table)推出适当的结论,就要考虑使”在…之上”(on)公理化。批评家提出了许多困难,非难”在…之上”(on)的精确意义,这些困难诸如:在书与桌子之间可以有什么东西,或者为了在空间飞船中使用”在…之上”(on),必须有多大引力以及是否考虑离心力等等。因而,在完全的普遍性的意下,考虑概念究竞意味着什么,就会遇到苏格拉底之谜,还会遇到生活中从没有出现过的例子。很简单,没有最普遍的上下文。
相反,如果我们在相当高的普遍性的层次上进行公理化,公理通常要比在特定情况下更为方便。因而,人们发现忽略对时间的参考和什么样的书与什么样的桌子的精确辩识,而说”书在桌子上”是很有用的。普遍到什么程度的问题,无论是使用逻辑,程序还是其它形式来表示普遍性常识,都会出现的。(某些人提出知识只是内在地以例子的形式表示的,使用类比与相似的强推理机制可更普遍地使用它们。我希望他们就这些些机制究竟是什么能成功地提出精确的方法。)
一条可能的出路是对上下文的概念加以形式化,并把它结合到非单调推理的限界方法之中。我们给公理中的函数与谓词增加一个上下文的参数。每个公理都做出一个关于某种上下文的断言。更进一步的公理告诉我们事实由经过更加限制的上下文继承,除非断言有例外。每个断言都非单调地假设应用到任何特定的更普遍的上下文,但同时又有例外。例如,关于鸟会飞的规则隐含地假设有了可以飞行的空气。在更普遍的上下文中,这又不应该被假设。需要决定到更普遍的上下文的继承与到更特殊的上下文的继承是怎样区别的。
所有这一切令人不愉快地觉得茫然,但 是可说的毕竟比1971年时要多得多了。
(John McCarthy, 张晓东. 人工智能中的普遍性[J]. 计算机科学, 1988(5):3—8.) ::: ::: :::