國際象棋版AlphaZero出來了誒,還開源了Keras實現ヽ( `0′)ノ

1175579604 7年前發布 | 58K 次閱讀 Keras Python 開源 機器學習

只用了不到4小時。

AlphaZero在去年底通過自我對弈,就完爆上一代圍棋冠軍程序AlphaGo,且沒有采用任何的人類經驗作訓練數據(至少DeepMind堅持這么認為,嗯)。

昨天,GitHub有位大神@Zeta36用Keras造出來了國際象棋版本的AlphaZero,具體操作指南如下。

項目介紹

該項目用到的資源主要有:

去年10月19號DeepMind發表的論文《不靠人類經驗知識,也能學會圍棋游戲》 基于DeepMind的想法,GitHub用戶@mokemokechicken所做的Reversi開發,具體前往https://github.com/mokemokechicken/reversi-alpha-zero DeepMind剛發布的AlphaZero,從零開始掌握國際象棋:https://arxiv.org/pdf/1712.01815.pdf。 之前量子位也報道過,AlphaZero僅用了4小時(30萬步)就擊敗了國際象棋冠軍程序Stockfish。是不是賽雷(′?Д?)」

更多細節去wiki看唄。

筆記

我是這個信息庫(repositories,也簡稱repo)的創造者。

這個repo,由我和其他幾個小伙伴一起維護,并會盡我們所能做到最好。

repo地址:https://github.com/Zeta36/chess-alpha-zero/graphs/contributors

不過,我們發現讓機器自己對弈,要燒很多錢。盡管監督學習的效果很好,但我們從來沒有嘗試過自我對弈。

在這里呢,我還是想提下,我們已經轉移到一個新的repo,采用大多數人更習慣的AZ分布式版本的國際象棋(MCTS in C ++):https://github.com/glinscott/leela-chess

現在,項目差不多就要完成啦。

每個人都可以通過執行預編譯的Windows(或Linux)應用程序來參與。這個項目呢,我們趕腳自己做得還是不錯的。另外,我也很確定,在短時的分布式合作時間內,我們可以模擬出DeepMind結果。

所以呢,如果你希望能看到跑著神經網絡的UCI引擎打敗國際象棋冠軍程序Stockfish,那我建議你去看看介個repo,然后肯定能增強你家電腦的能力。

使用環境

Python 3.6.3

tensorflow-gpu: 1.3.0

Keras: 2.0.8

最新結果 (在@Akababa用戶的大量修改貢獻后獲得的)

在約10萬次比賽中使用監督式學習,我訓練了一個模型(7個剩余的256個濾波器塊),以1200個模擬/移動來估算1200 elo。 MCTS有個優點,它計算能力非常好。

下面動圖泥萌可以看到,我(黑色)在repo(白色)模型中對陣模型:

下面的圖,你可以看到其中一次對戰,我(白色,?2000 elo)在這個回購(黑色)中與模型對戰:

首個好成績

在用了我創建的新的監督式學習步驟之后,我已經能夠訓練出一個看著像是國際象棋開局的學習模型了。

下圖,大家可以看到這個模型的對戰(AI是黑色):

下面,是一場由@ bame55訓練的對戰(AI玩白色):

5次迭代后,這個模型就能玩成這樣了。這5次里,’eval’改變了4次最佳模型。而“opt”的損失是5.1(但結果已經相當好了)。

Modules

監督學習

我已經搞出來了一個監督學習新的流程。

從互聯網上找到的那些人類游戲文件“PGN”,我們可以把它們當成游戲數據的生成器。

這個監督學習流程也被用于AlphaGo的第一個和最初版本。

考慮到國際象棋算是比較復雜的游戲,我們必須在開始自我對弈之前,先提前訓練好策略模型。也就是說,自我對弈對于象棋來說還是比較難。

使用新的監督學習流程,一開始運行挺簡單的。

而且,一旦模型與監督學習游戲數據足夠融合,我們只需“監督學習”并啟動“自我”,模型將會開始邊自我對弈邊改進。

python src/chess_zero/run.py sl

如果你想使用這個新的監督學習流程,你得下載一個很大的PGN文件(國際象棋文件)。

并將它們粘貼到data / play_data文件夾中。BTW,FICS是一個很好的數據源。

您也可以使用SCID程序按照玩家ELO,把對弈的結果過濾。

為了避免過度擬合,我建議使用至少3000場對戰的數據集,不過不要超過3-4個運行周期。

強化學習

AlphaGo Zero實際上有三個workers:self,opt和eval。

self,自我模型,是通過使用BestModel的自我生成訓練數據。

opt,訓練模型,是用來訓練及生成下一代模型。

eval是評測模型,用于評估下一代模型是否優于BestModel。如果更好,就替換BestModel。

分布式訓練

現在可以通過分布式方式來訓練模型。唯一需要的是使用新參數:

輸入分布式:使用mini config進行測試,(參見src / chess_zero / configs / distributed.py)

分布式訓練時,您需要像下面這樣在本地運行三方玩家:

python src/chess_zero/run.py self —type distributed (or python src/chess_zero/run.py sl —type distributed) python src/chess_zero/run.py opt —type distributed python src/chess_zero/run.py eval —type distributed

圖形用戶界面(GUI)

uci啟動通用象棋界面,用于GUI。 為ChessZero設置一個GUI,將其指向C0uci.bat(或重命名為.sh)。例如,這是用Arena的自我對弈功能的隨機模型的屏幕截圖:

數據

data/model/modelbest: BestModel. data/model/next_generation/: next-generation models. data/playdata/play*.json: generated training data. logs/main.log: log file. 如果您想從頭開始訓練模型,請刪除上述目錄。

使用說明

安裝

安裝庫

pip install -r requirements.txt

如果您想使用GPU,請按照以下說明使用pip3進行安裝。

確保Keras正在使用Tensorflow,并且你有Python 3.6.3+。根據您的環境,您可能需要運行python3 / pip3而不是python / pip。

基本使用

對于訓練模型,執行自我對弈模型,訓練模型和評估模型。

注意:請確保您正在從此repo的頂級目錄運行腳本,即python src / chess_zero / run.py opt,而不是python run.py opt。

自我對弈

python src/chess_zero/run.py self

執行時,自我對弈會開始用BestModel。如果不存在BestModel,就把創建的新的隨機模型搞成BestModel。

你可以這么做

創建新的BestModel;

使用mini config進行測試,(參見src / chess_zero / configs / mini.py)。

訓練模型

python src/chess_zero/run.py opt

執行時,開始訓練。基礎模型會從最新保存的下一代模型中加載。如果不存在,就用BestModel。訓練好的模型每次也會自動保存。

你可以這么做

輸入mini:使用mini config進行測試,(參見src / chess_zero / configs / mini.py)

用全套流程:指定整套流程的(小批量)編號,不過跑完全程會影響訓練的學習率。

評價模型

python src/chess_zero/run.py eval

執行后,開始評估。它通過玩大約200場對戰來評估BestModel和最新的下一代模型。如果下一代模型獲勝,它將成為BestModel。

你可以這么做

輸入mini: 使用mini config進行測試,(請參閱src / chess_zero / configs / mini.py)

幾點小提示和內存相關知識點

GPU內存

通常來講,缺少內存會觸發警告,而不是錯誤。

如果發生錯誤,請嘗試更改src / configs / mini.py中的vram_frac,

self.vram_frac = 1.0

較小的batch_size能夠減少opt的內存使用量。可以嘗試在MiniConfig中更改TrainerConfig#batch_size。

最后,附原文鏈接,

https://github.com/Zeta36/chess-alpha-zero/blob/master/readme.md

 

來自:https://baijia.baidu.com/s?id=1593981712049561306&wfr=pc&fr=ch_lst

 

 本文由用戶 1175579604 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!