計算機不是只會 “計算”,圖靈機也不是一臺“機器”

2020-06-03 11:43:35   來源:新浪科技   評論:0   [收藏]   [評論]
導讀:  人們往往根據(jù)自己的理解對一個概念下斷言,其實對方使用的概念并不是你所以為的含義。要想避免這種誤會,就不該對自己沒有認真研究過的問題下結(jié)論! ≡谟懻撊斯ぶ悄艿臐摿拖薅葧r,常常有人拿 圖靈機
  人們往往根據(jù)自己的理解對一個概念下斷言,其實對方使用的概念并不是你所以為的含義。要想避免這種誤會,就不該對自己沒有認真研究過的問題下結(jié)論。

  在討論人工智能的潛力和限度時,常常有人拿 “圖靈機” 和 “可計算性” 說事。其論證大致是這樣幾步:

  (1)既然人工智能是在計算機中實現(xiàn)的,其能力自然在計算機能力范圍之內(nèi);

  (2)現(xiàn)有計算機的計算能力都和圖靈機相同;

  (3)那些圖靈機不能解決的問題當然也就是人工智能所無法解決的。

  有些人會進一步主張:

  (4)人腦不受這些限制,因此不等價于圖靈機;

  (5)所以人工智能的根本能力永遠低于人類智能,盡管在某些具體能力上可以超過人。

  由于人類智能或人腦的能力范圍本身尚未有明確界定,4、5兩步仍有爭議(不少人相信人類的計算能力也受同樣的限制),但前面三步卻罕有反對意見。我下面要說的就是:這事不是這么簡單。上面的論證,尤其是(3),在其通常解釋下是錯的。

  “圖靈計算”到底是什么意思

  由于這個問題直接涉及對計算機科學核心概念的理解,我們不可避免地要從概念的定義開始。鑒于本文的性質(zhì),我會試圖用日常語言把這事說得足夠明白。

  圖靈近年來成了個廣為人知的名字,這里就不介紹了。他在1936年的一篇文章中提出了一種抽象的 “計算機器“(computing machines),并用它來定義“可計算的數(shù)”(computable numbers)。請注意:在那時計算機 (computers) 尚未出現(xiàn),而圖靈的本意也不是要設計這樣的機器,而是要為在數(shù)學中廣泛使用的 “可計算” 這一概念提供一個嚴格的定義。由于人們(甚至以嚴謹著稱的數(shù)學家們)往往對同一個概念有不同理解,圖靈試圖用一個想象的機械裝置來避免歧義。簡單地說,如果滿足某個特征的數(shù)字都可以在有限時間內(nèi)被這樣一個機械裝置生成或識別,那么這類數(shù)就是可計算的。

  在電子數(shù)字計算機(即今天所說的“計算機”)出現(xiàn)后,計算機科學中的 “計算” 概念沿用了數(shù)學中的傳統(tǒng)意義,圖靈機也被廣泛用于刻畫計算機中的各種過程,因而成為理論計算機科學的核心概念。在專業(yè)文獻中圖靈機的定義大同小異,下面的 “科普版” 改編自Introduction to Automata Theory, Languages, and Computation [1]——這個領域里最常用的教科書之一。

  圖靈機是一臺可以逐個處理一列符號的裝置,如下圖所示。

  

  對圖靈機的完整描述包括七個成分:

 

  1、 一個有限的輸入符號集,

  2、 一個有限的內(nèi)部符號集(輸入符號集的擴充),

  3、一個特殊的空白符號(用來標記被處理的符號序列的邊界),

  4、 一個有限的狀態(tài)集,

  5、一組狀態(tài)變換規(guī)則,根據(jù)當前狀態(tài)和所關注的符號的組合決定新的狀態(tài)和符號,然后將關注點前移或后移至另一個符號,

  6、一個特定的初始狀態(tài)(初態(tài)),此時所有待處理符號都是輸入符號,且關注點在第一個符號處,

  7、 一組終止狀態(tài)(終態(tài)),至此停止運行。

  當且僅當存在一個圖靈機,可以將一個問題的每個實例作為輸入,并在有限的變換后停止運行,這時我們稱這一個問題是 “圖靈機可計算” 的。如果停止運行是由于達到了一個終止狀態(tài)造成的,輸入就算是被 “接受” 了。如果停止運行是由于沒有變換規(guī)則可以應對當前情況,輸入就算是被 “拒絕” 了。這個圖靈機對輸入符號串所作的 “接受還是拒絕” 的判定就叫一個“計算”。

  下面我們描述一個簡單的圖靈機,叫它“機器甲”。它用0和1做輸入符號,而內(nèi)部符號是0,1,外加空白符 #。機器甲的狀態(tài)只有A和B,外加一個終態(tài)Z,其中A是初態(tài)。其變換規(guī)則是

  • 如果當前關注的符號是0,把它改成 #,狀態(tài)不變(A還是A,B還是B),后移至下一個符號;

  • 如果當前關注的符號是1,把它改成 #,狀態(tài)改變(A變成B,B變成A),后移至下一個符號;

  • 如果在狀態(tài)A下所關注的符號是 #(所有輸入符號都處理完了),進入終態(tài) Z

  不難看出,給機器甲一個01符號串(如0110111)做輸入,它會逐個抹去其中的符號(把0和1都變成 #),最后用是否進入了終態(tài)來判定輸入中1的個數(shù)是否為偶數(shù)。

  現(xiàn)在讓我們定義一個“機器乙”。它和機器甲完全一樣,只是初態(tài)為B。機器乙所完成的計算也是確定輸入中的1的個數(shù)的奇偶性,但 “接受還是拒絕” 的判定恰好與機器甲相反。

  這兩個圖靈機盡管簡單,但卻已經(jīng)揭示了一個普遍的誤解:一個 “圖靈機” 不是指一臺“機器”,而是指一臺機器的一個特定的運行過程或使用方式,包括對初態(tài)和終態(tài)的劃分。上述的機器甲和機器乙是同一個裝置,但完成的計算不同。同理,對任何其它圖靈機,只要修改其初態(tài)或終態(tài)的劃分,它就成了不同的圖靈機,所完成的計算也就不同了。

  計算與智能

  一個系統(tǒng)的 “初態(tài)” 和 “終態(tài)” 的劃分并不像看上去那么無關大局,F(xiàn)在讓我們考慮 “機器丙”,它和機器甲基本相同,只是取消了狀態(tài) Z和最后一條變換規(guī)則。這樣一來,當所有符號都成為 #,機器不再有適用變換規(guī)則,就會停在當前狀態(tài),而這個狀態(tài)同樣可以代表輸入中1的個數(shù)的奇偶性(A對應于偶數(shù),B對應于奇數(shù)),因此也可以被用作機器丙的計算結(jié)果。這臺機器在處理完一個輸入序列后,只要將狀態(tài)重新初始化為A,即可以處理下一個序列。

  一個有趣的問題是:如果不做狀態(tài)重新初始化,情況會怎樣?顯然,如果機器丙在一次計算之后狀態(tài)停在B,則下次計算這個機器就變成機器乙了,并且后面會不斷在機器甲和機器乙之間轉(zhuǎn)換,而不再完成一個確定的計算。這個機器的處理結(jié)果不僅僅取決于當前輸入,還取決于開始處理這個輸入時的系統(tǒng)狀態(tài),而這個狀態(tài)是系統(tǒng)的歷史決定的。

  這種可能性乍看起來沒有討論價值。一個符號串里面有多少個1,與處理機制的歷史和狀態(tài)不應該有任何關系,所以對應的計算當然必須從同一個初始狀態(tài)開始,這才能保證過程和結(jié)果的確定性,或者說可重復性。

  但 “計算” 的概念不足以涵蓋所有與智能、認知、思維等有關的過程(見參考文獻 [2] 中的討論)。尤其像那些和“學習“、”適應“、“靈機一動”有關的現(xiàn)象,根據(jù)定義,它們不是對問題的可重復解決。嚴格說來,一個不斷學習的系統(tǒng)是不重復先前的內(nèi)部狀態(tài)的,因此即使是相同的輸入,處理過程和結(jié)果都未必相同。在這種情況下,相對于這個輸入而言,這臺裝置就不是一個圖靈機,盡管它可以具有圖靈機定義中的前面5個成分,就像機器丙那樣。

  當然,如果我們把這個裝置的 “出廠” 狀態(tài)看作初態(tài),“報廢” 狀態(tài)看作終態(tài),那么其整個“生命周期” 仍可以被看成是一個圖靈計算過程,其輸入由它歷史上所經(jīng)歷的所有輸入符號串銜接組成。但問題是,這個周期和我們平常關心的 “解題周期” 不是一回事。如果這個系統(tǒng)在學下棋,那么我們通常會把每盤棋看作一個要解決的問題,而這和把整個 “學下棋過程” 當作一個問題是非常不同的。相對前者而言,系統(tǒng)的解題行為應該是隨著時間而變的(否則何談學習),因此不是一個 “下棋圖靈機” 。這種變化是因為前面解題周期的終態(tài)成為了后面解題周期的初態(tài),而不需要引入其它因素(如“自由意志”、“量子效應”、“隨機選擇”等等)來解釋。

  那么能不能說 “這個系統(tǒng)仍是圖靈機,只不過在下每盤棋時它是一臺不同的圖靈機”?

  如果硬要這么說也不能算錯,只不過沒有任何實際價值。在數(shù)學和計算機科學中,可計算性的研究都是以嚴格可重復的解題過程為研究對象的,其結(jié)論的價值也正在于為未來的解題過程提供可靠預測。如果一個解題過程不可重復,說它 “每次都是個圖靈計算,但說不準是哪個” 和說這個過程 “不是圖靈計算” 就沒有實際差別了,反正也不知道它會怎么做。類似地,說這個系統(tǒng)的解題過程仍是可重復的,但這個過程要包括系統(tǒng)從 “出生“ 開始的全部歷史,這也沒錯,但即使如此,它的下棋過程也是不能看成圖靈計算的。

  既然圖靈機指的不是某類裝置,而是(裝置中的)某類過程,就不能用它對應于一臺計算機,而是對應于(一臺計算機中的)某個程序或過程。圖靈機在計算機科學中的重要性也就在于,嚴格、清晰地表達出一個符號(數(shù)據(jù))處理過程——這樣我們就可以用一種統(tǒng)一的術語刻畫到底哪些過程是“可計算” 的,而不再依賴直觀或模棱兩可的語言。

  前面的討論也說明,并不是計算機中的所有過程都可以或應該看成“計算“, 并等價于圖靈機的。這里最重要的是那些由于包含了學習、適應、進化等機制而成為不可重復的過程,盡管它們?nèi)院陀嬎阌嘘P。這有點像搭積木:每個積木塊都是預制的,但如何把它們組合在一起卻是可以臨時起意,不循常規(guī)的。這樣的系統(tǒng)的計算能力并沒有超過圖靈機,但可以完成一些不能被稱為“計算”的功能。

  我設計的納思系統(tǒng)就是這樣:其中每個基本步驟都是提前編好的程序,或者說都是圖靈機。但面對一個具體問題時,如何把它們組合起來使用,卻是靠系統(tǒng)現(xiàn)場發(fā)揮,沒有預先寫好的腳本的,因此納思對一個問題的處理是依賴于系統(tǒng)當前狀態(tài)的。在納思的一個 “生命周期” (以記憶的初始化為界限)中,其內(nèi)部狀態(tài)不重復,因此它對同一個問題的處理也不一定是嚴格可重復的,即不是圖靈計算。當然,這不說明系統(tǒng)在任何問題上都沒有穩(wěn)定答案。我在《計算機能有創(chuàng)造性嗎?》和《時間緊急,怎樣決策才算理性?》中對這種工作方式有進一步討論,這里就不再重復了。

  人腦是個圖靈機嗎?根據(jù)上面的討論, 我們會發(fā)現(xiàn),這不是個有意義的問題。人腦中的某些相對簡單的過程可能被近似地被圖靈機(計算機程序)模擬, 但仍有大量過程是不能這樣處理的。這可能是由于我們對這些過程的了解還不夠,也可能是它們本來就不是嚴格可重復的。至于這些功能是否可以由人工智能中的非計算性的過程所再現(xiàn),則不是本文要討論的了。

  “顧名思義”的功過

  本文的討論還涉及一個普遍的現(xiàn)象。對不熟悉的概念,顧名思義是個有效的認知策略,但也是誤解的常見來源。對科學概念尤其如此。我在《新理論該怎么為概念下定義?》中討論過這個問題。當我們將一個新概念引入一個理論中的時候,為了促進其傳播,常會選用一個含義接近的日常詞匯。但這樣做的危險就是:圈外人會按照他們的固有觀念來理解相關的科學結(jié)論。

  比如說,人們往往認為 “計算”是包含了計算機所能做的一切,但在計算機理論中,這個詞僅指使用計算機的一種常見的(但并非唯一的)方式。把這二者搞混,就會得出“人工智能的能力范圍僅限于可計算的問題” 這種錯誤結(jié)論。至于把圖靈機看作一種計算裝置,則是典型的顧名思義了。甚至很多計算機專業(yè)出身的人在學過圖靈機的概念之后,仍沒有意識到其定義中包含初態(tài)、終態(tài)所造成的限制,而理所當然地認為這是描述一個裝置時所必須的。

  造成這個混淆的更深層原因就是計算機科學中的數(shù)學遺產(chǎn)。什么是“問題”?怎樣算是“解決”?在數(shù)學中 ,“解決”總是相對于一個問題類而言的,解題過程和結(jié)果都必須是嚴格、精確、可重復的。而在數(shù)學之外的生活中,由于必須迎接新的太陽,踏進不同的河流,所以不能以同樣的標準論成敗。

  最后一個例子就是“通用人工智能”了。一個常見的意見是:“顯然不存在能解決所有問題的通用智能”,但稍微讀些文獻就會發(fā)現(xiàn),真正在這個領域中工作的人,并不是在這一意義下使用“通用”這個詞的,而是把它作為“專用”的對立面。所以,在這里,“通用系統(tǒng)”不是“萬能”的意思,而是“可以合理應對意料之外的問題”的意思。

  這種誤會在科學討論中并不罕見:根據(jù)自己的理解對一個概念下斷言,其實是攻擊了一個稻草人——因為別人不是在這個意義下使用這一概念的。要想避免這種誤會,就不該對自己沒有認真研究過的問題下結(jié)論。顧名思義是不可靠的,尤其對是那些“顯然”的問題。如果真是那么顯然,別人怎么會看不到呢?對人工智能類似的誤會不少。

分享到:
責任編輯:zsz

網(wǎng)友評論