白露為霜注:五個月前當谷歌的計算機程序阿爾法圍棋(AlphaGo)擊敗歐洲圍棋冠軍樊麾二段時並沒有太多人在意,樊麾的段位不算高,也不是很有名。然而今年三月阿爾法圍棋同李世石之間的人機大戰卻完全不同,李九段雄居世界圍棋頂尖多年,名聲顯赫。這個在五個月前還不咋樣的計算機程序真有可能撼動人類頂尖的高手?絕大多數的人都認為是不可能的,李世石更是豪言要5:0取勝。
前天晚上第一場比賽吸引的眾多的觀眾,Youtube的錄像一天之內就有100萬人觀看。結果大出人意外,以李世石中盤認輸收場。對此,除了震驚之外很多棋迷還不服氣 - 李世石有些輕敵,或者選用不常見的開局是錯誤,等等。昨天晚上第二場比賽,AlphaGo持黑先行,李世石不敢大意,以較為常見的開局應對。局面一直非常膠著,黑棋氣勢站優,白棋拿實地穩紮穩打。中盤過後在現場用英文評論的Michael Redmond九段一遍又一遍地計算局面的得分,結論都是:很接近。突然,再算一遍后大驚失色:「黑棋領先了」。果然,不多久后李世石再次投子認輸。
0:2落後,李世石堪堪要敗,人類是不是快沒戲了?這的確是很好的問題。再往下還有三場比賽,李世石應該還是有機會的,但這個計算機程序具有擊敗人類的頂尖棋手的能力已經是不爭的事實。AlphaGo還不時下出精彩或出人意料的棋來,大有青出於藍而勝於藍的架式。
那麼阿爾法圍棋到底是何方神聖,它是怎樣能進步如此神速呢?今年一月,谷歌的研究團隊發了一篇博文,介紹阿爾法圍棋所用的演演算法和策略。這篇博文來得正是時候,我把它翻譯成中文,也可以讓那些被驚呆的棋迷死個的明白。
其實大多數人不懂「黑暗」的力量有多麼強大。擊敗李世石的AlphaGo多機分佈系統動用了1202個CPU和176個GPU,擁有極為巨大的計算能力。這真的不能算是公平的比賽,就像李世石拿的是一把破菜刀而對手端著機關槍。但阿爾法圍棋獲勝的真正秘訣不是硬體,我個人的看法,是在於蒙特卡洛樹搜索(Monte-Carlo Tree Search)的演演算法。正是這個演演算法,使得程序具有了自我學習的能力,並且能有效地控制搜索的複雜性。
白露為霜注:AlphaGo最終以4:1獲勝。李世石戰的很英勇,雖敗猶榮。
阿爾法圍棋:使用機器學習掌握古老的圍棋
AlphaGo: Mastering the ancient game of Go with Machine Learning
遊戲是測試與人類解決問題方法相似更聰明,更靈活的演演算法的一個很好的試驗場。人類很早就開始創造能比最出色的人玩遊戲玩的更好的程序 – 作為1952年一個博士生的畢業設計,計算機學會了第一個經典的遊戲 - 「玩圈和十字架」(noughts and crosses),也稱為tic-tac-toe。接著1994年計算機在跳棋(checkers)上打敗人類高手。IBM的「深藍」在1997年擊敗國際象棋大師Kasparov更是轟動一時。計算機的成功並不局限於棋類,IBM的「華生」(Waston)在2011年獲得Jeopardy的冠軍。僅根據原始象素的輸入,谷歌的演演算法還學會了玩數十種Atari遊戲。
但有一種遊戲一直讓人工智慧的企圖遭受挫敗:古老的圍棋。2500年前發明於中國,目前世界範圍下圍棋的人數超過四千萬人。圍棋的規則很簡單:玩家輪流將黑色或白色的棋子放在棋盤上,試圖捕捉對手的棋子或者圍成空地而得分。孔子曾經寫過這個遊戲,它的美感讓它被提升到任何中國學者必需具備的四種技藝之一(註:琴棋書畫)。下圍棋主要靠直覺和感受,很多世紀以來一直因其精妙博大和思維的深度而讓人們著迷。
但儘管規則很簡單,圍棋其實是極為複雜的遊戲,圍棋的搜索空間是如此的巨大,是10的100次方倍大於國際象棋的搜索空間 - 這個數字比整個宇宙所有原子的總和還要大。其結果是,傳統的「蠻力」(brute force)人工智慧方法 - 構建一個所有可能的下法的搜索樹在圍棋上無法做到。迄今為止,電腦下圍棋的水平還是業餘級的。專家預測至少需要10年時間電腦才有可能擊敗頂級專業圍棋手。
我們認為這是一個難以拒絕的挑戰!我們開始構建一個系統,阿爾法圍棋(AlphaGo),來克服種種障礙。AlphaGo程序關鍵是將圍棋巨大的搜索空間減少到可以對付的規模。要做到這一點,它將最先進的樹搜索(tree search)方法同兩個深度神經網路相結合,每個神經網路包含很多層的數以百萬計的像神經元樣的聯結。一個神經網路稱為「策略網路」(policy network)用來預測下一步的行動,通過只考慮最有可能導致勝利的下法來縮小搜索範圍。另外一個神經網路叫「價值網路」(value network)用於減少搜索樹的深度 – 評估在走每一步贏的可能性,一路搜索到遊戲的結束。
AlphaGo的搜索演演算法比以前的方法更接近人的思維方法。例如,當「深藍」下棋時,它使用比AlphaGo多數千倍的蠻力搜索。相反,AlphaGo使用一種稱為「蒙特卡洛樹搜索」(Monte-Carlo Tree Search)在它腦子中一遍又一遍地把剩下的棋下完。同以前的蒙特卡羅程序不同的是,AlphaGo使用深層神經網路來指導其搜索。在每個模擬遊戲中,策略網路建議最聰明的下法,而價值網路則精確地評估下完這步后局面的優劣。最後,AlphaGo選擇在模擬中最成功的下法。
我們首先使用從人類下的棋中的3千萬種常用走法來訓練策略網路,直到它可以以57%的準確度預測出人類的回應(AlphaGo前之前的紀錄是44%)。但是,我們的目標是擊敗最好的人類棋手,而不僅僅是模仿他們。要做到這一點,AlphaGo必須學會發現新的策略。通過在神經網路之間下數以千記的棋,並在一種被稱為「強化學習」一個試錯的過程中不斷改進。這種做法導致了更好的策略網路,這個網路是如此強大的,即使僅僅是沒有樹搜索的原始的神經網路就可以打敗最先進的建有龐大的搜索樹的程序。
這些策略網路再用來訓練價值網路,同樣是通過自我下棋來學習改進。這些價值網路可以評估任何圍棋的局面,並計算出最後的優勝者 – 這個任務非常的困難,以前一直被認為是不可能完成的問題。
當然,所有這些都需要巨大的計算能力,所以我們大量使用谷歌雲平台(Google Cloud Platform),這使得做人工智慧(AI)和機器學習(ML)的研究人員能按照需求彈性的運用計算、存儲和網路的能力。此外,用來數量計算的數據流圖的開源庫,如TensorFlow,使研究人員能夠高效地部署多個中央處理器(CPU)或圖像處理器(GPU)來滿足深度學習演演算法的計算需要。
AlphaGo似乎做好了準備迎接更大的挑戰。所以我們邀請了三次歐洲圍棋冠軍樊麾 – 從12歲時起就投身圍棋的一個精英職業棋手,到我們在倫敦辦公室進行挑戰賽。這場比賽在去年10月5-9日之間進行。AlphaGo以5:0取勝 – 這是計算機程序第一次擊敗一個職業圍棋手。
AlphaGo的下一個挑戰將是在過去十年中一直處在世界顛峰的李世石。比賽在今年三月於韓國首爾舉行。李世石很高興接受挑戰說:「我很榮幸地下這場人機大戰,但我相信我能取勝。」這將被證明是一場引人入勝的比賽!
我們很高興已經學會了圍棋,從而完成了人工智慧的重大挑戰之一。然而,這一切對我們來說最有意義的是AlphaGo不僅僅手工編寫的規則,建立了一個「專家系統」,而是使用通用的機器學習的技術,通過觀看和自我下棋不斷完善自身。雖然遊戲是開發和快速高效地測試人工智慧演演算法的完美平台,最終我們希望將這些技術應用於重要的現實問題上。因為我們所用的方法是通用的,我們希望有一天它們可以被擴展到幫助我們解決一些社會的最棘手和最緊迫的問題,從氣候建模到複雜的疾病分析。
英文原文:
AlphaGo: Mastering the ancient game of Go with Machine Learning
網路直播人機大戰第二局