深入淺出看懂AlphaGo Zero 深入淺出看懂AlphaGo Zero (文章最後有原AlphaGo Zero論文地址)

深入淺出看懂AlphaGo Zero (文章最後有原AlphaGo Zero論文地址)

作者丨劉遙行

學校丨聖何塞州立大學研究生

研究方向丨AI與現實生活的工業結合

AlphaGo Zero = 啓發式搜索 + 強化學習 + 深度神經網絡,你中有我,我中有你,互相對抗,不斷自我進化。使用深度神經網絡的訓練作爲策略改善,蒙特卡洛搜索樹作爲策略評價的強化學習算法。

1. 論文正文內容詳細解析

先上乾貨論文:Mastering the Game of Go without Human Knowledge [1],之後會主要以翻譯論文爲主,在語言上儘量易懂,避免翻譯腔

AlphaGo Zero,從本質上來說完全不同於打敗樊麾和李世石的版本。

算法上,自對弈強化學習,完全從隨機落子開始,不用人類棋譜。之前使用了大量棋譜學習人類的下棋風格)。

數據結構上,只有黑子白子兩種狀態。之前包含這個點的氣等相關棋盤信息。

模型上,使用一個神經網絡。之前使用了策略網絡(基於深度卷積神經網)學習人類的下棋風格,局面網絡(基於左右互搏生成的棋譜,爲什麼這裏需要使用左右互搏是因爲現有的數據集不夠,沒法判斷落子勝率這一更難的問題)來計算在當前局面下每一個不同落子的勝率。

策略上,基於訓練好的這個神經網,進行簡單的樹形搜索。之前會使用蒙特卡洛算法實時演算並且加權得出落子的位置。

1.1 AlphaGo Zero 的強化學習

1.1.1 問題描述

在開始之前,必須再過一遍如何符號化的定義一個圍棋問題。

圍棋問題,棋盤19×19=361 個交叉點可供落子,每個點三種狀態,白(用1 表示),黑(用 -1 表示),無子(用0 表示),用描述此時棋盤的狀態,即棋盤的狀態向量記爲(state 首字母)。

假設狀態下,暫不考慮不能落子的情況, 那麼下一步可走的位置空間也是 361 個。將下一步的落子行動也用一個 361 維的向量來表示,記爲(action 首字母)。

公式1.2 假設其中1 在向量中位置爲 39 ,則表示在棋盤 3行1列 位置落白子,黑白交替進行。

有以上定義,我們就把圍棋問題轉化爲:任意給定一個狀態,尋找最優的應對策略,最終可以獲得棋盤上的最大地盤。

簡而言之,看到,腦海中就是一個棋盤,上面有很多黑白子。看到,腦海中就想象一個人瀟灑地落子

1.1.2 網絡結構

新的網絡中,使用了一個參數爲 θ(需要通過訓練來不斷調整) 的深度神經網絡

網絡輸入:19×19×17 0/1 值:現在棋盤狀態的以及7步歷史落子記錄。最後一個位置記錄黑白,0 白 1 黑。

網絡輸出(兩個輸出):落子概率(362 個輸出值)和一個評估值[-1,1]之間)記爲。

• 落子概率 P:向量表示下一步在每一個可能位置落子的概率,又稱先驗概率(加上不下的選擇),即(公式表示在當前輸入條件下在每個可能點落子的概率)。

• 評估值 v:表示現在準備下當前這步棋的選手在輸入的這八步歷史局面下的勝率(我這裏強調局面是因爲網絡的輸入其實包含歷史對戰過程)。

網絡結構:基於 Residual Network(大名鼎鼎 ImageNet 冠軍 ResNet)的卷積網絡,包含 20 或 40 個 Residual Block(殘差模塊),加入批量歸一化 Batch normalisation 與非線性整流器 rectifier non-linearities 模塊。

1.1.3 改進的強化學習算法

自對弈強化學習算法(什麼是強化學習[2],非常建議先看看強化學習的一些基本思想和步驟,有利於理解下面策略、價值的概念,推薦系列筆記 [3])。

在每一個狀態,利用深度神經網絡 fθ 預測作爲參照執行 MCTS 搜索(蒙特卡洛搜索樹算法 [4]),MCTS 搜索的輸出是每一個狀態下在不同位置對應的概率 π(注意這裏是一個向量,裏面的值是 MCTS 搜索得出的概率值),一種策略,從人類的眼光來看,就是看到現在局面,選擇下在每個不同的落子的點的概率。如下面公式的例子,下在 (1,3) 位置的概率是 0.92 ,有很高概率選這個點作爲落子點

MCTS 搜索得出的落子概率比 輸出的僅使用神經網絡輸出的落子概p更強,因此,MCTS 可以被視爲一個強力的策略改善(policy improvement)過程

使用基於 MCTS 提升後的策略(policy)來進行落子,然後用自對弈最終對局的勝者 z作爲價值(Value),作爲一個強力的策略評估(policy evaluation)過程

並用上述的規則,完成一個通用策略迭代算法去更新神經網絡的參數 θ,使得神經網絡輸出的落子概率和評估值,即更加貼近能把這盤棋局贏下的落子方式(使用不斷提升的 MCST 搜索落子策略 π 和自對弈的勝者 z作爲調整依據)。並且,在下輪迭代中使用新的參數來進行自對弈。

在這裏補充強化學習的通用策略迭代(Generalized Policy Iteration)方法。

• 從策略 π0開始

• 策略評估(Policy Evaluation)- 得到策略 π0的價值 vπ0(對於圍棋問題,即這一步棋是好棋還是臭棋)

• 策略改善(Policy Improvement)- 根據價值 vπ0,優化策略爲 π0+1(即人類學習的過程,加強對棋局的判斷能力,做出更好的判斷)

• 迭代上面的步驟 2 和 3,直到找到最優價值 v∗,可以得到最優策略 π∗

△ Figure 1

圖 a 表示自對弈過程 s1,…,sT。在每一個位置 st,使用最新的神經網絡 fθ 執行一次 MCTS 搜索 αθ。根據搜索得出的概率 at∼πi 進行落子。終局 sT 時根據圍棋規則計算勝者 z。πi 是每一步時執行 MCTS 搜索得出的結果(柱狀圖表示概率的高低)。

圖 b 表示更新神經網絡參數過程。使用原始落子狀態作爲輸入,得到此棋盤狀態下下一步所有可能落子位置的概率分佈pt當前狀態下選手的贏棋評估值 vt。

以最大化 pt 與 πt 相似度和最小化預測的勝者 vt 和局終勝者 z 的誤差來更新神經網絡參數 θ (詳見公式1),更新參數 θ ,下一輪迭代中使用新神經網絡進行自我對弈。

我們知道,最初的蒙特卡洛樹搜索算法是使用隨機來進行模擬,在 AlphaGo1.0 中使用局面函數輔助策略函數作爲落子的參考進行模擬。在最新的模型中,蒙特卡洛搜索樹使用神經網絡 fθ 的輸出來作爲落子的參考(詳見下圖 Figure 2)。

每一條邊(每個狀態下的落子選擇)保存的是三個值:先驗概率,訪問次數,行動價值。

每次模擬(模擬一盤棋,直到分出勝負)從根狀態開始,每次落子最大化上限置信區間,其中

,直到遇到葉子節點 s′。

葉子節點(終局)只會被產生一次用於產生先驗概率和評估值,符號表示即 fθ(s′)=(P(s′,⋅),V(s′))。

模擬過程中遍歷每條邊時更新記錄的統計數據。訪問次數加一;更新行動價值爲整個模擬過程的平均值,即

表示在模擬過程中從走到的所有落子行動。

△ Figure 2

圖 a 表示模擬過程中遍歷時選 Q+U 更大的作爲落子點。

圖 b 表示葉子節點 sL 的擴展和評估。使用神經網絡對狀態 sL 進行評估,即 fθ(sL) = (P(sL,⋅),V(sL)) ,其中 P 的值存儲在葉子節點擴展的邊中。

圖 c 更新行動價值Q 等於此時根狀態所有子樹評估值 V 的平均值。

圖 d 表示當 MCTS 搜索完成後,返回這個狀態下每一個位置的落子概率π,成比例於 N1/τ(N 爲訪問次數,τ 爲控溫常數)。

MCTS 搜索可以看成一個自對弈過程中決定每一步如何下的依據,根據神經網絡的參數 θ 和根的狀態去計算每個狀態下落子位置的先驗概率,記爲,冪指數正比於訪問次數,τ 是溫度常數。

1.1.4 訓練步驟總結

使用 MCTS 下每一步棋,進行自對弈,強化學習算法(必須瞭解通用策略迭代的基本方法)的迭代過程中訓練神經網絡。

• 神經網絡參數隨機初始化 θ0

• 每一輪迭代 i⩾1,都自對弈一盤(見Figure-1)

• 第 t 步:MCTS 搜索 πt=αθi−1(st) 使用前一次迭代的神經網絡fθi−1,根據MCTS結構計算出的落子策略 πt 的聯合分佈進行【採樣】再落子

• 在 T 步 :雙方都選擇跳過;搜索時評估值低於投降線;棋盤無地落子。根據勝負得到獎勵值 Reward rT∈{−1,+1}

• MCTS 搜索下至中盤的過程的每一個第 t 步的數據存儲爲,其中 zt=±rT表示在第t 步時的勝者

• 同時,從上一步迭代時自對弈棋局過程中產生的數據(爲訓練數據,π,z 爲標籤)中採樣(這裏的採樣是指選 Mini-Batch)來訓練網絡參數 θi

• 神經網絡以最大化 pt 與 πt 相似度和最小化預測的勝者 vt 和局終勝者 z 的誤差來更新神經網絡參數 θ,損失函數公式如下:

其中 c 是 L2 正則化的係數。

1.2 AlphaGo Zero 訓練過程中的經驗

最開始,使用完全的隨機落子訓練持續了大概 3 天。訓練過程中,產生 490 萬場自對弈,每次 MCTS 大約 1600 次模擬,每一步使用的時間 0.4 秒。使用了 2048 個位置的 70 萬個 Mini-Batches 來進行訓練。訓練結果如下,圖3:

△ Figure 3

圖 a 表示隨時間 AlphaGo Zero 棋力的增長情況,顯示了每一個不同的棋手 αθi 在每一次強化學習迭代時的表現,可以看到,它的增長曲線非常平滑,沒有很明顯的震盪,穩定性很好。圖 b 表示的是預測準確率基於不同迭代第 i 輪的 fθi。圖 c 表示的 MSE(平方誤差)。

在 24 小時的學習後,無人工因素的強化學習方案就打敗了通過模仿人類棋譜的監督學習方法爲了分別評估結構和算法對結構的影響,得到了,下圖 4:

△ Figure 4

dual-res 表示 AlphaGo Zero,sep-conv 表示 AlphaGo Lee(擊敗李世乭的)使用的網絡結構(P+V 且分開)。

1.3 AlphaGo Zero 學到的知識

在訓練過程中,AlphaGo Zero 可以一步步的學習到一些特殊的圍棋技巧(定式),如圖 5:

△ 圖5

中間的黑色橫軸表示的是學習時間,圖 a 對應的 5 張棋譜展現的是不同階段 AlphaGo Zero 在自對弈過過程中展現出來的圍棋定式上的新發現。圖 b 展示在右星位上的定式下法的進化。可以看到訓練到 50 小時,點三三出現了,但再往後訓練,b 圖中的第五種定式高頻率出現,在 AlphGa Zero 看來,這一種形式似乎更加強大。圖 c 展現了前 80 手自對弈的棋譜伴隨時間,明顯有很大的提升,在第三幅圖中,已經展現出了比較明顯的的傾向性。

1.4 AlphaGo Zero 的最終實力

之後,最終的 AlphaGo Zero 使用 40 個殘差模塊,訓練接近 40 天。在訓練過程中,產生了 2900 萬盤的自對弈棋譜,使用了 310 萬個 Mini-Batches 來訓練神經網絡,每一個 Mini-Batch 包含了 2048 個不同的狀態。(覆蓋的狀態數是 63 億(),但和圍棋的解空間 相比真的很小,也從側面反映出,圍棋中大部分選擇都是冗餘的。在一個棋盤局面下,根據先驗概率,估計只有 15-20 種下法是值得考慮)。

被評測不同版本使用計算力的情況,AlphaGo Zero 和 AlphaGo Master 被部署到有4 個 TPUs 的單機上運行(主要用於做模型的輸出預測 Inference 和 MCTS 搜索),AlphaGo Fan(打敗樊麾版本)和 AlphaGo Lee(打敗李世乭版本) 分佈式部署到機器羣裏,總計有 176GPUs 和 48GPUs(Goolge 真有錢)。還加入了raw network,它是每一步的僅僅使用訓練好的深度學習神經網的輸出 pa 爲依據選擇最大概率點來落子,不使用 MCTS 搜索(Raw Network 裸用深度神經網絡的輸出已經十分強大,甚至已經接近了 AlphaGo Fan) 。

下圖 6 展示不同種 AlphaGo 版本的棋力情況:

△ 圖6

圖 a 隨着訓練時間棋力的增強曲線,圖 b 裸神經網絡得分 3055,AlphaGo Zero 得分 5185,AlphaGo Master 得分 4858,AlphaGo Lee 得分 3738,AlphaGo Fan 得分 3144。

最終,AlphaGo Zero 與 AlphaGo Master 的對戰比分爲 89:11,對局中限制一場比賽在 2 小時之內(新聞中的零封是對下贏李世乭的 AlphaGo Lee)。

2. 論文附錄內容

我們知道,Nature 上的文章一般都是很強的可讀性和嚴謹性,每一篇文章的正文可能只有 4-5 頁,但是附錄一般會遠長於正文。基本所有你的技術細節疑惑都可以在其中找到結果,這裏值列舉一些我自己比較感興趣的點,如果你是專業人士,甚至想復現 AlphaGo Zero,讀原文更好更精確。

2.1 自對弈訓練工作流

AlphaGo Zero 的工作流由三個模塊構成,可以異步多線程進行:深度神經網絡參數θi 根據自對弈數據持續優化;持續對棋手 αθi 棋力值進行評估;使用表現最好的 αθ∗ 用來產生新的自對弈數據

2.1.1 優化參數

每一個神經網絡 fθi 在 64 個 GPU 工作節點和 19 個 CPU 參數服務器上進行優化。

批次(batch)每個工作節點 32 個,每一個 mini-batch 大小爲 2048。每一個 mini-batch 的數據從最近 50 萬盤的自對弈棋譜的狀態中聯合隨機採樣。

神經網絡權重更新使用帶有動量(momentum)和學習率退火(learning rate annealing)的隨機梯度下降法(SGD),損失函數見公式 1。

學習率退火比率見下表:

動量參數設置爲 0.9,L2 正則化係數設置爲,優化過程每 1000 個訓練步執行一次,並使用這個新模型來生成下一個 Batch 的自對弈棋譜

2.1.2 評估器

在使用檢查點(checkpoint)新的神經網絡去生成自對弈棋譜前,使用現有的最好網絡來對它進行評估。評估神經網絡fθi 的方法是使用fθi 進行 MCTS 搜索得出 αθi。

每一個評估由400 盤對局組成,MCTS 搜索使用 1600 次模,將溫度參數設爲無窮小 τ⇒0(目的是爲了使用最多訪問次數的落子下法去下,追求最強的棋力),如果新的選手 αθi 勝率大於 55%,將這個選手更新爲最佳選手 αθ∗,用來產生下一輪的自對弈棋譜,並且設爲下一輪的比較對象。

2.1.3 自對弈

通過評估器,現在已經有一個當前的最好棋手 αθ∗,使用它來產生數據。在每一次迭代中,αθ∗ 自對弈 25000 盤,其中每一步使用 1600 次 MCTS 模擬(每一步大約會花費 0.4 秒)。

前 30 步,溫度 τ=1,與 MCTS 搜索中的訪問次數成正比,目的是保證前 30 步下法的多樣性。在之後的棋局中,溫度設爲無窮小。並在先驗概率中加入狄利克雷噪聲,其中 η∼Dir(0.03) 且 ϵ=0.25。這個噪聲保證所有的落子可能都會被嘗試,但可能下出臭棋。

投降閾值vrerign 自動設爲錯誤正類率如果 AlphaGo 沒有投降可以贏的比例)小於 5%,爲了測量錯誤正類(false positives),在 10% 的自對弈中關閉投降機制,必須下完。

2.2 搜索算法

這一部分詳解的 AlphaGo Zero 的算法核心示意圖(Figure2)。

每一個搜索樹的中的節點包含一條邊對應所有可能的落子,每一條邊存儲一個數據集。

分別表示 MCST 的訪問次數、行動價值的總和、行動價值的均值和選擇這條邊的先驗概率。

多線程執行多次模擬,每一次迭代過程先重複執行 1600 次 Figure 2 中的前 3 個步驟,計算出一個 π ,根據這個向量下現在的這一步棋。

2.2.1 Selcet - Figure2a

MCTS 中的選擇步驟和之前的版本相似,詳見 AlphaGo 之前的詳解文章[5],這篇博文詳細通俗的解讀了這個過程。概括來說,假設 L 步走到葉子節點,當走第 t 步時,根據搜索樹的統計概率落子

其中計算使用 PUCT 算法的變體。

其中 cpuct 是一個常數。這種搜索策略落子選擇最開始更趨向於高先驗概率低訪問次數的,但逐漸的會更加趨向於選擇有着更高行動價值的落子。

2.2.2 Expand and evaluate - Figure 2b

將葉子節點加到一個隊列中等待輸入至神經網絡進行評估,,其中 di 表示一個 1 至 8 的隨機數來表示雙面反射和旋轉選擇(從 8 個不同的方向進行評估)。

隊列中的不同位置組成一個大小爲 8 的 mini-batch 輸入到神經網絡中進行評估。整個 MCTS 搜索線程被鎖死直到評估過程完成。葉子節點被展開,每一條邊被初始化爲。之後將神經網絡的輸出值 v 傳回。

2.2.3 Backup - Figure 2c

沿着回溯的路線將邊的統計數據更新。

註解:在的更新中,使用了神經網絡的輸出 v,而最後的價值就是策略評估中的使用虛擬損失(virtual loss)確保每一個線程評估不同的節點。

2.2.4 Play - Figure 2d

進行了一次 MCTS 搜索後,AlphaGo Zero 才從狀態下走出第一步,與訪問次數成冪指數比例。

其中 τ 是一個溫度常數用來控制探索等級(level of exploration)。搜索樹會在接下來的走子中繼續使用,如果孩子節點和落子的位置吻合,它就成爲新的根節點,保留子樹的所有統計數據,同時丟棄其他的樹。如果根的評價值和它最好孩子的評價值都低於 vresign,AlphaGo Zero 就認輸

與之前的版本的 MCTS 相比,AlphaGo Zero 最大的不同是沒有使用走子網絡(Rollout),而是使用一個神經網絡。

2.3 數據集

GoKifu 數據集:http://gokifu.com/

KGS 數據集:https://u-go.net/gamerecords/

2.4 圖 5 更多細節

△ Figure 5a 中每種定式出現的頻率圖

△ Figure 5b 中每種定式出現的頻率圖

3. 總結與隨想

AlphaGo Zero = 啓發式搜索 + 強化學習 + 深度神經網絡,你中有我,我中有你,互相對抗,不斷自我進化。使用深度神經網絡的訓練作爲策略改善,蒙特卡洛搜索樹作爲策略評價的強化學習算法

之後提出一些我在看論文時帶着的問題,最後給出我仔細看完每一行論文後得出的回答,如有錯誤,請批評指正。

3.1 問題與個人答案

Q: 訓練好的 Alpha Zero 在真實對弈時,在面對一個局面時如何決定下在哪個位置?

A: 評估器的落子過程即最終對弈時的落子過程(自對弈中的落子就是真實最終對局時的落子方式):使用神經網絡的輸出 p 作爲先驗概率進行 MCTS 搜索,每步1600次(最後應用的版本可能和每一步的給的時間有關)模擬,前 30 步採樣落子,剩下棋局使用最多訪問次數來落子,得到 π ,然後選擇落子策略中最大的一個位置落子。

Q: AlphaGo Zero 的 MCTS 搜索算法和和上個版本的有些什麼區別?

A: 對於 AlphaGo Zero 來說,最大的區別在於,模擬過程中依據神經網絡的輸出 p 的概率分佈採樣落子採樣是關鍵詞,首先採樣保證一定的隨機特性,不至於下的步數過於集中。其次,如果模擬的盤數足夠多,那這一步就會越來越強 其次,在返回(Bakcup)部分每一個點的價值(得分),使用了神經網絡的輸出 v。這個值也是策略評估的重要依據。

Q: AlphaGo Zero 中的策略迭代法是如何工作的?

A: 策略迭代法(Policy Iteration)是強化學習中的一種算法,簡單來說:以某種策略(π0)開始,計算當前策略下的價值函數(vπ0);然後利用這個價值函數,找到更好的策略(Evaluate 和 Improve);接下來再用這個更好的策略繼續前行,更新價值函數……這樣經過若干輪的計算,如果一切順利,我們的策略會收斂到最優的策略(π∗),問題也就得到了解答。

對於 AlphaGo Zero 來說,簡單總結如下:策略評估過程,即使用 MCTS 搜索每一次模擬的對局勝者勝者的所有落子都獲得更好的評估值;策略提升過程,即使用 MCTS 搜索返回的更好策略π;迭代過程,即神經網絡輸出 p 和 v 與策略評估和策略提升返回值的對抗(即神經網絡的訓練過程)。

總的來說,有點像一個嵌套過程,MCST 算法可以用來解決圍棋問題,這個深度神經網絡也可以用來解決圍棋問題,而 AlphaGo Zero 將兩者融合,你中有我,我中有你,不斷對抗,不對自我進化。

Q: AlphaGo Zero 最精彩的是哪部分?

A: 毫無懸念的,我會選擇這個漂亮的公式。看懂公式每一項的來歷,即產生的過程,就讀懂了 AlphaGo Zero。這個公式你中有我,我中有你,這是一個完美的對抗,完美的自我進化。

第二我覺得很精彩的點子是將深度神經網絡作爲一個模塊嵌入到了強化學習的策略迭代法中。最關鍵的是,收斂速度快,效果好,解決各種複雜的局面(比如一個關於圍棋棋盤的觀看角度可以從八個方向來看的細節處理的很好,又如神經網絡的輸入狀態選擇了使用歷史八步)。

3.2 隨想評論

隨着 AlphaGo Zero 的歸隱,DeepMind 已經正式轉移精力到其他的任務上了。期待這個天才的團隊還能搞出什麼大新聞。

對於圍棋這項運動的影響可能是:以後的學圍棋手段會發生變化,畢竟世界上能復現 AlphaGo Zero 的絕對很多,那麼 AlphaGo Zero 的實力那就是棋神的感覺,向 AlphaGo Zero 直接學習不是更加高效嘛?另,圍棋受到的關注也應該漲了一波,是利好。

感覺強化學習會越來越熱,對於和環境交互這個領域,強化學習更加貼近於人類做決策的學習方式。個人預測,強化學習會在未來會有更多進展。AlphaGo Zero 可能僅僅是一個開頭。

4. 相關資料鏈接

[1]AlphaGo Zero論文

https://deepmind.com/documents/119/agz_unformatted_nature.pdf

[2] 什麼是強化學習?

https://mubu.com/doc/WNKomuDNl

[3]強化學習系列筆記

http://www.cnblogs.com/steven-yang/p/6481772.html

[4]蒙特卡洛搜索樹—走子演算

http://t.cn/RWMmLdM

[5] 深入淺出看懂 AlphaGo 如何下棋


原論文(英文):Mastering the game of Go without human knowledge


 

文章最後發佈於: 2018-08-30 11:21:50
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章