揭秘谷歌AlphaZero:從AlphaGo進化如何通殺棋類游戲
美國《紐約客》雜誌(The New Yorker)近日發表的文章揭秘谷歌旗下DeepMind最新公佈的人工智能AlphaZero。這個AI程序起源於在2016年名聲大噪的圍棋AI AlphaGo,而AlphaZero被應用於更多棋類游戲中,取得了令人可喜的成就。以下為文章全文:
幾週前,谷歌AI子公司DeepMind內的一群研究人員在國際權威學術期刊《科學》(Science)上發表了一篇論文,其中描述了一種遊戲領域的人工智能(AI)。儘管他們的通用AI系統適用於許多雙人遊戲,但是研究人員卻進行了調整,使其專門針對圍棋、國際象棋以及將棋(日本像棋)。這種AI程序事先並不了解任何一種棋類游戲的規則。一開始,它只是隨意下子。之後,它通過和自己對弈掌握了遊戲規則。九個小時內,AlphaZero在大量特殊谷歌硬件集群中自我對弈4400萬局。之後兩個小時,它的表現已經超過人類棋手。四個小時之後,它就打敗了全球最出色的象棋引擎。
這一名為AlphaZero的程序起源於AlphaGo。AlphaGo曾經在2016年3月打敗了全球最出色的圍棋棋手李世石。李世石的失利讓大家感到震驚不已。去年早些時候在Netflix上播出的一部紀錄片《AlphaGo》中,影片製作人員跟踪了這款AI的團隊及其人類陪練,他們將所有精力都奉獻給了AlphaGo的研發。在觀看紀錄片的時候,我們見證了這部分人所經歷的一種新的悲傷階段。一開始,他們認為自己不會輸給一台機器:“我想人類的直覺非常高級,AI無法超越我們。”李世石在與AlphaGo對弈前的一天這樣說道。可是,當AlphaGo開始贏得勝利之後,恐慌感油然而生。在某一個心生酸楚感的瞬間,李世石因首局失利承受著巨大的壓力,他突然起身離開桌子,不顧比賽時間限制,走到外面去抽了一根煙。他俯瞰著首爾的屋頂。(在互聯網上,有五千多萬人在關注著這場比賽。)與此同時,AI並不知曉他的對手跑到何處了,而是繼續下子,這一步就連評論員也稱讚是“創造性、令人驚訝的棋路”。最終,李世石以1:4的比分輸掉了比賽。在接受事實之前,他倍感受挫。“我要為我的無能而道歉。”他在新聞發布會上這樣說道。最後,李世石以及其他圍棋界的成員開始欣賞這台機器。“我想,這給圍棋帶來了一種新的範式。”他說。歐洲圍棋冠軍樊麾也對此表示贊同,並且表示:“也許它能向人類展示出更多我們從未發現過的東西。或許這也是一種美。”
對於AlphaGo的開發者來說,這確實是一場胜利,但他們依然覺得不夠滿意,因為AlphaGo的學習依然非常依賴於人類圍棋棋手的經驗。該AI程序會通過模仿世界一流棋手的棋路來掌握自己該如何落子。它還會使用手工編碼的啟發法,避免在思考接下來的棋路時出現嚴重錯誤。對於開發AlphaGo的研究人員來說,這些認知就像是一根拐杖。他們決意開發一種白板式的新版AI,讓其完全通過自學來開發自己的棋路。
2017年10月發表的一篇論文中詳細介紹了AlphaGo Zero。之所以要取這個名字,那是因為除了圍棋規則之外,這款AI程序對其他事情一無所知。這種新的範式沒有引起眾多關注。但從某種角度來說,這是一項更加卓越的成就,儘管它與圍棋並沒有太大聯繫。事實上,在不到兩個月時間裡,DeepMind就發表了第三篇論文的預印本,表示AlphaGo Zero背後的算法可以應用到任何一種雙人零和完美遊戲中(即沒有任何隱藏元素的遊戲,例如撲克牌中牌面朝下的卡片)。DeepMind將名字中的“Go”去掉了,並將新的系統命名為AlphaZero。本質上來說,它是一個強大的算法。你可以給它輸入人類能想到的最為複雜的規則,讓它去完成一個被人類研究得最為透徹的遊戲。當天內的遲些時候,它就會成為有史以來最出色的玩家。也許更加驚人的是,這種系統的迭代是迄今為止最簡單的一種。
傳統的象棋引擎就像是一個大雜燴,包含了數十年來人們反複試驗得到的經驗和教訓。全球最出色的引擎Stockfish是開源的。它的優化是基於一種達爾文式的選擇:有人提出了一個想法,之後便會進行上萬局遊戲來驗證這個想法是否有效。優勝劣汰。因此,這並非是十分簡明的範式,程序員也許都很難理解。程序員對Stockfish進行的最佳調整都是源於國際象棋本身,而不是計算機科學,他們關心的是如何評定棋盤上的某一種情況:騎士值2.1分還是2.2分?如果這是第三橫線,對手卻有一個相反顏色的主教呢?為了說明這一點,DeepMind的研究主管大衛·西爾弗(David Silver)曾經在Stockfish上列出了對應的解決方案。結果需要五十多步,每一步移動都需要大量編程運算,而每一步運算也都包含了來之不易的國際象棋奧秘:反移動啟發式(Counter Move Heuristic)、已知殘局的、疊兵( Doubled Pawns)、陷阱(Trapped Pieces)、半開放線(Semi Open Files)等的評估模塊,還要搜索可能移動棋子的策略,例如“迭代加深”(iterative deepening)等。
相比之下,AlphaZero只有兩個部分:一個神經網絡以及一個被稱作為Monte Carlo Tree Search(MCTS)的算法。(出於對於遊戲的認可,數學家將這種基於隨機數的方法稱作是蒙特卡洛樹。)MCTS背後的理念就是指像國際象棋這類的遊戲實際上是一棵擁有諸多可能性的樹,如果我將車移到d8位置,你可以抓住它或是選擇按兵不動,而此時我可以移動兵或移動主教或保護我的王后……問題在於,這棵樹會以驚人的速度長大。沒有一種計算力能夠足以徹底進行搜索。專業的人類棋手之所以是專家,原因在於他們的大腦能夠自動識別出這棵樹的基本部分並能聚焦注意力。而計算機如果要想參與遊戲的話,它們也需要這樣做。
此時,神經網絡就開始派上用場了。AlphaZero神經網絡會接收遊戲最後幾步的棋盤佈局,這就是信息輸入。而作為信息輸出,它需要評估當前的棋手有多大機率能取得勝利並且預測在當下走什麼樣的棋路能夠以最大可能獲得勝利。MCTS算法利用這些預測來決定在這棵樹中的關注要點。舉個例子,如果神經網絡猜測“騎士吃掉主教”是最佳棋路,那麼MCTS就會投入更多時間用於探究這一步的後果。但如果它認為可行的棋路會有一些冒險,那麼有些時候它就會選擇自己認為較為安全的棋路。
最初,指導搜索的神經網絡顯得略微笨拙:它會隨機進行預測。這樣一來,MCTS就不能很好地聚焦重要部分。但是AlphaZero的天賦就在於它進行學習的方式。它需要兩個部分進行工作,但會讓其相互訓練。即便一個愚蠢的神經網絡非常不善於預測可行棋路,它依然能夠起到一定作用:比如說,有些時候,MCTS依然可以獲悉哪一個位置能夠促使其獲得勝利。這種認知能夠被用於改進神經網絡。當一局結束時,你就會知道結果,你可以看到神經網絡對每個位置的預測(比如說有80%的可能,易位是最好的策略),然後與實際情況進行比對(比如說這一比例更接近60.5%),之後你就可以調整突觸連接來“校正”神經網絡,直到它能夠選擇贏得勝利的棋路。從本質上來說,所有MCTS搜索中的“精華”都被提取出來,用於優化改進神經網絡。
無疑,神經網絡的一點點優化,都能減少搜索被誤導的機率——這可以優化搜索,進而提取出更好的信息來訓練網絡。在這樣的反饋迴路中,神經網絡就能提升至已知能力的穩定期。
當有關AlphaGo Zero和AlphaZero的論文剛發佈時,一小群愛好者開始在博客文章與YouTube 中描述這些系統,並開發他們自己的模擬版本。這項工作的大部分為解釋性的——它源於業餘愛好者學習和分享的衝動,正是這份熱情率先引起了網絡轟動。但是也有一小部分努力涉及到大規模地複制這項工作。畢竟,DeepMind論文僅僅描述了世界上最偉大的圍棋和象棋遊戲,他們並不包含任何源代碼,而且公司也沒有把項目本身提供給玩家。項目成功後,工程師們隨即離開了這一領域。
吉安-卡洛·帕斯庫托(Gian-Carlo Pascutto)是Mozilla公司的一名計算機程序員,擁有開發競技遊戲引擎的豐富經驗,先是國際象棋接著是圍棋。他一直在跟進最新研究。隨著蒙特卡洛樹搜索和神經網絡的結合成為圍棋AI的最先進技術,帕斯庫托開發了全球最成功的開源圍棋引擎——先是Leela,然後是LeelaZero——其反應了DeepMind取得的成就。但問題在於,DeepMind可以訪問谷歌的大量雲數據,但帕斯庫託不能。為了訓練公司的圍棋引擎,DeepMind使用了五千個谷歌的“張量處理器”(TPU)——專門為神經網絡計算而設計的芯片——訓練了13天。若要在他的桌面系統上完成同樣的工作,帕斯庫托需要連續運行系統一千七百多年。
為彌補計算能力的不足,帕斯庫托決定分發自己的工作。LeelaZero是一個聯合系統:任何想要參與的人都可以下載最新版本,貢獻他自己的計算能力,然後上傳他生成的數據,以便稍稍改進系統。分佈式的LeelaZero社區得以讓他們的系統與自己對抗了上千萬個遊戲——比AlphaGo Zero還多一點點。如今,LeelaZero是現存最強大的Go引擎之一。
不久之後,這個想法被擴展到國際象棋領域。去年12月份,當AlphaZero的預印本出版時,加里·林斯科特(Gary Linscott)稱:“它好比一顆投向社區的炸彈。”計算機科學家林斯科特曾經研究過Stockfish,他利用現有的LeelaZero代碼庫,結合AlphaZero論文中的新理念,開發了Leela Chess Zero(Lc0)。(對於Stockfish,他開發了一個測試框架,以便將引擎的新理念分發給一群志願者,從而進行快速的審查;分發神經網絡的訓練是十分自然而然的下一個步驟。)起初,還有一些缺陷需要梳理,並且DeepMind團隊在他們的論文中遺留的細節存在一些有根據的猜測。但幾個月之內,神經網絡就開始改進。國際象棋世界已然沉迷於AlphaZero:chess.com上的帖子大肆慶祝這個引擎;評論員和象棋大師們仔細研究了DeepMind團隊在他們論文中發布的AlphaZero遊戲,並宣布“這才是像棋應有的玩法”,引擎下起象棋來“好似超級人類”。很快,Lc0吸引了數百名志願者。隨著他們不斷貢獻自己的計算能力並改進源代碼,引擎越來越優異。今天,一名核心貢獻者懷疑,再有幾個月這個引擎或將超越Stockfish。不久之後,它可能會超越AlphaZero本身。
當我們通過電話交談時,林科斯特十分驚訝於自己的項目進程。曾經,一個才華橫溢的博士生需要數年時間才能完成類似的項目,但如今一個感興趣的業餘愛好者幾個月內就可以完成類似的項目。神經網絡的軟件庫允許人們使用幾十行代碼複製全球一流的設計;在志願者中間分配計算的已有工具,以及英偉達等芯片製造商為數百萬普通計算機用戶提供了廉價但功能強大的圖像處理芯片(GPU)。該芯片非常適合於訓練神經網絡。像MCTS這樣的算法非常簡單,花一兩個下午便可以實施。你甚至都不需要成為你所開發之引擎的遊戲專家。當帕斯庫托開發LeelaZero時,他差不多已有20年時間沒玩過圍棋。
DeepMind研究負責人大衛·西佛爾(David Silver)指出公司最近在遊戲領域的核心工作中的一個看似矛盾的問題:程序越是簡單——從AlphaGo到AlphaGo Zero再到AlphaZero——它們的表現越優秀。“也許我們追求的原則之一,”在2017年12月的一次演講中他提到,“是通過少做,通過減少算法中的複雜性,它可以使我們的算法變得更加通用。”從他們的圍棋引擎中移除圍棋知識,引擎可以成為更好的圍棋引擎——並且同時,這個引擎也可以下將棋和國際象棋。
從未有人料想到事情會這樣發展。1953年,協助創建了現代計算機的阿蘭·圖靈(Alan Turing)寫了一篇題為《數字計算機在遊戲中之應用》的小論文。在這篇論文中,圖靈基於“對我下棋時的思維過程的一個內省分析”開發了一個國際象棋程序。程序很簡單,但是在這一情況下,簡單並非好事:正如圖靈他自己並非天才國際象棋玩家,程序本身也缺乏足夠的遊戲深度,下棋的技巧性也不足。即便如此,圖靈猜測“一個人無法開發出下棋水平超越他自身的程序”的這個想法著實是“未經思考的”。雖然說“沒有動物可以吞下比它們自己更重的動物”這話聽上去很有道理,但實際上很多動物都可以吞下比自己重的動物。同樣地,圖靈認為,一個糟糕的國際象棋選手當然可以開發出下棋水平優越的程序。一個引人入勝的辦法就是讓程序自學。
AlphaZero的成功似乎證實了這一點。AlphaZero結構簡單,但卻可以學習其正在對陣之遊戲的深層功能。在AlphaGo Zero論文的一個章節中,DeepMind團隊描述了在經過一定數量的訓練週期之後,他們的AI可以發現大師級玩家所熟知的策略,但在接下來幾個訓練週期之後又捨棄這些策略。看到人類最好的想法在通向更美好未來的道路上被無情拋棄,無疑這是怪異且有點令人感到不安的;物理機器不斷超越我們著實碰觸到了人類的痛處。前國際象棋冠軍加里·卡斯帕羅夫(Garry Kasparov)曾在1997年輸給了IBM開發的超級電腦深藍。在最近的一篇《科學》論文中,卡斯帕羅夫認為AlphaZero並沒有按照可以反映據推測是系統性“程序員偏好和偏見”的方式來下棋;相反,即便它對下一步棋的可能位置的搜索要遠少於傳統引擎,它以一種開發、激進的方式來下棋,並且似乎從戰略而非策略的角度進行思考,就好比一個具有不可思議的想像力的人類。“因為AlphaZero可以自己編程,”卡斯帕羅夫寫道,“我會說它的風格更接近真相。”
當然,像人類一樣下棋,與像人類一樣看待國際象棋或像人類學習,完全是兩回事。有句老話說棋類游戲好比AI界的果蠅:好比果蠅之於生物學家,諸如圍棋和國際象棋這樣的棋類游戲對於計算機科學家而言是研究智力機制的途徑。這是一個令人回味的類比。但是,曾經只是下棋的任務,一旦有朝一日變成在遊戲樹中每秒搜索成千上萬個節點的任務時,我們訓練的則是一種完全不同的智力。按這樣的玩法,國際象棋恐怕遠不止是我們所想像的推土機:最終,這個活動不再是我們人類的特長。為了學習,AlphaZero需要對陣數百萬次,遠多於人類一生中對陣次數——但是,一旦AlphaZero完成學習,它可以像天才一般下棋。通過深度搜索樹,它依賴比人類快得多地思考,然後使用神經網絡將其發現變為類似於直覺的東西。當然,程序也讓我們對智力有了新的認識。但是它的成功也印證了世界上最優秀的人類玩家通過另一種過程——一個除了對陣之外,基於閱讀、交談和感受的過程——所見的多少。以及最令人驚訝的是,在這種如今看起來為機器準備的遊戲中,我們人類的表現也也會很好。