[新聞] Facebook工程師解疑:AlphaGo為什這厲害

作者: zkow (逍遙山水憶秋年)   2016-03-14 15:40:47
Facebook工程師解疑:AlphaGo為什麼這麼厲害?
 Facebook田淵棟解析演算法技術:AlphaGo為什麼這麼厲害?
  最近我仔細看了下AlphaGo在《自然》雜誌上發表的文章,寫一些分析給大家分享。
  AlphaGo這個系統主要由幾個部分組成:
  走棋網路(Policy Network),給定當前局面,預測/採樣下一步的走棋。
  快速走子(Fast rollout),目標和1一樣,但在適當犧牲走棋品質的條件下,速度
要比1快1000倍。
  估值網路(Value Network),給定當前局面,估計是白勝還是黑勝。
  蒙特卡羅樹搜索(Monte Carlo Tree Search,MCTS),把以上這三個部分連起來,
形成一個完整的系統。
  我們的DarkForest和AlphaGo同樣是用4搭建的系統。DarkForest較AlphaGo而言,在
訓練時加強了1,而少了2和3,然後以開源軟體Pachi的缺省策略 (default policy)部
分替代了2的功能。以下介紹下各部分。
  1. 走棋網路
  走棋網路把當前局面作為輸入,預測/採樣下一步的走棋。它的預測不只給出最強的
一手,而是對棋盤上所有可能的下一著給一個分數。棋盤上有361個點,它就給出361個
數,好招的分數比壞招要高。DarkForest在這部分有創新,通過在訓練時預測三步而非一
步,提高了策略輸出的品質,和他們在 使用增強學習進行自我對局後得到的走棋網路(
RL network)的效果相當。當然,他們並沒有在最後的系統中使用增強學習後的網路,而
是用了直接通過訓練學習到的網路(SL network),理由是RL network輸出的走棋缺乏變
化,對搜索不利。
  有意思的是在AlphaGo為了速度上的考慮,只用了寬度為192的網路,而並沒有使用最
好的寬度為384的網路(見圖2(a)),所以要是GPU更快一點(或者更多一點),
AlphaGo肯定是會變得更強的。
  所謂的0.1秒走一步,就是純粹用這樣的網路,下出有最高置信度的合法著法。這種
做法一點也沒有做搜索,但是大局觀非常強,不會陷入局部戰鬥中,說它建模了“棋感
”一點也沒有錯。我們把DarkForest的走棋網路直接放上KGS就有3d的水準,讓所有人都
驚歎了下。可以說,這一波圍棋AI 的突破,主要得益於走棋網路的突破。這個在以前是
不可想像的,以前用的是基於規則,或者基於局部形狀再加上簡單線性分類器訓練的走子
生成法,需要慢慢調參數年,才有進步。
  當然,只用走棋網路問題也很多,就我們在DarkForest上看到的來說,會不顧大小無
謂爭劫,會無謂脫先,不顧局部死活,對殺出錯,等等。 有點像高手不經認真思考的隨
手棋。因為走棋網路沒有價值判斷功能,只是憑“直覺”在下棋,只有在加了搜索之後,
電腦才有價值判斷的能力。
  2. 快速走子
  那有了走棋網路,為什麼還要做快速走子呢?有兩個原因,首先走棋網路的運行速度
是比較慢的,AlphaGo說是3毫秒,我們這裡也差不多,而快速走子能做到幾微秒級別,
差了1000倍。所以在走棋網路沒有返回的時候讓CPU不閑著先搜索起來是很重要的,等到
網路返回更好的著法後,再更新對應的著 法資訊。
  其次,快速走子可以用來評估盤面。由於天文數字般的可能局面數,圍棋的搜索是毫
無希望走到底的,搜索到一定程度就要對現有局面做個估分。在沒有估值網路的時候,
不像國象可以通過算棋子的分數來對盤面做比較精確的估值,圍棋盤面的估計得要通過模
擬走子來進行,從當前盤面一路走到底,不考慮岔路地算 出勝負,然後把勝負值作為當
前盤面價值的一個估計。這裡有個需要權衡的地方:在同等時間下,模擬走子的品質高,
單次估值精度高但走子速度慢;類比走子速度 快乃至使用隨機走子,雖然單次估值精度
低,但可以多模擬幾次算平均值,效果未必不好。所以說,如果有一個品質高又速度快的
走子策略,那對於棋力的提高是非 常有幫助的。
  為了達到這個目標,神經網路的模型就顯得太慢,還是要用傳統的局部特徵匹配(
local pattern matching)加線性回歸(logistic regression)的方法,這辦法雖然不
新但非常好使,幾乎所有的廣告推薦,競價排名,新聞排序,都是用的它。與更為傳統的
基於規則的方案相比,它在 吸納了眾多高手對局之後就具備了用梯度下降法自動調參的
能力,所以性能提高起來會更快更省心。AlphaGo用這個辦法達到了2微秒的走子速度和
24.2%的走子準確率。24.2%的意思是說它的最好預測和圍棋高手的下子有0.242的概率是
重合的,相比之下,走棋網路在GPU上用2毫秒能達到 57%的準確率。這裡,我們就看到了
走子速度和精度的權衡。
  和訓練深度學習模型不同,快速走子用到了局部特徵匹配,自然需要一些圍棋的領域
知識來選擇局部特徵。對此AlphaGo只提供了局部特徵的數目 (見Extended Table 4),
而沒有說明特徵的具體細節。我最近也實驗了他們的辦法,達到了25.1%的準確率和4-5微
秒的走子速度,然而全系統整合下來並沒有複現他們的水 平。我感覺上24.2%並不能完全
概括他們快速走子的棋力,因為只要走錯關鍵的一步,局面判斷就完全錯誤了;而圖2(b
)更能體現他們快速走子對盤面形勢 估計的精確度,要能達到他們圖2(b)這樣的水準
,比簡單地匹配24.2%要做更多的工作,而他們並未在文章中強調這一點。
  在AlphaGo有了快速走子之後,不需要走棋網路和估值網路,不借助任何深度學習和
GPU的幫助,不使用增強學習,在單機上就已經達到了3d 的水準(見Extended Table 7倒
數第二行),這是相當厲害的了。任何使用傳統方法在單機上達到這個水準的圍棋程式,
都需要花費數年的時間。在AlphaGo之前,Aja Huang曾經自己寫過非常不錯的圍棋程式,
在這方面相信是有很多的積累的。
  3. 估值網路
  AlphaGo的估值網路可以說是錦上添花的部分,從Fig 2(b)和Extended Table 7來
看,沒有它AlphaGo也不會變得太弱,至少還是會在7d-8d的水準。少了估值網路,等級分
少了480分,但是少了走棋網路,等級分就會少掉 800至1000分。特別有意思的是,如果
只用估值網路來評估局面(2177),那其效果還不及只用快速走子(2416),只有將兩個
合起來才有更大的提 高。我的猜測是,估值網路和快速走子對盤面估計是互補的,在棋
局一開始時,大家下得比較和氣,估值網路會比較重要;但在有複雜的死活或是對殺時,
通過快速 走子來估計盤面就變得更重要了。考慮到估值網路是整個系統中最難訓練的部
分(需要三千萬局自我對局),我猜測它是最晚做出來並且最有可能能進一步提高的。
  關於估值網路訓練資料的生成,值得注意的是文章中的附錄小字部分。與走棋網路不
同,每一盤棋只取一個樣本來訓練以避免過擬合,不然對同一對局而 言輸入稍有不同而
輸出都相同,對訓練是非常不利的。這就是為什麼需要三千萬局,而非三千萬個盤面的原
因。對於每局自我對局,取樣本是很有講究的,先用SL network保證走棋的多樣性,然後
隨機走子,取盤面,然後用更精確的RL network走到底以得到最正確的勝負估計。當然這
樣做的效果比用單一網路相比好多少,我不好說。
  一個讓我吃驚的地方是,他們完全沒有做任何局部死活/對殺分析,純粹是用暴力訓
練法訓練出一個相當不錯的估值網路。這在一定程度上說明深度卷積網路(DCNN)有自動
將問題分解成子問題,並分別解決的能力。
  另外,我猜測他們在取訓練樣本時,判定最終勝負用的是中國規則。所以說三月和李
世石對局的時候也要求用中國規則,不然如果換成別的規則,就需要 重新訓練估值網路
(雖然我估計結果差距不會太大)。至於為什麼一開始就用的中國規則,我的猜測是程式
設計非常方便(我在寫DarkForest的時候也是這樣 覺得的)。
  4. 蒙特卡羅樹搜索
  這部分基本用的是傳統方法,沒有太多可以評論的,他們用的是帶先驗的UCT,即先
考慮DCNN認為比較好的著法,然後等到每個著法探索次數多 了,選擇更相信探索得來的
勝率值。而DarkForest則直接選了DCNN推薦的前3或是前5的著法進行搜索。我初步試驗下
來效果差不多,當然他們的辦 法更靈活些,在允許使用大量搜索次數的情況下,他們的
辦法可以找到一些DCNN認為不好但卻對局面至關重要的著法。
  一個有趣的地方是在每次搜索到葉子節點時,沒有立即展開葉子節點,而是等到訪問
次數到達一定數目(40)才展開,這樣避免產生太多的分支,分散 搜索的注意力,也能
節省GPU的寶貴資源,同時在展開時,對葉節點的盤面估值會更準確些。除此之外,他們
也用了一些技巧,以在搜索一開始時,避免多個執行緒 同時搜索一路變化,這部分我們
在DarkForest中也注意到了,並且做了改進。
  5. 總結
  總的來說,這整篇文章是一個系統性的工作,而不是一兩個小點有了突破就能達到的
勝利。在成功背後,是作者們,特別是兩位第一作者David Silver和Aja Huang,在博士
階段及畢業以後五年以上的積累,非一朝一夕所能完成的。他們能做出AlphaGo並享有現
在的榮譽,是實至名歸的。
  從以上分析也可以看出,與之前的圍棋系統相比,AlphaGo較少依賴圍棋的領域知識
,但還遠未達到通用系統的程度。職業棋手可以在看過了寥寥 幾局之後明白對手的風格
並採取相應策略,一位資深遊戲玩家也可以在玩一個新遊戲幾次後很快上手,但到目前為
止,人工智慧系統要達到人類水準,還是需要大量 樣本的訓練的。可以說,沒有千年來
眾多棋手在圍棋上的積累,就沒有圍棋AI的今天。
  在AlphaGo中,增強學習(Reinforcement Learning)所扮演的角色並沒有想像中那
麼大。在理想情況下,我們希望人工智慧系統能在對局中動態地適應環境和對手的招式並
且找到辦法反制之,但是 在AlphaGo中增強學習更多地是用於提供更多品質更好的樣本,
給有監督學習(Supervised Learning)以訓練出更好的模型。在這方面增強學習還有很
長的路要走。
  另外,據他們的文章所言,AlphaGo整個系統在單機上已具有了職業水準,若是谷歌
願意開幾萬台機器和李世石對決(這對它來說再容易不過了,改個參數就行),相信比賽
會非常精彩。
  下面是根據讀者提問做的一些更新。
  問題1:“Alphago的MCTS做rollout的時候,除了使用快速走子,還用了搜尋樹的已
有部分,看起來像是AMAF/RAVE反過 來:AMAF是把快速走子的資訊傳導到樹的其它無關部
分,Alphago是把樹的其它無關部分拿來增強快速走子。我懷疑這是不是它棋力比其它
DCNN+MCTS強的原因之一。“
  這個辦法在解死活題的文章中出現過,會在一定程度上提高搜索效率,但是提高多少
還不知道。
  問題2:“rollout的走法品質變好可能會導致棋力下降。”
  這裡要分兩種情況,tree policy和default policy。在AlphaGo的文章裡面已經說過
了,tree policy的分佈不能太尖,不然在搜索時太過重視一些看起來的好著,可能使得
棋力下降。但是除了這種原因,一般來說tree policy變好棋力還是會變強的。
  default policy這邊,即(半)隨機走子到最後然後判分,就很複雜了,品質變好未
必對局面能估得更准。default policy需要保證的是每塊棋的死活大體正確,不要把死的
棋下成活的或者反之,而對大局觀的要求反而沒有那麼高。雙方完全可以配合著把每塊棋
下完,然後 轉戰另一塊,而不是說搶在對方前去別處占先手。
  (雷鋒網)
http://sports.sohu.com/20160314/n440358534.shtml
作者: birdy590 (Birdy)   2016-03-14 15:44:00
推一個 這篇是目前看過寫的最簡單而且清楚的而且他已經對論文內的幾個要點進行過實際測試有些效果接近 有些實力差很遠(估計要需要很多時間調整)
作者: MicroB ( )   2016-03-14 15:59:00
推!這是不是說快走子品質不夠導致78手勝率誤判呢?但最後又說rollout不能太高 看來AG可能有瓶頸?
作者: birdy590 (Birdy)   2016-03-14 16:05:00
把 MCTS 漏算看成結果的話 前面是一環扣一環 都有可能
作者: goldduck (哥達鴨)   2016-03-14 16:09:00
最後應該是要補安全機制 自爆手不下
作者: birdy590 (Birdy)   2016-03-14 16:10:00
"他們完全沒有做任何局部死活/對殺分析" 覺得這點很重要從這裡看起來 安全機制是不可能的 因為這和理念背道而馳因為開發 AlphaGo 的目的應該是"讓電腦自己學會下圍棋"
作者: Uizmp (黑袍法師)   2016-03-14 16:12:00
同意, DM原本的計畫還要把棋譜拿掉, 讓電腦從零開始學
作者: MicroB ( )   2016-03-14 16:14:00
不過如果有一個死活超過一定量的職棋會走錯 他走子網路算的局部死活會不會出問題啊?
作者: birdy590 (Birdy)   2016-03-14 16:17:00
很有可能啊, 跟傳統方法有專門設計各式檢查的軟體相比不想辦法再訓練個網路補強的確有可能變成弱點
作者: MicroB ( )   2016-03-14 16:22:00
想想AG根本秀哉戰法嘛 一堆高手門徒(走子網路)幫他想 然後提供解果給他讓他選 只是以前門徒們要幾個月所以用暫停大法 現在靠GPU可以縮時用時還比小李少 XD
作者: birdy590 (Birdy)   2016-03-14 16:25:00
樓上比喻挺妙的 只是徒子徒孫不需要高手 只是俗手而已
作者: bbbtri (cycling)   2016-03-14 16:33:00
"如果有一個死活超過一定量的職棋會走錯" 樣本數應該低到
作者: FloydChen (建構式摸魚)   2016-03-14 16:33:00
推,這篇是目前最清楚的技術文
作者: bbbtri (cycling)   2016-03-14 16:34:00
不足計吧?除非它跟自己對戰時也頻錯 但這樣會影響勝率
作者: MicroB ( )   2016-03-14 16:36:00
他自行對戰有25%機率跟職棋一樣 假設這走子網路三段好了有一個死活高過半數的三段高手會走錯 那他的走子網路可能會誤判吧?
作者: birdy590 (Birdy)   2016-03-14 16:39:00
沒這麼簡單 @@ 希望走子網路強 但也要保留足夠隨機性這就是文章最後補充問題2裡面講的... 真的很複雜 @@
作者: MicroB ( )   2016-03-14 16:43:00
難怪有人說像虛竹+段延慶 虛竹保持彈性 段延慶走子強這一了解真是有點佩服小李了根本是以一打百啊都下到發抖了
作者: birdy590 (Birdy)   2016-03-14 17:01:00
又來一篇新的 "第四局AlphaGo败招的分析"http://zhuanlan.zhihu.com/yuandong/20644427
作者: fallcolor (秋天走了)   2016-03-14 17:04:00
Yuandong Tian真的很不錯!不過rollout policy中的default policy論文裡有嗎?
作者: birdy590 (Birdy)   2016-03-14 17:28:00
default policy應該是他在開發Darkforest的時候自己用的前面有講到他用 Pachi 的 default policy 替代 rollout
作者: bbbtri (cycling)   2016-03-14 18:05:00
作者好強喔 不過birdy版友要不要直接把文章發版上?
作者: birdy590 (Birdy)   2016-03-14 18:13:00
我不敢確定轉載有沒有問題呀 轉連結是最保簽的
作者: smellgood   2016-03-14 19:52:00
good!
作者: darkseer   2016-03-15 02:04:00
感謝birdy590大,官方外的圍棋AI最高看法 :O
作者: H45 (!H45)   2016-03-15 09:01:00
推一個,夠專業
作者: sunev (Veritas)   2016-03-15 09:28:00
第四局田淵棟的分析,有人轉到板上了 #1MvjmKPj

Links booklink

Contact Us: admin [ a t ] ucptt.com