《演算法帝國》——一本好書

曹鵬發表於2014-06-07

初看書名,我還以為它是一本講授演算法的教科書。收到書後,興奮地讀了起來,這本科普讀物讓我不忍釋卷。這本書語言通俗易懂,全書幾乎沒有什麼令人費解的專業術語,也沒有一個數學公式,它通過我們身邊的一個個活生生的例子(有些離我們還比較遠),娓娓道來,把“演算法”這樣一個艱深的領域粗線條地介紹給讀者。我相信,即使非計算機專業的讀者也可從中獲益,一千個人眼中有一千個哈姆雷特,大家感受肯定彼此不同,“攬物之情,得無異乎?”。下面說說我的感受吧。

如果讓我介紹演算法,我通常會從歐幾里德演算法講起(早在公元前300年左右,歐幾里德記載的一種求最大公約數的演算法,又稱輾轉相除法),然後我會講廚師做菜的菜譜,或者我們做一件事的流程(甚至是繫鞋帶這種最簡單的事情)都屬於演算法,這樣可以讓人有一種感性認識吧——可能是我受TAOCP(The Art of Computer Programming)影響較深的緣故吧。

本書直接從華爾街對演算法的應用開始講起——投機賺錢(呵呵,演算法要有“用”才行),然後講到博弈,講到深藍,講到推薦,講到藝術創作,講到醫生,講到未來,大開大合,非常引人入勝。

嚴格地講,演算法領先於計算機很多年。這是因為我們做事的流程、平時做數學題、與人交談、玩遊戲、購物、旅遊……都是演算法的體現。人們發明計算機,最初是為了“補充延長”人的腦力的,正如普通機器是為了把人從體力勞動中解放出來一樣。人不能簡單告訴計算機“做什麼”,而必須告訴計算機“怎麼做”。那麼就涉及到了一個數學和哲學問題——什麼叫“計算”。我對這個問題有一些愛好,但是研究不深。早在100多年前希爾伯特就試圖建立所謂公理系統,在這個系統中,只有一些簡單的公理,然後利用數理邏輯的推導關係,滾雪球式地推出其他“正確的命題”。我認為,這是一個偉大的理想——我們不需要理解命題的語義,僅僅通過符號的演算,就可以證明命題。這對人類似乎比較抽象,因為我們認識事物都是從具體到抽象,比如我們發現1+2=2+1……最終有了加法交換律a+b=b+a。但是對於機器,它甚至都不需要理解加號的含義,就能證明這個命題(如果需要的話)。所以我說,希爾伯特提出的這個系統具有非常高的意義,是機器證明的基礎。數理邏輯領域也是在這個基礎上的,它只關心推導過程,而不管命題具體是什麼含義。希爾伯特當時樂觀地認為數學領域正確的命題一定能在公理系統上通過有限步推導證明出來。可是後來哥德爾發現了任何一個這樣的公理系統都有既不能證實,又不能證偽的命題存在。儘管如此,“計算”這一個概念還是可以被很好地定義的,圖靈的偉大貢獻之一就是它定義了什麼叫做“計算”。它的圖靈機模型,就是“計算機”的抽象。圖靈定義的計算非常簡單,就是寫下0,寫下1,修改寫下的內容等幾種非常簡單的操作,但是可以完成非常複雜的事情。於是——一切交給機器吧。計算機執行這些簡單操作的速度比我們人類快得多,並且這些簡單操作可以完成“可計算”的任何事情!那麼,不可計算的怎麼辦?圖靈發現了“停機問題”,超越了“圖靈機”計算模型的極限,那麼我們現在的計算機有很多“不能做的事”,這些都是“不可計算”的,這是用現有計算機無法解決的問題,而不是NPC(NP完全問題)、NP-hard問題。因為後者還是能完成的(可計算的),只是可能需要很長的時間——複雜度很高,而前者普通計算機根本無能為力——或許量子計算機之類的非圖靈機模型的計算機可以搞定吧。

之所以談這麼多,是因為我覺得《演算法帝國》觸及了這個本質的問題。比如說IBM深藍戰勝卡斯帕羅夫吧,其實這種博弈就是計算機內部列舉所有情況,無論卡斯帕羅夫怎麼走,深藍都計算出來了,然後它自己再列舉該步棋的所有情況,再列舉卡斯帕羅夫走的所有情況……儘管列舉量巨大,但是列舉的東西總是有限的,國際象棋如此,圍棋如此……所以用計算機列舉它,它在一開始,就能掌握問題的全部——包括最終結果。可以說,深藍的勝利沒什麼神奇的——如果拋開計算複雜度、計算量不說的話。於是我們可以說國際象棋遊戲是“可計算的”。那麼撲克牌遊戲呢?因為資訊不完全,有人可能虛張聲勢,有人沉默不語,人有各種表情,人有各種行為,人的行為可能不像他自身認為的那麼“理性”,所以機器在撲克遊戲上戰勝人就沒那麼容易。傳統博弈論的“理性”假設不成立的前提下,預測人的行為變得困難。所以,問題的本質從“撲克牌遊戲可計算麼?”變為“人的行為可計算麼?”,不光撲克牌,推薦領域也是如此——我們必須預測人的行為,給它推薦東西,還有創作領域——藝術創作向來被人們看作是機器不可替代的,因為它需要“靈感”,而靈感通常是不好解釋的,可遇不可求。

現在看來,計算機已經解決了很多問題。它可以在撲克牌遊戲中戰勝一些人、把推薦做得很準確、創作出優美的樂章、預測出未來流行趨勢……但是這些仍然沒有完全回答這些是否“可計算”的問題。這是因為,人的行為過於複雜,不好模擬,不好預測。據我所知,在心理學領域(甚至生物學領域)都有所謂的決定論,就是我們所謂的“自由意志”實際上是受到環境、自然等因素完全決定的,倘若如此,這些真的都是可以計算的,只是演算法相當複雜罷了。

比如,藝術創作吧,書中提及,人也是根據前人的創作學習,進而形成自己的風格的,那麼機器也可以,它也可以從大量前人的作品中學習,並最終會自己創作。一種觀點認為,創作“可計算”。其實我覺得還有另外一種可能,是我們解決了創作行為中“可計算的”部分,而這部分佔了創作行為的主要部分。也就是說我們解決了一個“特殊”問題,這部分是“可計算的”,總體問題還是“不可計算”的。現在人們已經承認,“可計算”與“不可計算”的鴻溝是存在的,但是對於哪些問題是完全“不可計算”的還是有爭議的……

我們可能暫時無法解釋如何完全計算人類的行為,但是就目前來講已經計算得很好了,或許這就是問題的全部,或許不是。即使未來我們知道人類行為是“不可計算”的,我們也不用悲觀,我們採取大量的近似,在特殊條件下,這些可計算,而且可以被很好地解決,就像我們現在這樣……

這就是我對本書的理解,它主要描述了兩類演算法,一類是簡單的“計算”,就像華爾街“投機”,國際象棋博弈等單純靠機械列舉能解決的問題的演算法,一類是更“高階”的撲克牌遊戲、創作、推薦、預測等複雜演算法。後者至關重要,不僅發展前景廣闊,而且還有很多未解決的問題……甚至後者的一般性問題根本“不可計算”。

於是感到了圖靈測試的偉大,這是圖靈提出來的一種完美的測試,其背後的思想令我歎服。他提出,如果我們通過某終端聊天而無法知道跟我們聊天的是一個人還是一臺機器(機器人),那麼這個執行機器的演算法就通過了圖靈測試。這裡所謂的“無法知道”是說僅僅根據聊天內容無法判斷它是人還是機器,你不能去分析“打字”速度,不能判斷有沒有人的呼吸聲,不能聽人的聲音和機器模擬的聲音,也就是說我們只從文字上聊天,比如我們通過qq,msn,skype這種軟體(雖然當時沒有),和對方聊天(拋開打字速度、視訊、音訊等不考慮),如果我們和對方聊得很順暢,沒有產生任何懷疑,而最終發現對方是個機器人,那麼這個機器人的演算法就通過了圖靈測試。

圖靈測試是AI(人工智慧)的終極目標,目前離我們還很遠,未來讓我們拭目以待。

相關文章