基於AlphaZero General Framework實現Breakthrough遊戲
87
0
0
全文
(2) 摘要 在現今人工智慧電腦對局領域中,多數棋類的頂尖程式,都以 AlphaZero 的開發框架獨占鰲頭,棋力遠超以往傳統的程式,然而此種架構中有許多研發 內容並不因不同棋類的規則而有所不同,當需要研發新種類的對局程式時將會 有許多重複的前置開發成本。 故本論文中以 C++實作遊戲規則及搜尋樹處理,以 Python 與 TensorFlow 套 件實作類神經網絡訓練,兩者結合出易讀且運行效率較高的通用型 AlphaZero 框架的程式,此框架能夠讓使用者只需更改遊戲規則,即可開始 AlphaZero 的 訓練模式。相較於 GitHub 相關開源碼中,Surag Nair 先生全部以 Python 語言開 發的 alpha-zero-general 程式,在突圍棋(Breakthrough)運行上,單執行緒速度效 能可提升77.8%。 此外,本論文另外實作並測試三個可能的改良方法,用於提升整體 AlphaZero 訓練流程的棋力。其修改點並不因不同棋類規則而有所不同,目的 在於讓後續能套用至通用型 AlphaZero 框架的棋類也能夠受益。分別是對訓練 資料進行增量的 Replay 方法、應用 MMoE(Multi-Gate Mixture-of-Experts)類神 經網路架構於 AlphaZero 中欲增強網路模型的預測能力,以及利用改良原版 AlphaZero 中如何贏得越快越好的 Quick Win 方法,將針對類神經網路的 Label 更改標記方式與蒙地卡羅樹搜尋演算法進行改良。. 關鍵詞:電腦對局、AlphaZero、突圍棋、類神經網路、深度學習. i.
(3) ABSTRACT In the field of artificial intelligence, many programs for computer games using AlphaZero approach outperform the other programs using traditional technics. However, we will have the similar and repeated development cost when starting from scratch to implement different game programs using AlphaZero framework. Our work is to implement an efficient and easy to use AlphaZero framework with C++ and Python programming languages. Users can start the whole AlphaZero training process immediately by only modifying the game module. Compared with the alpha-zero-general program written by Surag Nair in GitHub, we achieve 77.8% speedup in Breakthrough game. Further, we implement and test three possible improvements for AlphaZero approach. That includes the Replay method for augmented training data, the MMoE(Multi-Gate Mixture-of-Experts) method for enhancing neural network model, and the Quick Win method for learning how to win faster.. Key words: Computer games, AlphaZero, Breakthrough, Neural network, Deep learning. ii.
(4) 誌謝 在碩士兩年研究生涯中,首先感謝林順喜老師在研究上不辭辛勞的指導。 在學術研究方面常常指出自己沒有注意到的盲區,讓自己以不同的角度去思考 問題,在每一次的 meeting 中都能獲益良多。除此之外,也時常鼓勵我們,提 到雖然在學校的資源上並不如大公司那麼多,但也不要害怕與其抗衡。在老師 的教導下使自己在專業能力與處世胸襟上都有所提升。同時也感謝周信宏與陳 志昌口試委員的建議與指導,讓本論文更臻完美。 再來是在實驗室中,感謝志宏學長對學弟妹們的照顧。不管是在研究上給 了相當多有效的建議外,還是在日常事務、比賽準備等事情上都為我們處理得 毫無後顧之憂,讓我們可以專注在自己的研究上;感謝彥吉同學在自己剛從管 理學院跨考至資工所,專業能力仍較為欠缺時,推薦的各種書籍資料以及親自 教自己相關的知識讓自己快速成長,並且在研究方面也提供了很多很好的幫助; 感謝品儒、俊豪學長與律濃在許多的研究議題上都不斷地跟自己討論,讓我在 這些議題中有更深入的理解;感謝同個實驗室的同學以及學弟妹們,在研究的 路上除了一起精進奮鬥外,也增添了許多歡樂的色彩。 最後也是最重要的是感謝我的家人,在自己就讀碩士時可以心無旁騖的進 行研究,在研究的漫漫長夜中有家人作為後盾,才能努力堅持到現在即將完成 碩士學位。. iii.
(5) 目錄 第一章 緒論................................................................................................................... 1 1.1 研究背景.......................................................................................................... 1 1.2 研究目的.......................................................................................................... 5 第二章 文獻探討........................................................................................................... 6 2.1 類神經網路...................................................................................................... 6 2.2 蒙地卡羅樹搜索演算法.................................................................................. 7 2.3 AlphaZero ......................................................................................................... 8 2.4 MMoE ............................................................................................................... 9 第三章 方法與步驟..................................................................................................... 12 3.1 研究對象........................................................................................................ 12 3.1.1 TensorFlow........................................................................................... 12 3.1.2 Alpha-zero-general ............................................................................... 14 3.1.3 Breakthrough........................................................................................ 17 3.2 AZGC 程式設計 ............................................................................................. 19 3.2.1 AZGC 訓練流程 .................................................................................. 20 3.2.2 AZGC 模型比較流程 .......................................................................... 22 3.2.3 AZGC 類別說明 .................................................................................. 23 3.2.4 AZGC 主程式說明 .............................................................................. 26 3.2.5 Bitboard in AZGC ................................................................................ 29 3.3 Replay 資料增量於 AlphaZero ...................................................................... 33 3.4 MMoE 於 AlphaZero ...................................................................................... 40 3.5 Quick Win 於 AlphaZero ................................................................................ 45 3.5.1 Quick Win in MCTS ............................................................................ 47 3.5.2 Quick Win in Network ......................................................................... 51. iv.
(6) 3.5.3 Quick Win in MCTS and Network ...................................................... 54 第四章 實驗與結果..................................................................................................... 55 4.1 環境與參數設定............................................................................................ 55 4.1.1 環境設定............................................................................................. 55 4.1.2 參數設定............................................................................................. 56 4.2 架構驗證........................................................................................................ 57 4.2.1 TAAI 2018 ........................................................................................... 57 4.2.1 TCGA 2019 .......................................................................................... 58 4.3 架構速度........................................................................................................ 60 4.4 應用 Replay 資料增量之效果 ...................................................................... 62 4.5 應用 MMoE 之效果 ...................................................................................... 64 4.6 應用 Quick Win 之效果 ................................................................................ 65 4.6.1 Quick Win in MCTS ............................................................................ 65 4.6.2 Quick Win in Network ......................................................................... 69 4.6.3 Quick Win in MCTS and Network ...................................................... 72 第五章 結論與未來方向............................................................................................. 74 參考文獻....................................................................................................................... 76. v.
(7) 圖目錄 圖 2-1 MCTS 概述圖 .................................................................................................. 7 圖 2-2 AlphaZero 訓練架構圖 .................................................................................... 8 圖 2-3 Shared-bottom 模型 ......................................................................................... 9 圖 2-4 Multi-Gate MoE 模型 .................................................................................... 10 圖 3-1 Alpha-zero-genera 模組與訓練流程 ............................................................. 14 圖 3-2 Breakthrough 初始盤面 ................................................................................. 17 圖 3-3 Breakthrough 走步規則 ................................................................................. 18 圖 3-4 AZGC 訓練流程圖 ........................................................................................ 20 圖 3-5 AZGC 模型比較流程圖 ................................................................................ 22 圖 3-6 AZGC UML 類別圖 ...................................................................................... 23 圖 3-8 Breakthrough Bitboard 位置對應圖 .............................................................. 29 圖 3-9 Breakthrough Bitboard 初始盤面 .................................................................. 29 圖 3-10. 以 Bitboard 搜尋白棋合法走步虛擬碼 ...................................................... 30. 圖 3-11 Bitboard 中白棋右斜與左斜之非法走步 ................................................... 30 圖 3-12 Bitboard 白棋判別勝負虛擬碼 ................................................................... 31 圖 3-13. 白棋勝利或落敗之無號長整數 .................................................................. 31. 圖 3-14 AlphaZero 自我對下產生訓練資料之虛擬碼 ............................................ 33 圖 3-15 Replay 實作至自我對下之虛擬碼 .............................................................. 35 圖 3-16. 回合與 MCTS 勝率圖 ................................................................................. 36. 圖 3-17 Replay 資料增量方法之虛擬碼 .................................................................. 37 圖 3-18. 預設 AZGC 類神經網路架構圖 ................................................................. 41. 圖 3-19. 套用 MMoE 之 AlphaZero 網路架構圖 ..................................................... 43. 圖 3-20. 非最優勝利走步圖 ...................................................................................... 45. 圖 3-21 Quick Win MCTS ......................................................................................... 47. vi.
(8) 圖 3-22 (a) c = 7, M = 15 權重分布圖 (b) c = 10, M = 15 權重分布圖 ................ 49 圖 3-23 (a) c = 7, M = 27 權重分布圖 (b) c = 10, M = 27 權重分布圖 ................. 49 圖 3-24 (a) c = 8, S = 3 權重分布圖 (b) c = 8, S = 6 權重分布圖.......................... 49 圖 3-25 (a) c = 11, S = 3 權重分布圖 (b) c = 11, S = 6 權重分布圖 ...................... 50 圖 3-26 (a) c = 10, S = 3 權重分布圖 (b) c = 10, S = 6 權重分布圖...................... 50 圖 3-27 (a) c = 15, S = 3 權重分布圖 (b) c = 15, S = 6 權重分布圖...................... 50 圖 3-28 (a) DV-valueConcate 圖 (b) DV-layerConcate 圖 ....................................... 52 圖 3-29. 原版參數增量模型圖 .................................................................................. 53. 圖 4-1 TAAI 2018 與 TCGA 2019 參賽獎牌 ........................................................... 59 圖 4-2. 未 pre-trained 模型之 MCTS_V 值預測 ........................................................ 63. 圖 4-3 MMoE 架構實驗結果 .................................................................................... 64 圖 4-4 Quick Win in MCTS 公式(1)實驗結果 ......................................................... 65 圖 4-5 Quick Win in MCTS 公式(2)實驗結果之 1 .................................................. 66 圖 4-6 Quick Win in MCTS 公式(2)實驗結果之 2 .................................................. 66 圖 4-7 Quick Win in MCTS 公式(3)實驗結果 ......................................................... 67 圖 4-8 Quick Win in MCTS 公式(4)實驗結果 ......................................................... 67 圖 4-9 DV-valueConcate 與 DV-layerConcate 模型實驗結果 ................................. 69 圖 4-10 DV-valueConcate 與 DV-layerConcate 模型中不同 t 值之實驗結果 ........ 70 圖 4-11. 純更改訓練資料 z 值實驗結果................................................................... 71. 圖 4-12 Quick Win in MCTS and Network 實驗結果 .............................................. 72. vii.
(9) 表目錄 表 3-1. 預設 AZGC 網路架構參數表 ....................................................................... 42. 表 3-2. 套用 MMoE 之 AlphaZero 網路架構參數表 ............................................... 43. 表 4-1. 環境設置 ........................................................................................................ 55. 表 4-2. 實驗參數設定表 ............................................................................................ 56. 表 4-3 TAAI 2018 對戰表 ......................................................................................... 57 表 4-4 TCGA 2019 對戰表........................................................................................ 58 表 4-5. 架構速度比較表 ............................................................................................ 60. 表 4-6. 速度與棋力關係表 ........................................................................................ 61. 表 4-7 Replay 方法於未 pre-trained 模型實驗結果 ................................................ 62 表 4-8 Replay 方法於 pre-trained 模型實驗結果 .................................................... 63. viii.
(10) 第一章 緒論 1.1 研究背景 在人工智慧的範疇中,電腦對局遊戲(Computer games)一直都佔有不可或缺 的一席。自 1997 年深藍打敗世界西洋棋棋王以來,人們致力於提升各種電腦對 局遊戲程式的實力,作為人工智慧智力的展現。以往使用的各種方法,包含設 計良好的開局庫,使得對局初期佔有優勢。設計適合的搜尋樹技術如 alpha-beta search(ABS)[25]、Monte-Carlo tree search(MCTS)[14]等,還有藉由職業棋手針 對棋盤上的盤面特徵,以人工的方式去設計各種審局函數,藉此使搜尋樹能夠 進行更有效率地搜索,進而找到更佳的走步。以及使用殘局庫使得終盤時能快 速取得正確的盤面結果等,運用這些方法提升對局程式實力。長久以雖然對於 開局庫、搜尋樹、同形表、殘局庫等各方面的技術不斷改良,但於 2016 年之前 仍未發現任何一種技術或是技術的組合,能夠應於各種不同的電腦對局遊戲並 遠遠領先其餘方法,獨占鰲頭。. 然而在 2016 年由 Google DeepMind 團隊所研發的 AlphaGo 程式,於所有 常見棋類中複雜度最高的棋類–圍棋,打敗過去十年最多頭銜、當時世界排名 第二的李世石。其論文[26]也因此登上國際頂級期刊''Nature''。此次契機不僅讓 我們看到在電腦對局遊戲中,深度學習中類神經網路與蒙地卡羅樹搜索結合的 威力,更掀起了學、業界探討人工智慧技術的巨大波瀾。隨著時間不斷演進, 2017 年,AlphaGo 研發團隊 DeepMind 的新版本 AlphaGo Zero,其論文[28]再 1.
(11) 次登上''Nature'',為世界投下震撼彈。此次的版本 AlphaGo Zero 在只掌握最基 本棋局規則的情況下,完全從零開始自我對弈進行強化學習(Reinforcement learning),不再使用人類棋譜來訓練,完全捨棄了過去圍棋專家於圍棋棋盤上 數百年來的先備知識,並在成績上以 100:0 全勝之姿大贏上一個版本 AlphaGo 用棋譜進行監督式學習(Supervised learning)的訓練過程。這種技術架構不僅解 決了在人工智慧領域中,訓練資料常常不足,或是取得成本過高的問題,也為 我們證明了目前在電腦對局領域中,傳統對局方法完全無法比擬、超越人類最 高水平專家的實力。 同年年末,DeepMind 再提出 AlphaZero[27],以 AlphaGo Zero 中同一套方 法的技術架構應用於日本將棋、西洋棋,並在這兩種領域與各自傳統方法上公 認的頂尖程式對戰中,各個項目以壓倒性的勝率獨占鰲頭,使得這一種訓練架 構成為當今電腦對局程式設計顯學。 在開發如 AlphaZero 訓練流程的電腦對局程式時,雖然各項棋類規則各有 不一,但在此訓練架構下,有許多開發步驟將不斷重複。如整個訓練時,盤面 資料的收集流程、類神經網路的建置與訓練、類神經網路模型的優劣比較等。 這些步驟內容並不會因棋類的規則而有所不同,因此整體來說每個人從頭開發 新的棋類遊戲將會有許多重複的前置開發成本。而較佳的解決方法是先開發出 一個通用型的 AlphaZero 架構,此架構可以因應不同棋類的遊戲規則,進行類 神經網路模型的訓練與實際對戰,除此之外在此通用型架構下,若是有較為通. 2.
(12) 用化的演算法改進,也能夠使未來套用此架構的各種遊戲受益。 目 前 在 GitHub 相 關 開 源 碼 中 , 存 在 由 Surag Nair 先 生 所 開 發 的 alpha-zero-general 程式[31]。其利用高階程式語言 Python 具有簡潔的語法風格 與高度可讀性的特性,明確地勾勒出運行 AlphaZero 訓練時各個模組之間的分 工,搭建出通俗易懂的架構,使得開發者能夠迅速理解模組之間的相互關係與 程式碼的運行流程,並使得使用者能夠輕易地實現一種對局遊戲規則並進行訓 練與對局。在此專案中類似讚賞功能的星星也多達將近 1400 個,若是以整個 GitHub 開源社區中,星星數大於 10 的所有專案作為比較基礎,其受讚賞程度 排名為前 2%之內。由此可看出此種通用型 AlphaZero 架構對於對局程式開發 者的方便性與喜好程度相當之高。 然而當開發者使用 alpha-zero-general 專案欲更進一步提升整體效能,不論 是欲增加對局過程中每一步蒙地卡羅樹搜尋(MCTS)次數增進對局棋力,抑或是 為了進行類神經網路模型訓練,須加速產生自我對下的訓練盤面時間時,將受 限於 Python 語言先天上運行效率較 C 語言低落的缺點,效能上與 C 語言相比 有相當大的差距。在當今電腦對局程式的顯學仍然以類神經網路與蒙地卡羅樹 搜尋結合的研發模式下,雖然以 DeepMind 論文中蒙地卡羅樹搜尋每一步模擬 次數 800 的設定來說並不是非常巨量[27],Python 語言所開發的訓練框架仍有 辦法進行復現。但整體的訓練量相比於一般人的電腦仍是望塵莫及,且未來也 有可能與傳統的各項搜尋技術如 alpha-beta search 等技術進行結合,這些技術的. 3.
(13) 強度也將受限於 Python 的執行效率。 而在 GitHub 上現存以 C 語言開發的相關開源碼中,只有一支由 Adepierre 以 C++與深度學習工具 Caffe[12]開發之 Caffe_AlphaZero 程式較為符合通用型 AlphaZero 框架的概念,但其受讚賞的星星數僅只九顆。與由 Surag Nair 先生所 開發的 alpha-zero-general 程式相比較不受歡迎,可能的原因在於 C++語言與 Caffe 工具本身在當今追求開發速度與程式可讀性上,相比 Python 與 Python 版 之 TensorFlow 套件來說更為緩慢與困難,除非較為進階的棋類開發者才會關注 到 此 開 源 專 案 。 加 上 以 專 案 開 源 時 間 點 來 看 , GitHub 社 區 中 已 經 存 在 alpha-zero-general 程式,一般使用者以盤面複雜度較小的棋類進行開發並不需 要特別追求效率,進而更改開發語言。此外,程式的可讀性與後續開發者修改 容 易 度 不 如 alpha-zero-general 。 原 因 在 於 原 本 AlphaZero 訓 練 框 架 中 , Caffe_AlphaZero 除了蒙地卡羅樹搜尋有獨立寫出一個物件模組外,其餘如訓練 流程的控制、類神經網路的訓練與預測、類神經網路模型優劣比較,都全部寫 入一個 AlphaZero 物件中。在未來開發者的理解與進階開發上,較不容易迅速 掌握整體框架的流程與針對特定部分進行改善。最後則是深度學習工具 Caffe 雖然於 2013 年即開源發佈,是歷史相當悠久的類神經網路建構工具,但在 2017 年 3 月 Caffe 升級版 Caffe2 的出現以及 2018 年 4 月 Caffe2 併入臉書 PyTorch 深度學習架構之下,未來 Caffe 的維護與支援也將大打折扣。考慮到開發通用 型 AlphaZero 框架未來使用者的方便性與維護性時,因此考慮不使用 Caffe。. 4.
(14) 1.2 研究目的 故本研究目的為如何以 C++語言實作遊戲規則與搜尋樹處理,以及 Python 語言中的類神經網路建構工具 TensorFlow 實作類神經網路訓練,兩者結合建構 出易讀且運行效率較高的通用型 AlphaZero 架構的程式。在 C++實作部分盡可 能地保留原本 alpha-zero-general 程式架構良好的修改與易讀性,使得未來開發 者能夠迅速研發出各種不同規則及改良演算法的 AlphaZero 對局程式,並且大 幅減少研發過程中,不因不同棋類而有所改變的高重複性研發成本,同時也保 有 C 語言的運行效率優勢。而本文後續將以 AZGC(AlphaZero General C)代表以 C++開發之 AlphaZero General 框架,以節省版面空間。 除此之外,本研究也實作並測試三項可能改進 AlphaZero 訓練成效的方 法。在設計這三項方法時,各項修改點並不影響 AlphaZero 架構的通用性,目 的在於若是這些方法能夠達到成效,則對於後續套用至本架構中的所有遊戲都 能夠有所獲益。分別是對於訓練盤面資料進行增量的 Replay 方法、應用 MMoE(Multi-Gate Mixture-of-Experts)[18]類神經網路架構於 AlphaZero 中欲增 強網路模型的預測能力、以及利用改良原版 AlphaZero 中如何贏得越快越好的 Quick Win 方法[6],將針對類神經網路 Label 標記更改與蒙地卡羅樹展開進行 改良。. 5.
(15) 第二章 文獻探討 2.1 類神經網路 類神經網路最早從 1943 年,由 Warren Mculloch 與 Walter Pitts[19]所提出。 當時用以模擬人類生理上神經元反應的過程,並於 1958 年 Rosenblatt 發明了感 知器(perceptron)算法,能夠對數據進行分類[22]。然而 1969 年時,由 Minsky 與 Paper 發現類神經網路本質上為線性分類,連最簡單的 XOR 問題都無法進行 分類。直至 1986 年,Hinton 發明了多層感知器(MLP)的反向回饋算法[23],使 得能夠建構較深的類神經網路處理複雜的分類問題,LeCun 並於 1989 年成功應 用於手寫辨識取得良效[16]。然而在當時理論與硬體尚未發展成熟的環境下, 類神經網路的發展又逐漸消聲匿跡,直至近十年隨著硬體運算能力的提高、 GPU(Graphics Processing Unit)的問世,類神經網路有了硬體的加速再加上一些 類神經網路理論的突破如 ReLU 激活函數[15]、Batch normalization[9]等,使得 類神經網路的能力大幅提高,成為現代分類器應用技術的主流。. 6.
(16) 2.2 蒙地卡羅樹搜索演算法 MCTS(Monte Carlo tree search)最早於 2006 年由 Remi Coulom 將 Monte Carlo method 方法應用於遊戲樹搜索上[20],同年,由 Levente Kocsis 與 Csaba Szepesvári 發表了遊戲樹搜索公式 UCT[14]。兩年後應用此種方法的程式 MoGo,. 於九路圍棋應用中能達到段位水準[4]。自此 MCTS 被應用在許多遊戲上,如六 貫棋[3]、撲克[13]、卡坦島[11]等。 MCTS 主要分成四個階段如圖 2-1[5]。在 Selection 階段時,將會根據 UCT 公式在各合法走步中選擇最好走步的同時,也有機會去選擇其他尚未走過的棋 步。當 Selection 最後找到的葉節點遊戲仍未結束時,則建立此節點作為新展開 的一個節點,並對此節點作優劣的評估。最後利用評估完的優劣值往上回傳對 每個經過的節點作 UCT 公式的更新。如此重複四個動作便能得到根節點中拜訪 次數最多的走步,而因該走步相對優秀才能在利用與探索的平衡中,經常被 UCT 公式選擇進行拜訪,因此得出此步為當前盤面中最優的走步。. 圖 2-1. MCTS 概述圖. 7.
(17) 2.3 AlphaZero 2017 年由 DeepMind 所提出的 AlphaZero[27],是以 AlphaGo Zero 中同一 套方法的技術架構稍微修改後應用於兩種不同的棋類,並在這兩種領域與各自 傳統方法上公認頂尖的程式對戰中,日本將棋以 90 勝 2 和 8 敗打敗 Elmo,西 洋棋以 28 勝 72 和 0 敗打敗 Stockfish。由於在這幾個項目以壓倒性的勝率獨占 鰲頭,使得此種訓練架構成為當今電腦對局程式設計顯學。 其訓練架構如圖 2-2[27],主要分為兩個階段。分別是類神經網路模型自我 對下產生訓練資料後,再以這些資料進行訓練。每一次迭代模型訓練得更強, 自我對下便能走出更好的走步,周而復始的加強網路模型的棋力。. 圖 2-2. AlphaZero 訓練架構圖. 8.
(18) 2.4 MMoE 在近幾年,類神經網路與多任務學習方法(Multi-task learning)的結合成功應 用於推薦系統[2]。這些推薦系統通常會一次性地對於多樣任務去進行預測,例 如藉由使用者的自我簡介,去預測某一項訊息使用者是否會喜歡、評論、點讚 等動作。這些多任務學習模型[21]通常會使用 Shared-bottom 如圖 2-3 的方式, 藉由把不同的任務結合到單一的類神經網路架構中一起訓練,在共享權重的 Shared-bottom 中以取得泛化能力更好的低階特徵,再由各自任務的 Tower 因應 任務的不同再提取出適合該任務的高階特徵,並輸出結果,讓網路模型同時學 習多種任務減少分開訓練模型的時間,並且提高各任務預測能力的穩定性。. 圖 2-3. Shared-bottom 模型. 9.
(19) 然而,在多任務學習中把所有任務一起學習也並非總是會比單獨訓練單一 任務效果來得好,其結果將受到不同任務的關係相關性影響[7][29]。但往往難 以 去 鑑 定 任 務 之 間 的 關 係 性 , 故 Jiaqi Ma 提 出 MMoE(Multi-Gate Mixture-of-Experts)的類神經網路架構[18],希望能夠在共享參數以取得較穩定 的泛化能力的同時,也降低網路模型在一起學習不同種任務時,任務之間不同 的相關性對性能的影響。MMoE 是由多個 MoE(Mixture-of-Experts)結構所組成 如圖 2-4。. 圖 2-4. Multi-Gate MoE 模型. 10.
(20) 其核心概念在於把原本較大的 Shared-bottom 分成多個較小且獨立的 Expert。 Gate 會根據 Input 輸出純量,純量的個數將根據 Expert 的數量而改變,而純量 還會再經過一次 Softmax 的激活函式以保證這些純量加總和為 1。最後這些純 量將對不同的 Expert 輸出進行加權,並把加權後的 Expert 特徵作加總,輸入進 特定任務的 Tower 進行更高階的特徵提取。如此一來,不同任務的 Gate 可以根 據自己任務的特殊性,選擇某特定的 Expert 進行加權,若任務 A 與任務 B 的 相關性實際上並不高時,原本使用 Shared-bottom 模型強制共享參數訊息,可能 造成的性能影響便就此減緩。此種類神經網路架構能在夠共享特徵的同時,也 給予不同任務間獨立處理特徵的能力,並且整體上僅只有增加 Gate 的少量參數 與運算量。. 11.
(21) 第三章 方法與步驟 3.1 研究對象 3.1.1 TensorFlow 由 Google 所開發之深度學習框架,於 2015 年正式開源後[1],已於現今各 個深度學習工具中獨占鰲頭[32],在各大討論社區如 GitHub 或 Stack Overflow 都擁有相當活躍的用戶。其核心計算底層使用 C++語言進行效率的優化,不僅 可以降低配置於內存記憶體與 CPU 資源較差的設備如手機、嵌入式系統的限制。 加上也支援多個程式語言的使用接口,如 Python、Java、Go、Haskell 等,對於 使用者來說建構類神經網路模型也相當方便。尤其以 Python API 較廣為所用, 原因除了本身在 Python 所追求的明確、簡單的風格下使得 API 容易使用與程式 碼易讀性高外。更在於此環境中,TensorFlow 有較其他工具為完整的反向傳播 梯度自動求導,使得類神經網路的建構者在架設許多不同類型的類神經層時, 能夠較為輕鬆、快速的完成模型的建置與訓練。另外,整個 Python 的生態活躍, 有著各式不同的工具包能夠互相支援。 若是直接使用 TensorFlow C++接口,則會有類神經網路建置相當繁複的情 況。原因在於 TensorFlow 以 C 底層進行計算時,是以各個節點(nodes)與邊(edges) 所組成的有向圖。其中節點代表輸入、輸出或數學操作,而邊則代表數值的流 量即為張量(tensor)。故以 C++接口進行類神經網路建置時,需要各別定義每層 網路的每個節點的數學操作以及導數,對於開發者有著較深的數學知識要求。 12.
(22) 考量到 AZGC 的通用程度,故使用 Python 版本的 API,為了與 C++程式做連接, 將會把 Python 版的類神經網路模型轉成 C 語言可讀取的.pb 檔案,再利用此檔 案自我對下產生訓練資料後,以 Python 版的 API 進行模型訓練。. 13.
(23) 3.1.2 Alpha-zero-general 由 Surag Nair 先生以 Python 所開發的 alpha-zero-general 程式,標榜能夠套 用進任何遊戲的 AlphaZero 框架,其明確地勾勒出運行 AlphaZero 訓練時各個 模組之間的分工,搭建出通俗易懂的架構,如圖 3-1,使得開發者能夠輕易地 實現一種對局遊戲規則並進行訓練與對局。. 圖 3-1. Alpha-zero-genera 模組與訓練流程. 14.
(24) 訓練流程中主要的模組有四個,分別為 Game、MCTS、Net Wrapper 以及 Coach,當使用者想要實作出不同規則的 AlphaZero 對局程式,只需要更改 Game 模組即可,相當便利。此外,在比較模型時則是另外使用 Arena 模組,以下將 會概述主要模組的運行功能。 (1) 在 Game 類別中,此模組能夠因應使用者實作的不同遊戲規則,在確 保符合預設的輸入輸出格式的前提下,只更改 Game 類別後便能直接 套用 AlphaZero 的訓練模式。 (2) 在 Coach 類別中,此模組為操作整個 AlphaZero 訓練流程,包含何時 開始類神經網路自我對下產生訓練資料、對訓練資料做增量處理、儲 存及讀取訓練資料、訓練類神經網路、比較新舊類神經網路模型強度、 何時結束模型訓練等。 (3) 在 MCTS 類別中,此模組用於程式對局中針對每一盤面進行蒙地卡羅 樹的展開,並且輸出該盤面由 MCTS 展開所有合法走步的拜訪次數分 布,用此拜訪次數的分布作為類神經網路學習的 Policy 向量,而之後 Coach 再從此向量選擇某一走步繼續對局。 (4) 在 Net Wrapper 類別中,此模組用於定義類神經網路模型的架構、類 神經網路模型的訓練、盤面預測以及類神經網路模型的儲存與讀取的 動作。使用在於類神經網路模型初始化、MCTS 搜尋樹展開新的節點 被呼叫來做盤面預測,以及當自我對下產生的訓練盤面足夠時,再被. 15.
(25) Coach 呼叫進行類神經網路模型的訓練與儲存。 (5) 在 Arena 類別中,此模組會讀取兩個不同的類神經網路模型進行對戰, 用於比較類神經網路模型之優劣。此外,使用者也可輕易的匯入不同 的搜尋樹演算法進入此模組中進行對戰,以此比較不同的搜尋演算 法。. 16.
(26) 3.1.3 Breakthrough Breakthrough 是由 Dan TroyKa 於 2000 年所發明,並以最簡單的遊戲規則、 但需要複雜且精密的遊戲策略隔年贏得 8×8 遊戲設計大賽(2001 8x8 Game Design Competition)[8]。雖然是為較新的棋類,但也有 許多 的研究者針對 Breakthrough 進行蒙地卡羅樹搜索演算法與殘局庫的改良[10][17],而至今已被 破解的盤面有 6×5、5×5 及 3×7[24]。 在遊戲的規則方面,初始盤面如圖 3-2[30]所示,在 8×8 的棋盤上分別為黑 棋與白棋,雙方各有十六顆棋子位於靠近己方的後兩排。遊戲的結束條件為己 方任何一顆棋子衝入敵方最後一排為勝、反之為負,以及任一方所有棋子被吃 光無子可動為負。. 圖 3-2. Breakthrough 初始盤面. 移動的走步規則如以圖 3-3[30]所示,任一顆子只能往正前、左前、右前方 移動,無法後退,若是正前方有敵方棋子,則無法移動。例如位於 f3 黑棋無法. 17.
(27) 前進至 f2,但左前或右前方有敵方棋子則可以直接吃掉並前進,如位於 f3 黑棋 可以前進吃掉 e2 或 g2 的白棋。. 圖 3-3. Breakthrough 走步規則. 綜合上述 Breakthrough 規則,可以看出此棋類的遊戲特性中,強調攻守兼 備的遊戲策略,除了必須防堵敵方棋子外也需要創造自己的前進路線。在高強 度的對局中,雙方通常都會先擺好陣型,避免橫衝直撞的被白白吃掉棋子,兼 顧防守的同時使棋子前進。此種模式如同圍棋前中盤的布局,至後盤的攻殺, 使得對於傳統電腦對局技術中,人類在設計審局函數較難以設計出同時兼顧防 守、進攻及後續攻殺的函式。而在 AlphaZero 訓練架構中,類神經網路模型良 好的特徵擷取與高準確性的價值預測,可以精準地找出當前盤面的價值,並反 應在此棋類對局程式的強度上,故以 Breakthrough 遊戲作為 AZGC 後續開發與 測試的棋類。. 18.
(28) 3.2 AZGC 程式設計 本小節首先將會說明 AZGC 中,在成功編譯以 alpha-zero-general 為架構修 改基底的 C++執行程式後,訓練運行流程圖與類神經網路模型比較流程圖。以 及 藉 由 C++ 程 式語 言與 TensorFlow 深 度 學 習 工具 , 以 Unified Modeling Language(UML) 類別圖(Class Diagram)及序列圖(Sequence Diagram),概述此框 架下各個模組的功能與模組彼此之間的相互關係。最後則是 AZGC 框架中各模 組以多型(polymorphism)的方式,支援以 Bitboard 類別作為遊戲盤面的輸入與輸 出。利用 C++語言在位元處理上效能較好的特性,提升處理遊戲規則時的運行 效率,後續將會以 Breakthrough 遊戲作為例子進行說明。. 19.
(29) 3.2.1 AZGC 訓練流程. 圖 3-4. AZGC 訓練流程圖. 針對圖 3-4 相關步驟說明如下: (1) 開啟 AlphaZero 訓練模式時,先使用 Python 語言的主程式,對 Python 版本的類神經網路模型進行初始化,若是需要讀取之前訓練過的類神 經網路模型,則改為讀取網路模型且不需要對模型進行初始化。 (2) 對 Python 版本的類神經網路模型轉換成 C++版本 TensorFlow 可讀取 的模型.pb 檔案並將其儲存至當前的資料夾。. 20.
(30) (3) 於 Python 主程式中開啟 C++自我對下的執行檔案。 (4) C++自我對下的執行檔案讀取步驟 2 的 C++版本類神經網路模型進行 自我對下,產生出一個迭代的訓練資料,預設一個迭代會自我對下 100 盤遊戲,將此 100 盤遊戲的盤面訓練資料儲存為. json 檔案作至當前資 料夾,最後自動關閉此 C++執行檔案。 (5) 於 Python 主程式中讀取步驟 4 的.json 訓練資料,並對 Python 版本的 類神經網路進行訓練更新。 (6) 若是未達訓練迭代次數則返回步驟 2,否則結束整個 AlphaZero 訓練 流程。. 21.
(31) 3.2.2 AZGC 模型比較流程. 圖 3-5. AZGC 模型比較流程圖. 針對圖 3-5 相關步驟說明如下: (1) 在類神經網路模型比較之前,需先將欲比較的網路模型轉換成 C++版 本 TensorFlow 可讀取的.pb 檔案。 (2) 啟用 C++的 Pit 執行檔讀取步驟 1 所產生的兩個類神經網路模型。 (3) 進行先後手互換的對戰,為了避免每一盤雙方類神經網路模型都下出 一模一樣的步數,導致只有前兩盤交換先後手有不同的結果。在每一 盤對戰結束後都不清除 MCTS 展開過的搜尋樹,避免一成不變的走 法。 (4) 對戰設定的局數後顯示模型比較的結果。. 22.
(32) 3.2.3 AZGC 類別說明. Args(C++). Game(C++). +numIters: int +numEps: int +tempThreshold: int +numMCTSSims: int +arenaCompare: int +Cpuct: float +loadModel: bool +loadFolderFile: String +numItersForExamplesHistory:int. +getInitBoard(): vector<vector<int>> +getBoardSize(): pair<int, int> +getNextState(board: vector<vector<int>>, player: int, action:int): pair(vector<vector<int>>, int) +getValidMoves(board: vector<vector<int>>, player: int): vector<int> +getGameEnded(board: vector<vector<int>>, player: int): float +getCannonicalForm(board: vector<vector<int>>, player: int): vector<vector<int>> +getSymmetries(board: vector<vector<int>>, pi: vector<int>): vector< pair< vector<vector<int>>, vector<int> > > +StringRepresentation(board: array): String. Network Wrapper(C++) +loadModel(filename: String) +predict(board:vector<vector<int>>): pair<vector<float>, float >. Coach(C++) +game: Game object +args: Args object +mcts: MCTS object +trainExamplesHistory: deque<tuple< vector<vector<int>>, vector<float>, int> > +executeEpisode(): deque<tuple< vector<vector<int>>, vector<float>, int> > +saveJson(). Arena(C++) +game: Game object +args: Args object +shared_ptr<Player> p1 +shared_ptr<Player> p2 +display: bool +playGame(): int +playGames(arenaCompare: int): tuple(int, int, int). MCTS(C++) +game: Game object +args: Args object +Qsa: unordered_map<string, float> +Nsa: unordered_map<string, int> +Ns: unordered_map<string, int> +Ps: unordered_map<string, vector<float>> +Es: unordered_map<string, float> +Vs: unordered_map<string, vector<int> > +randomEngine: std::mt19937 +predict: function(cannonicalForm: vector<vector<int>>):pair<pi: vector<float>, v: float> +getActionProb(cannonicalForm: vector<vector<int>>, temp: int): vector<float> +search(cannonicalForm: vector<vector<int>>, curPlayer: int):float +addDirichlet(cannonicalForm: vector<vector<int>>). 圖 3-6. Network Wrapper(Python) +trainNet() +savePyModel() +loadPyModel(filename: String) +saveCModel() +loadJson() +saveExamples() +loadExamples(). AZGC UML 類別圖. 23.
(33) 將針對圖 3-6 中六大模組相關功能以及與 alpha-zero-general 不同之處進行 說明如下: (1) 在 Game 類 別 中 , 此 模 組 為 使 用 者 實 作 不同 遊 戲 規 則 來 套 用 至 AlphaZero 訓練架構的模組。C++作為強型別的語言需要明確定義輸入 輸出的盤面格式,而目前此架構支援一個二維陣列的盤面或是 Bitboard 類別。若是使用者需要如 DeepMind 論文中描述輸入盤面為 包含歷史盤面的多個二維陣列,則除了 Game 類別以外,MCTS 的某 些方法輸入輸出型別也需要同時更改。而使用者在使用 Bitboard 作為 盤面傳輸時,需要額外在此模組再自行定義 Bitboard 轉成二維陣列的 方法,轉成二維陣列的盤面才能作為訓練資料對網路模型進行訓練。 (2) 在 Coach 類別中,此模組為在自我對下後產生一個迭代的盤面訓練資 料,並把訓練資料儲存成.json 格式供 Python 版的類神經網路模型訓 練。而之所以選擇以.json 作為資料傳輸的格式在於其是以純文字來儲 存資料,不僅儲存量相當輕便且對各語言的相容性高,加上格式也相 當容易了解、易於修改與閱讀,以及可儲存大部分常見的資料結構如 陣列、字串甚至是物件。若是使用者在盤面傳輸時是使用 Bitboard 則 須注意儲存訓練資料時需要呼叫 Game 類別自定義中的方法,把 Bitboard 轉換成二維陣列。 (3) 在 MCTS 類別中,此模組用於程式對局中蒙地卡羅樹的展開,因應. 24.
(34) C++強型別的特性,目前支援了對一個二維陣列的盤面或 Bitboard 類 別的蒙地卡羅樹展開。 (4) 在 Python Network Wrapper 類別中,此模組用於定義類神經網路模型、 初始化、訓練、儲存及轉換成 C++版本可讀取的.pb 檔案功能。而 C++ 版本的 TensorFlow 在讀取.pb 檔案後對盤面進行預測時,因為需要明 確的指出欲輸出節點的名字,故在此模組一開始定義網路模型架構時, 先行定義好各節點的名字後續處理較為方便。若是不自己定義名字雖 然 TensorFlow 會自動定義,但之後若想要輸出某一個節點的值則需要 再回去找節點的名字。 (5) 在 C++版本的 Network Wrapper 中,此模組用於讀取類神經網路模型 與盤面預測,讀取網路模型時不需要先定義網路模型的架構,但在盤 面預測時需要指定該模型中 V 值與 Policy 值節點的名稱才能輸出。讀 取的.pb 檔案已把網路模型所有的權重寫成常數的形式,故無法直接 以 C 版本的模式進行訓練。 (6) 在 Arena 類別中,此模組匯入不同的搜尋樹方法或類神經網路模型進 行對戰,用於比較方法或類神經網路模型之優劣。 (7) 在 Args 類別中,此模組定義了在程式運行中所需的各項參數,如每一 步 MCTS 模擬的次數、MCTS 中的𝐶𝑝𝑢𝑐𝑡 常數、模型的儲存路徑及每個 迭代自我對下多少盤遊戲等。. 25.
(35) 3.2.4 AZGC 主程式說明. Main (Python). Network Wrapper (Python) 迴圈. [numIters]. saveCModel() BT.exe (C++). <<Create>>. Network Wrapper (C++). <<Create>> loadModel() 迴圈. <<Create>>. [numEps]. MCTS (C++) predict() (v, pi). ExcuteEpisode(). saveJson() loadJson() trainExamplesHistory.append() 選用. trainExamplesHistory.pop(0) [len(trainExamplesHistory)>numItersForTrainExamplesHistory] saveTrainExamples() train(trainExamplesHistory) savePyModel(). 圖 3-7. AZGC 主程式序列圖. 將針對圖 3-7 中,說明當主程式開始執行時,各模組之間的方法呼叫關係 如下:. 26.
(36) (1) 呼叫 Python 語言的主程式,同時創建 Network Wrapper 模組並對類神 經網路模型初始化後,開啟 AlphaZero 的訓練流程。 (2) 呼叫 Python 版 Network Wrapper 模組中的 saveCModel 方法,把 Python TensorFlow 的網路模型儲存成 C 版本 TensorFlow 可讀取之檔案。 (3) 呼叫自我對下的 BT 執行檔以及創建 C++版本的 Network Wrapper 模 組。 (4) 藉由 C++版本 Network Wrapper 去讀取步驟(2)所產生出來的網路模 型。 (5) 創建一個新的 MCTS 模組,利用此模組以及 Network Wrapper 中預測 盤面 v 值與 pi 值的 predict 方法,進行 MCTS 完成一局遊戲的自我對 下。 (6) 根據 numEps 參數重複執行步驟(5),直至累積足夠的自我對下局數。 (7) 把步驟(5)及(6)所產生出來的盤面資訊作為此迭代的訓練資料,儲存 成.json 的格式。 (8) 主程式藉由呼叫 Network Wrapper 模組中的 loadJson 方法,去讀取步 驟(7)所產生之訓練資料,並加入歷史訓練資料 trainExamplesHistory 中。 (9) 若是步驟(8)儲存後的歷史資料過多,則刪除最舊的一組訓練資料。 (10) 呼叫 Network Wrapper 模組中的 saveTrainExamples 方法,儲存最新的. 27.
(37) 訓練資料集以備後續若是要從中斷的模型開始訓練時,所需要的訓練 資料。 (11) 呼叫 Network Wrapper 模組中的 train 方法,利用儲存的訓練資料對當 前的網路模型進行訓練。 (12) 呼叫 Network Wrapper 模組中的 savePyModel 方法,將步驟(11)中訓練 出來的新網路模型進行儲存,後續可以從此模型繼續訓練或比較。從 步驟(2)至此完成一個迭代的訓練流程。 (13) 根據 numIters 參數重複步驟(2)至(12),完成 AlphaZero 的訓練流程。. 28.
(38) 3.2.5 Bitboard in AZGC 以 Breakthrough 的 8×8 棋盤大小,恰好能夠以一個無號長整數(unsigned long) 進行表示,非常適合使用 Bitboard,而棋盤與 Bitboard 的位置對應如圖 3-8。. 圖 3-8. Breakthrough Bitboard 位置對應圖. 而 Bitboard 類別中,一共會有兩個無號長整數 white 與 black,分別代表的 是白方及黑方各自的所有棋子在棋盤上的位置,如圖 3-9。後續在處理遊戲規 則時,便可利用此二數以有效率的位元運算方式對盤面進行處理。. 圖 3-9. Breakthrough Bitboard 初始盤面. 29.
(39) 若以白棋尋找當前盤面的所有合法走步為例,其虛擬碼如圖 3-10 及圖 3-11 所述。. 圖 3-10. 圖 3-11. 以 Bitboard 搜尋白棋合法走步虛擬碼. Bitboard 中白棋右斜與左斜之非法走步. 我們對 white 與 black 作 OR 的運算後,即可得出雙方都未落子的空位 empty。 以往前走步的移動來看,我們只需對 white 右移 8 個 bit 並與 empty 作 AND 運 算後,在 forward 這個無號長整數中,值為 1 的位元即為所有白棋可以合法往 前走步的位置索引值;而以右斜東北方走步的移動來看,對 white 右移 7 個 bit 後,為了避免棋盤中第 7 個 column 的棋子走到第 0 個 column,如圖 3-8 中位. 30.
(40) 置 55 的棋子走到位置 48,我們還需要以 fill_Col_0 的無號長整數進行非法走步 的過濾,以及避免在走步的同時吃掉己方的棋子,也需要再對原本的位置 white 作一次 NOT 與 AND 的運算。如此一來得到的 northEast 中,值為 1 的位元同 樣即是所有白棋可以合法往右斜前進的位置索引值;以及左斜的走步尋找也是 以同樣的概念進行操作得到 northWest。 此外,若同樣的以白棋為例,判別當前盤面是勝或負的虛擬碼如圖 3-12 及 圖 3-13。. 圖 3-12. Bitboard 白棋判別勝負虛擬碼. 圖 3-13. 白棋勝利或落敗之無號長整數. 31.
(41) 在判別白方是否落敗的操作上,用記錄黑方棋子的 black 對 blackReachEnd 作 AND 的運算,確認黑方棋子有沒有達到白方底線的位置;或是用記錄白方 棋子的 white 與無號長整數的最大值作 AND 後值是否為 0,確認白方在場上仍 是否存在任何一顆棋子。而在判別白方是否勝利的操作上,則只需要以 white 與 whiteReachEnd 作 OR 運算,確認是否有白方棋子到達底線即可。 由上述例子可知,Bitboard 在合適的遊戲棋盤大小中,規則的處理上相當 有效率,因此在 AZGC 各模組中都支援了 Bitboard 類別的輸入與輸出。. 32.
(42) 3.3 Replay 資料增量於 AlphaZero 在 AlphaZero 論文中,為了因應同樣的訓練流程在不同遊戲如西洋棋、將 棋棋盤並非對稱的特性,故取消較早之前實作在 AlphaGo 中,把對訓練資料進 行八個方向對稱的資料增量作法。圖 3-14 為一般 AlphaZero 產生一局對戰訓練 資料的虛擬碼。在 AlphaZero 的訓練流程中,自我對下產生訓練資料是最花費 時間的一環,故本論文提出新的資料增量方式,並不只是單純地把訓練資料進 行鏡像複製處理,而且也能適用於大部分各種不同規則的遊戲以滿足 AlphaZero 的通用性。. 圖 3-14. AlphaZero 自我對下產生訓練資料之虛擬碼. 本方法的概念在於,一般棋手下完一整盤棋時,會對此整盤棋進行復盤,. 33.
(43) 也就是從遊戲開局到結束進行檢視,思考這整盤棋的哪一個時間點、哪一步是 導致會輸或贏的關鍵。如果原本這一盤棋本來贏了,那麼進行復盤時棋手能夠 加深哪一步是致勝關鍵的印象;若是原本輸了,那麼復盤時應該會多去嘗試其 他走步,去尋找其他可能贏的走步。若是無論如何無法找到其他致勝的棋步, 則代表此盤棋更前期的下法可能有誤,而導致了在後面無法找到扳回一城的方 法,棋手因此知道前期的開局下法可能並不是優秀的走步,進而再修正開局的 走法。這種復盤的動作可以使得棋手下一次遇到類似的情況時,能夠在贏的盤 面使用同樣的棋路再次贏下遊戲,輸的盤面也能考慮更多其他可能致勝的走步, 或是在遊戲局勢更早之前走其他步避免落入必輸的盤面。更重要的是這種復盤 動作通常在於棋局的中後期,也就是說不必再花費下完一整局的時間才能取得 訓練資料。 而 Replay 方法實作在 AlphaZero 訓練流程時,修改部分只有在自我對下產 生每一局訓練資料的步驟,如圖 3-15 紅字標記處。. 34.
(44) 圖 3-15. Replay 實作至自我對下之虛擬碼. 利用每次類神經網路模型自我對下每一盤遊戲,雙方會在輪到自己的回合 時對自己當前的盤面進行 MCTS 展開,展開完後會得到此盤面的勝率 MCTS_V 值與應該走的下一步。因此我們紀錄下每一回合盤面與相對於玩家的勝率 MCTS_V 值分布,如圖 3-16 所示。. 35.
(45) 圖 3-16 回合與 MCTS 勝率圖 在每一盤遊戲結束時,相比於 AlphaZero 直接把此局遊戲的盤面資料儲存 起來,並把這一盤遊戲展開過的搜尋樹清掉之後直接開始新的一盤遊戲,我們 則改而利用圖 3-16 的盤面紀錄,以及遊戲結束時已經展開的 MCTS 搜尋樹, 進入到 Replay 的副程序,虛擬碼如圖 3-17。. 36.
(46) 圖 3-17. Replay 資料增量方法之虛擬碼. 在 Replay 的副程序中,我們為了得到此局遊戲先後手分別進行復盤後的訓 練資料。首先從此局遊戲中所有的資料從後往前尋找,尋找先後手雙方各自的 低於某一個門檻值 threshold 的勝率絕對值。假設如圖 3-16 紅槓處,設定為 20%, 則該方從該盤面重新開始下,此次重下須使用原本已經展開過的搜尋樹 tree。 用此方法來模擬棋手在找尋一盤棋的關鍵點時,通常是找局勢有一點明朗但也. 37.
(47) 並非確定會獲勝或落敗的盤面進行思考,並從此處開始考慮是否有其他走法。 利用已展開的搜尋樹完成復盤時,因再次進行走步搜索時 MCTS 是用展開 過的搜尋樹,理論上搜尋能夠比最初對下時更深更廣,最後得到新的中後盤訓 練資料的勝敗也應更加準確。因此在原本的訓練資料 Examples 複製一份後,利 用新的中後盤勝負結果修改其展開復盤前所有訓練資料的勝負 z 值,並捨棄位 於復盤後的原本所有資料,最後把新的訓練資料嫁接在後方,以此作為先後手 某一方 Replay 後的增量資料。當先後手如果都能找到復盤的盤面完成 Replay 後,將回傳先後手的增量資料作為類神經網路模型訓練盤面,以整體訓練資料 來看一局遊戲的資料量可增加至三倍。 對於復盤前的訓練資料而言,若是選擇到復盤的盤面其實是已經確定一方 獲勝,則雙方再一次對局時,在雙方都沒有走錯的前提下,則在結束先後手的 Replay 後,此對局遊戲原本復盤前的訓練資料並不會更改 z 值,也就是相較於 不使用 Replay 方法的原版將會得到三倍的增量。對於類神經網路模型來說,代 表在此復盤前的優勝方開局下法很好而落敗方開局下法很差,以至於後續進行 Replay 時雙方都沒能走出不一樣的勝負結果,故用更多的資料讓類神經網路模 型去學習,在強化優勝方的走步同時避免落敗方往後再走同樣的走步。相反的, 如果選擇到復盤的盤面如果還不確定是哪一方獲勝,則雙方再一次對局時,有 機會得出與第一次對局時不同的勝負結果,則此時利用復盤後的結果對復盤前 的訓練資料 z 值作更改,則有可能發生後續兩次 Replay 都得出與第一次不相同. 38.
(48) 的結果。以整體來說,若是 Replay 時利用已展開的搜尋樹再次搜尋,真的能因 搜尋深度與廣度相較於原本對下時更深且廣而有更優秀的走步時,或許在此情 況下,也能些許增加整體訓練資料的正確性。. 39.
(49) 3.4 MMoE 於 AlphaZero 在最初 DeepMind 發表的 AlphaGo[26]論文中,描述原本預測 V 值與 Policy 值是兩個獨立分開的類神經網路,到了之後的版本[28]為了增加運算效率而把 兩種任務放在同一個類神經網路模型一起訓練。其中也提到合併過後雖然 V 值 的預測能力稍微上升,但 Policy 的預測能力也有些微的下降,加上因為不再需 要詢問兩次網路模型分別取得 V 值與 Policy 值,省下來的一次詢問時間能在固 定的搜尋時限內展開更多的 MCTS 節點數,對整體來說能夠大幅的提升棋力。 但從其中可得知 V 值與 Policy 值一起訓練,可能存在多任務學習中不同任務互 相影響預測能力的議題,故本論文中提出 MMoE 應用於 AlphaZero 類神經網路 架構試圖解決此問題。 本小節將先介紹實作在 AZGC 中較原版 AlphaZero 規模較小的類神經網路 架構如圖 3-18,並以表 3-1 分別針對每一層的網路架構與參數進行描述,再與 應用 MMoE 方法後的 AlphaZero 類神經網路架構如圖 3-19 及表 3-2,進行參數 設定的比較,盡量使得兩種架構的可訓練參數一致,避免在套用 MMoE 方法時 造成可能修改後的類神經網路架構比原版還用得較多的訓練參數,進而導致無 法判別結果的好壞是因為網路架構的改良還是參數量的增多。而 MMoE 主要參 數配合的修改點在於每一層 Convolutional layer 的 kernel 個數。. 40.
(50) 圖 3-18. 預設 AZGC 類神經網路架構圖. 41.
(51) 表 3-1 預設 AZGC 網路架構參數表 名稱. 內容. 參數量. Input. 1 個二維 8×8 盤面. -. Convolutional layer. 1 層 Convolutional layer (32 個 3×3 kernel). 3×3×32. 1 層 Batch Normalization. 32+32. (gamma + beta) 2 層 Convolutional layer (32 個 3×3 kernel). (3×3×32×32)×2×5. 2 層 Batch Normalization. (32+32)×2×5. (gamma + beta) 1 層 Convolutional layer (1 個 1×1 kernel). 1×1×32×1. 1 層 Batch Normalization. 1+1. 5 個 Residual block. V Tower. (gamma + beta) Reshape(8×8×1)成一維向量. 1 層 Fully Connected layer(256 個 64×256+256. Policy Tower. units) 1 層 Fully Connected layer(1 個 units) 256+1 1 層 Convolutional layer (1×1×32)×2 (2 個 1×1 kernel) 1 層 Batch Normalization. 2+2. (gamma + beta) Reshape(8×8×2)成一維向量. 1 層 Fully Connected layer(154 個 154×128+154 總參數量. units) 上述加總. 130017. 套用 MMoE 至 AlphaZero 類神經網路架構時,把 Shared-bottom 等量切割 成多分 Expert,並且新增 Gate 層對各個 Expert 最後的輸出進行加權如圖 3-19 及表 3-2。. 42.
(52) 圖 3-19 表 3-2 名稱. 套用 MMoE 之 AlphaZero 網路架構圖. 套用 MMoE 之 AlphaZero 網路架構參數表. 內容. 參數量. 1 個二維 8×8 盤面 Input 共 2 個 Conv. 1 層 Convolutional layer (22 個 3×3 kernel) layer. (3×3×1×22) ×2. 1 層 Batch Normalization. (22+22)×2. (gamma + beta) 共. 個 2 層 Convolutional layer (22 個 3×3 kernel) ResBlock 2 層 Batch Normalization. (3 × 3 × 22 × 22)×2×10. 10. Gate V. (22+22) × 2 ×. (gamma + beta) Reshape(input)成一維向量 1 層 Fully Connected layer(2 個 units). 43. 10 64×2.
(53) 1 層 Softmax. -. (輸入為上層 2 個 units 之輸出) 利用上層 Softmax 輸出值,分別對 Expert1(22 個 8×8 盤面)及 Expert2(22 個 8×8 盤面)的輸出作 加權 對 加 權 後 Expert1 輸 出 及 Expert2 輸 出 作 Concatenate(44 個 8×8 盤面) V Tower. 1 層 Convolutional layer (1 個 1×1 kernel). 1×1×44×1. 1 層 Batch Normalization. 1+1. (gamma + beta) Reshape(8×8×1)成一維向量. Gate P. 1 層 Fully Connected layer(256 個 units). 64×256+256. 1 層 Fully Connected layer(2 個 units). 256+1. Reshape(input)成一維向量. 64×2. 1 層 Fully Connected layer(2 個 units) 1 層 Softmax (輸入為上層 2 個 units 之輸出). -. 利用上層 Softmax 輸出值,分別對 Expert1(22 個 8×8 盤面)及 Expert2(22 個 8×8 盤面)的輸出作 加權 對 加 權 後 Expert1 輸 出 及 Expert2 輸 出 作 Concatenate(44 個 8×8 盤面) Policy Tower. 1 層 Convolutional layer (2 個 1×1 kernel). 1×1×44×2. 1 層 Batch Normalization. 2+2. (gamma + beta) Reshape(8×8×2)成一維向量 1 層 Fully Connected layer(154 個 units). 154× 128+154. 總參數量. 上述加總. 125641. 由上述圖表可見為了盡量平衡總參數的數量,故應用 MMoE 模型於 AlphaZero 網路架構時,總參數量是少於原版網路模型約五千個參數。. 44.
(54) 3.5 Quick Win 於 AlphaZero AlphaZero 使用 MCTS 與類神經網路模型作為其訓練架構的核心技術,然 而 MCTS 在對各個走步優劣進行評量時,是以其後續所有展開的節點 V 值作平 均計算。除此之外用以訓練類神經網路模型時的訓練資料,在標記每筆資料的 z 值時,是以最後的遊戲勝負對所有的盤面標記 1 及-1。而 Quick Win 的概念[6] 在於原版 AlphaZero 並沒有考慮到如何越快贏得這場遊戲越好,而是選取平均 來說勝率最高的走步,在此模式下訓練出的 Breakthrough 對局程式常常出現有 明顯可贏的走步,但因有平均更高的勝率走法如吃子的動作,故程式會先選擇 吃掉對方的棋子,以保證在走步後平均勝率能更加提升,因此延後最終達成勝 利的時間,如圖 3-20。. 圖 3-20. 非最優勝利走步圖. 在此盤面黑方必勝且輪黑方落子,但黑方選擇了平均勝率最高的走步,即 紅框棋子的走法,而非綠框棋子可以馬上獲得勝利的走步。主要原因在於此盤. 45.
(55) 面黑方已經必勝,故網路模型估計出來的 V 值都很接近 1,走步只要不要亂走 彼此間差異不大;而另一主要原因在於此盤面下展開的節點,綠框中的走步雖 然可以較快獲勝,但若走了綠框後的走步後,原本紅框被吃掉的白子,可以往 c-6 前進,此時的盤面白方如果能再多動一步便是白方勝利,因此此程式為了 平均勝率的提升,最後選擇了紅框處進行吃子的動作作為最保險的走法,進而 延後了勝利的時間。 因此本論文提出把越快贏越好的 Quick Win 概念分別實作至 AlphaZero 裡 面 的 MCTS 、 類神經網路以及前兩種結合的三種作法,目的在於能夠使 AlphaZero 進行網路模型訓練時,模型比起原版能夠學習得更快更好。. 46.
(56) 3.5.1 Quick Win in MCTS 實作 Quick Win 在 MCTS 搜尋樹時,修改的點如圖 3-21[31]的紅字標記處, 在 MCTS 進行每一次展開後,會得到新展開的葉節點所回傳之 v 值與該節點的 深度 leafDepth 值。而在 MCTS 中 Backpropagation 的階段向上父節點回傳 v 值 更新 UCT 公式時,會以當前回傳到的父節點深度 currentNodeDepth 與新展開之 葉節點的深度 leafDepth,之間的差距作為依據對 v 值進行加權,得出新的 v’值 後更新至此節點的 UCT 資料中。. 圖 3-21. Quick Win MCTS. 47.
(57) 對 v 值進行加權的方法有如下公式(1)至(4)四種的設定: 𝑑 = 𝑙𝑒𝑎𝑓𝐷𝑒𝑝𝑡ℎ − 𝑐𝑢𝑟𝑟𝑒𝑛𝑡𝑁𝑜𝑑𝑒𝐷𝑒𝑝𝑡ℎ. (0). 𝑐. 𝑣′ = {. 𝑣 + 𝑣 ∗ (𝑑) , 𝑣 = 1 or 𝑣 = −1 𝑣, 𝑣 ≠ 1 or 𝑣 ≠ −1. (1). 對於(1)公式,c 為一可設定之參數,此加權方式僅針對當遇到展開新的節 點為遊戲結束的盤面,也就是發現回傳的 v 值為 1 或-1 時才進行加權。如此設 計的原因在於,類神經網路模型對非遊戲結束的 v 值預估,本身便具有誤差, 為了避免對多數 v 值進行更動,此方法先測試從遊戲結束時確定的勝負節點進 行加權,以此觀察是否具有 Quick Win 的效果。而事實上在 c 設定為 1.35 時, 圖 3-20 的盤面黑方能夠在應用此公式的 MCTS 下走出綠框中的最優棋步,但 整體而言,是否能對未使用的 MCTS 具有顯著優勢,將在第四章實驗進行驗證。 𝑣 ∗ sigmoid(𝑐 − 𝑑), c ≥ 𝑑 𝑣′ = {. 𝑀−𝑐−𝑑. 𝑣∗(. 𝑀. ) , c < 𝑑 𝑎𝑛𝑑 (𝑀 − 𝑐 − 𝑑) ≥ 0. (2). 0, (𝑀 − 𝑐 − 𝑑) < 0. 對於(2)公式 c、M 為二可設定之參數,sigmoid 函數的特性為當輸入值為 0 時輸出值為 0.5,故此公式用兩階段式對 v 值作加權。當權重值輸出大於 0.5 時 採用 sigmoid 函數遞減,當權重輸出低於 0.5 時,採用線性遞減。而 c 值用以控 制當深度差距多少時權重的輸出為 0.5,M 值用來控制當權重低於 0.5 時,線性 遞減至 0 的最大步數,不同的 c 值與 M 值對權重的分布如圖 3-22 及圖 3-23。. 48.
(58) 圖 3-22. (a) c = 7, M = 15 權重分布圖 (b) c = 10, M = 15 權重分布圖. 圖 3-23. (a) c = 7, M = 27 權重分布圖 (b) c = 10, M = 27 權重分布圖 𝑣′ = 𝑣 ∗ sigmoid (. 𝑐−𝑑 𝑆. ). (3). 對於(3)公式 c、S 為二可設定之參數,此公式的 c 值功能同公式(2),而 S 為權重下降的平滑度,c 值與 S 值對權重的分布如圖 3-24 及圖 3-25。. 圖 3-24. (a) c = 8, S = 3 權重分布圖 (b) c = 8, S = 6 權重分布圖. 49.
(59) 圖 3-25. (a) c = 11, S = 3 權重分布圖 (b) c = 11, S = 6 權重分布圖 𝑐−𝑑. 𝑣′ = 𝑣 ∗ tanh (. 𝑆. ). (4). 對於(4)公式 c、S 為二可設定之參數,此公式的 c 及 S 值功能同公式(3), 不同的 c 值與 S 值對權重的分布如圖 3-26 及圖 3-27。. 圖 3-26. (a) c = 10, S = 3 權重分布圖 (b) c = 10, S = 6 權重分布圖. 圖 3-27. (a) c = 15, S = 3 權重分布圖 (b) c = 15, S = 6 權重分布圖. 50.
(60) 3.5.2 Quick Win in Network 實作 Quick Win 概念至類神經網路模型的作法共兩種。第一種為對原本類 神經網路的架構進行修改,將原本只輸出 V 值與 Policy 值的網路多增加一個 D 值,此 D 值用以訓練當前盤面距離遊戲結束尚有多少步。我們希望原本的 V 與 D 值作結合後,網路模型能夠得到更加精確的 V’值。因此除了將網路模型初始 化成如圖 3-28 多一個預測 D 值的模型外,為了取得訓練 D 值時的訓練資料, 需要在自我對下時額外紀錄當前盤面的步數資訊,當遊戲結束時,對訓練資料 中的每個盤面標記當前盤面距離遊戲結束還有幾步,簡寫成變數為 stepsToEnd。 而 D 值的訓練資料產生如下公式(5): D={. r∗. 𝑡−stepsToEnd 𝑡. , 𝑡 ≥ stepsToEnd. 0, 𝑡 < stepsToEnd. (5). 在此公式中 r 為此盤面最後的遊戲勝負結果,而 t 為可設定的一個門檻值, 當當前盤面距離遊戲結束盤面少於 t 步時,越靠近遊戲結束的盤面隨著距離越 近對最後的勝負標記作線性遞增;而若當前盤面距離遊戲結束大於 t 步時則 D 值標記為 0,避免加權分數為負。以此方法訓練網路模型能預測還有幾步贏或 輸的資訊,而越靠近贏的盤面時的 D 值越大,進而達到 Quick Win 的效果。而 之所以需要設定 t 值而不直接以當前盤面佔此局遊戲中第幾個百分比做為 D 值 的標記,是因為避免在難以分出幾步輸贏盤面的 D 值標記不斷變動。以棋局開 始的第一個初始盤面為例,若是此局下共下了 70 步,則第一個盤面將標記為 1. 1. r ∗ 70,但若此局只下了 40 步,則標記又變成r ∗ 40。 51.
(61) 在網路模型方面提出兩種不同的模型如圖 3-28。對於這兩個模型,我們在 對局時並不直接使用 D 值,而僅只有在網路模型訓練時對 D 值進行訓練,最後 再使用 D 值與 V 值混合後的 V’值作為模型預測盤面的結果。. 圖 3-28. (a) DV-valueConcate 圖 (b) DV-layerConcate 圖. 圖 3-28 中(a)與(b)圖的模型差異在於,(a)模型是對 D 與 V 值連接至 3 個 units 的全連接層即 Dense1,再連接至 1 個 units 的全連接層 Dense2,最後輸出 Dense2 的 V’值做為新的網路預測的結果。其想法在於對具有還有幾步輸贏概念的 D 值與原本 V 值作線性轉換,或許能得到好的 V’值。而(b)模型也是相同概念, 但是在輸出 D 與 V 值的前一個全連接層便直接連結至 units 數為 1 的全連接層 Dense1 輸出 V’值,理由在於或許直接從特徵向量中去找關係能有更好的預測 能力,但也增加了更多的訓練參數。此處網路架構參數設定與 3.4 節中預設 AlphaZero 的網路架構一致。. 52.
(62) 而上述模型除了與原版的網路架構比較外,也需與參數量一樣的原版模型 進行比較,而原版參數增量模型如圖 3-29。. 圖 3-29. 原版參數增量模型圖. 在此模型中,我們將新增的 D 值與其 Tower 都改成 V 值的訓練,並且實際 對下時,使用的是用未經混合單純的 V 值,避免可能破壞原版的網路架構。此 二個模型分別對應圖 3-28 中(a)與(b)圖的原版比較對象。 而第二種實作 Quick Win 至 MCTS 的方法,為純粹修改訓練資料的 z 值標 記方式,而不更動網路模型的架構。z 值修改公式如下: z={. 𝑟𝑎𝑡𝑖𝑜 ∗ r + (1 − 𝑟𝑎𝑡𝑖𝑜) ∗ r ∗ (. 𝑡−stepsToEnd 𝑡. ), 𝑡 ≥ stepsToEnd. 𝑟𝑎𝑡𝑖𝑜 ∗ r, 𝑡 < stepsToEnd. (6). 上述公式與公式(5)為同樣的概念,對當前盤面越接近遊戲結束時其加權值 越高,但我們對 z 值保有最基本的勝負結果 r,而百分比由 ratio 參數控制,對 低於門檻 t 值的盤面其 z 值仍保有一定比例的輸贏結果。. 53.
(63) 3.5.3 Quick Win in MCTS and Network 本小節我們將 Quick Win 同時實作在訓練網路模型的 z 值標記以及 MCTS 的 v’值回傳上,以此觀察兩者結合的效果。 在修改訓練資料的 z 值標記時,我們使用同樣的公式(6)如下: z={. 𝑟𝑎𝑡𝑖𝑜 ∗ r + (1 − 𝑟𝑎𝑡𝑖𝑜) ∗ r ∗ (. 𝑡−stepsToEnd. ), 𝑡 ≥ stepsToEnd. 𝑡. 𝑟𝑎𝑡𝑖𝑜 ∗ r, 𝑡 < stepsToEnd. (6). 而 MCTS 的更改中,我們預期網路模型能夠準確地對盤面進行還有多少步 會贏或輸的預測,因此在對 v 值作加權時,僅考慮未經過網路預測的盤面作加 權,即為遊戲結束的盤面,當回傳的 v 值為 1 或-1 才進行加權,而加權的方式 如以下公式: 𝑑 = 𝐶ℎ𝑖𝑙𝑑𝐷𝑒𝑝𝑡ℎ − 𝑑𝑒𝑝𝑡ℎ 𝑡−𝑑. 𝑣′ = {. 𝑟𝑎𝑡𝑖𝑜 ∗ 𝑣 + (1 − 𝑟𝑎𝑡𝑖𝑜) ∗ 𝑣 ∗ (. 𝑡. (0). ), 𝑡 ≥ d. 𝑟𝑎𝑡𝑖𝑜 ∗ 𝑣, 𝑡 < d. 54. (7).
(64) 第四章 實驗與結果 4.1 環境與參數設定 4.1.1 環境設定 本小節將說明運行 AZGC 所需的環境配置,在 C++配置 TensorFlow 網路 模型前需要對 TensorFlow 以 GCC 進行編譯,而過程中需要 TensorFlow、GCC 及 Bazel 版本具有相容性才能成功編譯,完整環境設置如表 4-1。 表 4-1. 環境設置. CPU. Intel i7-3970X. GPU CUDA 版本. GTX-1060. cuDNN 版本. cuDNN 7.3.1. Python 版本. Python 3.6. TensorFlow 版本. TensorFlow 1.8.0. GCC 版本. GCC-4.8.5. Bazel 版本. Bazel-0.10.0. CUDA 9.0. 55.
(65) 4.1.2 參數設定 本小節將說明在本論文後續實驗在 AlphaZero 訓練流程中使用的參數設定, 在後續的實驗設定中若是沒有特別重新敘述,則設定如表 4-2。此外之後實驗 會以原版模型的簡稱代表 3.4 節所述預設的類神經網路模型,若實驗涉及網路 模型的修改或訓練,則為了避免模型初始化的不同、訓練過程中的隨機性,在 模型比較時同樣的方法會訓練多個模型與原版的模型進行比較。 表 4-2. 實驗參數設定表. 參數名稱. 值. 訓練迭代. 50. 一個迭代中自我對下局數. 100. 每一步 MCTS 展開個數. 100. 𝐶𝑝𝑢𝑐𝑡. 1. Dirichlet Noise 中的 alpha 值. 0.25. 學習率. 0.2. Batch Size 模型訓練所有資料次數(Epoch). 64. 訓練資料保留多少個歷史迭代. 20 300(56%以上或 44%以下). 10. 模型比較對戰局數(比較時的顯著勝率). 56.
(66) 4.2 架構驗證 4.2.1 TAAI 2018 在 研 究初 期使 用 Surag Nair 先 生 所 開 發的 alpha-zero-general 來 實 作 Breakthrough 對局程式,為了驗證對局程式的強度而參加了 TAAI 2018 對局程 式競賽。而參賽程式命名為 BT,在訓練上各項參數設定如 4.1.2 節所述,總共 耗費大約三天的時間訓練。此次參賽獲得金牌,參賽成績如表 4-3,從上往下 由第二名開始進行排列,比數格式為我方勝利比上對方勝利次數。 表 4-3. TAAI 2018 對戰表. 對戰程式. 來自學校. 作者. 比數. FuChou. NTNU. 葉佳峯. 2:0. DaSoJai. NTNU. 吳威霖. 2:0. BTKo. NTNU. 朱晏呈. 2:0. 在此次競賽中,三支對手的程式都是使用 alpha-beta 搜尋演算法,並且都 具有相當好的審局函數,在前期會像布陣一般進行走步,在前期每一顆棋子基 本上都受到後方棋子的保護,若是前方棋子被吃通常能夠再反吃回去。而對局 至中後期,雙方有相當多的棋子短兵相接,走步往往需要同時兼顧防守與進攻, 而人工設計的審局函數在此時開始顯現劣勢,在攻防過程中出現防線的漏洞, 使我的 BT 程式能夠從此漏洞鑽入敵方底線獲得勝利。在本論文後續研究比較 的原版對象通常是使用此支程式的網路模型。. 57.
(67) 4.2.1 TCGA 2019 此次競賽前,已完成 AZGC 的開發,並且利用類神經網路模型自我對下無 隨機性的特性,我們先使用 Surag Nair 先生的 alpha-zero-general 程式選擇任一 模型自我對下 100 盤,得出最後的勝率與每一盤結束的步數與 AZGC 結果一致, 以此驗證 AZGC 架構的正確性。 而 AZGC 架構的訓練驗證上,我們使用參加 TAAI 2018 對局程式的網路模 型繼續訓練,在調整模型學習率為 0.02 其他超參數不變的設定下,再多訓練約 一個月得出的網路模型,與參加 TAAI 2018 的程式在相同的 MCTS 展開個數下 進行對戰得到 94%勝率,足見 AZGC 的模型訓練是有效的。並且參加了 TCGA 2019 獲得金牌,參賽成績由第二名從上往下排列如表 4-4。 表 4-4. TCGA 2019 對戰表. 對戰程式. 來自學校. 作者. 比數. FuChou. NTNU. 葉佳峯. 2:0. DaSoJai. NTNU. 吳威霖. 2:0. Trigger. NTNU. 張乃元. 2:0. BTKo. NTNU. 朱晏呈. 2:0. 此次前三隊參賽隊伍與 TAAI 2018 一樣,但據作者們說程式改動部分不大, 其棋力幾乎與 TAAI 2018 一樣。而此次有新的程式 Trigger 參加,此支程式也 是使用 alpha-zero-general 所修改,並且在 MCTS 與類神經網路模型中加入 Quick Win 概念的修改,值得注意的是此程式的訓練時間耗費約一個半月,並且在訓 練過程中使用八個 CPU 多執行緒同時產生多個訓練資料。相比於本論文的參賽. 58.
(68) 程式 BT,雖然於受益於 C 語言的運行效能,但在訓練時只有使用單執行緒進 行訓練,整體的訓練時間粗估推算此支程式進行訓練所花的時間大約為 BT 的 5 倍,並且在對戰時此支程式每一步 MCTS 節點展開次數都固定為 1000 次,而 BT 是設定每一步思考 5 秒,每步展開節點數約為 800 個。對下的結果可以發 現雖然對方訓練時間較長且展開 MCTS 的節點個數也較多,但其在類神經網路 模型與 MCTS 搜尋樹的改動影響下,仍無法超越我方較小規模的原版 AlphaZero 網路架構。. 圖 4-1. TAAI 2018 與 TCGA 2019 參賽獎牌. 59.
(69) 4.3 架構速度 本小節將說明 AZGC 訓練架構中各模組以及模組中的方法所花費的時間佔 比,在本次實驗的參數設計上是使用每一步展開 1600 個 MCTS 節點,自我對 下 100 盤後,類神經網路再訓練 10 個 Epochs 所得出之數據,並且也與 alpha-zero-general 做速度上的比較,以表 4-5 所示。 表 4-5 Module/Method Total(hh:mm:ss) MCTS. 架構速度比較表. AZG(Python). AZGC(C++). 21:45:44. 12:14:16. Speed up 77.8%. 21:38:56(99.5%). 12:07:23(99%). 77.8%. Predict. 11:07:22(51.1%). 7:54:44(64.7%). 40.5%. Others. 10:31:34(48.4%). 4:12:39(34.3%). 150.7%. 6:45(0.5%). 6:51(1%). -. 3(0%). 2(0%). -. Network Wrapper Training Others. 由表 4-5 可知 MCTS 是整個 AlphaZero 訓練架構中最花時間的步驟,又以 其中的 Predict 方法在不論是 C++或是 Python 版本中佔整體時間超過一半,此 方法是把當前盤面輸入進類神經網路模型輸出 V 值與 Policy 值的步驟。除此之 外 MCTS 模組中 Others 所代表的是在 MCTS 中除了預測以外其他的步驟如節 點展開、遊戲盤面處理、搜尋樹處理等。而 Network Wrapper 模組因為網路模 型訓練都是在 Python 語言下進行,故不需要比較。 除此之外,由表 4-5 可知使用 AZGC 在限定的時間內相較於 Python 版本的 AZG 可以展開更多的 MCTS 節點個數。故我們實驗了在 Breakthrough 遊戲中, 以同樣的網路模型自我對戰,但雙方每步展開不同的 MCTS 個數,以此觀察不 60.
Outline
相關文件
課程利用雲端學習平台 OpenEdu 從最基礎開始說明 Python 的語 法與應用,配合 Quiz in Video
阿吉老師將簡介 micro:bit 開發程式環境,並分享 micro:bit 內建感測器程式編寫、數位/類比信號讀取及寫入,並了解 如何用 micro:bit 連接電子模組編寫程式進行機電整合。.
下列何者不歸屬於系統呼叫的行程控制(Process
包含神經系統症狀及呼吸衰竭等 1 。腸病毒 D68 型最早是 1962 年時在美
(B)可使用 object pool 重複利用已經初始化且可使用的物件,以避免經常銷毀再重新配置。(C) 可利用遊戲空檔(如暫停、切景時)主動呼叫 GC,以增進遊戲體驗。(D)在
檢視 檢視「 「 「 「輸出 輸出 輸出 輸出」 」 」 」視窗表示 視窗表示 視窗表示 視窗表示 程式碼沒有任何錯誤
MATLAB 程式使用 pass-by-value 的方 式,進行程式與函式間的溝通聯絡,當 程式呼叫函式時, MATLAB
日本電信電話公社宣布,於 9 月 30 日起正式終止呼叫器(BB Call)的服務。日本 呼叫器服務從 1968 年起由電信電話公社開始提供,與當年台灣的