書籍「将棋AIで学ぶディープラーニング 山岡 忠夫 著」をMacとGoogle ColabのGPUで動かす方法を説明する。
書籍内で説明されているプログラムのソースコードは著者のGitHubに公開されている。
https://github.com/TadaoYamaoka/python-dlshogi.git
環境
iMac
iMac 2020 27inch デフォルトモデル
3.1GHz 6コア第10世代Intel Core i5プロセッサ
Turbo Boost使用時最大4.5GHz
8GB 2,666MHz DDR4メモリ
256GB SSDストレージ
Radeon Pro 5300(4GB GDDR6メモリ搭載)
OS : Catalina
Python : 3.8.2と2.7プリインストール。今回は3.8.2を使用。
Google Colab
Python 3.6.9
将棋GUI
将棋所 バージョン1.2.2 (6)
結果概略
iMac側でファイルを準備してGoogle Driveと同期。
Google Colab側で学習実行。
iMac上で対局。自分(アマ初段) 対 AI(第8章段階。方策ネットワーク 有り。価値ネットワーク 無し。モンテカルロ木探索 無し。)普通に強かった。
目次
Google Colab
Google Colabを使う
Google Colabを使える状態にする
ローカル側
ドライブをマウントする
GPUを有効にする
chainerをインストール
python-shogiとpydlshogiをインストール
Google Colabを使う
ローカル側
Colab側
学習実行
GPUはCPUの25倍高速
ディープラーニングフレームワーク
第1章~第6章
第1章〜第5章
第6章 ディープラーニングフレームワーク
chainerとnumpyのWarning
方策ネットワーク
第7章
方策ネットワーク層構成
全体図
入力
L1
L2~L12
L13
L13_bias
第7章1~4
policy.py
フィルター数194個の意味
1×1フィルターの意味
common.py
bb_rotate180()
features.py
make_input_features()
make_input_features_from_board()
make_output_label()
make_features()
第7章5~7
read_kifu.py
read_kifu()
第7章8
GPUとCPUの自動使い分け
pickleのプロトコル
train_policy.py
第7章9
学習実行
第8章1~4
USIエンジンの実装
policy_player.py
y = self.model(x)
logits = y.data[0]
probabilities = F.softmax(y).data[0]
GPU/CPUとPCの自動切り替え
戦略設定
全コード
テスト
コマンドラインからテスト
Google Colabからテスト
USIプロトコルの座標系
第8章
戦略
グリーディー戦略
ソフトマックス戦略
第8章5~9
GUIソフトに登録
エンジン登録が終わらない問題
対局
第9章
学習テクニック
SGD
Momentum SGD
SGD , Batch Normalization
価値ネットワーク
第10章
価値ネットワーク層構成
全体図
入力(方策ネットワークと同じ)
L1(方策ネットワークと同じ)
L2~L12(方策ネットワークと同じ)
L13_v
L14_v
L15_v
第10章6〜9
1手探索のAI(search1_player.py)
合法手フィルタリングの場所
features.append(make_input_features_from_board(self.board))
y.data
for i, move in enumerate(legal_moves):
対局
第11章
学習テクニック
普通の学習
転移学習
マルチタスク学習
Residual Network
policy_value_resnet.py
モンテカルロ木探索
第12章 全体感
モンテカルロ木探索の全体像
モンテカルロ木探索の骨子uct_search()
第12章 詳細
ハッシュ
expand_node()
eval_node()
select_max_ucb_child()
第12章
将棋AIの評価値の計算方法
第12章 対局
mcts_player.py
モデルロードの引数を追加
CPU/GPU自動切り替え
コマンドラインからテスト
GPUはCPUの2倍高速
探索打ち切りの効果
探索回数
対局
単語
単語
shogi.BB_SQUARES
shogi.COLORS
shogi.CSA.Parser.parse_file(filepath)
shogi.PIECE_TYPES_WITH_NONE
shogi.MAX_PIECES_IN_HAND
shogi.SQUARES
Moveクラス
from_square
to_square
Boardクラス
piece_bb
occupied
pieces_in_hand
move_number
コメント