Alpha-zero-general 對戰的勝率。
最後一個實驗—結合迫著搜尋於蒙地卡羅樹搜索法,則有較
步,加快整體自我對下的時間。
參考文獻
[1] J. Schaeffer, “The history heuristic and alpha-beta search enhancements in practice,” IEEE Transactions on Pattern Analysis and Machine Intelligence, vol. 11, no. 11, pp. 1203–1212, 1989.
[2] L. Kocsis and C. Szepesvári, “Bandit Based Monte-Carlo Planning,” Lecture Notes in Computer Science Machine Learning:
ECML 2006, pp. 282–293, 2006.
[3] D. Silver, A. Huang, C. J. Maddison, A. Guez, L. Sifre, G. V. D.
Driessche, J. Schrittwieser, I. Antonoglou, V. Panneershelvam, M.
Lanctot, S. Dieleman, D. Grewe, J. Nham, N. Kalchbrenner, I.
Sutskever, T. Lillicrap, M. Leach, K. Kavukcuoglu, T. Graepel, and D.
Hassabis, “Mastering the game of Go with deep neural networks and tree search,” Nature, vol. 529, no. 7587, pp. 484–489, 2016.
[4] D. Silver, J. Schrittwieser, K. Simonyan, I. Antonoglou, A. Huang, A.
Guez, T. Hubert, L. Baker, M. Lai, A. Bolton, Y. Chen, T. Lillicrap, F.
Hui, L. Sifre, G. V. D. Driessche, T. Graepel, and D. Hassabis,
“Mastering the game of Go without human knowledge,” Nature, vol.
550, no. 7676, pp. 354–359, 2017.
[5] “Mastering Chess and Shogi by Self-Play with a General Reinforcement Learning Algorithm” [Online]. Available:
https://arxiv.org/pdf/1712.01815.pdf. [Accessed: 24-Feb-2020].
[6] S. Nair, Alpha-zero-general. December, 2017. [Online]. Available:
https://github.com/junxiaosong/Alpha-zero-general. [Accessed Feb.
24, 2020].
[7] C. H. Chen, W. L. Wu, Y. H. Chen, and S. S. Lin, “Some improvements in Monte Carlo tree search algorithms for sudden death games,” ICGA Journal, vol. 40, no. 4, pp. 460–470, 2019.
[8] W. McCulloch and W. Pitts, “A logical calculus of the ideas immanent in nervous activity,” Bulletin of Mathematical Biology, vol. 52, no. 1-2, pp. 99–115, 1990.
[9] D. O. Hebb, The organization of behavior: a neuropsychological theory. New York: John Wiley & Sons, 1949.
[10] B. Farley and W. Clark, “Simulation of self-organizing systems by digital computer,” Transactions of the IRE Professional Group on Information Theory, vol. 4, no. 4, pp. 76–84, 1954.
[11] F. Rosenblatt, “The perceptron: A probabilistic model for information storage and organization in the brain.,” Psychological Review, vol. 65, no. 6, pp. 386–408, 1958.
[12] B. Widrow and M. A. Lehr, "30 years of adaptive neural networks:
perceptron, madaline, and backpropagation". Proceedings of the IEEE.
78 (9): 1415–1442, 1990.
[13] M. Minsky and S. Papert, A review of "Perceptrons: an introduction to computational geometry". New York: Academic Press, 1970.
[14] P. J. Werbos, Roots of backpropagation: from ordered derivatives to neural networks and political forecasting. New York: Wiley, 1994.
[15] D. E. Rumelhart, G. E. Hinton, and R. J. Williams, “Learning representations by back-propagating errors,” Nature, vol. 323, no.
6088, pp. 533–536, 1986.
[16] Y. LeCun, B. Boser, J. S. Denker, D. Henderson, R. E. Howard, W.
Hubbard, and L. D. Jackel, “Backpropagation Applied to Handwritten Zip Code Recognition,” Neural Computation, vol. 1, no. 4, pp. 541–
551, 1989.
[17] K. He, X. Zhang, S. Ren, and J. Sun, “Deep Residual Learning for Image Recognition,” 2016 IEEE Conference on Computer Vision and Pattern Recognition (CVPR), 2016.
[18] Renju International Federation, “The International Rules of Renju”.
[Online]. Available:
http://www.renju.net/study/rifrules.php.
[Accessed Mar. 11, 2020].
[19] L. V. Allis, H. J. Herik, and M. P. H. Huntjens, “Go-Moku Solved By New Search Techniques,” Computational Intelligence, vol. 12, no. 1, pp. 7–23, 1996.
[20] S. S. Lin, “Outer-Open Gomoku (Using Lin's Rule,proposed in 2011)”. [Online]. Available:
http://www.csie.ntnu.edu.tw/~linss/Lin-Rule-For-Five-in-a-row.htm. [Accessed Aug. 21, 2020].
[21] C. H. Chen, W. L. Wu, Y. H. Chen, and S. S. Lin, “Some
Improvements in Monte Carlo Tree Search Algorithms for Sudden Death Games”, ICGA Journal, vol. 40, no. 4, pp. 460-470, 2018.
[22] 吳天宇,基於 AlphaZero General Framework 實現 Breakthrough 遊 戲。國立臺灣師範大學碩士論文, 2019。
[23] L. Allis, H. van den Herik, and M. Huntjens, “Go-moku solved by new search techniques,” Computation Intelligence, vol. 12, pp. 7-23, 1996.
[24] 翁慈孝,電腦五子棋程式珠連設計與製作。國立東華大學碩士 論文,2004。
[25] 劉雲青,六子棋中一個結合迫著搜尋的防禦性策略。國立臺灣 師範大學碩士論文,2009。
[26] 張乃元,改進 AlphaZero 的大贏策略並應用於黑白棋。國立臺灣 師範大學碩士論文,2019。
附錄一:Alpha-zero-general 類別與方法
Alpha-zero-general 框架中各個模組定義之屬性與方法均引用 並修改自張乃元的碩士論文 [26],說明如下:
在 Game 類別中,定義此模組為儘管是不同的遊戲規則,但 只需確保符合預設輸出格式,即可在只更改 Game 類別後直接套 用 Alpha-zero-general 框架就能順利運作。而考量 DeepMind 的 AlphaZero 重現度與實作容易度,實作上有不同寫法,預設方法有 九項如下,方法說明以8 × 8五子棋為例:
(1) getInitBoard():輸出遊戲初始盤面,資料結構上預設為 NumPy 之 Array,輸出為一個8 × 8盤面,元素皆為 0 之二 維陣列。尚未落子之空白位置設定為 0,未來若是黑子落 子後,則於該落子位置值為 1,白子落子位置值為-1。
(2) getBoardSize():輸出一個(x, y, z)的 tuple,分別代表棋盤的 長、寬與盤面個數。用以定義類神經網路輸入架構,須根 據本類別中 getIinitBoard()如何實作決定,例如 (8,8,1)。
(3) getActionSize():輸出一個正整數,代表棋盤上所有棋子 的合法走步數量。
(4) getNextState(board, player, action) : board 為 當 前 盤 面 的
NumPy Array,player 代表當前玩家,為一整數,action 為 當前玩家採取的動作,是一個整數或字串。輸出為一個 (board, player)的 tuple,board 代表根據輸入之 board、
player 及 action,進行操作後產生的新盤面,player 為下一 個玩家。
(5) getValidMoves(board, player): board 代表當前盤面、player 代表當前玩家。輸出為一個長度與本類別中 getActionSize ()定義相同的 NumPy Array,代表根據當前盤面及玩家,
輸出該玩家之所有合法走步,若一走步合法,則設之為 1,
反之為 0。用以對類神經網路預測輸出的π進行遮罩,方 便後續蒙地卡羅樹搜索法展開該玩家的合法走步。
(6) getGameEnded(board, player): board 代表當前盤面、player 代表當前玩家。輸出為一浮點數,用以判別遊戲是否結束。
若是已經結束,則輸出 1 與-1,表示對當前玩家而言為勝 或負,分別回傳;和局為一極小正或負值,遊戲尚未結束 則回傳 0。
(7) getCannonicalForm(board, player):board 代表當前盤面、
player 代 表 當 前 玩 家 。 輸 出 為 一 長 度 與 board 一 樣 之 NumPy Array,用輸入盤面進行轉換,把盤面作上下倒置、
鏡像處理後再行輸出,以符合後續盤面操作的方向。
(8) getSymmetries(board, pi): board 代表當前盤面、pi 代表經 過 MCTS 模擬後,所有合法走步的各個拜訪數量,長度為 與本類別中 getActionSize()定義的 NumPy Array 一致。輸 出為一 List,包含經由輸入之 board 與 pi 旋轉、對稱後得 出的八個 tuple (board, pi),用以此方式來增加訓練資料量。
(9) StringRePresentation(board):board 代表當前盤面。輸出為 一字串,代表以輸入 board 轉成之字串。當後續 MCTS 建
(1) numIters 屬性:為一正整數,Alpha-zero-general 框架中的 迭代次數。
(2) numEps 屬性:為一正整數,進行自我對下產生盤面時,
總共需要進行的遊戲局數。
(3) tempThreshold 屬性:為一正整數,自我對下產生盤面時,
為了產生多樣性的訓練資料,定義前幾步最後的落子採用 MCTS 拜訪次數除以 MCTS 總拜訪次數的機率。
(4) updateThreshold 屬性:為一浮點數,在更新類神經網路時,
可以與舊網路進行比較,若是新網路對戰舊網路對戰勝率 大於此值,即可更新。
(5) maxLenQueue 屬性:為一正整數,用以訂定最高儲存之盤 面訓練資料總量。
(6) numMCTSSims 屬 性 : 為 一 正 整 數 , 用 以 訂 定 每 一 步 MCTS 節點總共展開個數。
(7) arenaCompare 屬性:為一正整數,用以訂定新舊模型對戰 所需局數。
(8) Cpuct 屬性:為一浮點數,用以訂定 MCTS 裡,UCT 公式 平衡需求(exploitation)與探索需求(exploration)的參數。
(9) checkPoint 屬性:為一字串,用以建立儲存類神經網路模 型與訓練資料的資料夾路徑。
(10) loadMode 屬性:為一布林值,用以確認是否需要讀取類神 經網路模型。
(11) loadFolderFile 屬性:為一字串,用以讀取類神經網路模型
的路徑與名稱。
(12) numsItersForTrainExamples 屬性:為一正整數,用以訂定 訓練資料要儲存多少個 numIters。
(13) lr 屬性:為一浮點數,用以訂定類神經網路訓練中所需 的 learning rate。
(14) epoch 屬性:為一正整數,用以訂定每個 numIters 以同樣 的訓練資料訓練時所需的次數。
(15) batchSize 屬性:為一正整數,用以訂定類神經網路訓練 中,每一批次輸入類神經網路進行訓練的資料數量。
(16) numChannels 屬性:為一正整數,用以訂定類神經網路 中,經過各個卷積層(Convolution Layer)時 filter 之個數。
2. 在 Coach 類別中,定義此模組,預設屬性六項與方法四項如下:
練資料,以及新舊模型對戰比較優劣時。
(6) trainExamplesHistory 屬性:為一個 list,用於紀錄每一個 nu-mIters 所產生的盤面訓練資料。
(7) excuteEpisode():輸出一個 list,包含多個(board, pi, z) tuple,
分別代表同一個類神經網路自我對戰中,每一步的盤面 board、該盤面經由 MCTS 模擬完成後各走步的機率分布 pi 值,以及這個盤面最後的勝負結果 Z值,作為類神經網路的 訓練資料,
(8) saveTrainExamples(iteration):輸入 iteration 為一整數,代 表 當 前 訓 練 為 第 幾 個 numIters , 用 於 儲 存 本 類 別 中 trainExamplesHistory 屬性裡的盤面訓練資料。
(9) loadTrainExamples() : 用 於 讀 取 本 類 別 中 trainExam-plesHistory 屬性裡的盤面訓練資料。
(10) learn():藉由本類別中其他方法與屬性,完成同一類神經
(4) playGame():輸出為一浮點數,代表 Player1 或 Player2 勝,
若 Player1 勝則回傳 1,Player2 勝則回傳-1,雙方平手回傳 1、-1 及 0 之以外的數。用以藉由呼叫 Game 物件的方法,
完成一次對局並回傳結果。
(5) playGames(arenaCompare):輸入 arenaCompare 為一整數,
代表進行遊戲對戰的局數;輸出一個 tuple(int, int, int)分別 代表 Player1 對戰 Player2 勝、負、和的統計資料。用以呼 叫本類別中的 PlayGame()方法完成遊戲、得出勝率。
4. 在 Network 類別中,建構出一個 tensorflow 的類神經網路實例, 出,可由呼叫 game 類別中的 getActionSize()方法取得。
(4) boardX 屬性:為一個正整數,代表輸入棋盤的 X 軸長度。
(5) boardY 屬性:為一個正整數,代表輸入棋盤的 Y 軸長度。
(6) boardChannels 屬性:為一個正整數,代表此網路中每個卷 積層有幾個特徵(fliter)層。
(7) build_net():根據自身的屬性,使用 tensorflow 套件建立起 一個類神經網路並返回。
5. 在 NetworkWrapper 類別中,定義一個區分類神經網路功能的類 別,例如訓練、預測、儲存權重以及讀取權重,以便讓其他程 式呼叫使用。預設屬性六項與方法四項如下:
(1) game 屬性:類別初始化時需要輸入的遊戲物件。
(2) args 屬性:類別初始化時需要輸入的參數物件。
(3) actionSize 屬性:為一個正整數,代表棋盤上所有棋子的 合法走步數量。
(4) boardX 屬性:為一個正整數,代表輸入棋盤的 X 軸長度。
(5) boardY 屬性:為一個正整數,代表輸入棋盤的 Y 軸長度。
(6) boardChannels 屬性:為一個正整數,代表此網路中每個卷 積層有幾個特徵(fliter)層。
(7) net 屬性:類別初始化時需要輸入的類神經網路物件,用 於對類神經網路進行使用以及訓練。
(8) train(Examples):用於訓練類神經網路,輸入為訓練資料 所組成的 list,包含盤面(data)以及落子機率π和勝負 V 值 (label)。將 list 中的每筆 data 以及 label 取出後,使用反向 傳播演算法對類神經網路進行訓練並修正誤差。
(9) predit(board):用於使用類神經網路 net 對輸入的棋盤 array 預測π以及 V 值並且回傳。
(10) save_checkpoint (folder ,filename):將目前的類神經網路權 重以 filename 名字儲存至 folder 資料夾。
(11) load_checkpoint (folder ,filename):從 folder 資料夾中讀取 filename 的類神經網路權重檔案至目前的類神經網路 net。
6. MCTS 類別藉由類神經網路預測來進行搜索,此類別用於負責
(10) getActionProb(canonicalBoard,temp):用於輸入盤面搜索後 回傳走步結果。每次會呼叫若干次 search()進行蒙地卡羅 樹 搜 索 法 , 呼 叫 次 數 則 根 據 args 中 所 設 定 的 numMCTSSims 模擬次數決定,模擬完畢之後則根據溫度 temp 決定一個走步。如果 temp 設定為 0,則是強制選擇拜 訪次數最高的合法走步節點,最後回傳這一走步。
(11) search(canonicalBoard):用於進行一次蒙地卡羅樹搜索法,
每次進行搜索時用輸入的 canaonicalBoard,當作根(root)節 點開始進行搜索。