0
本文作者: 彭博 | 2017-01-25 21:33 |
雷鋒網(wǎng)注:本文作者彭博,Blink·稟臨科技聯(lián)合創(chuàng)始人。文章由雷鋒網(wǎng)整理自作者知乎專欄,獲授權(quán)發(fā)布,未經(jīng)允許禁止轉(zhuǎn)載。
上次我們介紹了圍棋基礎(chǔ)和如何搭建深度學(xué)習(xí)環(huán)境,這篇我們安裝 TensorFlow,真正訓(xùn)練一下 AlphaGo v13 的 policy network,并且你還可以與它真正對弈,因?yàn)榍皫滋煲呀?jīng)有網(wǎng)友在做可以運(yùn)行的 AlphaGo v13 的簡化版:brilee/MuGo。所以這個(gè)過程真的已經(jīng)很傻瓜化,毫不夸張地說,人人都可以擁有一只小狗了,只要你把棋譜喂給它,它就能學(xué)到棋譜的棋風(fēng)。(本文是給大家快速找到感覺,后續(xù)我們會(huì)從頭寫代碼,因?yàn)檫@位網(wǎng)友的代碼真的很多 bug)
如果還沒有裝 CUDA 等等,請看前一篇《28 天自制你的 AlphaGo(一)》裝好,記得把 cudnn 解壓到 CUDA 的目錄。TensorFlow 最近開始原生支持 Windows,安裝很方便。
一、Windows 的安裝
1. 在上一篇我們裝了 Anaconda Python 2.7,而 TensorFlow 需要 Python 3.5,不過兩者在 Windows 下也可以共存,具體見:Windows下Anaconda2(Python2)和Anaconda3(Python3)的共存。
2. 按上文切換到 Python 3,然后一個(gè)命令就可以裝好:tensorflow.org/versions/。例如 GPU 版本目前是:pip install --upgrade storage.googleapis.com。但是,你很可能會(huì)遇到 404 錯(cuò)誤,那么可以把這個(gè)文件用迅雷下載下來,然后 pip install 文件名 即可。
3. 裝完后檢驗(yàn)一下。首先進(jìn) python 然后 import tensorflow 然后 hello = tf.constant('Hello, TensorFlow!') 然后 sess = tf.Session() 然后 print(sess.run(hello))。
4. 然后 python -m tensorflow.models.image.mnist.convolutional 測試訓(xùn)練 MNIST 模型(一開始也會(huì)下載數(shù)據(jù)文件,比較慢)。
二、Mac 的安裝
再看看 Mac 的安裝。我是 OSX 10.11。
1.首先 sudo easy_install pip 然后 sudo easy_install --upgrade six 然后 pip install tensorflow-gpu 即可。
2. 可能需要再執(zhí)行 sudo ln -s /usr/local/cuda/lib/libcuda.dylib /usr/local/cuda/lib/libcuda.1.dylib ,否則 import tensorflow 會(huì)報(bào)錯(cuò)。
3. 用一樣的辦法檢驗(yàn)一下安裝是否成功。
三、訓(xùn)練策略網(wǎng)絡(luò)
激動(dòng)人心的時(shí)刻到了,我們開始真正訓(xùn)練 policy network。下面都以 Windows 下面的操作為例。
1. 把網(wǎng)友做好的 AlphaGo v13 簡化版下載下來:brilee/MuGo 。然后 pip install 了 argh 和 sgf。注意 gtp 要額外裝:jtauber/gtp (下載下來后用 easy_install . 裝)。
2. 然后下載一些用于學(xué)習(xí)的棋譜。圍棋棋譜的通用格式是 SGF。比如,就下載 KGS 的對局棋譜吧:u-go.net 。我沒有統(tǒng)計(jì)過,不過上面大概有十萬局吧。從原理上說,棋譜越多,訓(xùn)練的質(zhì)量就越有保證;但是,棋譜中對弈者的水平參差不齊,如何控制這一變量,做過深度學(xué)習(xí)的朋友心中會(huì)有答案。本篇先不談技術(shù)細(xì)節(jié),我們先繼續(xù)走。
3. 下面提取棋譜的特征,并將其分類為訓(xùn)練集和測試集。先建立 data 子目錄,把 SGF 拷貝進(jìn)去。例如下載 2014 年的 13029 局棋譜,解壓到 data 下面是 kgs-19-2014,那么就執(zhí)行
python main.py preprocess data/kgs-19-2014
截至今天為止,你會(huì)發(fā)現(xiàn)它寫的 chunk 比預(yù)想少很多,所以生成的訓(xùn)練數(shù)據(jù)很少。具體來說,棋譜的讓子大于 4 會(huì)崩潰,棋譜沒有寫明貼目會(huì)崩潰,有時(shí)候棋譜里面的 [tt] 其實(shí)也代表 PASS,等等。做為作業(yè),請自己一個(gè)個(gè)修復(fù)吧! SGF 格式的說明在此:SGF file format FF
4. 再建立一個(gè) tmp 目錄,然后開始訓(xùn)練 1 個(gè)周期:
python main.py train processed_data --save-file=tmp\savedmodel --epochs=1 --logdir=logs\my_training_run
5. 你會(huì)發(fā)現(xiàn)策略網(wǎng)絡(luò)的預(yù)測準(zhǔn)確率開始從 0 慢慢上升了! 然后可以隨時(shí)繼續(xù)訓(xùn)練,比如說繼續(xù)訓(xùn)練 10 個(gè)周期就是:
python main.py train processed_data --read-file=tmp\savedmodel --save-file=tmp\savedmodel --epochs=10 --logdir=logs\my_training_run
6. 訓(xùn)練的時(shí)候,可以再開一個(gè)命令行,激活 python3,然后 tensorboard --logdir=logs 然后在瀏覽器打開 http://127.0.0.1:6006/ 可以看到訓(xùn)練的過程:
7. 一直訓(xùn)練到準(zhǔn)確率增加緩慢為止,應(yīng)該可以到接近 60%。
8. 測試一下走棋(如果你會(huì) GTP 協(xié)議):python main.py gtp policy --read-file=tmp\savedmodel 這是純網(wǎng)絡(luò)輸出。如果把 policy 改成 mcts 就是加入了蒙特卡洛樹搜索的,棋力更高(但是截至今天為止,你執(zhí)行會(huì)發(fā)現(xiàn)立刻退出,這位網(wǎng)友的程序 bug 真是太多了,我們以后再重寫)。
9. 如果不會(huì) GTP,還是下載 GoGui 圍棋圖形界面吧: Download GoGui from SourceForge.net 。然后執(zhí)行:"C:\Program Files (x86)\GoGui\gogui-twogtp.exe" -black "python main.py gtp policy --read-file=tmp\savedmodel" -white "C:\Program Files (x86)\GoGui\gogui-display" -size 19 -komi 7.5 -verbose -auto,但是截至今天為止,你會(huì)發(fā)現(xiàn)它很快就報(bào)錯(cuò)退出......
10. 這是因?yàn)榻刂两裉鞛橹梗a有個(gè) bug 是 strategies.py 的第 95 行的函數(shù)要改成 is_move_reasonable(position, move) 。然后......你親手制造的小狗就可以運(yùn)行了! 黑棋是小狗:
Behold,小狗已經(jīng)學(xué)會(huì)了守角! 不過現(xiàn)在他還特別弱,因?yàn)闆]有搜索,容易死活出問題。
11. 如果不會(huì)下圍棋,讓 GnuGo 來玩玩吧,下載鏈接:gnugo.baduk.org/,比如解壓到 C:\gnugo\gnugo.exe ,然后執(zhí)行:"C:\Program Files (x86)\GoGui\gogui.exe" -size 19 -computer-both -auto -program "C:\Program Files (x86)\GoGui\gogui-twogtp.exe -black ""C:\gnugo\gnugo.exe --level 1 --mode gtp"" -white ""python main.py gtp policy --read-file=tmp\savedmodel"" -games 1 -size 19 -alternate -sgffile gnugo -verbose" 即可。你會(huì)發(fā)現(xiàn)下到后面也會(huì)崩潰,如果打開 GTP Shell 看看,是因?yàn)樾」愤€無法理解對方的 PASS,哈哈。
于是,這篇就到此吧,我們下一篇見。
雷峰網(wǎng)特約稿件,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。