AlphaGo是如何下棋的?
谷歌 DeepMind 宣佈他們研發的神經網路圍棋 AI,AlphaGo,在 2015 年 10 月首次5:0 戰勝了人類職業選手歐洲圍棋冠軍 Fan Hui 二段。這篇論文由 David Silver 等完成。裡面的技術是出於意料的簡單卻又強大。為了方便不熟悉技術的小白理解,這裡是我對系統工作原理的解讀。
深度學習
“深度學習”是指多層的人工神經網路和訓練它的方法。一層神經網路把大量矩陣資料作為輸入,通過非線性啟用方法取權重,再產生另一個資料集合作為輸出。這就像生物神經大腦的工作機理一樣,通過合適的矩陣數量,多層組織連結一起,形成神經網路“大腦”進行精準複雜的處理,就像人們識別物體標註圖片一樣。
雖然神經網路在幾十年前就有了,直到最近才形勢明朗。這是因為他們需要大量的“訓練”去發現矩陣中的數字價值。對早期研究者來說,想要獲得不錯效果的最小量訓練都遠遠超過計算能力和能提供的資料的大小。但最近幾年,一些能獲取海量資源的團隊重現挖掘神經網路,就是通過“大資料”技術來高效訓練。
兩個大腦
AlphaGo 是通過兩個不同神經網路“大腦”合作來改進下棋。這些大腦是多層神經網路跟那些 Google 圖片搜尋引擎識別圖片在結構上是相似的。它們從多層啟發式二維過濾器開始,去處理圍棋棋盤的定位,就像圖片分類器網路處理圖片一樣。經過過濾,13 個完全連線的神經網路層產生對它們看到的局面判斷。這些層能夠做分類和邏輯推理。
這些網路通過反覆訓練來檢查結果,再去校對調整引數,去讓下次執行更好。這個處理器有大量的隨機性元素,所以我們是不可能精確知道網路是如何“思考”的,但更多的訓練後能讓它進化到更好。
第一大腦:落子選擇器 (Move Picker)
AlphaGo 的第一個神經網路大腦是“監督學習的策略網路(Policy Network)” ,觀察棋盤佈局企圖找到最佳的下一步。事實上,它預測每一個合法下一步的最佳概率,那麼最前面猜測的就是那個概率最高的。你可以理解成“落子選擇器”。
落子選擇器是怎麼看到棋盤的?數字表示最強人類選手會下在哪些地方的可能
團隊通過在 KGS(網路圍棋對戰平臺)上最強人類對手,百萬級的對弈落子去訓練大腦。這就是 AlphaGo 最像人的地方,目標是去學習那些頂尖高手的妙手。這個不是為了去下贏,而是去找一個跟人類高手同樣的下一步落子。AlphaGo 落子選擇器能正確符合 57% 的人類高手。(不符合的不是意味著錯誤,有可能人類自己犯的失誤)
更強的落子選擇器
AlphaGo 系統其實需要兩個額外落子選擇器“大腦”。一個是“強化學習的策略網路(Policy Network)”,通過百萬級別模擬對局來完成。姑且稱之為更強的選擇器。對比基本的訓練,那只是教網路去模仿單一的人類落子,高階訓練會與每一個模擬棋局下到底,教網路最可能贏的下一手。Sliver 團隊通過更強的落子選擇器總結了百萬級訓練棋局,比他們之前版本又更新改進了不少。
如果就只用這種落子選擇器已經是強大的對手了,可以到業餘棋手的水平,或者說跟之前最強的圍棋 AI 媲美。這裡重點是這種落子選擇器不會去“讀”。它就是簡單審視從單一棋盤位置,再提出從那個位置分析出來的落子。它不會去模擬任何未來的走法,展示了樸素的深度神經網路學習的力量。
更快的落子選擇器
AlphaGo 當然團隊沒有在這裡止步。下面我會闡述是如何將閱讀能力賦予 AI 的。為了做到這一點,他們需要更快版本的落子選擇器大腦。越強的版本在耗時上越久-為了產生一個不錯的落子也足夠快了,但“閱讀結構”需要去檢查幾千種落子可能性才能做決定。
Silver 團隊建立簡單的落子選擇器去做出“快速閱讀”的版本,他們稱之為“滾動網路”。簡單版本是不會看整個 19*19 的棋盤,但會在對手之前下的和新下的棋子中考慮,觀察一個更小的視窗。去掉部分落子選擇器大腦會損失一些實力,但輕量級版本能夠比之前快 1000 倍,這讓“閱讀結構”成了可能。
第二大腦:棋局評估器 (Position Evaluator)
AlphaGo 的第二個大腦相對於落子選擇器是回答另一個問題。不是去猜測具體下一步,它預測每一個棋手贏棋的可能,在給定棋子位置情況下。這“局面評估器”就是論文中提到的“價值網路(Value Network)”,通過整體局面判斷來輔助落子選擇器。這個判斷僅僅是大概的,但對於閱讀速度提高很有幫助。通過分類潛在的未來局面的“好”與“壞”,AlphaGo 能夠決定是否通過特殊變種去深入閱讀。如果局面評估器說這個特殊變種不行,那麼 AI 就跳過閱讀在這一條線上的任何更多落子。
局面評估器是怎麼看這個棋盤的。深藍色表示下一步有利於贏棋的位置
局面評估器也通過百萬級別的棋局做訓練。Silver 團隊通過複製兩個 AlphaGo 的最強落子選擇器,精心挑選隨機樣本創造了這些局面。這裡 AI 落子選擇器在高效建立大規模資料集去訓練局面評估器是非常有價值的。這種落子選擇器讓大家去模擬繼續往下走的很多可能,從任意給定棋盤局面去猜測大致的雙方贏棋概率。而人類的棋局還不夠多恐怕難以完成這種訓練。
增加閱讀
這裡做了三個版本的落子選擇大腦,加上局面評估大腦,AlphaGo 可以有效去閱讀未來走法和步驟了。閱讀跟大多數圍棋 AI 一樣,通過蒙特卡洛樹搜尋(MCTS)演算法來完成。但 AlphaGo 比其他 AI 都要聰明,能夠更加智慧的猜測哪個變種去探測,需要多深去探測。
蒙特卡洛樹搜尋演算法
如果擁有無限的計算能力,MCTS 可以理論上去計算最佳落子通過探索每一局的可能步驟。但未來走法的搜尋空間對於圍棋來說太大了(大到比我們認知宇宙裡的粒子還多),實際上 AI 沒有辦法探索每一個可能的變種。MCTS 做法比其他 AI 有多好的原因是在識別有利的變種,這樣可以跳過一些不利的。
Silver 團隊讓 AlphaGo 裝上 MCTS 系統的模組,這種框架讓設計者去嵌入不同的功能去評估變種。最後馬力全開的 AlphaGo 系統按如下方式使用了所有這些大腦。
1. 從當前的棋盤佈局,選擇哪些下一步的可能性。他們用基礎的落子選擇器大腦(他們嘗試使用更強的版本,但事實上讓 AlphaGo 更弱,因為這沒有讓 MCTS 提供更廣闊的選擇空間)。它集中在“明顯最好”的落子而不是閱讀很多,而不是再去選擇也許對後來有利的下法。
2. 對於每一個可能的落子,評估質量有兩種方式:要麼用棋盤上局面評估器在落子後,要麼執行更深入蒙特卡羅模擬器(滾動)去思考未來的落子,使用快速閱讀的落子選擇器去提高搜尋速度。AlphaGo 使用簡單引數,“混合相關係數”,將每一個猜測取權重。最大馬力的 AlphaGo 使用 50/50 的混合比,使用局面評估器和模擬化滾動去做平衡判斷。
這篇論文包含一個隨著他們使用外掛的不同,AlphaGo 的能力變化和上述步驟的模擬。僅使用獨立大腦,AlphaGo 跟最好的計算機圍棋 AI 差不多強,但當使用這些綜合手段,就可能到達職業人類選手水平。
AlphaGo 的能力變化與 MCTS 的外掛是否使用有關
這篇論文還詳細講了一些工程優化:分散式計算,網路計算機去提升 MCTS 速度,但這些都沒有改變基礎演算法。這些演算法部中分精確,部分近似。在特別情況下,AlphaGo 通過更強的計算能力變的更強,但計算單元的提升率隨著效能變強而減緩。
優勢和劣勢
我認為 AlphaGo 在小規模戰術上會非常厲害。它知道通過很多位置和型別找到人類最好的下法,所以不會在給定小範圍的戰術條件下犯明顯錯誤。
但是,AlphaGo 有個弱點在全域性判斷上。它看到棋盤式通過5*5 金字塔似的過濾,這樣對於整合戰術小塊變成戰略整體上帶來麻煩,同樣道理,圖片分類神經網路往往對包含一個東西和另一個的搞不清。比如說圍棋在角落上一個定式造成一個牆或者引徵,這會劇烈改變另一個角上的位置估值。
就像其他的基於 MCTS 的 AI, AlphaGo 對於需要很深入閱讀才能解決的大勢判斷上,還是麻煩重重的,比如說大龍生死劫。AlphaGo 對一些故意看起來正常的局也會失去判斷,天元開盤或者少見的定式,因為很多訓練是基於人類的棋局庫。
我還是很期待看到 AlphaGo 和李世石 9 段的對決!我預測是:如果李使用定式,就像跟其他職業棋手的對決,他可能會輸,但如果他讓 AlphaGo 陷入到不熟悉情形下,他可能就贏。
相關文章
- 馬雲稱AI下棋是侮辱人類,機器要有追求AI
- 詳解AlphaGo到AlphaGo Zero!Go
- 我對 AlphaGo 的分析Go
- 【AlphaGo】AlphaGo背後的力量:蒙特卡洛樹搜尋入門指南Go
- 不止掃地機器人!小米還將釋出會下棋的機器人?機器人
- 揭秘谷歌AlphaZero:從AlphaGo進化 如何通殺棋類遊戲谷歌Go遊戲
- 不止會下棋,人工智慧還能高考閱卷人工智慧
- AlphaGo Zero,一次成功的炒作而已?Go
- 揭祕谷歌AlphaZero:從AlphaGo進化 如何通殺棋類遊戲谷歌Go遊戲
- Square Off智慧國際象棋:隔著地球也能對戰下棋
- AlphaGo Zero:筆記與虛擬碼Go筆記
- 一張圖解AlphaGo原理及弱點圖解Go
- AlphaGo的勝利是大資料+深度學習的勝利Go大資料深度學習
- alphago論文使用的圍棋Tromp-Taylor規則Go
- 遲蹭一個熱點:自我對弈的 AlphaGo ZeroGo
- AlphaGo與李世石之間的博弈事件淺析Go事件
- 計算機下棋簡史|AlphaZero完爆世界棋類冠軍背後計算機
- Flutter 是如何渲染的?Flutter
- DNS是如何工作的?DNS
- Cucumber是如何工作的?
- Javascript是如何工作的JavaScript
- Orchard是如何工作的?
- CDN是如何工作的?
- 高山是如何形成的
- AlphaGo在圍棋界成為最強王者後,我們該如何進行機器學習?Go機器學習
- 基於落點打分的井字棋智慧下棋演算法(C語言實現)演算法C語言
- 李世石終於戰勝谷歌AlphaGo谷歌Go
- 淺談AlphaGo背後所涉及的深度學習技術Go深度學習
- Android Activity是如何啟動的?Activity的生命週期是如何呼叫的?Android
- AlphaGo原來是這樣執行的,一文詳解多智慧體強化學習的基礎和應用Go智慧體強化學習
- webpack的require是如何工作的?WebUI
- Ethereum地址是如何生成的
- WinMain是如何被呼叫的AI
- instanceof 是如何工作的
- SQL是如何執行的SQL
- 代理IP是如何工作的?
- 代理API是如何工作的?API
- 反向代理是如何工作的?