當前位置:
首頁 > 科技 > AlphaGo Zero代碼遲遲不開源,TF等不及自己推了一個

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:量子位 |