第三章 知識就是力量

我們不能低估20世紀70年代中期人工智能發展遇到的重挫,許多學者將人工智能視為一門偽科學——直到最近這一領域才算是恢複了名譽。不過,就在萊特希爾報告廣為流傳並且造成嚴重後果之時,一種新的研究方法開始引起人們的注意,它宣稱可以解決人工智能受人詬病的問題。20世紀70年代末到80年代初,不少研究人員都突然決定朝這個方向進行研究,他們認為人工智能領域此前存在的問題是過度關注搜索和解決問題這種通用法則。有人提出,這些“弱”方法缺少一個關鍵的要素,而這一要素才是在所有智能行為中起決定性作用的組成部分:知識。Scientia potentia est(知識就是力量),17世紀哲學家弗朗西斯·培根(Francis Bacon)如是說。人工智能研究者從字麵上理解培根的名言,他們支持以知識為基礎的人工智能研究,確信捕捉和使用人類現有的知識才是人工智能進步的關鍵。

一種基於知識的人工智能係統——專家係統開始出現,它能利用人類專業的知識來解決特定的、狹義領域的問題。專家係統提供的證據證明,人工智能在完成某些特定領域的任務方麵遠勝人類,更重要的是,它們首次向人們證明,人工智能可以應用於商業領域。基於知識的人工智能係統可以向廣大受眾傳授相關的技術,這一代的人工智能研究畢業生決心把他們的知識應用在此領域。

專家係統與通用人工智能不同,它的目標是解決非常狹義、非常具體的問題,解決這類問題通常需要相當專業的知識。通常,能夠解決這類專業問題的人類專家都需要花費極長的時間來學習相關知識,而這類專家相當稀少。

在接下來的10年裏,基於知識的專家係統是人工智能研究的主要焦點,工業界的巨額投資流入了這一領域。20世紀80年代開始,人工智能的冬天趨於結束,另一股更狂熱的人工智能浪潮悄然到來。

在本章中,我們將了解從20世紀70年代末期到80年代末期蓬勃發展的專家係統,我會從如何獲取人類專家的知識並將其輸入計算機開始,為你講述MYCIN [5]的故事——它是當年最著名的專家係統之一。我們將看到研究人員如何利用數學邏輯的強大和精準性,試圖建立更豐富的獲取知識的方法,以及為何這個目標最終也落空了。接下來,我們將聽到有關Cyc工程的故事,這是人工智能曆史上最雄心勃勃,也是最臭名昭著的失敗項目之一。它試圖利用人類專家的知識來解決有史以來最大的難題:通用人工智能。

使用規則獲取人類專家知識

在人工智能係統中加入知識不是什麽新鮮想法,正如我們在前一章所看到的,啟發式方法作為一種將解決問題的重點放在有希望的方向上的方法,在黃金年代被廣泛應用。啟發式方法可以理解為包含能夠解決問題的知識,但是啟發式方法並沒有直接去獲取知識。而基於知識的人工智能體係擁有一個全新的思想:人工智能係統應該明確地獲取和展示人類解決某類問題的專業知識。

最常見的方案是基於規則的,被稱為知識表述。人工智能環境下,一條規則以“如果……那麽……”的形式獲取離散的知識塊。實際上規則相當簡單,我們來舉個例子說明。以下是一些規則(用自然文字編寫,而不是代碼),它們是人工智能民間傳說的一部分[31]。下麵是為了幫助人們對動物進行分類而設計的人工智能專家係統,看看它是如何獲取知識的(有關如何應用規則的細節,請參見附錄A):

如果該動物產奶,那麽它是哺乳動物。

如果該動物有羽毛,那麽它是鳥類。

如果該動物能飛並且能產卵,那麽它是鳥類。

如果該動物吃肉,那麽它是肉食動物。

我們對這些規則作出如下解釋:每一條規則都有前因條件(即“如果”之後的部分)和後果結論(即“那麽”之後的部分)。例如以下規則:

如果該動物能飛並且能產卵,那麽它是鳥類。

該規則中的條件是“該動物能飛,該動物能產卵”,結論就是“它是鳥類”。如果我們當前所掌握的信息與條件項相匹配,那麽規則就會被觸發,我們就能根據這條規則得出結論。因此,要使這條規則生效,需要兩個條件:我們試圖分類的那個動物能飛,而且能產卵。如果我們確實掌握了這兩條信息,那麽規則成立,我們就能得出結論,該動物是鳥類。這個結論為我們提供了更多的信息,這些信息又可以用在後續的規則中,用以獲取更多的信息,如此層層推進。通常,專家係統以谘詢的形式與用戶交互,用戶負責向係統提供信息,並且回答係統提出的問題。

圖5所示的就是一個典型的專家係統結構,其中,知識庫包含係統所擁有的知識——那些規則。工作存儲器則包含了係統擁有的,有關當前正在解決的問題信息(例如“該動物有毛發”)。最後,推理機則是專家係統的一個重要組成部分,它負責在解決問題的時候應用係統內存儲的知識。

圖5 經典專家係統結構

隻要給定知識庫,比如上文舉例的動物分類知識,推理機就能夠以兩種方式運行:第一種,用戶向係統提供他們所知道的有關問題的信息(以動物分類為例,用戶向係統描述該動物是否有條紋、是否食肉等),推理機會根據用戶提供的信息,應用規則去獲取盡可能多的新信息,這個過程叫作規則觸發。然後,推理機將觸發規則以後獲得的新信息添加到工作存儲器中,繼續查看是否有新的規則被觸發,然後不斷重複這個過程,直到徹底無法通過已知信息應用更多規則得出更多新信息為止。這種方法被稱為正向推理:從數據推理到結論。

另一種方式是反向推理,即我們從想建立的結論開始,反向推理出數據。例如,我們想確定這個需要被分類的動物是否為肉食動物,規則告訴我們,如果動物吃肉,就是肉食動物,因此,我們可以嚐試確定動物是否吃肉。因為沒有任何規則的結論是動物是否吃肉,係統隻能向用戶直接詢問這個問題。

MYCIN:一個經典的專家係統

在20世紀70年代出現的第一代專家係統中,最具代表性的可能就是MYCIN係統了(這個係統名稱來源於抗生素的英文詞後綴“mycin”)[32]。MYCIN係統首次證明,人工智能在某些重要的領域表現可以優於人類專家,它為後來無數的專家係統提供了模板。

MYCIN本來是用於輔助醫療的係統,為人類血液疾病的診斷提供專業建議。它是由斯坦福大學的一個研究小組開發的,包括布魯斯·布坎南(Bruce Buchanan)領導的人工智能實驗室專家組和特德·肖特利夫(Ted Shortliffe)領導的斯坦福醫學院專家組。事實上,這個項目成功的一大要素就在於,專家係統是由真正的人類專家參與建設的。後來有許多專家係統都宣告失敗,因為它們缺乏了相關領域人類專家的必要支持。

跟我們在前文提到的動物分類規則相比,MYCIN關於血液疾病的知識則是用稍微豐富一些的規則來表示的。典型的MYCIN規則(用自然語言表述)如下:

如果:

·該有機體不會被革蘭氏染色法染色,並且

·該有機體的形態是杆狀,並且

·該有機體是厭氧的

那麽:

有可能(60%)該有機體是類杆菌

這是用實際的人工智能語言表述的MYCIN規則:

RULE036:

PREMISE: ($AND (SAME CNTXT GRAM GRAMNEG)

(SAME CNTXTM MORPH ROD)

(SAME CNTXT AIR ANAEROBIC))

ACTION: (CONCLUDE CNTXT IDENTITY

BACTEROIDES TALLY 0.6)

研究人員大概用了5年的時間對MYCIN的知識庫進行編碼和補充,在它的最終版本裏,知識庫已經包含了數百條規則。

MYCIN之所以被稱為最具代表性的專家係統,是因為它包含了後來的專家係統必不可少的所有關鍵特性。

首先,MYCIN的係統操作和人類專家進行交互類似——向用戶提出一係列問題,並且記錄用戶的響應。這成為專家係統的標準模型,而MYCIN的主要功能——診斷——則成為專家係統的標準任務。

其次,MYCIN的推理是可以還原和解釋的。推理透明度的問題在人工智能應用方麵有時極其重要。如果一個人工智能係統被應用在一些生死攸關的決策中(以MYCIN而言,比如治療方案事關病人的生死),要想讓人們遵從它的建議,就需要人們信任這個係統。因此,解釋和證明人工智能建議的合理性是非常有必要的。經驗表明,作為“黑盒”運行的係統,如果沒有能力證明其建議的合理性,就會受到用戶的嚴重質疑。

MYCIN至關重要的能力是它可以明確給出得出這一結論的原因,它是通過一係列推理鏈來得出最終結論的,即那些被觸發的規則和觸發規則的信息,都是有跡可尋的。在實踐中,大多數專家係統的解釋能力最終都歸結為類似的東西。雖然不是特別理想,但這樣的解釋很容易追根溯源,並且有助於理解係統運作的機製。

最後一點,MYCIN能夠應對不確定性:有些時候用戶向係統提供的信息並不是完全真實和準確的。應對和處理不確定性是對專家係統及人工智能係統的一個普遍要求,在MYCIN這樣的係統中,極少根據某個單一的特性就得出明確結論的規則。例如,用戶的血液檢測結果呈陽性,這就為係統判斷提供了一個有力的證據。但是,總有出現檢測錯誤的概率(比如“假陽性”或者“假陰性”之類);或者,患者表現出的某些症狀可能是某種特定疾病的征兆,但是不能確定它一定就是某種特定疾病(例如咳嗽是拉沙熱的典型症狀之一,但病人有咳嗽的症狀不能夠直接判定他患了拉沙熱)。為了能夠做出準確的判斷,專家係統需要以某種更保險的方式來考慮症狀信息。

為了處理不確定性,MYCIN引入了確定性因素的技術——某種表示對某一特定信息的信任或者不信任程度的數值。確定性因素技術是處理不確定性問題的一個相當特別的解決方案,但也因此招來了大量的批評。不確定性處理問題和推理問題成為人工智能研究的一個重要課題,至今仍然如此。我們將在第四章深入討論。

1979年,MYCIN參與了10個實際病例的評估實驗,在血液疾病診斷方麵,MYCIN的表現與人類專家相當,並且高於普通醫生的平均水平。這是人工智能係統首次在具有實際意義的任務中展示出人類專家級或以上的能力。

繁榮再起

20世紀70年代湧現的專家係統絕不止MYCIN,同樣來自斯坦福大學,由愛德·費根鮑姆(Ed Feigenbaum)領銜的項目DENDRAL才是世界上第一例成功的專家係統,它也使費根鮑姆成為知識型係統最著名的倡導者之一,並被人們尊稱為“專家係統之父”。DENDRAL的開發目的是幫助化學家根據質譜儀提供的信息來確定化合物的成分及結構。在20世紀80年代中期,每天有成百上千的人在使用DENDRAL。

美國數字設備公司(DEC)開發的R1/XCON係統,旨在幫助他們配置VAX係列計算機。在20世紀80年代,DEC公司聲稱該係統已經處理了超過8萬份訂單,當時係統有3000多條規則,涉及5500個不同的係統組件。到了80年代末,R1/XCON係統的規則數量已經擴展至17 500多條,開發者聲稱該係統為公司節省了超過4000萬美元。

DENDRAL項目證明專家係統是可用的,MYCIN證明它可以在專業領域勝過人類專家,R1/XCON證明了它有商用價值。這些成功的故事引起了許多人的興趣:人工智能似乎已經為商業化做好了準備。這是一個激動人心的故事,毫無疑問,海量的研發資金紛紛流入這個領域。一批初創公司忙不迭地從再度繁榮中獲利,典型案例就是用於構建專家係統的軟件平台,以及開發和部署專家係統的支持服務。不過你也可以購買專門設計用來快速執行LISP——構建專家係統的首選編程語言——的計算機,這些LISP專用機器一直到90年代早期還在使用。後來,普通個人計算機價格日益便宜,功能也日益強大,那時候再花費7萬美元買一台隻能運行LISP的計算機就是毫無意義的了。

不僅僅是軟件行業,其他行業也爭先恐後地乘著這場人工智能再度繁榮的東風飛速發展。20世紀80年代,工業界開始意識到,知識體係,尤其是專業知識,是可以培育和發展的重要資產,可以帶來高額利潤。專家係統似乎使這種無形的資產變為有形,知識體係的概念與當時西方經濟進入後工業時代的觀點相呼應——在這一時期,經濟發展的新機遇主要來自所謂的知識型產業和服務業,而不是製造業或其他傳統產業。

回顧一下專家係統發展的經曆,我們可以看到,人工智能的再次繁榮不僅僅是MYCIN、DENDRAL等案例成功的故事,更重要的是,專家係統賦予了人工智能另一種可能性。你不需要相關知識領域的博士學位,就能構建一個專家係統(我敢打賭,你可以輕而易舉理解前文所述的動物分類規則)。任何熟悉編程的人都可以明白專家係統的原理,事實上,構建一個專家係統似乎比傳統編程還容易一些。一個全新的職業出現了:知識工程師。

具有諷刺意味的是,1983年,英國政府發起了一場雄心勃勃的計算機技術研究資助計劃,名叫“阿爾維計劃”,計劃的核心就是發展人工智能。但鑒於萊特希爾10年前的報告幾乎讓英國的人工智能產業陷入死局,考慮到該領域的負麵名聲,似乎所有參與阿爾維計劃的人都不願意將之稱為人工智能。相反,他們稱之為“基於知識的智能係統”。人工智能的未來似乎一片光明——隻要你不把它叫作人工智能。

基於邏輯的人工智能

雖然規則成為專家係統獲取人類知識的主要方法,但也有大量其他方案存在。例如,圖6就展示了一種名為腳本的知識展示方案(簡化)版本,由心理學家羅傑·尚克(Roger Schank)和羅伯特·亞伯森(Robert P. Abelson)開發。該方案基於一種關於人類理解能力的心理學理論建立,理論指出,我們的行為部分受刻板印象模式(即“腳本”)支配,我們也用這些模式來理解世界。他們認為同樣的模式可以應用在人工智能中。以圖6所示腳本為例:這是一個典型的餐廳場景,腳本(用自然語言)描述了參與者的各種角色(顧客、服務員、廚師、收銀員)、啟動腳本所需要的條件(客戶餓了)、腳本需要操作的各種物理項(食物、桌子、錢、菜單、小費),並且,最重要的是與腳本相關的常規事件序列,在圖6中,這些事項的編號為1—10。尚克和亞伯森推測這樣的腳本可以用在人工智能程序中,用於理解故事。他們認為,當故事中的事件與常規劇本不同的時候,故事就會變得有意思(有趣、可怕、令人驚訝)。例如,一個有意思的故事可能包含這樣的情況:在第4步以後腳本就停止運行了,即顧客點了餐,但是沒有上菜。一個違法故事可能省略第9步:顧客點餐並吃東西,但沒有付錢就離開了餐館。他們嚐試了幾次以腳本為基礎構建能夠理解故事的係統,但成功率有限[33]。

圖6 描述典型的餐館就餐經曆的腳本

另一個引起廣泛關注的方案是語義網[34],它非常直觀、自然,在當今社會,也經常被重新定義——事實上,如果讓你去發明一個知識表述方案,我認為你很有可能做出類似的產品。圖7展示了一個簡單的語義網,它代表了有關我的一些知識(我的出生日期、居住地、性別和下一代)以及一些世界性常識(比如:女人首先是人,大教堂既是一座建築又是一個禮拜場所等)。

圖7 一個簡單的語義網,包含我的個人信息、子女信息和居住信息

在以知識為基礎的人工智能興起時,似乎每一個人都有自己的知識表述方案,而且跟其他人的不兼容。

雖然專家係統事實上的知識表述方式是基於規則的,但在知識表述方麵,研究人員仍然有不少困擾。其中之一就是規則太簡單,無法獲取複雜環境下的相關知識。比如MYCIN係統的規則就不適用於會隨時間變化的環境,也不適用於多個用戶(不管是人類還是人工智能)的環境,或者實際狀態存在各種不確定性的環境。另一個問題是,用於專家係統獲取知識的各種方案似乎都有些武斷,研究人員希望能了解專家係統中的知識實際上意味著什麽,並確保係統進行的推理是可靠的。簡而言之,他們想為基於知識的專家係統提供合適的數學基礎。人工智能研究人員德魯·麥克德莫特(Drew McDermott)在1978年撰寫的一篇文章中總結了這些問題,並稱之為“無意指不表達”[35],“對一個係統而言,正確性固然是重中之重,”他寫道,“讓人能理解它,也是十分關鍵的。”

20世紀70年代末就開始出現相關的解決方案,即使用邏輯作為知識表述的統一方案。為了理解邏輯在基於知識的係統中所扮演的角色,我們有必要了解一些邏輯的知識,以及它如何作用於係統。邏輯學的發展是為了理解推理,特別是區分好的(完備的)推理和壞的(不完備的)推理。讓我們看一些推理方麵的例子,包括完備和不完備的。

凡人終有一死;

艾瑪是凡人;

所以,艾瑪終有一死。

這就是典型的三段論邏輯推理的模式,我想你會同意這裏的邏輯推理是完全合乎情理的:如果所有的人類都是凡人,終有一死,而艾瑪是人類之一,所以她也是凡人,也終有一死。

我們繼續看下一個例子:

所有的教授顏值都高;

邁克爾是一名教授;

所以邁克爾是位帥哥。

很顯然,教授們倒是很樂意相信這個結論。然而,從邏輯的角度來看,這個推論也是沒有什麽錯誤的:事實上,從推論本身來看,它完全正確。如果真的所有教授顏值都很高的話,邁克爾是一名教授,那麽得出他是帥哥的結論就完全合乎情理。邏輯並不關心你一開始的陳述是否真實(即前提是否真實),隻關心你使用的模式和得出的結論是否合理。當然,那是在承認這個前提的基礎上。

接下來我們看一個不完備的推理:

所有學生都努力學習;

索菲是一名學生;

所以索菲很有錢。

這個推理就是錯誤的,因為僅僅依靠前兩個前提就得出索菲有錢的結論是不合理的。索菲有可能很富有,但這不是重點,重點在於你不能從給定的前提得出這個結論。

所以,邏輯是有關推理模式的,上述的例子所示的三段論也許是最簡單有用的邏輯推理案例。邏輯告訴我們怎樣正確地從前提中得出結論,這個過程被稱為演繹。

三段論是古希臘哲學家亞裏士多德(Aristotle)提出的,1000多年以來,三段論為邏輯分析提供了主要框架。然而,它能展示的邏輯推理形式十分有限,不適合許多複雜形式的論證。從很早開始,數學家就對理解推理的通用原理有著濃厚興趣,因為數學的根本性問題都是有關推理的:數學家的工作就是從現有的知識中獲取新的知識,換句話說,就是進行推理和演繹。到了19世紀,數學家們普遍對他們的工作原理感到困惑。他們想知道,到底什麽是真實的?我們怎樣證明數學論證是合理的推論呢?我們怎麽確定1 + 1 = 2是正確的?

大約始於19世紀中葉,數學家們開始認真研究這些問題。德國的戈特洛布·弗雷格(Gottlob Frege)發展了普通的邏輯演算,為世人第一次展現了類似現代數理邏輯框架的東西。倫敦的奧古斯都·德·摩根(Augustus de Morgan)和來自愛爾蘭科克城市的喬治·布爾(George Boole)展示了如何將應用於代數問題的相同計算方式應用於邏輯推理(1854年,布爾發表了相關論文,並起了個傲慢的題名:思想法則)。

到了20世紀初,現代邏輯的基本框架已經大致建立起來,當時確立的邏輯運算係統,直至如今仍然能夠支撐數學家幾乎所有的邏輯推理工作。這個係統被稱為一階邏輯,一階邏輯是數學和推理的通用語言。這個框架涵蓋了亞裏士多德、弗雷格、德·摩根、布爾和其他人的所有類型的推理。在人工智能領域,一階邏輯似乎以同樣的方式提供了統一框架,為當時世界各地各式各樣、不成體係的知識表述方案提供了統一框架。

基於邏輯的人工智能範式由此誕生,其最早和最具影響力的倡導者之一,就是約翰·麥卡錫——正是那位在1956年主持了達特茅斯暑期學校,並為人工智能命名的麥卡錫。他描述了自己對基於邏輯的人工智能係統的構想[36]:

我的觀點是,智能體能夠使用邏輯語句來表達其對世界、目標和當前狀況的了解,並通過(推斷)某個行為或者行動過程是否符合它的目標,來決定它自己的行為。

這裏的“智能體”指的就是人工智能,麥卡錫提出的“邏輯語句”正是我們前文所述的類似“凡人皆有一死”或者“所有教授顏值都高”等陳述。一階邏輯提供了豐富的、數學上能夠精準表達的語言,可以用來表述邏輯語句。

圖8 麥卡錫對人工智能的構想

麥卡錫設想的基於邏輯的人工智能,一個基於邏輯的人工智能係統能通過邏輯語句明確地表示其對環境的信念,智能決策則被分解為邏輯推理的過程。

圖8展示了麥卡錫對邏輯人工智能的構想(相當程序化)。我們看到一個機器人在類似積木世界的環境中工作,它配有機械臂和用於獲取環境信息的感應係統。在機器人內部,有關於環境的邏輯描述,包括On(A, Table), On(C, A)等語句。這些語句實際上是一階邏輯的表達式。對於圖8所示場景,它們的含義非常明顯:

·On(x, y)表示對象x位於對象y的上方

·Clear(x)表示對象x上沒有對象

·Empty(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主要是由美籍英國研究員鮑勃·科瓦爾斯基(Bob Kowalski),以及兩名來自法國馬賽的研究員,阿蘭·科爾默勞爾(Alain Colmerauer)和菲利普·羅塞爾(Philippe Roussel)發明的。在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年大衛·沃倫(David Warren)編寫的戰機計劃係統可以解決積木世界內的規劃問題,隻需要100行PROLOG代碼[39]。如果要用Python之類的語言編寫同樣的係統,大概需要數千行代碼以及數月的工作。此外,用PROLOG編寫的程序不僅僅是程序,還是邏輯公式。因此,PROLOG程序看上去實現了麥卡錫對基於邏輯的人工智能的設想。

在20世紀70年代末到80年代初,PROLOG開始嶄露頭角,直到它挑戰麥卡錫倍加推崇的LISP語言——人工智能黑客首選的編程語言。80年代初,PROLOG成為日本政府大規模投資的對象,被稱為第五代計算機項目。當時,與美國和歐洲的經濟相比,日本經濟呈現蓬勃發展之勢,這也讓美國和歐洲政府十分擔心。但同時,日本政府也有所顧慮,雖然日本工業擅長技術再開發和商業化,但在根本的創新性方麵,尤其在計算機領域,它並不十分出色。第五代計算機項目旨在改變這一現狀,試圖確立日本全球計算機創新中心的地位,而邏輯編程是定向投資的關鍵技術之一。在後續的十年裏,大約4億美金被投入到第五代計算機項目中。不過,盡管它在建立日本的計算機科學基礎方麵發揮了重要作用,卻並沒有讓日本的計算機產業超越美國。PROLOG也沒有像邏輯編程界人士所期望的那樣,成為一種通用計算機語言。

雖然PROLOG沒有征服程序員的世界,但不能將它視為失敗。畢竟,在世界各地,程序員每天都在愉快地使用PROLOG編寫高效的程序,並感激這種語言的強大和優雅。但對我來說,PROLOG最大的貢獻卻是無形的:邏輯編程為計算機提供了一個全新的思路,就如何解決計算問題而言,它有著跟傳統計算機完全不同的觀點。一代又一代程序員因此受益匪淺。

Cyc:終極專家係統

Cyc工程可謂知識型人工智能時代最著名的實驗了,Cyc工程是天才的人工智能研究員道格·萊納特(Doug Lenat)的智慧結晶,萊納特擁有卓越的科學能力、堅定不移的信心以及優秀的說服能力,讓旁人能夠接受他的願景。在20世紀70年代,他憑借一係列令人印象深刻的人工智能係統嶄露頭角,1977年,他榮獲計算機與思想獎,這是能夠授予年輕人工智能科學家的最具聲望的獎項。

在80年代初期,萊納特確信“知識就是力量”理論的應用應該遠遠超過大家所關注的、狹義的專家係統。他確信,這個理論可以成為打開通用人工智能——人工智能的宏偉夢想的鑰匙。他在1990年寫下這樣的話〔合著者為拉曼內森·古哈(Ramanathan Guha)〕[40]:

我們不相信任何通往智能的捷徑,世界上不存在尚未被發現的麥克斯韋思想方程式之類的通解……任何強大的思維體都無可避免地需要大量知識。我們所說的知識,不是指枯燥的、專業領域內的知識;更確切地說,是現實世界中的各種常識……它們太普通了,所以參考書裏麵找不到。例如:生命不可永恒,任何實體不可能同時出現在兩個不同的地方,動物不喜歡承受痛苦,等等。恐怕人工智能所麵臨的最艱難的事實——過去34年來人工智能領域一直致力於擺脫的事實——其實是,要獲取如此龐大的知識庫,沒有一種優雅、輕鬆的方式。相反,大部分工作(至少在初期)必須經過人類判斷以後手工輸入。

因此,在80年代中期,萊納特和他的同事給自己立下了艱難的挑戰任務,創建“包羅萬象的知識庫”, Cyc工程應運而生。

Cyc工程的雄心壯誌確實令人難以置信,要實現萊納特的構想,Cyc的知識庫需要對“共識現實”,即我們所理解的整個世界進行完整描述。現在讓我們暫停閱讀,思考一下這個挑戰有多難,也就是說,必須有人明確告訴Cyc很多對人類而言理所當然的常識,比如:

在地球上,一個懸在空中的物體會落地,它落到地麵

時會停下來;而在太空裏麵,懸空物體則不會落地。

燃料耗盡的飛機會墜機。

墜機事故會讓人喪生。

食用你不認識的蘑菇是危險行為。

紅色水龍頭往往通的是熱水,藍色的往往是冷水。

……

一個受過良好教育的人在生活中所認知的日常知識,在Cyc係統裏麵必須由人用特殊的語言明確地寫下來,並且輸入係統中。

萊納特預估這個輸入的工程需要至少200人經過多年的努力來實現,大部分的時間和人力都會消耗在手動知識錄入上,即告訴Cyc我們的世界是怎樣的,以及我們是怎麽理解它的。萊納特樂觀地認為,用不了多久,Cyc就可以實現自我學習。一個以萊納特設想的方式自主教育、自我學習的係統,就意味著通用人工智能的設想成為現實。這就是說,萊納特假設通用人工智能的問題主要是知識儲備問題,它可以通過一個合適的基於知識的係統來解決。Cyc假設是一場豪賭,高風險、高收益,如果被證明成功,它就能改變整個世界。

科研界,包括科研投資的悖論之一就是,有時候,宏偉的目標會掩蓋其荒謬的本質。事實上,正是某些研究機構不遺餘力地支持和鼓勵那些雄心勃勃的、步子邁得太超前的科研者,而摒棄了一些安全但是進度緩慢的研究。也許Cyc就是這樣一個案例。不管怎麽說,1984年,Cyc工程從得克薩斯州奧斯汀市的微電子和計算機聯合會那裏獲取了資金,項目啟動了。

當然,它失敗了。

首要的問題在於,以前從來沒人試圖將人類所有的基礎常識組織匯編,你到底該從哪裏開始?第一步,你得定義將使用到的所有詞匯,還有各種術語,它們之間是怎麽關聯的。定義基本術語和概念,並圍繞它們組織整個知識體係,被稱為本體工程。而Cyc的本體工程麵臨的挑戰,比此前所有的其他項目都龐大得多。很快,萊納特和他的同事就發現,他們關於如何構建Cyc的知識體係,以及如何獲取知識的想法都太過天真和粗糙。並且,隨著項目的推進,時不時還得推翻重來。

盡管經曆各種挫折,在項目實施10年後萊納特仍然保持樂觀。1994年4月,他的樂觀預期引起了斯坦福大學計算機科學教授沃恩·普拉特[41](Vaughan Pratt)的注意。普拉特是一名頗有威望的計算理論專家,習慣用精準而嚴謹的數學語言來思考計算機的本質。普拉特對一次Cyc的展示會頗感興趣,他要求現場觀看一次程序演示。萊納特同意了。

1994年4月15日,普拉特見到了Cyc項目的演示。演示從一些很簡單的例子開始,展示了Cyc係統看似不夠亮眼但真正富有技術含量的成就——識別出數據庫中需要Cyc運用推理能力才能識別的細節差別。真是一個良好的開端。然後萊納特開始演示一些擴展能力,讓Cyc識別出用自然語言編寫的需求,按照需求檢索圖片。“放鬆的某人”的查詢結果是三個穿著沙灘服的男人拿著衝浪板的照片——Cyc正確地將衝浪板、衝浪和放鬆聯係起來。普拉特簡略書寫了一下Cyc推理到這個環節的推理鏈,它需要運用近20條規則,其中某些規則在我們看來可能挺奇怪的——“所有哺乳動物都是脊椎動物”是完成這個推理鏈所用到的規則之一(普拉特看到的Cyc版本有50多萬條規則)。

到目前為止進展得不錯,不過,普拉特想了解Cyc最核心的特征之一:它對世界的實際認知。然後,普拉特詢問Cyc是否知道麵包是食物。主機將問題翻譯成Cyc使用的規則語言。“是的,”Cyc回答說。“那麽,Cyc認為麵包是一種飲料嗎?”普拉特問道。這次Cyc卡住了。他們試圖明確地告訴它麵包不是飲料。普拉特在報告裏寫道:“在稍加調整之後,我們放棄了這個問題。”他們繼續進行演示,Cyc似乎知道各種活動會導致死亡,但並不知道饑餓也是死亡的一個原因。事實上,Cyc似乎沒有“餓死”這個概念。普拉特繼續詢問有關行星、天空和汽車的問題,但很快就發現,Cyc的知識儲備十分粗略和難以捉摸。例如,它不知道天空是藍色的,也不知道汽車通常有四個輪子。

在觀看過萊納特的演示以後,普拉特拿出了準備好的,包含100多個問題的清單,他希望這些問題能夠探索Cyc到底對這個世界的常識了解多少,理解到何種程度。例如:

如果湯姆比迪克高3英寸[6],迪克比哈裏高2英寸,那

麽湯姆比哈裏高多少?

兩兄弟可以彼此都比對方更高嗎?

陸地和海洋哪個更濕?

汽車能向後開嗎?飛機能向後飛嗎?

人沒有空氣能活多久?

這些都是關於這個世界最基礎的常識性問題,但Cyc不能對此做出有意義的回答。普拉特回顧了自己的經曆,對Cyc項目提出了謹慎的批評。他推測,或許Cyc已經朝著通用人工智能的目標跨出了一步,取得了一定進展,但問題在於,很難弄清楚這個進展有多大,因為Cyc的知識體係非常零碎,分布得相當不均勻。

從某種意義上說,Cyc項目是領先於時代的。Cyc項目開始30年以後,穀歌發布了知識圖譜,這是一個龐大的知識庫,知識圖譜裏麵匯集了大量關於實體世界的信息(地點、人物、電影、書籍、重大事件等),這些信息被用來豐富穀歌搜索引擎的查找結果。當你使用穀歌搜索引擎時,你所查找的東西通常會涉及一些實體的名稱或者其他術語之類。舉個例子,如果你搜索“麥當娜”,簡單的網絡搜索結果會返回包含“麥當娜”這個關鍵詞的網頁。但是,如果搜索引擎知道麥當娜是一名流行歌手,以及她的全名是麥當娜·路易斯·西科尼(Madonna Louise Ciccone),就會返回一些更有價值的東西。所以,你在穀歌上搜索“麥當娜”就會發現,你的搜索結果包含了這位歌手的一係列信息,這些信息會回答人們有關她的常見問題(比如出生年月、孩子狀況、最受歡迎的專輯等)。Cyc和穀歌知識圖譜最關鍵的區別在於,知識圖譜中的知識並非手工編碼的,而是自動從維基百科等網頁中提取出來的。到2017年,據稱維基百科包含700億條名詞,涉及大約5億個實體。當然,知識圖譜並沒有以通用人工智能為目標,目前也不清楚它涉及了多少基於知識係統的至關重要的世界觀推理。不過,不管怎麽說,我認為,知識圖譜多多少少還是攜帶了Cyc的基因。

然而,不管我們回顧曆史時如何盡力客觀評價Cyc項目,可悲的事實總是無法改變。Cyc項目在人工智能發展史中之所以留下濃墨重彩的一筆,源於它是一個人工智能被過度炒作的極端案例,它完全辜負了人們寄予的不切實際的厚望。萊納特的名字也被編入了計算機科學的民間笑料裏。有個笑話說,“微萊納特”應該作為一個科學計量單位,用來衡量某件事情的虛假程度。為什麽要在萊納特前麵加上“微”?因為你找不到比一個“整萊納特”更虛假的東西了。

破滅出現

就像許多理論上很美好的人工智能一樣,基於知識的人工智能被證明實際應用非常有限。這種方式在一些我們認為荒謬瑣碎的推理任務中,也遇到了困難。考慮一下常識推理任務,下麵的場景給出一個典型例子[42]:

乍一看,這個問題在邏輯上應該很容易理解。看上去跟我們之前討論的邏輯三段論沒什麽差別——我們的人工智能係統存在知識“如果x是一隻鳥,那麽x會飛”,那麽,給出“x是一隻鳥”的信息,它理所當然能推理出“x能飛”的結論。好吧,到目前為止沒有任何問題。但我們現在得知,翠迪是一隻企鵝,接下來會發生什麽呢?我們需要撤銷之前得出的“翠迪會飛”的結論。問題來了,邏輯無法處理這樣的問題。在邏輯上,增加更多的信息永遠不會消除你之前得到的任何結論。但是增加的信息(即“翠迪是一隻企鵝”)確確實實使我們需要撤銷之前的結論(即“翠迪會飛”)。

常識推理還有另外一個問題,在我們遇到矛盾的時候就會凸顯。以下是文獻中的標準示例[43]:

貴格會教徒是和平主義者;

共和黨人不是和平主義者;

尼克鬆是一名共和黨人,也是一名和平主義者。

試著從邏輯上解釋上述文字,你就會陷入理解困境,因為最終我們會得出結論:尼克鬆既是和平主義者,又不是和平主義者——這是一個矛盾。在這樣的矛盾麵前,邏輯完全失效:它不能應對這樣的場景,也無法告知我們任何有意義的結論。然而,矛盾是我們每天都會遇見的現實。我們被告知納稅是有益處的,我們也被告知納稅是一種損失;我們被告知葡萄酒有益,我們也被告知葡萄酒有害;等等。矛盾在生活中無處不在。問題在於,我們試圖用邏輯去處理它不該處理的領域——在數學中,如果遇見矛盾,就意味著你犯了錯。

這些問題看似微不足道,但在20世紀80年代末,它們是基於知識的人工智能研究最主要的挑戰,吸引了該領域最聰明的一群人,但從來沒得到過真正意義上的解決。

事實證明,構建和部署專家係統比最初想象的困難得多。最主要的難題是後來被稱為知識獲取的問題,簡單地說,就是如何從人類專家那裏提取知識並以規則形式編碼。人類專家通常也很難表達他們所擁有的專業知識——他們擅長處理某種事情並不意味著他們可以講清楚實際上是怎麽做到的。另外,專家們也並非那麽渴望分享自己的專業知識。畢竟,如果你的公司能夠用程序來代替你工作,他們還要你幹什麽?何況人工智能會取代人類的擔憂一直存在。

到了20世紀80年代末,專家係統的繁榮已經結束。基於知識的係統技術倒不能說是失敗了,畢竟許多成功的專家係統也在這一時期內建立起來,此後也逐步有更多的專家係統出現。但是,看樣子,又一次證明,人工智能的實際產出沒有達到被鼓吹炒作的高度。