人機對話
--萬精油--
“人戰勝了機器”,這是本周美國圍棋協會電子雜誌的一個小標題。說是一個職業五段
在九乘九的棋盤上以二比一戰勝圍棋程序MOGO。讀到這裡,稍微有一點圍棋程序常
識的人或許會問,有沒有搞錯?這說的是圍棋程序嗎?最好的圍棋程序不是都要被讓十
几子的嗎?不會是國際象棋或五子棋吧?或者又是墨綠那樣的虛幻東西。千真萬確,這
是實實在在的圍棋程序,不是只存在於虛幻世界裡的墨綠。
說到墨綠,就必需要提到深藍甚或它的前輩,淺藍或者淡黃。我們還是從頭說起。
讓計算機下棋一直都是人工智能的一個重要課題之一。先是從簡單的跳棋,五子棋之類
的搞起,後來搞國際象棋,圍棋。雖說這些程序屬於人工智能範疇,但實際上它們並沒
有多少“智”的部分,主要部分都是在可行範圍內搜索。各種研究也大都是怎樣使搜索
更快更有效。它們缺乏“智”的部分的根本原因是我們自已就不是太清楚人類以怎樣的
形式思考。比如你寫一個名字問一個計算機系主任,這人是不是他系裡的教授。系主任
馬上就可以回答是或不是。如果你問計算機,計算機也可以馬上正確地回答是或不是。
但計算機的方式是把這個名字與系統裡所有名字比較以後得出的答案。計算機搜索很快,
全走一遍幾乎可以瞬間完成。但我們知道系主任是不可能在短時間內把系裡所有教授的
名單過一遍的。類似的問題還可以更進一步,如果有人拿一張照片問你這輩子有沒有見
過這個人。一般情況下,你會很快告訴他有或沒有。可是我們不能想象你在短時間內把
你這輩子(包括孩提時代)見過的人都檢查一遍。那麼你是怎樣得出結論的呢?我們對
此還不是完全清楚。
懂計算機算法的人會說,計算機也不用把全部名單走一遍。它可以搞一種映射,拿到名
字後直接到映射位置找這個人(所謂Hash Table)。或者把東西分類按類別排除,幾下
就找到相應的位置(比如K-D Tree)。或者在各種目標間加上大大小小的聯接,然後按
聯接排序(比如Google的PageRank),諸如此類的聰明方法都是人類在不懂得自已怎樣
思維的情況下設計出來的,試圖達到人類的思維效果。這些方法有用也很有效,在很多
方面都有應用。但當要搜索的空間實在太大(做表已經行不通)時,這些方法就不靈了,
速度不夠,內存也跟不上。
人的大腦當然也不能存下這些大空間的東西。但人的大腦有一個很大的優點,那就是
“模式識別”(Pattern Recognition),不需要用到大搜索空間。前面的例子說明一個
人看見一張照片,幾乎馬上就可以知道他以前有沒有見過這個人,不需要把他從前見過
的人都過一遍。再舉一個真實的例子。在去年我參加的一個中國人的新年晚會上,有人
用黑管吹出[大海航行靠舵手]的曲子。雖然幾十年沒有聽過這個曲子了,但下面的幾
乎所有人都馬上跟着哼起來。大家不需要在大腦里把以前聽過的所有曲子過一遍來檢索
到這個曲子。你或許要說這些東西大腦里都存着,只不過它有很快的方法搜到那裡。這
“很快的方法”就是我們想要知道的。但我說的“模式識別”還不只是這些。再舉一個
沒有事先儲存的例子。比如你去一個你常去的網站,打開網站後出現一整頁的標題或文
章(以前從來沒見過)。如果裡面有任何地方提到你的名字(或ID),你幾乎馬上就
會注意到,並不需要你去一個字一個字地讀整頁內容。這種“模式識別”能力計算機
(或者說現在的人工智能)是沒有的。所以,遇到大空間搜索問題計算機就顯得很弱。
再回到下棋的問題。下棋的時候棋盤上可走的地方很多,但下棋的人並不是每種走法都
去考慮。比如一般情況下就不會有人去考慮在死角位置上走一子會有什麼結果。那麼哪
些位置需要考慮,哪些位置不需要考慮,這就是“模式識別”問題。計算機沒有這種功
能,只好所有的位置都考慮,於是就產生了無窮大的搜索空間問題。幾十年以前的國際
象棋程序就處於這種情況。因為大面積搜索不可行,就只能用一些自已設計的判別模式
進行選擇性地搜索(模仿人的思維)。選擇不見得對,搜索又不徹底,結果當然不會好
到哪裡去。所幸的是,計算機領域裡有一個莫爾規律(Moore's Law),說是計算機的速
度(以及別的相關能力)每一年半就會翻倍。幾十倍上百倍地翻下去,以前速度和空間
不可行的搜索後來就變得可及或可行了。到了一九九七年,IBM的深藍就硬是用“硬
搜索”(Brute Force)打敗了人類國際象棋最高手Kasparov。當然深藍還請了一些國際
象棋專家指點判別程序,但主要靠的還是硬搜索。
講圍棋怎麼扯到國際象棋去了?我們現在就回頭來講圍棋。
深藍的方法可不可以平移到圍棋上來?一般的共識是不可以。這裡面有兩個問題。
第一個是搜索空間。圍棋的變化空間比國際象棋大很多數量級。有人估計圍棋的變化空
間是10的170次方,相應的國際象棋變化空間是10的120次方,差別是10的
50次方。古人在形容很大的數的時候常用的一個詞是“恆河沙數”,因為沙是他們知
道的最小的東西,而恆河是它們知道的最大的河。有好事者粗略地估計了一下,恆河沙
數大概是10的52次方(存疑)。大至說起來,如果圍棋是恆河,國際象棋只不過是
100顆沙。100顆沙還不到一勺,而且是挖耳朵用的勺。10的170次方可以與
什麼來比呢?現代人知道原子當然比沙要小很多,最大的東西也不能大於可觀測到的宇
宙。有人算過,可觀測到的宇宙中的原子個數大約是10的80次方。假設每個原子就
是一個宇宙,把這些所有宇宙中的原子個數加起來仍然不夠10的170方。有了這些
背景,從現實意義來說,我們完全可以把圍棋的變化空間10的170次方當成無窮大,
可望而不可及。當然,圍棋程序並不需要搜索到底,只需要搜索到人類下棋時搜索的深
度就可以了。
如果要讓一個圍棋程序達到與深藍同樣深度的搜索,對計算機速度的要求是一百萬倍以
上。這不是一兩個莫爾規律可以解決的問題。
第二個問題,也是更嚴重的問題,就是判別好壞的問題。國際象棋的好壞可以有比較明
顯的判別方法,比如吃掉對方的皇后基本上應該算是好棋。事實上深藍的判別更簡單,
搜索到幾十步以後數子。如果某種走法剩的子數多,這種走法就算好(子數當然是加權
過的,比如皇后算九個兵之類的)。可是圍棋沒有很好的優劣判別方法。一個子的好壞
或許要到幾十步以後才顯示出來,或者與盤上十幾格以外的子有關(比如征子的情況)。
而且吃子也不見得就一定是好事。
搜索空間大和判別優劣難這兩個問題加起來,幾乎就完全否定了深藍的方法在圍棋上的
應用。
由於意識到“硬搜索”在圍棋上行不通,幾乎所有圍棋程序設計者都選擇走“人工智能”
的路。也就是模仿人類的思維,搞模型識別,算死活,背定式等等。由於沒能真正搞清
楚人類的思維方法,這些模仿都不是很成功。這些方法產生的最佳程序仍然處於很初等
的階段,以至於我這樣的一般圍棋愛好者左手讓它九子也沒有問題。很多人甚至認為有
生之年看不到戰勝人類最高手的圍棋程序了。比如台灣的應昌期先生就沒能在他的有生
之年看到哪怕是戰勝業餘初段的圍棋程序,他放出的一百萬美元大獎至今也沒人能領。
在大家對圍棋程序的前途悲觀失望的時候,深藍的主要創造者許峰雄放出話來:十年之
內可以看到戰勝人類最高手的圍棋程序。他的觀點半年前發表在IEEE的雜誌上。如
果是別人放出這種話,我一定把它當成痴人說夢,不去理會。但許峰雄不是一般人,他
腰下插着深藍的金牌,說話還是有份量的。他的文章至少值得一讀。
許峰雄說大家現在對“硬搜索”在圍棋程序上不抱希望,就象幾十年前大家對國際象棋
程序一樣。純“人工智能”的路現在看來效果不是很好,而“硬搜索”卻有很大潛力。
我們都清楚,只要搜的足夠深,“硬搜索”產生出來的程序是可以很強大的,不信可以
去問一問Kasparov。深藍的搜索深度是,普遍搜索12層,特殊搜索40層以上。據他
估計,一個圍棋程序要達到深藍的搜索深度必需搜索10的19次方個節點。這看起來
是一個可望而不可及的數,但他認為是可以有辦法把它拿下的。他的這個結論主要有四
個支撐點。
第一點,用Alaph-Beta搜索。Alpha-Beta不是什麼新東西,計算機科學家很早就發明出
來。其主要思想是,在搜索某個節點時發現如果繼續搜下去最好結果也不會好於到現在
為止在別的節點上搜到的最好結果,那就沒有必要繼續搜下去。比如這一步棋讓對方一
大塊死棋變活,大概就沒有搜下去的必要。這個Alpha-Beta搜索可以把搜索空間縮小到
平方根,也就是從10的19次方到10的9。5次方。
第二點,加入零空間搜索。所謂零空間搜索相當於停走一步。我們看圍棋比賽,偶爾會
聽見觀戰者說這個時候即使白棋停走一步,黑棋也沒得下,意思是白棋贏多了。零空間
搜索就是這個意思。由於國際象棋的特殊規則(有時停走一步反到有優勢),深藍不能
採用零空間搜索。但圍棋完全可以採用零空間搜索。如果停走一步還有很大優勢,則這
一路搜索就有很大價值(或者很沒有價值,如果停走的是對方的話)。據他說加入零空
間搜索又可以把搜索空間開方。而且這個優勢是深藍沒有的。
第三點,重複利用已有知識。比如一塊棋活了,就不用老去算它的死活,除非附近有新
情況發生。這個“除非”在國際象棋上出現太多,因為棋盤太小,所以不好用。判斷
“除非”所用的時間以及上下傳遞已知信息所花的時間使它的利用得不償失。但圍棋棋
盤大,很多時候一塊棋的死活與別處無關,如果再用特殊硬件加速已知信息的交流,這
個優勢在圍棋程序上就可以很大。
最後一點又是莫爾規律。他說深藍過去十年了。現在的新技術幾乎可以把與深藍有同等
能力的計算機放到一個PC上(深藍用的是480個加有平行結構的超級處理器),再
過十年,速度又可以提高100倍。假如再加上幾百個平行結構的聯接,則又可以提高
幾百倍。
把以上幾點加在一起,可以消掉在深藍搜索範圍內圍棋與國際象棋的一百萬倍的差別。
十年以後我們將會有一個與深藍有同等能力的圍棋程序。如果假設圍棋職業棋手與國際
象棋職業棋手搜索的深度一樣的話,那麼這個程序就可以打敗人類最高手。
許峰雄是高手,他的話應該有一定的可信度。他說他的研究生已經開始着手這方面的工
作了。但是他的文章里始終沒談判別好壞問題,而我認為這是一個關鍵問題。因為沒有
搜索到底,始終都存在判斷好壞的問題。搜索到12步或者40步以後怎樣決定結果的
好壞。四五十步棋的時候中盤或許剛開始,怎樣判斷什麼是好什麼是壞。這個問題大概
得輸入一些專家知識。相當於當初深藍讓國際象棋大師作顧問。許峰雄現在在中國,找
專家當然不是什麼難事。
對這個沒搜索到底的問題有疑慮的人還不少。象我這樣的人只是問一問,另外有些人就
要想法設計四十步以後的判斷算法。還有些人更進一步,乾脆搜索到底。且慢,你剛才
不是說搜到底是無窮大嗎?怎麼有人可以搜索到底。這又要扯到人工智能的另一個方法:
模擬。
圍棋是完全信息遊戲。不象橋牌或Poker,總有未知因素。橋牌要考慮牌形分布,大牌的
位置等等。Poker的未知因素就更明顯,雖說手上的2,7是最爛的牌,但如果Flop出來
7,7,2,你的牌馬上就變成強牌。圍棋沒有這個問題,對弈雙方可以使用的一切招
術以及結果都沒有未知成分。可是,雖說沒有未知成分,但因為沒有人能夠算到底,這
些公開的信息並不是清楚地擺在雙方的面前。想得深的就多一些信息,想得淺的就少一
些信息。下棋時對方給你設圈套就是只望你算不到那麼深。好象一口井,只有竹杆夠長
的人才能打到裡面的水。有些問題,比如圍棋程序問題,深一點或許不夠,希望能深入
到底。可是太多的路徑選擇又不允許每條路徑都走到底。這時候我們就採用一種叫做隨
機模擬的方法。其基本思想是,雖然不能每條路都走到底,但選擇一些路走到底是可以
的。在每個分岔點我們都隨機的選一些岔道走下去。走到底以後看結果。如果某個結點
後隨機選的岔道都顯示這是一條好路,從概率上來說這是一條好路的可能信就很大。這
種隨機模擬的算法在很多方面都有應用,尤其是在物理和工程上。第二次世界大戰時美
國的一批造原子彈的物理學家(費米,馮。諾曼等)給這種隨機模擬方法取了一個響亮
的名字叫Monte-Carlo。這是歐洲以賭場聞名的一個城市名字。這種算法和賭場都靠大量
的隨機結果為其工作原理。
本文最開始說的圍棋程序MOGO就是基於這種原里。MO就是Monte-Carlo的前兩個字
母,GO就是英文圍棋的名字。這個程序不需要背任何定識,做任何模式識別。只是隨
機地在棋盤上選許多點,走一步以後再隨機的選許多點,一直這樣把一盤棋下完,然後
數子。因為一直走到底,勝負已經很清楚,不需要任何判斷。如果某個點以後隨機選擇
的路徑以最大勝率結束,這個點就被認為是最有利的點,程序就選這一步。順便說一句,
MOGO的前輩(第一個在這方面有成就的程序)叫做瘋棋(Crazy Go),我覺得這個
名字恰如其分。這個看似瘋狂而且簡單的原理居然弄出驚人的結果。首先是在計算機圍
棋比賽中戰勝了所有其它對手。在此之前,計算機圍棋程序的冠軍幾乎一直都是陳志行
教授寫的[手談]。陳志行教授自己是圍棋高手,又是計算機專家,把自己的許多想法
都注入了[手談],所以,它能打敗同類的其它程序。[手談]可以說是一個典型的
“人工智能”程序。沒想到這個“人工智能”高手遇到這麼一個沒有任何“智能”成分
的傻瓜程序卻無能為力。這一方面說明[手談]的所謂“人工智能”還有很多缺陷,另
一方面也說明MOGO的算法有一定道理。
不光是對計算機程序,這種完全隨機的模擬方法對人類也有優良表現。正規的19路棋
盤現在對它們來說還太大,於是從小棋盤開始。中國旅歐職業五段棋手郭娟與MOGO
的前身瘋棋在小棋盤上下了很多盤。在7X7的棋盤上,瘋棋執白從來不輸,執黑也偶
爾能贏。在9X9的棋盤上與郭娟下了14盤,9勝5負。成績還是很拿得出手的。
MOGO比瘋棋又進化了一步,在最近的一次計算機圍棋程序比賽上,MOGO與瘋棋
的新版瘋子(Crazy Stone)進行冠亞軍決賽,MOGO大勝。看來MOGO要比瘋棋強
很多。所以當另一職業五段2勝一負戰勝MOGO時就成了大新聞。
出於好奇,我把MOGO與瘋子的決賽棋譜調出來看了一下,同時發現一些可喜和可憂
的部分。可喜的是MOGO似乎能產生有很強的大局觀的棋。對方在角上壓過來時它居
然會脫先去占大場,而且這個大場不是三路或四路,而是在五路上。只看布局,很有武
宮正樹宇宙流的風格。在對殺時還能走出單立這樣的好棋。可憂的是它畢竟沒有什麼智
能,走到後來簡直慘不忍睹,或者說愚不可及,比一個剛學棋一天的人都不如。畢竟它
們是一點智力都沒有。從這一點上看,這條路還有得一陣走。另外,從小棋盤到大棋盤
進發的問題,還是由莫爾規律來掌握其進度吧。
寫到這裡,正好看到記者採訪聶衛平談到圍棋程序,聶衛平說圍棋程序不是還處在隨便
一個人都可以讓二十多子的水平嗎?看來聶衛平需要有人給他更新一下有關圍棋程序水
平的認識了。
MOGO與許峰雄的“硬搜索”都是朝非傳統人工智能的方向走。如果有朝一日走出一
個沒有任何智能卻能打敗人類最高手的程序,真的是一種悲哀。所以有人在圍棋網絡上
呼籲程序員們不要繼續這種程序,要給人類留一塊聖地。我想,擋是擋不住的,呼籲也
沒有用。人們在前進的道路上總是要在不同的路徑上進行探索。[手談]是一條路,瘋
棋又是一條路,還有別的許多路,我個人認為墨綠是更好的路。不同的路都走一走,才
知道哪條路好。從某種意義上來說,人類的進步不也正是一種Monte-Carlo過程嗎?
GO,MOGO! GO,MORE GO。
--萬精油--
二零零八年三月二十八日于波士頓西郊
註:有興趣的讀者可以到以下網址讀到相關文章:
1。許峰雄:Cracking Go
http://spectrum.ieee.org/oct07/5552
2。MOGO與瘋子對局
http://www.grappa.univ-lille3.fr/icga/round.php?tournament=167&round=7&id=2
3。墨綠
http://www.zhipingyou.com/qqsh/index.php?topic=280.0