28 天自制你的 AlphaGo (3) : 訓練策略網路,真正與之對弈
知乎對於人機大戰的關注度很高,所以寫這個系列,希望能讓大家對於人工智慧和圍棋有更多的了解。如果有收穫,請記得點一下贊。
這篇我們安裝 TensorFlow,真正訓練一下 AlphaGo v13 的 policy network,並且你還可以與它真正對弈,因為前幾天已經有網友在做可以運行的 AlphaGo v13 的簡化版:brilee/MuGo。所以這個過程真的已經很傻瓜化,毫不誇張地說,人人都可以擁有一隻小狗了,只要你把棋譜餵給它,它就能學到棋譜的棋風。(如果不會圍棋,可以看本系列的第一篇入門:https://zhuanlan.zhihu.com/p/24801451 )(本文是給大家快速找到感覺,後續我們會從頭寫代碼,因為這位網友的代碼真的很多 bug)
本系列已更新多篇,其它幾篇的傳送門:
- (1) : 圍棋 AI 基礎 知乎專欄
- (2) : 安裝 MXNet 搭建深度學習環境 知乎專欄
- (4) : 對於策略網路的深入分析(以及它的弱點所在) 知乎專欄
- (4.5):後文預告(Or 為什麼你應該試試 Batch Normalization 和 ResNet)知乎專欄
一、安裝 TensorFlow
如果還沒有裝 CUDA 等等,請看前一篇(知乎專欄)裝好,記得把 cudnn 解壓到 CUDA 的目錄。TensorFlow 最近開始原生支持 Windows,安裝很方便。下面看 Windows 的安裝。
1. 在上一篇我們裝了 Anaconda Python 2.7,而 TensorFlow 需要 Python 3.5,不過兩者在 Windows 下也可以共存,具體見:Windows下Anaconda2(Python2)和Anaconda3(Python3)的共存 - Infin1te的博客 - 博客頻道 - CSDN.NET
2. 按上文切換到 Python 3,然後一個命令就可以裝好: https://www.tensorflow.org/versions/master/get_started/os_setup.html#pip-installation-on-windows 。例如 GPU 版本目前是:pip install --upgrade https://storage.googleapis.com/tensorflow/windows/gpu/tensorflow_gpu-0.12.0rc1-cp35-cp35m-win_amd64.whl 。但是,你很可能會遇到 404 錯誤,那麼可以把這個文件用迅雷下載下來,然後 pip install 文件名 即可。
3. 裝完後檢驗一下。首先進 python 然後 import tensorflow 然後 hello = tf.constant("Hello, TensorFlow!") 然後 sess = tf.Session() 然後 print(sess.run(hello))。
4. 然後 python -m tensorflow.models.image.mnist.convolutional 測試訓練 MNIST 模型(一開始也會下載數據文件,比較慢)。
另外再看看 Mac 的安裝。我是 OSX 10.11。
1.首先 sudo easy_install pip 然後 sudo easy_install --upgrade six 然後 pip install tensorflow-gpu 即可。
2. 可能需要再執行 sudo ln -s /usr/local/cuda/lib/libcuda.dylib /usr/local/cuda/lib/libcuda.1.dylib ,否則 import tensorflow 會報錯。
3. 用一樣的辦法檢驗一下安裝是否成功。
二、訓練策略網路
激動人心的時刻到了,我們開始真正訓練 policy network。下面都以 Windows 下面的操作為例。
1. 把網友做好的 AlphaGo v13 簡化版下載下來:brilee/MuGo 。然後 pip install 了 argh 和 sgf。注意 gtp 要額外裝:jtauber/gtp (下載下來後用 easy_install . 裝)。
2. 然後下載一些用於學習的棋譜。圍棋棋譜的通用格式是 SGF。比如,就下載 KGS 的對局棋譜吧:u-go.net 。我沒有統計過,不過上面大概有十萬局吧。從原理上說,棋譜越多,訓練的質量就越有保證;但是,棋譜中對弈者的水平參差不齊,如何控制這一變數,做過深度學習的朋友心中會有答案。本篇先不談技術細節,我們先繼續走。
3. 下面提取棋譜的特徵,並將其分類為訓練集和測試集。先建立 data 子目錄,把 SGF 拷貝進去。例如下載 2014 年的 13029 局棋譜,解壓到 data 下面是 kgs-19-2014,那麼就執行
python main.py preprocess data/kgs-19-2014
截至今天為止,你會發現它寫的 chunk 比預想少很多,所以生成的訓練數據很少。具體來說,棋譜的讓子大於 4 會崩潰,棋譜沒有寫明貼目會崩潰,有時候棋譜裡面的 [tt] 其實也代表 PASS,等等。做為作業,請自己一個個修復吧! SGF 格式的說明在此:SGF file format FF[4]
4. 再建立一個 tmp 目錄,然後開始訓練 1 個周期:
python main.py train processed_data --save-file=tmpsavedmodel --epochs=1 --logdir=logsmy_training_run
5. 你會發現策略網路的預測準確率開始從 0 慢慢上升了! 然後可以隨時繼續訓練,比如說繼續訓練 10 個周期就是:
python main.py train processed_data --read-file=tmpsavedmodel --save-file=tmpsavedmodel --epochs=10 --logdir=logsmy_training_run
6. 訓練的時候,可以再開一個命令行,激活 python3,然後 tensorboard --logdir=logs 然後在瀏覽器打開 http://127.0.0.1:6006/ 可以看到訓練的過程:
7. 一直訓練到準確率增加緩慢為止,應該可以到接近 60%。
三、與自製小狗對弈
8. 測試一下走棋(如果你會 GTP 協議):python main.py gtp policy --read-file=tmpsavedmodel 這是純網路輸出。如果把 policy 改成 mcts 就是加入了蒙特卡洛樹搜索的,棋力更高(但是截至今天為止,你執行會發現立刻退出,這位網友的程序 bug 真是太多了,我們以後再重寫)。
9. 如果不會 GTP,還是下載 GoGui 圍棋圖形界面吧: Download GoGui from SourceForge.net 。然後執行:"C:Program Files (x86)GoGuigogui-twogtp.exe" -black "python main.py gtp policy --read-file=tmpsavedmodel" -white "C:Program Files (x86)GoGuigogui-display" -size 19 -komi 7.5 -verbose -auto,但是截至今天為止,你會發現它很快就報錯退出......
10. 這是因為截至今天為止,代碼有個 bug 是 strategies.py 的第 95 行的函數要改成 is_move_reasonable(position, move) 。然後......你親手製造的小狗就可以運行了! 黑棋是小狗:
Behold,小狗已經學會了守角! 不過現在他還特別弱,因為沒有搜索,容易死活出問題。
11. 如果不會下圍棋,讓 GnuGo 來玩玩吧,下載鏈接:http://gnugo.baduk.org/gnugo2/gnugo-3.8.zip ,比如解壓到 C:gnugognugo.exe ,然後執行:"C:Program Files (x86)GoGuigogui.exe" -size 19 -computer-both -auto -program "C:Program Files (x86)GoGuigogui-twogtp.exe -black ""C:gnugognugo.exe --level 1 --mode gtp"" -white ""python main.py gtp policy --read-file=tmpsavedmodel"" -games 1 -size 19 -alternate -sgffile gnugo -verbose" 即可。你會發現下到後面也會崩潰,如果打開 GTP Shell 看看,是因為小狗還無法理解對方的 PASS,哈哈。
於是,這篇就到此吧,我們下一篇見。
本系列已更新多篇,其它幾篇的傳送門:
- (1) : 圍棋 AI 基礎 知乎專欄
- (2) : 安裝 MXNet 搭建深度學習環境 知乎專欄
- (4) : 對於策略網路的深入分析(以及它的弱點所在) 知乎專欄
如需轉載本系列,請先與本人聯繫,謝謝。小廣告:晚上工作學習是否覺得光線不夠舒服,精神不夠集中,眼睛容易疲勞?不妨點擊看看我們的自然全光譜燈系列:Blink Sunshine護眼LED燈泡 高顯指97顯色指數無頻閃學習檯燈床頭 如果需要好用的耳機或錢包,我們也有
推薦閱讀:
※圍棋比賽將成為人工智慧「奧運會」的雛形
※AlphaZero實戰:從零學下五子棋(附代碼)
※一張圖看懂AlphaGo Zero
※人機大戰柯潔勝算不到一成,AlphaGo 身後的 TPU 殺傷力究竟有多強大?
※AlphaGo無懸念勝出柯潔,人類更應該關注人工智慧的應用
TAG:AlphaGo | 深度学习DeepLearning | 人工智能 |