close
讀《Nature》論文,看AlphaGo養成
原標題:讀《Nature》論文,看AlphaGo養成
作者授權轉載
作者:龍心塵、寒小陽
◆ ◆ ◆
文章聲明
博主是圍棋小白,下棋規則都記不清楚,也沒有設計過棋類AI程序。這篇文章主要是閱讀《Nature》論文及關於AlphaGo的相關文章的學習心得。
本文的主要目的是增進分享,交流學習,方便初學者瞭解AlphaGo中的算法,以及一些機器學習中的常見思路。真正的工程實現過程遠比本文介紹得復雜。
本文更多是啟發式地進行闡述與分析,包括一些作者結合自己的理解進行的簡化處理。文章中不嚴謹和理解不當之處,歡迎大傢批評指出,我們努力修改完善。
◆ ◆ ◆
圍棋的業務特點
機器學習的第一步都是先瞭解業務。圍棋的業務特點包括其基本規則、對弈特性和下棋的典型思路。根據這些業務特點,我們可以分階段實現我們的圍棋算法。
2.1 圍棋的基本規則
使用方形格狀棋盤及黑白二色圓形棋子進行對弈,棋盤上有縱橫各19條直線將棋盤分成361個交叉點,棋子走在交叉點上,雙方交替行棋,落子後不能移動,以圍地多者為勝。並且雙方可以相互吃子(提子),隻要我方棋子將對方某一片緊鄰的棋子周圍圍住,就可以將對方這片棋子吃掉。
2.2 對弈特性
基於以上規則,圍棋對弈過程中有以下特性:
不像象棋、軍棋那樣盤面上的棋子越走越少,而是越走越多。所以一局棋從開始到結束,用一張標記好走棋順序的棋譜就能保存絕大部分下棋的信息,是一個時間序列。如下圖就是《Nature》論文中的樊麾與AlphaGo對弈的一個棋譜:
對弈從開局到中局變化都很大,尤其是中局,往往是一著不慎,滿盤皆輸。用數學的描述叫做估值函數(得分函數)非常不平滑。
到收尾階段,由於棋盤上總體的棋子是越來越多的,其變化就越來越少。可以看成是一個動態收斂的過程。狀態空間非常大,約為2×10170,超過目前的計算機的計算能力,無法通過暴力窮舉解決。
2.3 下圍棋的基本思路
而人類不需要搜索這麼多狀態空間也能夠下好圍棋,說明還是有規律的,隻是這些規律比較抽象。我們機器學習算法就是要盡量找出人類下圍棋的一些規律。我們可以簡單總結一些人類下圍棋典型思路如下:
首先是明確基本規則,這個方便。其次是掌握一些基本“定式”,也就是在一個給定的局面下人類一般會怎麼走,這個過程不涉及優劣的判斷,也比較難以用確定性的規則描述。基於對棋局未來演化情況的評估,決定當今當下的下棋策略。所謂“手下一著子,心想三步棋”。這是圍棋最復雜的情況。
2.4 分階段實現下棋算法
基於以上這些初步瞭解,我們可以分階段實現我們的下棋算法:
第一步是學會人類下棋的一般定式,形成一些優秀考慮的下棋策略。
第二步是對落子之後的棋局演化做出有效評估,基於評估的結果優化自己的最終落子策略。
◆ ◆ ◆
先做一個baswline系統
現在我們思路大概有瞭,但仍然不知道模型的最終樣子應該是怎樣。此時我們建議先動簡單手做一個baseline,然後在模型調優的過程中不斷地分析問題、解決問題。這樣就很有可能更快找到問題的最佳解決方案。設計baseline思路基本如下:
3.1 抽象成數學問題:多分類
通過以上分析可知,下圍棋的過程就是一個不斷地決策在哪個位置落子的過程。在落子之前,你已知棋盤上所有已落子的情況。而棋盤上總共就19×19=361個位置,所以落子就是一個361選1的多分類問題。將多分類問題轉換成簡單的2分類問題來處理,(采用one-to-rest的思路,)則需要361個2分類的分類器,每個分類器隻評估落在361個位置中某1個具體位置的分數,再從這361個結果中中挑選分數最大的位置來落子。
3.2 哪些特征,如何選擇?
分類器的輸出我們知道瞭,就是361個標簽。那分類器的輸入又是哪些特征呢?其實就是當前的棋盤分佈。
我們先考慮第一類特征。圍棋一共是361個交叉點,每個交叉點有三種狀態(白子、黑子、無子):可以用1表示黑子,-1表示白字,0表示無子。於是一個361維度的向量就可以完全表示當前棋盤的情況。理論上說,隻輸入這些特征就可以瞭。如下圖就是演示用矩陣表示棋局狀態的情況,而矩陣拉長就是一個向量瞭:
後級擴大機
但是,因為圍棋的極端復雜性,這些棋子(輸入特征)的關系是非線性的。雖然理論上采用神經網絡的算法可以處理非線性特征,但是計算量和對資源的消耗都太大。相反,如果有依據地增加一些新的特征的維度,使特征間的非線性關系不那麼復雜,將使得模型變得更加簡單、更加便於訓練,優勢還是很明顯的。
那怎麼增加更多的特征呢?這就需要利用部分圍棋領域中的知識,比如圍棋中的術語:氣、目、空等概念都可以作為我們構造新特征的基礎。在AlphaGo的論文中就是采用瞭以下更多的特征:
所以,輸入模型的特征是一個361×n維度的向量。基於這些向量來訓練模型。
最終,AlphaGo隻依靠一個13層的卷積神經網絡就能訓練出一個比較好的落子分類器。比起圖像識別競賽用到的20、30層的深層神經網絡還是比較淺瞭。這些都是特征工程的功勞。
3.3 初步采用什麼樣的模型?
我們瞭解到,下圍棋的算法本質上就是一個分類器,而最簡單的分類器就是邏輯回歸。可以預期它的分類效果不一定很好,但是速度非常快,在需要快速迭代的業務場景中可能有優勢。所以邏輯回歸是我們考慮的一類模型。
但是在復雜的圍棋博弈中,需要更多高維度的抽象特征,這些構造起來非常麻煩,而經過我們之前的博文介紹,神經網絡具有這樣抽象高維特征的能力。但是神經網絡有許多種類,什麼卷積神經網絡、全連接神經網絡、反饋神經網絡等等,到底用哪一種呢?
我們可以繼續研究圍棋的業務特點來尋找啟發。我們發現,圍棋的棋盤本來就是個19×19的矩陣,真有點像一張19×19像素的照片。而處理圖像照片的最典型神經網絡就是卷積神經網絡。而且我們之前的博文專門介紹過卷積神經網絡,其最關鍵特質的在於假設圖像空間中局部的像素聯系較為緊密,所以其卷積層的每個神經元隻關註上一層的一些局部區域,這樣能夠充分利用輸入數據的二維結構和局部特性,減少運算過程中的參數。你可以想象成,上一層的數據區,有一個滑動的窗口,隻有這個窗口內的數據會和下一層的某個神經元有關聯。而這種 “局部連接性”剛好與圍棋的一些特點相似,比如圍棋的大部分爭奪是在局部區域進行的,不同的局部爭奪共同組成瞭圍棋的全局性。所以卷積神經網絡也是我們考慮的一類模型。
3.4 采用哪些數據做訓練?
標簽、特征、模型基本定好瞭,剩下的就是數據瞭。從哪裡得到數據呢?還是回到我們之前的棋譜,那本質上是個有時間順序的序列。如果我們能夠搜集到大量標記好落子順序的棋譜,每一步落子之前的局面全都作為特征(s,361×n維度的向量),這一步落子位置作為標簽(a,361維度的向量),那不就得到瞭大量的有標註的數據 s , a 嗎?
這還是得感謝網絡時代,如今網絡上有大量棋牌室,全都記錄瞭人類下棋的過程,每天都產生大量有標註的數據。DeepMind就是直接從圍棋對戰平臺KGS(可以理解成外國的聯眾圍棋遊戲大廳)獲得16萬局6至9段人類選手的圍棋對弈棋譜,總共有3000萬個的 s , a 位置,訓練出來瞭一個類似人類下棋行為的模型。
◆ ◆ ◆
分析baseline的優化思路
DeepMind團隊基於卷積神經網絡和邏輯回歸做瞭兩個模型:一個叫做“監督學習策略網絡”pσ(supervised learning (SL) policy network pσ,田淵棟大神稱作“走棋網絡”),一個叫做“快速策略”pπ(fast policy pπ,田淵棟大神稱作“快速走子”**)。其實就是兩個版本的落子選擇器(分類器)。
4.1 評估baseline的效果
這個兩個模型模型的效果如下:
“監督學習策略網絡”已經可以和業餘水平的人類選手過招,能正確符合57%的人類落子行為,互有勝負。
可以把“快速策略”看做是“監督學習策略網絡”的輕量級版本,它能夠比“監督學習策略網絡”快1000倍,但是隻能正確符合24%的人類落子行為。
總體來說還是蠻驚人的。但是距離職業棋手,還是有很大的距離。
4.2 分析其下棋水平不高的原因
為什麼baseline的下棋水平不高呢?猜測可能有以下幾個原因:
我們主要是拿網絡棋牌室的數據去訓練,這些人的水平本來就離頂尖職業棋手就有相當大一段距離。俗話說:“跟臭棋簍子下棋,越下越臭”。與大量業餘選手下棋,訓練出來的行為也難以達到職業水準。
古往今來,真正頂尖的棋手本來就不多,頂尖的對局棋譜相應也就不多,拿這些數據做訓練遠遠不夠。
更本質的問題是,我們的“估值函數”有問題。無論是卷積神經網絡還是邏輯回歸,都可以近似理解為基於3000萬個的有標註的數據 s , a ,評價在當前局面s下,落在某一位置a的概率,也就是p(a|s)。我們選擇p(a|s)取最大值情況下的落子位置a。但這個過程沒有考慮棋局的輸贏信息!也就是說贏棋的落子方案也學,輸棋的落子方案同樣學習。這樣的話,讓模型怎麼去分辨自己落子是贏棋還是輸棋的落子方案呢?
即便分出瞭贏棋輸棋方的落子方案,贏棋者的落子不一定都是好棋(如兩個臭棋簍子下棋),輸棋者的落子不一定都是差棋(如兩個頂尖高手的精彩對弈)。那到底應該學習贏棋過程中的哪一步落子 s , a 呢?像baseline這樣的模型看來更適合學習對弈雙方都會走的棋路,也就是常見的“定式”。
更進一步,落子之後的棋局演化情況在上面的模型中根本沒有體現。不把這樣的行為考慮進來估計很難在棋力上有一個質的飛躍。
4.3 從對原因的分析中產生優化的思路
經過以上的原因分析,我們大致知道猜想到瞭問題的所在,由此可以進一步確定我們的優化思路:
核心目標是改進評估函數,使之更好地體現某一步落子對全局的輸贏結果的影響,以全局的輸贏為目標進行優化。
一方面,可以基於歷史棋局的輸贏情況進行重新訓練。如果訓練數據不夠,可以考慮通過落子選擇器自己與自己對局來增加訓練樣本數或者強化學習。
另一方面,在下棋實戰的時候,需要對棋局的演化情況有一個評估,需要蒙特卡羅樹搜索(Monte Carlo Tree Search,MCTS)。具體展開內容見後文。
將兩個指標綜合評估,得到落子優劣情況的評判。指導我們落子。
◆ ◆ ◆
基於歷史棋局評估落子優劣:估值網絡
5.1 采用新的標簽
在之前的模型中,我們是基於標註數據 s , a 進行訓練的,也就是以當前局面s作為特征,下一步落子a作為標簽。現在我們要基於局面整體的輸贏進行訓練,就要對原有的標簽和特征進行改造。
需要增加新的標簽z,表示局面對應的勝負情況:可以用1表示贏棋,-1表示輸棋,0表示和棋(博主理解是“多劫循環”,也就是雙方可以無休止地走下去的情況)。而特征就是(s,a),它表示在a處落子之後的新的局面(本質上還是一個局面,可以用s’表示,《Nature》原文就是這樣表示的)。也就是說基於有標註的數據 (s,a),z (表示當前局面為s,下一步落子為a的新局面下,輸贏情況為z的數據)進行訓練。
5.2 采用更多的數據
既然要基於歷史棋局,可不可以直接以之前的16萬局棋譜的輸贏情況和落子情況一起進行訓練呢?DeepMind團隊試瞭一試,發現結果過擬合。
分析原因,大概就是我們剛才說的贏棋者的落子不一定都是好棋(如兩個臭棋簍子下棋),輸棋者的落子不一定都是差棋(如兩個頂尖高手的精彩對弈)的情況。圍棋的落子是相互之間強烈相關(strongly correlated) 的,有時候一兩著棋就覺得瞭整個棋局的輸贏。那到底應該學習贏棋過程中的哪一兩步落子 s , a 呢?
其實我們可以換一個思路。如果真存在一兩著決定勝負的棋,那就說明其他的走法很可能就會演化到輸棋,那把演化到輸棋的棋局也拿過來進行訓練,就可以在這一步棋上訓練出贏棋的概率很高的權重。 而之前過擬合的原因很可能就是我們訓練數據當做仍未窮盡棋局演化的各種可能,把臭棋也當做好棋來學瞭。所以需要想一個辦法產生更多高質量的棋局演化可能用來訓練。
既然靠人類對弈已經滿足不瞭機器的胃口,那就用機器自己與自己對局來增加訓練樣本數,這就是傳說中的左右互搏。比如開局,先用某個落子選擇器走n步,由於n是隨機的,這就產生出n個局面分支。覺得局面還不夠多樣化,再完全隨機擲m次骰子,就又在每個局面分支上產生m新的局面分支。如此循環往復,就得到瞭非常豐富的局面s和這些局面對應的結果z。有瞭這些訓練樣本 s , z ,再加上卷積神經網絡,就可以得到一個函數v(s),輸出在局面s下的贏棋概率。
按《Nature》原文的說法,他們通過自我博弈(self-play)產生瞭3000萬個標註樣本 s , z ,每個樣本的局面s都來自不同的一局棋(each sampled from a separate game),以此來防止過擬合(這些挑出來的樣本是否可能也是臭棋?)。註意,之前也是3000萬個標註樣本 s , z ,但它們隻來自於16萬局人類博弈的棋譜。
而基於此訓練出來的函數叫做“估值網絡”(value network vθ),輸入的是361×n維度的向量,輸出的是一個值,也就是在該局面下勝利的概率。
5.3 估值網絡與走棋網絡下棋的對比
我們知道,走棋網絡輸入的s是361×n維度的向量,下一步落子位置a是361維度的向量。其下棋規則是判斷選擇p(a|s)取最大值情況下的落子位置a。p(a|s)就是模型的估值函數。
而估值網絡輸出的隻是一個值v(s)。那判斷下一步棋的落子位置呢?其實隻要將下一步落子產生的新局面(s,a)作為輸入s’,求出各個新局面的v(s′),選擇v(s′)取最大值情況下的落子位置a就行瞭。v(s′)就是模型的估值函數。
所以這兩個網絡作為落子選擇器的差別本質上就是估值函數的算法不一樣。
5.4 增強學習
我們繼續分析,既然走棋網絡p(a|s)可以自己產生數據,那麼可否用自己產生的數據來訓練走棋網絡p(a|s)自己(而不是估值網絡v(s))呢?而這就是增強學習的思想後級擴大機推薦。
比如我們已經有瞭一個“走棋網絡”pσ,先用pσ和pσ對弈,比如1萬局,就得到瞭一萬個新棋譜,加入到訓練集當中,訓練出pσ1。然後再讓pσ1和pσ1對局,得到另外一萬個新棋譜,這樣可以訓練出pσ2,如此往復,可以得到pσn。我們給pσn起一個新名字,叫做“增強學習的策略網絡”pρ(reinforcement learning (RL) policy network pρ)。這時,再讓pρ和pσ對局,在不用任何搜索的情況下贏棋的概率可達80%,效果拔群。
當然,具體的訓練過程比較復雜。這裡先不展開,僅對其具體效果進行分析。既然pρ這麼強,我們在實戰中直接用這個模型怎麼樣?可惜,這樣的方法反而不如之前的“走棋網絡”pσ。《Nature》的論文中認為這可能是因為增強學習的策略網絡是落子選擇過於單一,基本就隻選擇它認為最好的那樣走法(the single best move),而人類的棋手更願意思考更多的有前途的路數(a diverse beam of promising moves)再決策。所以增強學習“還有很長的路要走”(田淵棟)。
但是增強學習可以提供更多質量更好的樣本便於估值網絡v(s)去訓練。這樣,v(s)就可以給出下一步落子在棋盤上任意位置之後,如果雙方都使用pρ來走棋,我方贏棋的概率。如果訓練v(s)的時候全部都使用“走棋網絡”pσ而不用增強學習的策略網絡pρ呢?實驗表明基於pρ訓練的v(s),比基於pσ訓練的v(s)的效果更好。
5.5 評估估值網絡的效果
實踐表明:估值網絡v(s)對棋局輸贏的預測效果要好於快速走子pπ結合蒙特卡羅樹搜索接結果,也接近達到瞭走棋網絡pσ結合蒙特卡羅樹搜索接效果,而且其計算量是後者的1/15000(using 15,000 times less computation)。註意這裡是對輸贏的預測效果,而不是對落子可能性的預測。
◆ ◆ ◆
基於棋局演化評估落子優劣;蒙特卡羅樹搜索
以上的方法我們都是基於當下的落子情況來評估落子路徑優劣的。但人類的下棋思維是“手下一著子,心想三步棋”(selects actions by lookahead search),要對之後的棋局有個評估。那怎麼讓機器去思考接下來的發展呢?這就需要傳說中的蒙特卡羅樹搜索(MCTS)。
6.1 基於估值網絡v(s)的MCTS
我們就先不說蒙特卡羅樹搜索(MCTS)的術語吧,什麼選擇、擴展、模擬、反向傳播啥的的。這裡直接以下棋的思維方式來解釋這個過程,盡量生(shuo)動(ren)些(hua)。
首先,我們有一個“走棋網絡”pσ,它生成瞭一個當前局面s的下一步走棋位置a1的概率分佈。“走棋網絡”的特點是模擬人類的常見走棋行為,但並不評估走棋之後的贏棋的概率(贏棋的概率與分佈概率是兩個不同的概念)。但可以假設,優秀的走棋路數應該在人類常見的走棋范圍內,這就大大減少瞭需要考慮的可能性。那怎麼從這些選擇中找出最優的那個落子呢?咱不是剛好有個估值網絡v(s′)嗎?直接用它篩選贏棋的概率較高的可能落子局面(s,a1)不就可以瞭嗎?
這已經完成瞭一步落子選擇,但是距離“手下一著子,心想三步棋”的標準還差一些。那就繼續假設走瞭a1之後,再考慮對方最可能怎麼走。其思路與上面一樣。那這樣對方走瞭一招a2。緊接著可以再走一著a3。
好瞭,現在走瞭3步棋瞭。是不是就夠瞭呢?未必。如果評估v(s,a1)的贏棋的概率是70%,v(s,a1,a2)對方的贏棋的概率是60%(對應我方贏棋的概率是-60%),而走到第三步的時候評估的贏棋的概率v(s,a1,a2,a3)是35%呢?那你還要不要走a1這個位置?
這需要我們重新理解v(s)的實際意義:它用來預測該局面以增強學習的策略網絡pρ的方式自我博弈後的贏棋的概率(predicts the winner of games played by the RL policy network against itself)。而在我們蒙特卡羅樹搜索過程中,不是用pρ的方式來選擇落子的,所以不符合v(s)的定義。這就需要用新的方法來評估局面s下的贏棋的概率,也就是要對原來位置的贏棋的概率v(s)進行更新。那怎麼更新呢?最簡單的方法就是加權平均。為瞭不至於混淆,我們直接用v?來表示某一局面的贏棋的概率估值函數。剛開始時v?(s,a1)=70%,而下完第三步後其更新為: v?(s,a1)=(70%?60%+35%)/3=15%。此時v?(s,a1)已經變為15%,已經不是之前的70%,也就是說a1的位置可能不是贏棋的概率最大的位置瞭。需要重新挑選出一個位置a′1,使得v?(s,a′1)達到最大值,然後繼續推演並不斷更新不同位置的v?(s)。(其實,在第2步對方落子的時候就應該更新v?(s,a1)瞭,過程與上面類似。這裡隻是做瞭一個簡化處理,便於理解。)
這就是蒙特卡羅樹搜索的基本過程。可見,這套思路是可以不斷演化下去的,越到後面,算出來的v?(s,a1)應該越準確,當時間限制到的時候(圍棋比賽有時限規則,因此時間規劃也是一門學問),就可以返回出最佳位置a1瞭。
這種算法的一個好處是:可以並行化,因此可以大量提高計算速度。
它還有一個好處,就是:它演化出來的各種狀態都可以保存起來,如果對方的落子就在自己的演化路徑之中,這些狀態就可以直接拿來用瞭。這就節省瞭大量運算時間。需要說明的是,這裡隻是對蒙特卡羅樹搜索做一個原理性的簡化解釋。真實的搜索過程可以增加許多策略,遠比這裡復雜。
6.2 基於快速走子pπ的MCTS
其實,我們還有另一種蒙特卡羅樹搜索。基本演化過程與上面類似,但是選擇落子的方式是基於快速走子pπ的。
首先,我們還是有一個“走棋網絡”pσ,還是由它先挑出一些人類常見的走棋可能。那我們對於各種可能狀態直接用快速走子pπ一路走到底決出勝負。比如pσ提供三種落子可能,都用快速走子pπ模擬對局到底,得到的結果是2勝1負。以1表示勝,-1表示負。則“勝利”的落子選項的估值函數v?(s,a1)=1。
然後,對手從“勝利”的落子選項中用“走棋網絡”pσ再拓展出3個落子可能,同樣都用快速走子pπ模擬對局到底,得到的結果是2勝1負。
此時可以更新v?(s,a1)=(1+1?1)/3=1/3,我方再基於對方的落子局面用“走棋網絡”pσ再拓展出一些走棋可能,同樣都可以繼續用快速走子pπ模擬對局到底,得到結果後返回更新所通過的各個走子狀態的的估值函數v?(s)。如此不斷反復。
這就體現出pπ的快速反應速度的優越性瞭。速度越快,模擬出來的未來對局就越多,對落子之後的局面判斷就越準瞭。
6.3 綜合兩種搜索策略形成新的估值函數
這兩種搜索各有優劣重低音一定要裝電容嗎,而且在一定程度上互補。所以DeepMind將這兩種策略組合到一起,效果就有質的飛躍瞭。以下是他們對比各種組合方式的結果:
其組合方式非常簡單粗暴,就是做一個算術平均:
v?=vθ+z2,(z就是快速走子後的返回的勝負結果)
工程實現上,還對估值函數增加瞭一個附加值(bonus)。目的是在快速定位比較好的落子方案的同時,又給其他小概率位置一定的探索可能,增加搜索豐富性。
其實蒙特卡羅樹搜索是一個很傳統的技術,但是如果不用先驗的知識隨機搜索,這棵樹的寬度和深度要非常巨大才能返回一個相對靠譜點的值,這樣的計算量是天文數字。但是通過16萬局人類對弈訓練出來的“走棋網絡”pσ,能夠砍掉很多小概率的分支,減少搜索的寬度。而通過同樣數據訓練出來的“快速走子”pπ,和通過3千萬局機器對弈訓練出來的“估值網絡”v(s),能夠共同使得在探索深度比較小的情況下,返回比較好的局面估值效果,減少瞭搜索的深度。再加上一些細節的策略,整體的效果就是減少瞭計算量,提高瞭預測精度。
◆ ◆ ◆
總結
到此為止,AlphaGo的算法原理基本介紹完瞭。其實也並不復雜,而且這些都不是AlphaGo或者DeepMind團隊首創的。但是強大的DeepMind團隊將這些結合在一起,再加上Google公司的超級計算資源,成就瞭超越絕大部分頂尖棋手的人工智能。真令人贊嘆不已,向這些背後的工程師致敬。
往期精彩文章推薦,點擊圖片可閱讀
機器學習算法一覽
機器學習:入門方法與學習路徑 (附資料)
◆ ◆ ◆
作者介紹
龍心塵和寒小陽:從事機器學習/數據挖掘相關應用工作,熱愛機器學習/數據挖掘
『我們是一群熱愛機器學習,喜歡交流分享的小夥伴,希望通過“ML學分計劃”交流機器學習相關的知識,認識更多的朋友。歡迎大傢加入我們的討論群獲取資源資料,交流和分享。』
聯系方式:
龍心塵
johnnygong.ml@gmail.com
http://blog.csdn.net/longxinchen_ml
寒小陽
hanxiaoyang.ml@gmail.com
http://blog.csdn.net/han_xiaoyang
◆ ◆ ◆
參考文獻
《Nature》:Mastering the game of Go with deep neural networks and tree search 原文鏈接: http://www.nature.com/nature/journal/v529/n7587/full/nature16961.html
田淵棟:AlphaGo的分析 原文鏈接:http://zhuanlan.zhihu.com/yuandong/20607684
How AlphaGo Works 原文鏈接:http://www.dcine.com/2016/01/28/alphago/
木遙:關於 AlphaGo 論文的閱讀筆記 原文鏈接:http://36kr.com/p/5042969.html
董飛編譯How AlphaGo Works 原文鏈接:https://www.zhihu.com/question/41176911/answer/89912149
袁行遠:左右互搏,青出於藍而勝於藍?—阿爾法狗原理解析 原文鏈接https://www.zhihu.com/question/41176911/answer/90118097
Introduction to Monte Carlo Tree Search 原文鏈接:http://jeffbradberry.com/posts/2015/09/intro-to-monte-carlo-tree-search/返回搜狐,查看更多
責任編輯:
聲明:本文由入駐搜狐號的作者撰寫,除搜狐官方賬號外,觀點僅代表作者本人,不代表搜狐立場。
閱讀 ()
原標題:讀《Nature》論文,看AlphaGo養成
作者授權轉載
作者:龍心塵、寒小陽
◆ ◆ ◆
文章聲明
博主是圍棋小白,下棋規則都記不清楚,也沒有設計過棋類AI程序。這篇文章主要是閱讀《Nature》論文及關於AlphaGo的相關文章的學習心得。
本文的主要目的是增進分享,交流學習,方便初學者瞭解AlphaGo中的算法,以及一些機器學習中的常見思路。真正的工程實現過程遠比本文介紹得復雜。
本文更多是啟發式地進行闡述與分析,包括一些作者結合自己的理解進行的簡化處理。文章中不嚴謹和理解不當之處,歡迎大傢批評指出,我們努力修改完善。
◆ ◆ ◆
圍棋的業務特點
機器學習的第一步都是先瞭解業務。圍棋的業務特點包括其基本規則、對弈特性和下棋的典型思路。根據這些業務特點,我們可以分階段實現我們的圍棋算法。
2.1 圍棋的基本規則
使用方形格狀棋盤及黑白二色圓形棋子進行對弈,棋盤上有縱橫各19條直線將棋盤分成361個交叉點,棋子走在交叉點上,雙方交替行棋,落子後不能移動,以圍地多者為勝。並且雙方可以相互吃子(提子),隻要我方棋子將對方某一片緊鄰的棋子周圍圍住,就可以將對方這片棋子吃掉。
2.2 對弈特性
基於以上規則,圍棋對弈過程中有以下特性:
不像象棋、軍棋那樣盤面上的棋子越走越少,而是越走越多。所以一局棋從開始到結束,用一張標記好走棋順序的棋譜就能保存絕大部分下棋的信息,是一個時間序列。如下圖就是《Nature》論文中的樊麾與AlphaGo對弈的一個棋譜:
對弈從開局到中局變化都很大,尤其是中局,往往是一著不慎,滿盤皆輸。用數學的描述叫做估值函數(得分函數)非常不平滑。
到收尾階段,由於棋盤上總體的棋子是越來越多的,其變化就越來越少。可以看成是一個動態收斂的過程。狀態空間非常大,約為2×10170,超過目前的計算機的計算能力,無法通過暴力窮舉解決。
2.3 下圍棋的基本思路
而人類不需要搜索這麼多狀態空間也能夠下好圍棋,說明還是有規律的,隻是這些規律比較抽象。我們機器學習算法就是要盡量找出人類下圍棋的一些規律。我們可以簡單總結一些人類下圍棋典型思路如下:
首先是明確基本規則,這個方便。其次是掌握一些基本“定式”,也就是在一個給定的局面下人類一般會怎麼走,這個過程不涉及優劣的判斷,也比較難以用確定性的規則描述。基於對棋局未來演化情況的評估,決定當今當下的下棋策略。所謂“手下一著子,心想三步棋”。這是圍棋最復雜的情況。
2.4 分階段實現下棋算法
基於以上這些初步瞭解,我們可以分階段實現我們的下棋算法:
第一步是學會人類下棋的一般定式,形成一些優秀考慮的下棋策略。
第二步是對落子之後的棋局演化做出有效評估,基於評估的結果優化自己的最終落子策略。
◆ ◆ ◆
先做一個baswline系統
現在我們思路大概有瞭,但仍然不知道模型的最終樣子應該是怎樣。此時我們建議先動簡單手做一個baseline,然後在模型調優的過程中不斷地分析問題、解決問題。這樣就很有可能更快找到問題的最佳解決方案。設計baseline思路基本如下:
3.1 抽象成數學問題:多分類
通過以上分析可知,下圍棋的過程就是一個不斷地決策在哪個位置落子的過程。在落子之前,你已知棋盤上所有已落子的情況。而棋盤上總共就19×19=361個位置,所以落子就是一個361選1的多分類問題。將多分類問題轉換成簡單的2分類問題來處理,(采用one-to-rest的思路,)則需要361個2分類的分類器,每個分類器隻評估落在361個位置中某1個具體位置的分數,再從這361個結果中中挑選分數最大的位置來落子。
3.2 哪些特征,如何選擇?
分類器的輸出我們知道瞭,就是361個標簽。那分類器的輸入又是哪些特征呢?其實就是當前的棋盤分佈。
我們先考慮第一類特征。圍棋一共是361個交叉點,每個交叉點有三種狀態(白子、黑子、無子):可以用1表示黑子,-1表示白字,0表示無子。於是一個361維度的向量就可以完全表示當前棋盤的情況。理論上說,隻輸入這些特征就可以瞭。如下圖就是演示用矩陣表示棋局狀態的情況,而矩陣拉長就是一個向量瞭:
後級擴大機
但是,因為圍棋的極端復雜性,這些棋子(輸入特征)的關系是非線性的。雖然理論上采用神經網絡的算法可以處理非線性特征,但是計算量和對資源的消耗都太大。相反,如果有依據地增加一些新的特征的維度,使特征間的非線性關系不那麼復雜,將使得模型變得更加簡單、更加便於訓練,優勢還是很明顯的。
那怎麼增加更多的特征呢?這就需要利用部分圍棋領域中的知識,比如圍棋中的術語:氣、目、空等概念都可以作為我們構造新特征的基礎。在AlphaGo的論文中就是采用瞭以下更多的特征:
所以,輸入模型的特征是一個361×n維度的向量。基於這些向量來訓練模型。
最終,AlphaGo隻依靠一個13層的卷積神經網絡就能訓練出一個比較好的落子分類器。比起圖像識別競賽用到的20、30層的深層神經網絡還是比較淺瞭。這些都是特征工程的功勞。
3.3 初步采用什麼樣的模型?
我們瞭解到,下圍棋的算法本質上就是一個分類器,而最簡單的分類器就是邏輯回歸。可以預期它的分類效果不一定很好,但是速度非常快,在需要快速迭代的業務場景中可能有優勢。所以邏輯回歸是我們考慮的一類模型。
但是在復雜的圍棋博弈中,需要更多高維度的抽象特征,這些構造起來非常麻煩,而經過我們之前的博文介紹,神經網絡具有這樣抽象高維特征的能力。但是神經網絡有許多種類,什麼卷積神經網絡、全連接神經網絡、反饋神經網絡等等,到底用哪一種呢?
我們可以繼續研究圍棋的業務特點來尋找啟發。我們發現,圍棋的棋盤本來就是個19×19的矩陣,真有點像一張19×19像素的照片。而處理圖像照片的最典型神經網絡就是卷積神經網絡。而且我們之前的博文專門介紹過卷積神經網絡,其最關鍵特質的在於假設圖像空間中局部的像素聯系較為緊密,所以其卷積層的每個神經元隻關註上一層的一些局部區域,這樣能夠充分利用輸入數據的二維結構和局部特性,減少運算過程中的參數。你可以想象成,上一層的數據區,有一個滑動的窗口,隻有這個窗口內的數據會和下一層的某個神經元有關聯。而這種 “局部連接性”剛好與圍棋的一些特點相似,比如圍棋的大部分爭奪是在局部區域進行的,不同的局部爭奪共同組成瞭圍棋的全局性。所以卷積神經網絡也是我們考慮的一類模型。
3.4 采用哪些數據做訓練?
標簽、特征、模型基本定好瞭,剩下的就是數據瞭。從哪裡得到數據呢?還是回到我們之前的棋譜,那本質上是個有時間順序的序列。如果我們能夠搜集到大量標記好落子順序的棋譜,每一步落子之前的局面全都作為特征(s,361×n維度的向量),這一步落子位置作為標簽(a,361維度的向量),那不就得到瞭大量的有標註的數據 s , a 嗎?
這還是得感謝網絡時代,如今網絡上有大量棋牌室,全都記錄瞭人類下棋的過程,每天都產生大量有標註的數據。DeepMind就是直接從圍棋對戰平臺KGS(可以理解成外國的聯眾圍棋遊戲大廳)獲得16萬局6至9段人類選手的圍棋對弈棋譜,總共有3000萬個的 s , a 位置,訓練出來瞭一個類似人類下棋行為的模型。
◆ ◆ ◆
分析baseline的優化思路
DeepMind團隊基於卷積神經網絡和邏輯回歸做瞭兩個模型:一個叫做“監督學習策略網絡”pσ(supervised learning (SL) policy network pσ,田淵棟大神稱作“走棋網絡”),一個叫做“快速策略”pπ(fast policy pπ,田淵棟大神稱作“快速走子”**)。其實就是兩個版本的落子選擇器(分類器)。
4.1 評估baseline的效果
這個兩個模型模型的效果如下:
“監督學習策略網絡”已經可以和業餘水平的人類選手過招,能正確符合57%的人類落子行為,互有勝負。
可以把“快速策略”看做是“監督學習策略網絡”的輕量級版本,它能夠比“監督學習策略網絡”快1000倍,但是隻能正確符合24%的人類落子行為。
總體來說還是蠻驚人的。但是距離職業棋手,還是有很大的距離。
4.2 分析其下棋水平不高的原因
為什麼baseline的下棋水平不高呢?猜測可能有以下幾個原因:
我們主要是拿網絡棋牌室的數據去訓練,這些人的水平本來就離頂尖職業棋手就有相當大一段距離。俗話說:“跟臭棋簍子下棋,越下越臭”。與大量業餘選手下棋,訓練出來的行為也難以達到職業水準。
古往今來,真正頂尖的棋手本來就不多,頂尖的對局棋譜相應也就不多,拿這些數據做訓練遠遠不夠。
更本質的問題是,我們的“估值函數”有問題。無論是卷積神經網絡還是邏輯回歸,都可以近似理解為基於3000萬個的有標註的數據 s , a ,評價在當前局面s下,落在某一位置a的概率,也就是p(a|s)。我們選擇p(a|s)取最大值情況下的落子位置a。但這個過程沒有考慮棋局的輸贏信息!也就是說贏棋的落子方案也學,輸棋的落子方案同樣學習。這樣的話,讓模型怎麼去分辨自己落子是贏棋還是輸棋的落子方案呢?
即便分出瞭贏棋輸棋方的落子方案,贏棋者的落子不一定都是好棋(如兩個臭棋簍子下棋),輸棋者的落子不一定都是差棋(如兩個頂尖高手的精彩對弈)。那到底應該學習贏棋過程中的哪一步落子 s , a 呢?像baseline這樣的模型看來更適合學習對弈雙方都會走的棋路,也就是常見的“定式”。
更進一步,落子之後的棋局演化情況在上面的模型中根本沒有體現。不把這樣的行為考慮進來估計很難在棋力上有一個質的飛躍。
4.3 從對原因的分析中產生優化的思路
經過以上的原因分析,我們大致知道猜想到瞭問題的所在,由此可以進一步確定我們的優化思路:
核心目標是改進評估函數,使之更好地體現某一步落子對全局的輸贏結果的影響,以全局的輸贏為目標進行優化。
一方面,可以基於歷史棋局的輸贏情況進行重新訓練。如果訓練數據不夠,可以考慮通過落子選擇器自己與自己對局來增加訓練樣本數或者強化學習。
另一方面,在下棋實戰的時候,需要對棋局的演化情況有一個評估,需要蒙特卡羅樹搜索(Monte Carlo Tree Search,MCTS)。具體展開內容見後文。
將兩個指標綜合評估,得到落子優劣情況的評判。指導我們落子。
◆ ◆ ◆
基於歷史棋局評估落子優劣:估值網絡
5.1 采用新的標簽
在之前的模型中,我們是基於標註數據 s , a 進行訓練的,也就是以當前局面s作為特征,下一步落子a作為標簽。現在我們要基於局面整體的輸贏進行訓練,就要對原有的標簽和特征進行改造。
需要增加新的標簽z,表示局面對應的勝負情況:可以用1表示贏棋,-1表示輸棋,0表示和棋(博主理解是“多劫循環”,也就是雙方可以無休止地走下去的情況)。而特征就是(s,a),它表示在a處落子之後的新的局面(本質上還是一個局面,可以用s’表示,《Nature》原文就是這樣表示的)。也就是說基於有標註的數據 (s,a),z (表示當前局面為s,下一步落子為a的新局面下,輸贏情況為z的數據)進行訓練。
5.2 采用更多的數據
既然要基於歷史棋局,可不可以直接以之前的16萬局棋譜的輸贏情況和落子情況一起進行訓練呢?DeepMind團隊試瞭一試,發現結果過擬合。
分析原因,大概就是我們剛才說的贏棋者的落子不一定都是好棋(如兩個臭棋簍子下棋),輸棋者的落子不一定都是差棋(如兩個頂尖高手的精彩對弈)的情況。圍棋的落子是相互之間強烈相關(strongly correlated) 的,有時候一兩著棋就覺得瞭整個棋局的輸贏。那到底應該學習贏棋過程中的哪一兩步落子 s , a 呢?
其實我們可以換一個思路。如果真存在一兩著決定勝負的棋,那就說明其他的走法很可能就會演化到輸棋,那把演化到輸棋的棋局也拿過來進行訓練,就可以在這一步棋上訓練出贏棋的概率很高的權重。 而之前過擬合的原因很可能就是我們訓練數據當做仍未窮盡棋局演化的各種可能,把臭棋也當做好棋來學瞭。所以需要想一個辦法產生更多高質量的棋局演化可能用來訓練。
既然靠人類對弈已經滿足不瞭機器的胃口,那就用機器自己與自己對局來增加訓練樣本數,這就是傳說中的左右互搏。比如開局,先用某個落子選擇器走n步,由於n是隨機的,這就產生出n個局面分支。覺得局面還不夠多樣化,再完全隨機擲m次骰子,就又在每個局面分支上產生m新的局面分支。如此循環往復,就得到瞭非常豐富的局面s和這些局面對應的結果z。有瞭這些訓練樣本 s , z ,再加上卷積神經網絡,就可以得到一個函數v(s),輸出在局面s下的贏棋概率。
按《Nature》原文的說法,他們通過自我博弈(self-play)產生瞭3000萬個標註樣本 s , z ,每個樣本的局面s都來自不同的一局棋(each sampled from a separate game),以此來防止過擬合(這些挑出來的樣本是否可能也是臭棋?)。註意,之前也是3000萬個標註樣本 s , z ,但它們隻來自於16萬局人類博弈的棋譜。
而基於此訓練出來的函數叫做“估值網絡”(value network vθ),輸入的是361×n維度的向量,輸出的是一個值,也就是在該局面下勝利的概率。
5.3 估值網絡與走棋網絡下棋的對比
我們知道,走棋網絡輸入的s是361×n維度的向量,下一步落子位置a是361維度的向量。其下棋規則是判斷選擇p(a|s)取最大值情況下的落子位置a。p(a|s)就是模型的估值函數。
而估值網絡輸出的隻是一個值v(s)。那判斷下一步棋的落子位置呢?其實隻要將下一步落子產生的新局面(s,a)作為輸入s’,求出各個新局面的v(s′),選擇v(s′)取最大值情況下的落子位置a就行瞭。v(s′)就是模型的估值函數。
所以這兩個網絡作為落子選擇器的差別本質上就是估值函數的算法不一樣。
5.4 增強學習
我們繼續分析,既然走棋網絡p(a|s)可以自己產生數據,那麼可否用自己產生的數據來訓練走棋網絡p(a|s)自己(而不是估值網絡v(s))呢?而這就是增強學習的思想後級擴大機推薦。
比如我們已經有瞭一個“走棋網絡”pσ,先用pσ和pσ對弈,比如1萬局,就得到瞭一萬個新棋譜,加入到訓練集當中,訓練出pσ1。然後再讓pσ1和pσ1對局,得到另外一萬個新棋譜,這樣可以訓練出pσ2,如此往復,可以得到pσn。我們給pσn起一個新名字,叫做“增強學習的策略網絡”pρ(reinforcement learning (RL) policy network pρ)。這時,再讓pρ和pσ對局,在不用任何搜索的情況下贏棋的概率可達80%,效果拔群。
當然,具體的訓練過程比較復雜。這裡先不展開,僅對其具體效果進行分析。既然pρ這麼強,我們在實戰中直接用這個模型怎麼樣?可惜,這樣的方法反而不如之前的“走棋網絡”pσ。《Nature》的論文中認為這可能是因為增強學習的策略網絡是落子選擇過於單一,基本就隻選擇它認為最好的那樣走法(the single best move),而人類的棋手更願意思考更多的有前途的路數(a diverse beam of promising moves)再決策。所以增強學習“還有很長的路要走”(田淵棟)。
但是增強學習可以提供更多質量更好的樣本便於估值網絡v(s)去訓練。這樣,v(s)就可以給出下一步落子在棋盤上任意位置之後,如果雙方都使用pρ來走棋,我方贏棋的概率。如果訓練v(s)的時候全部都使用“走棋網絡”pσ而不用增強學習的策略網絡pρ呢?實驗表明基於pρ訓練的v(s),比基於pσ訓練的v(s)的效果更好。
5.5 評估估值網絡的效果
實踐表明:估值網絡v(s)對棋局輸贏的預測效果要好於快速走子pπ結合蒙特卡羅樹搜索接結果,也接近達到瞭走棋網絡pσ結合蒙特卡羅樹搜索接效果,而且其計算量是後者的1/15000(using 15,000 times less computation)。註意這裡是對輸贏的預測效果,而不是對落子可能性的預測。
◆ ◆ ◆
基於棋局演化評估落子優劣;蒙特卡羅樹搜索
以上的方法我們都是基於當下的落子情況來評估落子路徑優劣的。但人類的下棋思維是“手下一著子,心想三步棋”(selects actions by lookahead search),要對之後的棋局有個評估。那怎麼讓機器去思考接下來的發展呢?這就需要傳說中的蒙特卡羅樹搜索(MCTS)。
6.1 基於估值網絡v(s)的MCTS
我們就先不說蒙特卡羅樹搜索(MCTS)的術語吧,什麼選擇、擴展、模擬、反向傳播啥的的。這裡直接以下棋的思維方式來解釋這個過程,盡量生(shuo)動(ren)些(hua)。
首先,我們有一個“走棋網絡”pσ,它生成瞭一個當前局面s的下一步走棋位置a1的概率分佈。“走棋網絡”的特點是模擬人類的常見走棋行為,但並不評估走棋之後的贏棋的概率(贏棋的概率與分佈概率是兩個不同的概念)。但可以假設,優秀的走棋路數應該在人類常見的走棋范圍內,這就大大減少瞭需要考慮的可能性。那怎麼從這些選擇中找出最優的那個落子呢?咱不是剛好有個估值網絡v(s′)嗎?直接用它篩選贏棋的概率較高的可能落子局面(s,a1)不就可以瞭嗎?
這已經完成瞭一步落子選擇,但是距離“手下一著子,心想三步棋”的標準還差一些。那就繼續假設走瞭a1之後,再考慮對方最可能怎麼走。其思路與上面一樣。那這樣對方走瞭一招a2。緊接著可以再走一著a3。
好瞭,現在走瞭3步棋瞭。是不是就夠瞭呢?未必。如果評估v(s,a1)的贏棋的概率是70%,v(s,a1,a2)對方的贏棋的概率是60%(對應我方贏棋的概率是-60%),而走到第三步的時候評估的贏棋的概率v(s,a1,a2,a3)是35%呢?那你還要不要走a1這個位置?
這需要我們重新理解v(s)的實際意義:它用來預測該局面以增強學習的策略網絡pρ的方式自我博弈後的贏棋的概率(predicts the winner of games played by the RL policy network against itself)。而在我們蒙特卡羅樹搜索過程中,不是用pρ的方式來選擇落子的,所以不符合v(s)的定義。這就需要用新的方法來評估局面s下的贏棋的概率,也就是要對原來位置的贏棋的概率v(s)進行更新。那怎麼更新呢?最簡單的方法就是加權平均。為瞭不至於混淆,我們直接用v?來表示某一局面的贏棋的概率估值函數。剛開始時v?(s,a1)=70%,而下完第三步後其更新為: v?(s,a1)=(70%?60%+35%)/3=15%。此時v?(s,a1)已經變為15%,已經不是之前的70%,也就是說a1的位置可能不是贏棋的概率最大的位置瞭。需要重新挑選出一個位置a′1,使得v?(s,a′1)達到最大值,然後繼續推演並不斷更新不同位置的v?(s)。(其實,在第2步對方落子的時候就應該更新v?(s,a1)瞭,過程與上面類似。這裡隻是做瞭一個簡化處理,便於理解。)
這就是蒙特卡羅樹搜索的基本過程。可見,這套思路是可以不斷演化下去的,越到後面,算出來的v?(s,a1)應該越準確,當時間限制到的時候(圍棋比賽有時限規則,因此時間規劃也是一門學問),就可以返回出最佳位置a1瞭。
這種算法的一個好處是:可以並行化,因此可以大量提高計算速度。
它還有一個好處,就是:它演化出來的各種狀態都可以保存起來,如果對方的落子就在自己的演化路徑之中,這些狀態就可以直接拿來用瞭。這就節省瞭大量運算時間。需要說明的是,這裡隻是對蒙特卡羅樹搜索做一個原理性的簡化解釋。真實的搜索過程可以增加許多策略,遠比這裡復雜。
6.2 基於快速走子pπ的MCTS
其實,我們還有另一種蒙特卡羅樹搜索。基本演化過程與上面類似,但是選擇落子的方式是基於快速走子pπ的。
首先,我們還是有一個“走棋網絡”pσ,還是由它先挑出一些人類常見的走棋可能。那我們對於各種可能狀態直接用快速走子pπ一路走到底決出勝負。比如pσ提供三種落子可能,都用快速走子pπ模擬對局到底,得到的結果是2勝1負。以1表示勝,-1表示負。則“勝利”的落子選項的估值函數v?(s,a1)=1。
然後,對手從“勝利”的落子選項中用“走棋網絡”pσ再拓展出3個落子可能,同樣都用快速走子pπ模擬對局到底,得到的結果是2勝1負。
此時可以更新v?(s,a1)=(1+1?1)/3=1/3,我方再基於對方的落子局面用“走棋網絡”pσ再拓展出一些走棋可能,同樣都可以繼續用快速走子pπ模擬對局到底,得到結果後返回更新所通過的各個走子狀態的的估值函數v?(s)。如此不斷反復。
這就體現出pπ的快速反應速度的優越性瞭。速度越快,模擬出來的未來對局就越多,對落子之後的局面判斷就越準瞭。
6.3 綜合兩種搜索策略形成新的估值函數
這兩種搜索各有優劣重低音一定要裝電容嗎,而且在一定程度上互補。所以DeepMind將這兩種策略組合到一起,效果就有質的飛躍瞭。以下是他們對比各種組合方式的結果:
其組合方式非常簡單粗暴,就是做一個算術平均:
v?=vθ+z2,(z就是快速走子後的返回的勝負結果)
工程實現上,還對估值函數增加瞭一個附加值(bonus)。目的是在快速定位比較好的落子方案的同時,又給其他小概率位置一定的探索可能,增加搜索豐富性。
其實蒙特卡羅樹搜索是一個很傳統的技術,但是如果不用先驗的知識隨機搜索,這棵樹的寬度和深度要非常巨大才能返回一個相對靠譜點的值,這樣的計算量是天文數字。但是通過16萬局人類對弈訓練出來的“走棋網絡”pσ,能夠砍掉很多小概率的分支,減少搜索的寬度。而通過同樣數據訓練出來的“快速走子”pπ,和通過3千萬局機器對弈訓練出來的“估值網絡”v(s),能夠共同使得在探索深度比較小的情況下,返回比較好的局面估值效果,減少瞭搜索的深度。再加上一些細節的策略,整體的效果就是減少瞭計算量,提高瞭預測精度。
◆ ◆ ◆
總結
到此為止,AlphaGo的算法原理基本介紹完瞭。其實也並不復雜,而且這些都不是AlphaGo或者DeepMind團隊首創的。但是強大的DeepMind團隊將這些結合在一起,再加上Google公司的超級計算資源,成就瞭超越絕大部分頂尖棋手的人工智能。真令人贊嘆不已,向這些背後的工程師致敬。
往期精彩文章推薦,點擊圖片可閱讀
機器學習算法一覽
機器學習:入門方法與學習路徑 (附資料)
◆ ◆ ◆
作者介紹
龍心塵和寒小陽:從事機器學習/數據挖掘相關應用工作,熱愛機器學習/數據挖掘
『我們是一群熱愛機器學習,喜歡交流分享的小夥伴,希望通過“ML學分計劃”交流機器學習相關的知識,認識更多的朋友。歡迎大傢加入我們的討論群獲取資源資料,交流和分享。』
聯系方式:
龍心塵
johnnygong.ml@gmail.com
http://blog.csdn.net/longxinchen_ml
寒小陽
hanxiaoyang.ml@gmail.com
http://blog.csdn.net/han_xiaoyang
◆ ◆ ◆
參考文獻
《Nature》:Mastering the game of Go with deep neural networks and tree search 原文鏈接: http://www.nature.com/nature/journal/v529/n7587/full/nature16961.html
田淵棟:AlphaGo的分析 原文鏈接:http://zhuanlan.zhihu.com/yuandong/20607684
How AlphaGo Works 原文鏈接:http://www.dcine.com/2016/01/28/alphago/
木遙:關於 AlphaGo 論文的閱讀筆記 原文鏈接:http://36kr.com/p/5042969.html
董飛編譯How AlphaGo Works 原文鏈接:https://www.zhihu.com/question/41176911/answer/89912149
袁行遠:左右互搏,青出於藍而勝於藍?—阿爾法狗原理解析 原文鏈接https://www.zhihu.com/question/41176911/answer/90118097
Introduction to Monte Carlo Tree Search 原文鏈接:http://jeffbradberry.com/posts/2015/09/intro-to-monte-carlo-tree-search/返回搜狐,查看更多
責任編輯:
聲明:本文由入駐搜狐號的作者撰寫,除搜狐官方賬號外,觀點僅代表作者本人,不代表搜狐立場。
閱讀 ()
AUGI SPORTS|重機車靴|重機車靴推薦|重機專用車靴|重機防摔鞋|重機防摔鞋推薦|重機防摔鞋
AUGI SPORTS|augisports|racing boots|urban boots|motorcycle boots
全站熱搜
留言列表