遲蹭乙個熱點 自我對弈的 AlphaGo Zero

2021-09-11 11:05:30 字數 2384 閱讀 6847

alphago zero [1] 已經出來一段時間了。本來 alphago zero 一出來就應該寫科普的,但自己實在懶。等到現在才更新。

alphago zero 最大的亮點是:完全沒有利用人類知識,就能夠獲得比之前版本更強大的棋力。主要的做法是: 1) 利用蒙特卡洛樹搜尋建立乙個模型提公升器,2) 在自我對弈過程中,利用提公升器指導模型提公升,模型提公升又進一步提高了提公升器的能力。

蒙特卡洛樹搜尋 (monte carlo tree search, mcts) 是一種樹型搜尋技術,具有如下所示的樹型結構。

樹中每乙個節點 s 代表了乙個圍棋盤面,並帶有兩個數字。乙個是訪問次數n(s),另乙個質量度q(s)。訪問次數 n(s)表示在搜尋中節點被訪問的次數。面對乙個盤面,mcts 會進行重複搜尋,所以乙個節點可能會被反覆訪問,這個下面細說。質量度q(s)表示這個節點下 alphago 的優勢程度,其計算公式如下所示。

這個公式的意思是:1)對於非葉子節點,質量度等於該節點所有樹中已有子節點的質量度均值。2)對於葉子節點,質量度跟價值網路估計的獲勝概率vθ(sl)有關,還跟快速走子模擬後續比賽得到的勝負結果zl有關。葉子節點的質量度等於這兩者的加權混合,其中混合引數λ介於0和1之間。

有了 mcts 的結構,我們就可以繼續介紹 mcts 怎麼做搜尋的。當對手落了一子,alphago 迅速讀入當前盤面,將之當作搜尋的根節點,展開搜尋。mcts 搜尋的流程如下圖所示,一共分為四個步驟:

選擇:從根節點 r 開始,遞迴選擇某個子節點直到達到葉子節點 l。當在乙個節點s,我們怎麼選擇子節點si呢?我們選擇子節點不應該亂選,而是應該選擇那些優質的子節點。alphago 中的選擇子節點的方式如下所示。

其中p(si|s)是策略網路的輸出。乙個有意思的點在於乙個節點被訪問次數越多,選擇它作為子節點的可能性越小,這是為了搜尋多樣性考慮。

擴充套件:如果 l 節點上圍棋對弈沒有結束,那麼可能建立乙個節點 c。

模擬:計算節點 c 的質量度。

反向傳播:根據 c 的質量度,更新它爸爸爺爺祖先的質量度。

上述搜尋步驟反覆進行,直到達到某個終止條件。搜尋結束後,mcts 選擇根節點的質量度最高的子節點作為 alphago 的著法。

alphago zero 的網路結構和之前的版本不同。alphago zero 的網路結構採用了 resnet 網路,而之前的版本則採用了傳統的 cnn 網路。同時 alphago zero 將 policy 網路和 value 網路結合在一起,乙個網路同時輸出不同動作概率和預估勝率,如下所示。

網路結構定義好了,我們來看下 alphago zero 是怎麼自我對弈 (self-play) 進行訓練的。將上面的模型接入 mcts, mcts 就能有策略地進行搜尋,搜尋結果是當前盤面不同動作的概率。由於 mcts 經過了搜尋,輸出的動作概率肯定要好於模型自身輸出的動作概率,因此可以將 mcts 視作模型的提公升器。自我對弈是從初始圍棋盤面開始;mcts 輸入當前盤面 s1 輸出不同動作概率 p1,按照該概率取樣乙個動作作為玩家落子;mcts 作為對手輸入當前盤面 s2 輸出不同動作的概率 p2,按照該概率取樣乙個動作作為對手的落子;不停執行,直到分出勝負 z。收集資料(s1,p1,z),..., 作為訓練資料訓練模型。整個訓練流程如下所示。

在這裡,我個人有點疑問。這種訓練方法明顯地和我們認知的基於馬爾科夫決策過程 (markov decision process, mdp) 的強化學習有區別,但**還是稱之為強化學習。難度強化學習有更廣義的定義嘛?

alphago zero 網路結構有兩個改動:1) 用 resnet 替代了傳統 cnn, 2) 合併了 policy 網路和 value 網路。下圖可以看出這兩個改動能提高 alphago zero 的效果(sep 表示policy和value分開,dual 表示合在一起; res 表示 resnet 網路,cnn 表示傳統的cnn)。

3.2 不同版本 alphago 的比較

從下圖可以看出,不用人類知識的 alphago zero 超過之前的版本。另外從下圖能看出來的是,訓練完成之後,mcts 提公升器 + 模型的能力還是要比模型要強。

大家以為圍棋都做到頭了,其他做圍棋的團隊在極力用舊方法提高棋力。沒有想到 deepmind 以 「不需要人類知識」 為最大亮點,搞出這麼乙個重磅研究工作。「不需要人類知識」 得以實現是因為模型+ mcts 提公升器的訓練方法。在利用模型的基礎上,mcts 提公升器總是強於模型本身,從而為模型提公升指明了方向;模型的提公升又進一步增強了 mcts 提公升器的能力;這就形成了正向迴圈。乙個總是比模型強的提公升器,是正向迴圈能夠建立的關鍵。

很多自**已經開始鼓吹,這是邁向通用智慧型的重要一步。這個是不對的。圍棋因為規則明確和完全資訊,我們找到了 mcts 這個總是比模型強的模型提公升器。但在更多通用領域,這樣的模型提公升器還是比較難找到的。

被 tensorflowlite 刷屏了吧,偏要再發一遍

學習筆記dl002:ai、機器學習、表示學習、深度學習,第一次大衰退

學習筆記dl001 : 數學符號、深度學習的概念

乙個對弈遊戲框架的重構過程

為了演示博弈樹的搜尋和評估演算法,對比各種評估演算法 ai 的智商,我做了乙個井字棋 tic tac toe 遊戲的對戰框架,讓人類玩家可以和遊戲的 ai 進行對戰博弈。這個 chat 的內容就是這個框架的設計和重構的過程,這是乙個從樸素的物件導向實現到面向介面實現,並引入模式的設計過程。完整看完這...

乙個小偷的自我修養

總結這週的leetcode,遇到了乙個有意思的題目,名字叫打家劫舍。題目的意思是讓你幫小偷規劃偷竊的路線,是一道動態規劃的題目。由於之前沒有接觸過動態規劃演算法,所以在這道題上花了很多的時間,藉此文章總結一下。你是乙個專業的小偷,計畫偷竊沿街的房屋。每間房內都藏有一定的現金,影響你偷竊的唯一制約因素...

乙個SEMer的自我修養

標題創意來自周星星電影裡的那本 乙個演員的自我修養 只見其名不看其書。作為80後,很多朋友都是看星爺的 長大的 作為semer,希望也有很多朋友能看我的部落格成長。好吧,我膨脹了,這是不對的。semer的自我修養裡就不包括這一條。當別的剛入門的semer在各大論壇各個qq群問為什麼怎麼做好的時候,你...