計算機下棋簡史|AlphaZero完爆世界棋類冠軍背後

weixin_33711641發表於2017-12-11

Play is the beginning of knowledge.

遊戲是知識之源。

——George Dorsey(多爾西)

… because chess requires intelligence.

下棋需要智慧。

——Alan Turing(圖靈)

1. 機器下棋史前史

1769年,德國發明家兼外交家肯佩倫(Wolfgang von Kempelen)男爵準備造一臺機械的下棋裝置,一年後機器完工,取名“土耳其人”(The Turk),那時大家就把這玩意叫作“自動機”(automaton)。肯佩倫把這臺機器展示給奧匈帝國的掌權者特蕾西婭(Maria Theresia,奧國女大公、匈國女王),於是它就成為娛樂歐洲各皇室的保留節目。稱為“土耳其人”是因為這個裝置的後面坐著一個土耳其裝束的木頭人。1804年,男爵死後,“土耳其人”被轉賣給德國發明家兼娛樂人馬澤爾(Johann Nepomuk Maelzel),1809年馬澤爾把它展示給拿破崙,並和這位歐洲不可一世的征服者對弈一局。拿破崙執白棋先手,但最後“土耳其人”大勝,拿破崙惱羞成怒,把棋盤上的棋子全胡擼到地上。有好事者把拿破崙和“土耳其人”的對戰棋譜記錄在案,確實藝不如“機”。陸續和“土耳其人”接觸過的名人還有富蘭克林、愛倫坡和數學家巴貝奇。

計算機下棋簡史|AlphaZero完爆世界棋類冠軍背後

肯佩倫製造的、號稱能自動下棋的“土耳其人”,其實是個騙局。(南方週末資料圖)

土耳其人”在歐洲巡演了幾十年,最後被人發現是個徹頭徹尾的假貨:那個裝置裡總是有個活人,而且是個下棋高手。肯佩倫只是發明了個魔術而已。那時的水平,想造臺會下棋的機器,門兒都沒有。1827年,“土耳其人”到美國巡演時,請了美國當時的頂級高手施倫伯傑(Schlumberger)藏匿其中。在巴爾的摩的一­­次表演中,兩個孩子發現施倫伯傑頻繁出入後臺,發現了這個祕密並透露給報界。見過這臺機器的高人(如富蘭克林和巴貝奇)一開始就猜這是魔術而不是科技。但當時還是有很多人願意相信“土耳其人”真會下棋。1838年馬澤爾和施倫伯傑相繼去世,隨後“土耳其人”也退役,被費城的中國博物館收藏,1854年博物館的一場大火徹底摧毀了“土耳其人”。

和牛頓、霍金一樣,巴貝奇還做過一屆劍橋大學的盧卡斯教授,他對所有機器裝置都感興趣,他在看到“土耳其人”時,正在研製第一臺機械計算機“分析機”(analytical engine)。他認為他的分析機也可以下棋,但那至多是猜測。

計算機下棋簡史|AlphaZero完爆世界棋類冠軍背後

圖靈

下棋一直就是人類智慧的挑戰,自然也成了人工智慧的標誌之一。二戰沒結束時,圖靈就研究計算機下棋,他1947年編了第一個下棋程式,可惜那時計算機的時間(簡稱“機時”)很寶貴,輪不到他上機——地主家沒餘糧,圖靈也不能保證機時。但即使後來拿到機時,那機器和程式的水平也很有限。米奇(Donald Michie)是圖靈的追隨者,1950年試著在紙上模擬程式,和圖靈對弈,但這實在不是辦法。圖靈在曼徹斯特大學的同事普林茨(Dietrich Prinz)接著圖靈的思路,在1951年寫了一個殘局程式,能在離將死還有兩步的情況下,找到最優解。這個問題也被稱為“兩步將死”(mate-in-two)問題。

2. 跳棋插曲

1951年,圖靈的朋友克里斯特拉切(Christopher Strachey)在曼徹斯特Mark-1上寫了第一款跳棋程式。圖靈在1952年曾與之對弈一局,輕鬆取勝。1956年IBM的塞繆爾(Arthur Samuel,人工智慧里程碑達特茅斯會議的參加者之一)寫了第二個跳棋程式,這款程式的特點是自學習,這也是最早的機器學習程式之一,後來不斷改進,曾經贏過盲人跳棋大師。

20世紀80年代末,最強的跳棋程式一直就是加拿大阿爾伯塔大學的Chinook,作者是現任阿爾伯塔大學理學院院長的計算機系教授舍佛(Jonathan Schaeffer)。數學家丁斯利(Marion Tinsley)自20世紀50年代起就一直是跳棋的人類冠軍。丁斯利對跳棋理論研究很深,對舍佛團隊也很支援,但美國、英國和加拿大的跳棋協會一直拒絕Chinook參賽。

計算機下棋簡史|AlphaZero完爆世界棋類冠軍背後

1992年,跳棋程式Chinook(奇努克)挑戰跳棋高手馬裡恩·廷斯利(Marion Tinsley),當時,跳棋程式還是不敵人類。

為了和Chinook比賽,丁斯利放棄了他的冠軍稱號。1992年丁斯利大戰Chinook並取勝,1994年再戰,但在比賽中,丁斯利不幸確診為胰腺癌,不久病逝。丁斯利的公開紀錄,除了輸給Chinook幾局棋外,從沒有輸給過任何人類棋手。此後Chinook孤獨求敗。

舍佛團隊繼續精研跳棋理論和實踐,直到2007年,他們證明對於跳棋,只要對弈雙方不犯錯,最終都是和棋,而Chinook已經可以不犯錯。他們的結果發表在2007年9月的《科學》雜誌上,自此跳棋這一頁就算翻過去了。舍佛的興趣遂轉向德州撲克和圍棋。

3. 計算機下棋之初

幾乎和圖靈同時,馮諾伊曼也在研究計算機下棋,他和經濟學家摩根斯頓合作的《博弈論》1944年出版,其中首先提出兩人對弈的Minimax演算法。夏農(Claude Shannon)1950年在《哲學雜誌》發表“計算機下棋程式”(Programming a Computer for Playing Chess)一文,開啟了計算機下棋的理論研究,其中主要思路在“深藍”和AlphaGo中還能看到。有趣的是,戰時圖靈在布萊徹利莊園破解德國密碼,而夏農在貝爾實驗室研究密碼理論,其中還用到了他後來發明的資訊理論。圖靈的工作涉及軍事,直到1974年才部分解密,而夏農則偏理論。圖靈戰時到訪美國普林斯頓大學和貝爾實驗室,曾和夏農多次會晤,但他們從來沒聊過密碼學,儘管夏農猜到了圖靈在幹啥。

計算機下棋簡史|AlphaZero完爆世界棋類冠軍背後

夏農

1950年夏農去英國參加資訊理論會議時到曼徹斯特大學圖靈的辦公室回訪,他們這次只聊了下棋和大腦,仍然沒聊密碼。圖靈沒有參加這次在倫敦的會議,但貢獻了兩篇短文,一篇講機器學習,另一篇講下棋。直到圖靈的工作解密,夏農才知道圖靈在戰時已經用到了“熵”,但是不是從瞭解資訊理論的美國同事處學來的就無從考證了。資訊保安專家史密斯(S. W. Smith)曾寫過一篇題為“圖靈來自火星,夏農來自金星”的文章,很明顯這是受那本《男人來自火星,女人來自金星》的啟發。

夏農把棋盤定義為二維陣列,每個棋子都有一個對應的子程式計算棋子所有可能的走法,最後有個評估函式(evaluation function)。傳統的棋局都把下棋過程分為三個階段:開局、中局和殘局,不同階段需要不同的技術手段。夏農的論文引用了馮諾伊曼的《博弈論》和維納的《控制論》。

計算機下棋簡史|AlphaZero完爆世界棋類冠軍背後

馮·諾依曼

Minimax演算法中,二人對弈的一方為max,另一方為min,max一方的評估函式要越高越好,min一方的則越低越好。max和min的對弈就形成了博弈樹。樹的增長是指數式的,當樹很深時,樹的規模會變得不可控。達特茅斯會議的組織者之一麥卡錫首先提出α-β剪枝術以控制樹的增長。紐厄爾、司馬賀和肖(Newell,Simon,Shaw,簡稱NSS)在他們著名的定理證明程式之後,又做了下棋程式。他們首先實現了α-β剪枝術,其程式是在一臺Johnniac上實現的。原始的Minimax演算法是在博弈樹被全部畫出後再靜態地計算評估函式,而α-β剪枝術則採取邊畫樹邊計算評估函式的動態方法。當評估函式的值超越給定的上界和下界時,樹的搜尋過程就停止,這樣大大減少了樹的規模。平均而言,在同樣資源限制下,α-β剪枝術要比原始Minimax演算法搜尋的樹深度多一倍,也就是說,可以比Minimax向前看的步數多一倍。

計算機下棋簡史|AlphaZero完爆世界棋類冠軍背後

IBM 704

第一個可以走完全域性的下棋程式是IBM的工程師伯恩斯坦(Alex Bernstein)1958年在一臺IBM 704上做的。估計那時IBM支援下棋就像後來支援“深藍”和谷歌支援AlphaGo一樣,雖沒什麼短期實用價值,但是很好的公關。機器每步要花8分鐘想,隨便會走幾步棋的人就能擊敗這個程式。

1959年,麻省理工學院的幾位本科生在當時剛到校任教的麥卡錫指導下開始學習計算機下棋,他們1962年本科畢業時,用Fortran實現了一款實戰下棋程式,跑在IBM新出的7090大型機上,此時已經可以擊敗一般的象棋初學者了。這個結果變成了其中一位學生Kotok的本科學位論文。1962年麥卡錫前往史丹佛大學任教,他進行了持續改進,這個程式後來被稱為Kotok-McCarthy程式。

1966年,美蘇的對抗也擴充套件到計算機下棋。蘇聯科學院的理論與實驗物理研究所(ITEP)也在本所研製的一臺M20計算機上開發了一款下棋程式,他們要和史丹佛大學的Kotok-McCarthy程式一決高下。從1966年11月22日開始,直到1967年3月10日止,他們通過電報的方式走了四局。最後蘇聯3:1戰勝美國。

當時麻省理工學院的程式設計師格林布拉特(RichardGreenblatt)也在改進Kotok的程式,還是位成績不錯的棋手。他在PDP-6上實現了程式MacHack VI。1966年,一直批評人工智慧的哲學家 德雷弗斯*也和MacHack對弈過一局,並且輸給了MacHack,這倒沒有改變他對待人工智慧的態度。1967年MacHack參加象棋錦標賽,並累計積分1400 ,這相當於不錯的高中生水平。這個程式用了16KB記憶體,後來PDP的廠家DEC把它預裝到所有PDP系列的機器中。MacHack也是Internet前身ARPANET上最早的網路遊戲。當時給格林布拉特幫忙的志願者中有個人叫克柔可(Steve Crocker),他後來成為Internet前身ARPANET的重要人物,並創辦了網際網路標準化組織IETF且寫了第一個標準化文字RFC。

* 那時德雷弗斯的那本後來引起爭議的《計算機不能幹什麼》還沒出版。

司馬賀在1957年預言十年內計算機下棋程式可以擊敗人類,明顯未果,於是他在1965年再度預言這個目標在20年內可以實現。1968年國際象棋大師列維(David Levy)和麥卡錫打賭十年內機器不可能贏列維。1978年最厲害的計算機程式CHESS和列維比了一盤,自然是列維贏,麥卡錫為此輸了500英鎊。CHESS在20世紀70年代末80年代初一直是計算機下棋的冠軍。此時尚看不到計算機短期內可以贏人的可能性。

1971年,當年擊敗Kotok-McCarthy的蘇聯小組改進了他們的程式,新程式名叫KAISSA(象棋女神)。KAISSA和傳奇大師斯帕斯基(Boris Spassky)賽了兩局,一負一和,這個戰績驚動了棋界。1972年KAISSA接受了《共青團真理報》的挑戰:KAISSA將和讀者下兩盤,《共青團真理報》從讀者寄來的各種走法中挑出推薦最多的。這其實就是“眾包”概念的雛形。最終,KAISSA還是一負一和。但1972年斯帕斯基卻又輸給美國怪人菲捨爾(Bobby Fischer),這是美國第一次在國際象棋領域戰勝蘇聯,尼克松稍晚在會見勃列日涅夫時送了對手一副袖珍國際象棋,成心噁心人家。

1970年開始,美國計算機學會(ACM)的年會都在晚餐時舉行計算機象棋比賽,作為娛樂節目。CHESS連著四年都是冠軍。第二屆時,紐厄爾的學生柏林納(Hans Berliner)參加了,取得第二名,這鼓舞了紐厄爾,他決定把柏林納留校,專職在卡內基梅隆大學研究計算機做計算機象棋。柏林納本人也是國際象棋高手,曾贏得美國通訊賽冠軍,他留校後,並沒有走教學制(tenure track),而是走了研究口——卡內基梅隆的研究制教員也分三級,研究員(Research Scientist)對應助理教授,高階研究員(Senior Research Scientist)對應副教授,而首席研究員(Principal Research Scientist)對應正教授。後面幾年的比賽,都有紐厄爾的學生參加,成績不錯。

1974年,為了給在瑞典斯德哥爾摩召開的“國際資訊聯合會大會”(IFIP)找點樂子,組織者仿效美國計算機學會年會的做法,舉行了第一屆世界計算機象棋錦標賽。錦標賽的組織者是剛從哥倫比亞大學轉往加拿大麥吉爾大學的牛伯恩(Monty Newborn)。除了計算機下棋,牛伯恩的另一個興趣是機器定理證明,他寫過兩款定理證明程式,參加各種定理證明比賽。儘管他的下棋程式和定理證明程式在比賽中並沒有出色表現,但他寫的下棋和定理證明的書卻很有意思。第一次錦標賽,除了美國和加拿大的幾位高手外,還邀請了歐洲的幾個團隊,當然要包括蘇聯神祕的KAISSA。KAISSA擊敗了在ACM年會拿了四次冠軍的CHESS,贏得頭籌,報了兩年前斯帕斯基輸給菲捨爾的一箭之仇。勃列日涅夫倒是沒把當年那副袖珍棋送還給已經下臺的尼克松,不知算是小氣還是大度。

計算機下棋簡史|AlphaZero完爆世界棋類冠軍背後

貝爾實驗室總部

進入20世紀80年代,又出了新一茬象棋程式。當時最厲害的兩個電腦棋手,一個是跑在超級計算機克雷上的Blitz,另一個則是貝爾實驗室的專用機器Belle。Belle的發明人之一湯普森(Ken Thompson)那可是了不起的人物,在計算機界無人不曉。他最傑出的成績是發明了UNIX作業系統(現在蘋果作業系統、波音747的飛行系統和安卓手機作業系統都是Unix的變種)和C語言,1999年被克林頓授予美國“國家技術獎章”。他在計算機下棋上的貢獻多少被略視了。在1982年的北美計算機象棋錦標賽上,Belle擊敗了Blitz。Belle是第一個取得“大師”稱號的計算機棋手。1982年在去蘇聯比賽的路上,Belle被美國政府在肯尼迪機場海關沒收,理由是企圖向蘇聯輸送先進武器,Belle的終端裡確實有當時對蘇聯禁運的超大規模積體電路。拖了小一年功夫,最後湯普森等破費了600美元罰款,才贖回Belle,但比賽耽誤了。

20世紀80年代,機器之間的比賽此起彼伏,但機器和人之間仍然有著不可逾越的鴻溝。1980年,天才弗雷德金(Edward Fredkin)專為計算機下棋建立了弗雷德金獎金,獎有三等,頭等獎是10萬美元,獎給第一款能贏現任世界冠軍的下棋機器。

4. “深藍”

20世紀80年代中期,卡內基梅隆大學的柏林納開始用專用硬體來實現下棋機,他的成果HiTech馬上成為最強的機器棋手。這時來自台灣的許峰雄到卡內基梅隆大學計算機系跟隨孔祥重讀計算機體系結構(常說的“硬體”)方向的博士,孔祥重是孔子的嫡孫。許峰雄的室友很快把他拉到HiTech專案幫忙設計一個硬體的評估函式,但許峰雄卻和柏林納關係不睦。在資金有限的情況下,許峰雄和幾個研究生利用業餘時間快速開發出了ChipTest,而ChipTest立即變成了HiTech的競爭對手,並受到柏林納的打壓。許峰雄在計算機系也變成眾矢之的,每次都是靠導師孔祥重的幫忙化險為夷。ChipTest的改進版“深思”(Deep Thought)1989年贏得弗雷德金二等獎:成為第一個國際象棋特級大師的機器棋手,累計分超過2400。隨後HiTech也加入這個行列。而此時IBM意識到“深思”的商業價值,於是勸說整個團隊在畢業後加入IBM,開發下棋機,把對手鎖定為當時的世界冠軍俄羅斯特級大師卡斯帕羅夫。卡斯帕羅夫對機器下棋非常熟悉,他在屢次和機器對決後曾說:機器下棋沒有洞見(insight)。

計算機下棋簡史|AlphaZero完爆世界棋類冠軍背後

IBM的外號叫Big Blue,於是新的專案1996年被命名為“深藍”(Deep Blue)。1996年ACM年會的閉幕節目是“深藍”對決卡斯帕羅夫,六局棋。“深藍”旗開得勝,第一局就贏了老卡,最後還是老卡4:2贏得決賽。但此時老卡對“深藍”刮目相看,他說機器對手不光有洞見,而且有幾步簡直像“上帝下的”。

第二年“深藍”和老卡再戰,老卡號稱要捍衛人類的智力尊嚴。他贏了第一局,但隨後則越來越保守,徹底輸給“深藍”。老卡下棋過程非常情緒化,這有時會給人類對手施加壓力,但“深藍”壓根不吃這套。

1997年5月11日,老卡認輸,“深藍”成了第一位戰勝當時世界冠軍的機器。事後,卡斯帕羅夫回憶:第二局是關鍵,機器表現超出他的想象,它經常放棄短期利益,表現出非常擬人的危險(“showing a very human sense of danger”)。

在“深藍”贏了卡斯帕羅夫之後,職業棋手並沒有因此而改行,他們反而更多地依賴計算機來訓練。而職業比賽的解說者也越來越多地藉助計算機程式來分析解說一場比賽。機器作為教練,反而更快地幫助人類棋手進步。有美國高中的象棋教練觀察到從來就沒有過這麼多年輕棋手在年齡很小時就積分這麼高,這都得益於計算機教練,因為過去的孩子從來就沒有機會能和特級高手比賽。

瑞典青年棋手卡爾森(Magnus Carlsen)就是如此。內行說卡爾森的下法很像計算機。2013年卡爾森在印度的金奈(Chennai)客場擊敗印度老將、衛冕冠軍阿南德。現在兩臺個人電腦下棋,人已經看不懂它們在下什麼。儘管如此,“深藍”隊員,同樣畢業於卡內基梅隆大學的坎普爾(Murray Campbell)仍然不認為機器有智慧。這其實是整個“深藍”團隊的意見,他們都不是人工智慧出身,反而和同系的人工智慧教授結下樑子。“深藍”獲勝後,美國人工智慧學會(AAAI)曾經組織過一個研討會,對人工智慧啟發式搜尋做出過傑出貢獻的加州大學洛杉磯分校教授科夫(Rich Korf)曾不滿“深藍”團隊的立場。

5. 圍棋和AlphaGo

相對於計算機在國際象棋中的勝利,中國象棋的進展一直落後。一些外行認為中國象棋要比國際象棋難,其實非也。“深藍”勝利之後,聰明人認為計算機下棋這事已經到頭了,沒人願意費力不討好,IBM也解散了“深藍”團隊。遲至十年後的2006年,中國象棋程式開始擊敗特級大師級別的人類棋手。倒是圍棋確實更具挑戰性,但圍棋在西方沒什麼受眾,自然沒什麼聰明人願意花時間。

圍棋的棋子多,組合可能性也多,畫出博弈樹的所有可能枝葉後,在上面跑α-β不太經濟。於是聰明人想到了蒙特卡洛方法。蒙特卡洛方法最常用的教學例子就是計算圓的面積:在一個正方形裡貼邊畫一個圓,然後隨機向這個正方形裡扔沙粒,扔到足夠多時,開始數有多少沙粒落在圓裡,結果除以所扔沙粒總數再乘以正方形面積,就是圓的面積。

思路和求圓的面積類似,隨機模擬對弈雙方走棋。當走棋的次數很多時,就可算出下棋點的概率,然後挑概率最大的地方落子。谷歌的AlphaGo首次引用了強化學習(Reinforcement Learning),使得機器和自己對弈學習。強化學習的發明者是巴託(Andy Barto)和他的學生薩頓(Richard Sutton)。

計算機下棋簡史|AlphaZero完爆世界棋類冠軍背後

說來話長,馮諾伊曼在普林斯頓大學設計計算機的主要助手是伯克斯(Arthur Burks),伯克斯培養了有史以來第一個電腦科學的博士霍蘭德(John Holland)。霍蘭德發明了遺傳演算法。霍蘭德的一個有名的學生是科德(Edgar Codd),因發明關聯式資料庫而獲圖靈獎。巴託是霍蘭德的一個大器晚成的弟子,巴託博士畢業後被神人阿比卜(Michael Arbib)招到麻省大學計算機系,在那裡培養了自己的第一個博士生薩頓。在經歷了人工智慧的此起彼伏後,薩頓現在阿爾伯特大學任教。正是他和已經轉向圍棋研究的舍佛的碰撞,萌生了把強化學習應用到圍棋的想法。在神經網路的低潮期,巴託和薩頓利用他們所在的麻省大學計算機系和GTE實驗室資助了一幫同仁,其中就有後來成大器的麥克·喬丹。

強化學習從20世紀80年代就被髮明,但一直不被重視,是AlphaGo使得它發出亮光。薩頓還值壯年,AlphaGo團隊裡就有4個薩頓的學生,其中包括首席科學家席爾瓦(David Silver)。巴託老兵不死,在做了一屆計算機系主任後,幾年前從麻省大學退休了。退休前,他終於看到強化學習漸成顯學,他和薩頓合著的《強化學習》馬上要出第二版了。

內容摘自@圖靈教育 出版的《人工智慧簡史》。

計算機下棋簡史|AlphaZero完爆世界棋類冠軍背後

作者:尼克

定價:49.00元

  • 視野巨集闊,筆法風趣,全方位解讀人工智慧

  • 兼具廣度與深度,給普通讀者以趣味,給專業讀者以激情

  • 領域內資深前輩尼克老師作品,與書中部分人物或為師友或相熟相知,除了詳實的考證還有奇聞軼事

本書全面講述人工智慧的發展史,涵蓋人工智慧的起源、自動定理證明、專家系統、神經網路、自然語言處理、遺傳演算法、深度學習、強化學習、超級智慧、哲學問題和未來趨勢等。

本書既適合普通讀者詳細瞭解人工智慧的來龍去脈,作為人工智慧的啟迪之書;也適合專業人士瞭解人工智慧鮮為人知的歷史,並提供深入學習的資料。

點選閱讀原文可以通過網店購買『人工智慧簡史』

活動推薦:

12 月 22 ~ 23 日,GIAC 全球網際網路架構大會將於上海舉行。GIAC 是高可用架構和 msup 聯合推出的面向架構師、技術負責人及高階技術從業人員的技術架構大會。GIAC 於 2016 年 12 月成功舉辦了第一屆,今年的 GIAC 已經有騰訊、阿里巴巴、百度、平安、餓了麼、攜程、七牛、螞蟻金服、羅輯思維、摩拜、唯品會,LinkedIn, Pivotal, Mesosphere, AdMaster, Hulu 等公司專家出席。

本期 GIAC 部分人工智慧與機器學習精彩議題如下:

計算機下棋簡史|AlphaZero完爆世界棋類冠軍背後

相關文章