摘要:當然,如果我們把這個裝置的 “出廠” 狀態看作初態,“報廢” 狀態看作終態,那麼其整個“生命週期” 仍可以被看成是一個圖靈計算過程,其輸入由它歷史上所經歷的所有輸入符號串銜接組成。當且僅當存在一個圖靈機,可以將一個問題的每個實例作爲輸入,並在有限的變換後停止運行,這時我們稱這一個問題是 “圖靈機可計算” 的。

文章來自微信公衆號: 返樸(ID:fanpu2019) ,作者:王培,題圖來自:電影《普羅米修斯》

人們往往根據自己的理解對一個概念下斷言,其實對方使用的概念並不是你所以爲的含義。 要想避免這種誤會,就不該對自己沒有認真研究過的問題下結論。

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

(1)既然人工智能是在計算機中實現的,其能力自然在計算機能力範圍之內;

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

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

有些人會進一步主張:

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

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

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

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

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

圖靈近年來成了個廣爲人知的名字,這裏就不介紹了。他在1936年的一篇文章中提出了一種抽象的 “計算機器” (computing machines) ,並用它來定義“可計算的數” (computable numbers) 。請注意:在那時計算機 (computers) 尚未出現,而圖靈的本意也不是要設計這樣的機器,而是要爲在數學中廣泛使用的 “可計算” 這一概念提供一個嚴格的定義。

由於人們 (甚至以嚴謹著稱的數學家們) 往往對同一個概念有不同理解,圖靈試圖用一個想象的機械裝置來避免歧義。簡單地說, 如果滿足某個特徵的數字都可以在有限時間內被這樣一個機械裝置生成或識別,那麼這類數就是可計算的。

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

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

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

1. 一個有限的輸入符號集;
 
2. 一個有限的內部符號集(輸入符號集的擴充);
 
3. 一個特殊的空白符號(用來標記被處理的符號序列的邊界);
 
4. 一個有限的狀態集;
 
5. 一組狀態變換規則,根據當前狀態和所關注的符號的組合決定新的狀態和符號,然後將關注點前移或後移至另一個符號;
 
6. 一個特定的初始狀態(初態),此時所有待處理符號都是輸入符號,且關注點在第一個符號處;
 
7. 一組終止狀態(終態),至此停止運行。

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

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

• 如果當前關注的符號是0,把它改成 #,狀態不變(A還是A,B還是B),後移至下一個符號;
 
• 如果當前關注的符號是1,把它改成 #,狀態改變(A變成B,B變成A),後移至下一個符號;
 
• 如果在狀態A下所關注的符號是 #(所有輸入符號都處理完了),進入終態 Z。

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

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

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

計算與智能

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

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

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

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

圖靈機模型。來源:Wikipedia,by Rocky Acos

當然,如果我們把這個裝置的 “出廠” 狀態看作初態,“報廢” 狀態看作終態,那麼其整個“生命週期” 仍可以被看成是一個圖靈計算過程,其輸入由它歷史上所經歷的所有輸入符號串銜接組成。但問題是,這個週期和我們平常關心的 “解題週期” 不是一回事。如果這個系統在學下棋,那麼我們通常會把每盤棋看作一個要解決的問題,而這和把整個 “學下棋過程” 當作一個問題是非常不同的。

相對前者而言,系統的解題行爲應該是隨着時間而變的 (否則何談學習) ,因此不是一個 “下棋圖靈機” 。這種變化是因爲前面解題週期的終態成爲了後面解題週期的初態,而不需要引入其它因素 (如“自由意志”、“量子效應”、“隨機選擇”等等) 來解釋。

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

如果硬要這麼說也不能算錯,只不過沒有任何實際價值。在數學和計算機科學中,可計算性的研究都是以嚴格可重複的解題過程爲研究對象的,其結論的價值也正在於爲未來的解題過程提供可靠預測。如果一個解題過程不可重複,說它 “每次都是個圖靈計算,但說不準是哪個” 和說這個過程 “不是圖靈計算” 就沒有實際差別了,反正也不知道它會怎麼做。

類似地,說這個系統的解題過程仍是可重複的,但這個過程要包括系統從 “出生” 開始的全部歷史,這也沒錯,但即使如此,它的下棋過程也是不能看成圖靈計算的。

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

前面的討論也說明, 並不是計算機中的所有過程都可以或應該看成“計算“, 並等價於圖靈機的。 這裏最重要的是那些由於包含了學習、適應、進化等機制而成爲不可重複的過程,儘管它們仍和計算有關。這有點像搭積木:每個積木塊都是預製的,但如何把它們組合在一起卻是可以臨時起意,不循常規的。這樣的系統的計算能力並沒有超過圖靈機,但可以完成一些不能被稱爲“計算”的功能。

我設計的納思系統就是這樣:其中每個基本步驟都是提前編好的程序,或者說都是圖靈機。但面對一個具體問題時,如何把它們組合起來使用,卻是靠系統現場發揮,沒有預先寫好的腳本的,因此對一個問題的處理是依賴於系統當前狀態的。

在一個 “生命週期” (以記憶的初始化爲界限) 中,其內部狀態不重複,因此它對同一個問題的處理也不一定是嚴格可重複的,即不是圖靈計算。當然,這不說明系統在任何問題上都沒有穩定答案。

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

“顧名思義”的功過

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

比如說,人們往往認爲 “計算”是包含了計算機所能做的一切,但在計算機理論中,這個詞僅指使用計算機的一種常見的 (但並非唯一的) 方式。把這二者搞混,就會得出“人工智能的能力範圍僅限於可計算的問題” 這種錯誤結論。

至於把圖靈機看作一種計算裝置,則是典型的顧名思義了。甚至很多計算機專業出身的人在學過圖靈機的概念之後,仍沒有意識到其定義中包含初態、終態所造成的限制,而理所當然地認爲這是描述一個裝置時所必須的。

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

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

這種誤會在科學討論中並不罕見:根據自己的理解對一個概念下斷言,其實是攻擊了一個稻草人——因爲別人不是在這個意義下使用這一概念的。要想避免這種誤會,就不該對自己沒有認真研究過的問題下結論。

“顧名思義”是不可靠的,尤其針對那些“顯然”的問題而言。如果真是那麼顯然,別人怎麼會看不到呢?對人工智能類似的誤會不少。我在參考文獻 [3] 中對此有進一步討論。

參考文獻

[1] John E. Hopcroft, Rajeev Motwani, Jeffrey D. Ullman, Introduction to Automata Theory, Languages, and Computation, 3 rd   edition, 2006

[2] Peter Kugel, “Thinking may be more than computing”, Cognition, 22:137–198, 1986

[3] Pei Wang, “Three Fundamental Misconceptions of Artificial Intelligence”, Journal of Experimental & Theoretical Artificial Intelligence, 19(3), 249-268, 2007

文章來自微信公衆號: 返樸(ID:fanpu2019) ,作者:王培

相關文章