書籍「将棋AIで学ぶディープラーニング」のプログラムコードを動かす

# やること
書籍「将棋AIで学ぶディープラーニング」マイナビ出版刊(ISBN978-4-8399-6541-9)
の[プログラムコード](https://github.com/TadaoYamaoka/python-dlshogi)を動かす。

- サンプルコードが公開されてるけど、学習の実行コマンドのコピペコードがないので本記事に書き起こします
    - 学習済モデルもダウンロードできるから要らないっちゃ要らないのですが
    - ネットワークをいじくったりして結果にどう差が出るかとか学習したいときにあると良いですよね
- ひとまず手っ取り早く動かして、エラー対処とか改善とかして手法と実装を学ぶ。（0から1のとこでなく、1から10のとこ）

# おそくなりましたが書籍紹介

- [マイナビBooks](https://book.mynavi.jp/ec/products/detail/id=88752):出版元([サポートサイト](https://book.mynavi.jp/supportsite/detail/9784839965419.html))
- [Amazon](https://www.amazon.co.jp/dp/4839965412):[人工知能カテゴリ新着ランキング](https://www.amazon.co.jp/gp/new-releases/books/720370/ref=crw_zg_ts)で1位の流行にのりたい
 
![将棋AIで学ぶディープラーニング](https://book.mynavi.jp/files/topics/88752_ext_06_0.jpg)



# 大筋
1. 第Ⅰ部　導入編第とII部　理論編は読む
1. 第III部　実践編　『第6章    ディープラーニングフレームワーク』に相当するPythonのインストールとか環境構築は[別記事](/kfjt/items/6f861ee826d875735e17)でどうぞ
2. [プログラムコード](https://github.com/TadaoYamaoka/python-dlshogi)をダウンロード
3. [棋譜データ](https://osdn.net/projects/shogi-server/downloads/68500/wdoor2016.7z/)をダウンロード
 --ここ以降にコマンド実行あり、別章わけます--

1. 『第7章    方策ネットワーク(policy network)』で方策を学習する ※[メモ](http://tadaoyamaoka.hatenablog.com/entry/2017/04/06/003219)
1. 『第8章    将棋AIの実装』はディープラーニングでなくゲームAIの実装の話なので省略、本のとおりにやりプログラムの強さ（まだ弱さ？）を実感する
 - [将棋所](http://www.geocities.jp/shogidokoro/)をダウンロード
2. 『第9章    学習テクニック』効率化テクニックを学ぶ ※[メモ](http://tadaoyamaoka.hatenablog.com/entry/2017/05/06/094438)
6. 『第10章    価値ネットワーク(value network)』で局面を評価する
1. 『第11章    学習テクニック その2』で精度をあげる
2. 『第12章    モンテカルロ木探索』はゲームAIの実装の話なので省略
3. 『第13章    さらに発展させるために』を読み仕上げる

# 環境確認
```console:環境確認
>python
Python 3.6.4 |Anaconda, Inc.| (default, Jan 16 2018, 10:22:32) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import cupy
>>> cupy.__version__
'2.5.0'
>>> import cupy.cudnn
>>> import chainer
>>> chainer.__version__
'3.5.0'
>>>quit()
```

# 第7章 ネットワーク学習のお初は方策
- ダウンロードした棋譜データwdoor2016.7zを解凍する
- kifulist_train_1000.txtとkifulist_test_100.txtのパスに合わせる。
    - 私はDドライブがないので`subst D: path\to\wdoor2016`とした
    - Dドライブがあるなら`pushd d:\ & mklink /d 2016 path\to\wdoor2016\2016`でもよさそう
    - 逆に解凍したパスに合わせてkifulist_*.txtを編集してもいいけど、面倒い
- dlshogiのインストールとshogiのインストールと学習

```console:dlshogiのインストールとshogiのインストールと学習
>cd path\to\python-dlshogi
>pip install --no-cache-dir -e .
>pip install python-shogi
>python train_policy.py kifulist_train_1000.txt kifulist_test_100.txt --eval_interval 100 --log log
```

- ログを確認
  - 実行7分くらい、、グラフはこんな感じ、本と似てる？
![Figure_1.png](https://qiita-image-store.s3.amazonaws.com/0/244948/7c85eb20-8e5e-371e-c800-c93df479e2d1.png)

```console:全ての棋譜の学習
>python train_policy.py kifulist_train.txt kifulist_test.txt　--log log2
```

- 再びログを確認
  - 実行3時間くらい、、著者は52分と本に記載がありま。えっ、私の環境遅すぎ
  - グラフはこんな感じ、本と似てる？
![Figure_2.png](https://qiita-image-store.s3.amazonaws.com/0/244948/2de580a2-d2bb-a5ad-f5e5-5b898f94a45c.png)

# 第9章 効率化のテクニック
- Batch Normalizationは神
    - [著者のブログ１](http://tadaoyamaoka.hatenablog.com/entry/2017/05/06/094438)
    - [著者のブログ２](http://tadaoyamaoka.hatenablog.com/entry/2018/03/24/162451)
    - [Qiitaの記事](/search?q=Batch+Normalization)

# 第10章 局面を評価する
- 10.2章,10.3章の層の追加について解説をなるほどと読んで学習開始する

```console:学習
>python train_value.py kifulist_train.txt kifulist_test.txt --log log_v
```
- こちらも実行3時間くらい
- policy v.s. value
 - policyが勝つた
 - 10章末にも1手のみの探索では強くないと書いてます
 - いいのかな？次章に期待

# 第11章 効率と精度が一挙両得ってホントですか
- 転移学習、少ないデータでも精度があがる
    - [著者のブログ](http://tadaoyamaoka.hatenablog.com/entry/2017/06/07/224202)
    - [Qiitaの記事](/search?q=転移学習)
    - 人も学習の転移は起きるらしい「心理学+学習転移」でググると興味深い

```console:書籍P188のままだとmodelファイルパスが合わないので注意
>python utils\transfer_policy_to_value.py model\model_policy model\model_value_transferred
```
```console:こちらも書籍P190に対してmodelパス合わせてます
>python train_value.py kifulist_train.txt kifulist_test.txt -m model\model_value_transferred --log log_v_t
```
- マルチタスク学習、同時に学ぶと精度があがる
    - [著者のブログ](http://tadaoyamaoka.hatenablog.com/entry/2017/06/08/000040)
    - [Qiitaの記事](/search?q=マルチタスク学習)

```console:マルチタスク学習
>python train_policy_value.py kifulist_train.txt kifulist_test.txt --log log_p_v
```
- ResNet
    - [著者のブログ](http://tadaoyamaoka.hatenablog.com/entry/2017/11/21/212509)
    - [Qiitaの記事](/search?q=ResNet)

```console:ResNet
>python train_policy_value_resnet.py kifulist_train.txt kifulist_test.txt --log log_res
```
# 第12章 モンテカルロ木探索
- [著者のブログ１](http://tadaoyamaoka.hatenablog.com/entry/2017/06/03/235918)
- [著者のブログ２](http://tadaoyamaoka.hatenablog.com/entry/2017/06/19/004804)
- 13章にもでてきますが、モンテカルロ法を用いてネットワークを強化するとか、ゲームAIに限らず応用効きそうなので本を閉じたら調べてみる。

おしまい