AlphaGo Zero代碼遲遲不開源,TF等不及自己推了一個
Root 編譯自GitHub
量子位 出品 | 公眾號 QbitAI
TensorFlow官方在GitHub上推了一個AlphaGo Zero的開源代碼!
這個叫做Minigo的圍棋AI引擎,是一個使用Python語言、在TensorFlow框架實現的基於神經網路的圍棋演算法。
這個項目確實是受到DeepMind的AlphaGo演算法的啟發,但TensorFlow官方再三強調這個項目不屬於DeepMind,也不是官方正式的AlphaGo項目。
不是行貨!不是行貨!不是行貨!
重要的事情說三遍!
DeepMind遲遲不開源AlphaGo代碼,看來Google自己人也等不及了。
以下內容搬運自TensorFlow的GitHub項目網頁。
Minigo其實基於Brian Lee此前發布的MuGo。
MuGo是依據首篇AlphaGo論文Mastering the Game of Go with Deep Neural Networks and Tree Search用Python復現的結果。
Minigo里所添加的參數,以及所做的架構調整是參考AlphaGo Zero的論文Mastering the Game of Go without Human Knowledge。
最近,這個經調整的架構已經擴展運用到了國際象棋和將棋的論文Mastering Chess and Shogi by Self-Play with a General Reinforcement Learning Algorithm中了。
這些論文的工作都會在Minigo中用AG(AlphaGo),AGZ(AlphaGo Zero),AZ(AlphaZero)縮寫表示。
這個項目的目標
提供一套清晰的學習樣板,能夠運用TensorFlow、Kubernetes及谷歌雲平台來建立硬體加速器上的增強學習的流程。
儘可能還原重現原始DeepMind AlphaGo論文中的方法,通過開源的流程工具及開源的實現。
把我們的數據,結果,發現都公開出來,讓圍棋,機器學習,Kubernetes社區獲益。
這個項目還有一個明確但不是目標的願景,就是做出來一個具有競爭力的圍棋項目,甚至能成為頂級的圍棋演算法。
我們致力於做一個可讀的、可理解的操作手冊,能夠對圈子裡的人有幫助,即使這麼做意味著我們操作起來效率和速度上會受到影響。
儘管最後的結果是會做出來一個強大的模型,但是我們是更看重和享受其中的過程:)
我們希望這個項目,對於感興趣的開發者來說,可以通過容易理解的python代碼平台觸及到強大的圍棋模型,來擴展,適配更多的項目任務。
如果你想知道我們是怎麼訓練這個模型的,請看RESULTS.md。
也想加入我們看看能幫忙做些什麼的話,請參考CONTRIBUTING.md。
發車!
想做這個項目,你需要有以下的:
1.virtualenv / virtualenvwrapper
2.Python 3.5+
3.Docker
4.Cloud SDK
搭便車指南(Hitchhiker』s guide)是非常棒的python開發及虛擬環境使用的入門資料。往後的指導沒有一個不是在非虛擬環境下測試的。
pip3 install virtualenv
pip3 install virtualenvwrapper
安裝TensorFlow
首先創建一個新的虛擬環境,進去之後,開始安裝TensorFlow和依賴工具:
pip3 install -r requirements-gpu.txt
當你要用GPU的時候,打開requirements-gpu.txt這個文件。一定要安裝CUDA 8.0。具體看TensorFlow 那堆文檔。
如果你不用GPU跑,或者你沒有,那麼你搞個較早的版本:
pip3 uninstall tensorflow-gpu
pip3 install tensorflow
或者安裝CPU要求:
pip3 install -r requirements-cpu.txt
創建一個環境
你可能需要用到一個雲來存資源,如果是醬安裝:
PROJECT=foo-project
然後,運行
source cluster/common.sh
這樣可以設置其他環境可變的默認參數。
運行單元測試
BOARD_SIZE=9 python3 -m unittest discover tests
基礎條件(basic怎麼翻譯?)
所有請求必須兼容谷歌雲盤(作為遠程文件系統),或者你本地的文件系統。這裡舉得例子是用谷歌雲,你要用本地文件路徑是一樣OK噠。
用谷歌雲的伐呢,就要設置BUCKET_NAME參數,然後驗證登錄谷歌雲。不然的話,所有的請求都會被擱置。
比如說,設置一個桶,驗證,然後查找一個最近的模型。
export BUCKET_NAME=your_bucket;
gcloud auth application-default login
gsutil ls gs://minigo/models | tail -3
看起來是醬紫的:
gs:/BUCKET_NAME/models/000193-trusty.index
gs://$BUCKET_NAME/models/000193-trusty.meta
這三個文件共同組成這個模型。而一個模型所需的指令需要一個路徑傳遞給模型的basename。比如說,gs://$BUCKET_NAME/models/000193-trusty
你需要把這個複製到你的本地盤上。這一節(fragment)把最近的模型拷貝到目錄下的MINIGO_MODELS。
MINIGO_MODELS=$HOME/minigo-models
mkdir -p $MINIGO_MODELS
gsutil ls gs://minigo/models | tail -3 | xargs -I{} gsutil cp 「{}」 $MINIGO_MODELS
先讓Minigo自己玩
看Minigo開一局,你需要specify模型。下面是個用最新模型在你桶里運行的例子。
python rl_loop.py selfplay —readouts=$READOUTS -v 2
READOUTS那部分指的是,每一步需要做幾次搜索。每一步的時間信息和數據都會列印出來。把速度設定到3或更高,會把每一步都列印在板上。
再虐Minigo
Minigo用的是GTP協議,你可以使用任何的符合GTP協議的項目。
# Latest model should look like: /path/to/models/000123-something
LATEST_MODEL=$(ls -d $MINIGO_MODELS/* | tail -1 | cut -f 1 -d 『.』)
BOARD_SIZE=19 python3 main.py gtp -l $LATEST_MODEL -r $READOUTS -v 3
(如果沒有模型的話,那它會隨機設個初始值)
在載入了幾個信息之後,它會提示GTP引擎已經準備好,也就是說這一刻它可以接受指令。GTP的小抄(cheatsheet):
genmove [color] # Asks the engine to generate a move for a side
play [color] [coordinate] # Tells the engine that a move should be played for at
showboard # Asks the engine to print the board.
拿GTP來玩的一個辦法是用gogui-display(含兼容 GTP 的 UI)。
看使用GTP的幾個好玩的方法。
gogui-twogtp -black 『python3 main.py gtp -l gs://$BUCKET_NAME/models/000000-bootstrap』 -white 『gogui-display』 -size 19 -komi 7.5 -verbose -auto
另外一個辦法呢,就是看Minigo和GnuGo互毆。
BLACK=」gnugo —mode gtp」
WHITE=」python3 main.py gtp -l path/to/model」
TWOGTP=」gogui-twogtp -black 」WHITE」 -games 10
-size 19 -alternate -sgffile gnugo」
gogui -size 19 -program 「$TWOGTP」 -computer-both -auto
訓練Minigo
概述
接下來呢,跟著這一串的指令做,你能得到增強學習在9x9圍棋上的迭代。這些很基礎的指令都是用來建前面提到的模型的。
這些指令是:
bootstrap:初始化模型;
自我博弈:用最新版的模型自我對弈下棋,產生可用來訓練的數據;
收集:把同一個模型產生的數據文件導入到訓練數據中;
訓練:用N代自我對弈產生的結果訓練一個新模型。
Bootstrap
這一步的指令是創建模型,放在gs://MODEL_NAME(.index|.meta|.data-00000-of-00001)
export MODEL_NAME=000000-bootstrap
python3 main.py bootstrap gs://MODEL_NAME
自我對弈
這步指令是輸出原始對戰數據,能夠兼容TensorFlow格式以及目錄下的SGF。
gs://MODEL_NAME/local_worker/.tfrecord.zz
gs://MODEL_NAME/local_worker/.sgf
python3 main.py selfplay gs://MODEL_NAME
—readouts 10
-v 3
—output-dir=gs:/MODEL_NAME/local_worker
—output-sgf=gs://MODEL_NAME/local_worker
搜集
python3 main.py gather
這指令是把(可能只有幾KB大小的)tfrecord.zz文件打亂重組成不到100MB的tfrecord.zz文件。
根據模型的編號來搜集數據,這樣同一個模型產生的數據就會放在一起。默認情況下,目錄里的文件名,rl_loop.py之前後加個環境參數BUCKET_NAME的前綴。
gs://MODEL_NAME-.tfrecord.zz
gs://$BUCKET_NAME/data/training_chunks/meta.txt文件是用來查看目前是在處理哪個遊戲。
python3 main.py gather
—input-directory=gs:/BUCKET_NAME/data/training_chunks
訓練
這步指令刨出最新的50個模型的訓練,以及參考最新的模型權重來訓練新的模型。
運行訓練任務:
python3 main.py train gs://BUCKET_NAME/models/000001-somename
—load-file=gs://$BUCKET_NAME/models/000000-bootstrap
—generation-num=1
—logdir=path/to/tensorboard/logs
已經更新的模型權重會被保存下來。
(要做的事兒:搞幾個本地的基於global_step的檢查點兒,醬回頭可以任性地恢復)
另外,你可以一步步跟著TensorBoard訓練的指南。如果你給每次運行都不同的名字的話,比方說,logs/my_training_run,logs/my_training_run2,你可以覆蓋掉之前的數據。
tensorboard —logdir=path/to/tensorboard/logs/
在Kubernetes Cluster上運行Minigo啦
自個兒去cluster/README.md看!
最後,附開源代碼地址,
https://github.com/tensorflow/minigo
—完—
加入社群
量子位AI社群13群開始招募啦,歡迎對AI感興趣的同學,加小助手微信qbitbot5入群;
此外,量子位專業細分群(自動駕駛、CV、NLP、機器學習等)正在招募,面向正在從事相關領域的工程師及研究人員。
進群請加小助手微信號qbitbot5,並務必備註相應群的關鍵詞~通過審核後我們將邀請進群。(專業群審核較嚴,敬請諒解)
誠摯招聘
量子位正在招募編輯/記者,工作地點在北京中關村。期待有才氣、有熱情的同學加入我們!相關細節,請在量子位公眾號(QbitAI)對話界面,回復「招聘」兩個字。


※2018年AI如何發展?普華永道做出了8點預測
※一個發財的機會擺在眼前:投資無人車天才團隊,預期收益80倍!
TAG:量子位 |