contents memorandum はてな

目次とメモを置いとく場

『強い将棋ソフトの創りかた―― Pythonで実装するディープラーニング将棋AI』(山岡忠夫, 加納邦彦 マイナビ出版 2021)

著者:山岡 忠夫[やまおか・ただお] エンジニア。
著者:加納 邦彦[かのう・くにひこ] エンジニア。
カバー:海江田 暁[かいえだ・さとる] (Dada House
図版制作:島村 龍胆[しまむら・りんどう] 
編集担当:山口 正樹[やまぐち・まさき] 
cover illustration:Tanya Shatseva / Shutterstock.com
cover photo:DRN Studio / Shutterstock.com
シリーズ:Compass Programming
NDC:007.64 情報学.情報科学 >> データ処理.情報処理 >> プログラミング
NDC:796 諸芸.娯楽 >> 将棋
件名:プログラミング(コンピュータ)
件名:将棋
件名:深層学習


強い将棋ソフトの創りかた | マイナビブックス

【書籍の宣伝】強い将棋ソフトの創りかた - TadaoYamaokaの開発日記


【目次】
はじめに [iii-iv]
本書の読み方 [v-vii]
  本書の構成
  対象読者
  読み進め方
  ソースコード
目次 [viii-x]


  Part 1 導入編

第1章 コンピュータ将棋について
1.1 コンピュータ将棋の歴史
1.2 コンピュータ将棋とディープラーニング
1.3 コンピュータ将棋の大会
  1.3.1 コンピュータ将棋の大会について
  1.3.2 大会への参加方法
    世界コンピュータ将棋選手権
    世界将棋AI電竜戦
  1.3.3 コンピュータ将棋連続対局場所(floodgate)


  Part 2 理論編

第2章 コンピュータ将棋のアルゴリズム
2.1 従来のアルゴリズム 011
  2.1.1 ゲーム木
  2.1.2 ミニマックス法
  2.1.3 評価関数
  2.1.4 αβ法
  2.1.5 評価関数の機械学習
  2.1.6 強化学習

2.2 コンピュータ囲碁アルゴリズム 017
  2.2.1 コンピュータ囲碁の課題
  2.2.2 モンテカルロ法
  2.2.3 モンテカルロ木探索
    1. 選択
    2. 展開
    3. プレイアウト
    4. バックアップ
  2.2.4 マルチアームドバンディッド問題
    マルチアームドバンディッド問題
    UCB1アルゴリズム
  2.2.5 UCTアルゴリズム
    1. 選択
    2. 展開
    3. プレイアウト
    4. バックアップ
    優先順位の制御
    並列化
      (1) ルート並列化
      (2) ツリー並列化
    Virtual Loss

2.3 AlphaGoの手法 025
  2.3.1 方策ネットワーク
  2.3.2 価値ネットワーク
  2.3.3 AlphaGoの探索アルゴリズム
    1. 選択
    2. 評価
    3. バックアップ
    4. 展開
  2.3.4 AlphaGo Zeroの手法
  2.3.5 AlphaZero
  Tips ディープラーニングはαβ法で使えないのか 031

2.4 ディープラーニングの将棋AIへの応用 030
2.5 まとめ 031


第3章 ディープラーニングの基本
3.1 ニューラルネットワーク 033
  3.1.1 パーセプトロン
  3.1.2 多層パーセプトロン
  3.1.3 活性化関数
    出力層の活性化関数
    中間層の活性化関数
  3.1.4 順伝播

3.2 ニューラルネットワークの学習 039
  3.2.1 損失関数
  3.2.2 誤差逆伝播
    勾配降下法
    誤差逆伝播
    活性化関数と損失関数の微分
  3.2.3 確率的勾配降下法[Stochastic Gradient Decent]
  3.2.4 最適化手法
    Momentum SGD
  3.2.5 ミニバッチ学習の手順
  3.2.6 正規化
  3.2.7 重みの初期値
  3.2.8 過学習について
    正則化
    dropout

3.3 Batch Normalization 045

3.4 分類問題と回帰問題 045
  3.4.1 分類問題
    2値分類問題
    多クラス分類問題
  3.4.2 回帰問題

3.5 畳み込みニューラルネットワーク 048
  3.5.1 畳み込み演算
    ゼロパディング
    バイアス
    ストライド
    畳み込み層
  3.5.2 プーリング層
  3.5.3 畳み込みニューラルネットワーク

3.6 まとめ 053


  Part 3 実装編

第4章 ディープラーニングフレームワーク
4.1 ディープラーニングフレームワークについて 057

4.2 GPU 058

4.3 Google Colab[Google Colaboratory] 058
  4.3.1 Google Colabの基本的な使い方
    1. ノートブックの新規作成
    2. コードセルの実行
    3. コードセル追加
    4. セルのコピー
    5. ランタイムタイプをGPUに変更
    6. ランタイムの仕様の変更
    7. セッションの管理
    8. ヘルプ
  4.3.2 GitHub上のノートブックの開き方

4.4 PyTorchの基本 073
  4.4.1 インポート
  4.4.2 ハイパーパラメータ
  4.4.3 データセット
  4.4.4 データローダ
  4.4.5 デバイス
  4.4.6 ニューラルネットワークの定義
  4.4.7 モデルのインスタンス化とデバイスへの転送
  4.4.8 損失関数
  4.4.9 オプティマイザ
  4.4.10 訓練ループ
  4.4.11 実行結果
  4.4.12 推論
4.5 まとめ 084


第5章 Pythonで将棋AIを創る
5.1 将棋ライブラリcshogi 085
  5.1.1 インストール
  5.1.2 パッケージインポート
  5.1.3 基本的な使い方
    盤面作成
    合法手生成
    手を指す
  5.1.4 座標系
  5.1.5 駒
    駒の種類を表す定数
    先手後手を区別する駒を表す定数
    持ち駒を表す定数
  5.1.6 指し手
  5.1.7 メソッド・プロパティ一覧
    Boardクラス
    指し手を変換するヘルパー関数
    CSA.Parseクラス

5.2 ソースコードとモジュールインストール 095
  5.2.1 ソースコード
  5.2.2 パッケージインストール

5.3 ディープラーニングの将棋AIへの応用 096
  5.3.1 方策ネットワーク(policy network)
    入力
    出力
    移動元の考慮
    出力ラベル数
  5.3.2 価値ネットワーク(value network)
    入力
    出力
  5.3.3 マルチタスク学習
  5.3.4 ニューラルネットワークの構成
    入力層
    中間層
  5.3.5 出力層
    方策ネットワークの出力量
    価値ネットワークの出力量

5.4 将棋AIモデルの実装 107
  5.4.1 入力特徴量の実装
  5.4.2 方策ネットワークの出力ラベルの実装
  5.4.3 価値ネットワークの出力ラベルの実装
  5.4.4 ニューラルネットワークの実装

5.5 モデルの学習 113
  5.5.1 訓練データの準備
    dloodgateの棋譜
    CSA形式の棋譜からhcpe形式[HuffmanCodedPosAndEval]に変換
  5.5.2 訓練の実装
    コマンド引数
    デバイス初期化
    ニューラルネットワークの初期化
    オプティマイザ
    損失関数
    チェックポイント読み込み
    データ読み込み
    正解率
    チェックポイント保存
    訓練
  5.5.3 訓練の実行
  5.5.4 チェックポイントをローカルにダウンロード

5.6 まとめ 130


第6章 対局プログラムの実装
6.1 GUIソフト 131

6.2 USIプロトコル 132
  6.2.1 座標系
  6.2.2 usiコマンド
  6.2.3 isreadyコマンド
  6.2.4 usinewgameコマンド
  6.2.5 positionコマンド
    (1) 開始局面からの指し手
    (2) SFEN形式
  6.2.6 goコマンド
  6.2.7 ponder
  6.2.8 quitコマンド

6.3 USIエンジンの基本処理 139

6.4 ゲーム木 142
  6.4.1 UctNodeクラスの実装
  6.4.2 NodeTreeクラスの実装

6.5 モンテカルロ木探索の実装 147
  6.5.1 コンストラク
  6.5.2 usiメソッド
  6.5.3 setoptionメソッド
  6.5.4 isreadyメソッド
  6.5.5 positionメソッド
  6.5.6 set_limitsメソッド
  6.5.7 goメソッド
  6.5.8 searchメソッド
  6.5.9 uct_searchメソッド
  6.5.10 select_max_ucb_childメソッド
  6.5.11 get_bestmove_and_print_pvメソッド
  6.5.12 check_interruptionメソッド
    ノード数チェック
    探索打ち切り
    探索延長
  6.5.13 queue_nodeメソッド
  6.5.14 evalメソッド
  6.5.15 inferメソッド

6.6 起動処理 172

6.7 テスト 173

6.8 Colabで対局 176
  6.8.1 人間プレイヤーとの対局
  6.8.2 USIエンジンとの対局
  6.8.3 dlshogiのモデルと対局

6.9 PCで対局 182
  6.9.1 GPU
  6.9.2 Python
    ダウンロードしてインストールする方法
  6.9.3 PyTorchの環境構築
  6.9.4 パッケージインストール
  6.9.5 バッチファイル作成
  6.9.6 コマンドラインからテスト
  6.9.7 モデルファイルの配置
  6.9.8 将棋所のインストール
  6.9.9 将棋所にエンジン登録
  6.9.10 対局

6.10 まとめ 190


第7章 GCT電竜を超える強い将棋AIを創る
7.1 GCT電竜 191
  7.1.1 世界将棋AI電竜戦とは
  7.1.2 GCT電竜の紹介
    開発の経緯と動機
    dlshogiライブラリとモデルの関係
    Colabの使用について
  7.1.3 使用した棋譜
    事前学習
      floogate
      教師データの条件
      elmo_for_learn
    AobaZero棋譜
    dlshogiの強化学習
  7.1.4 公開したGCTの成果物
  Column dlshogiとGCT 197

7.2 dlshogiライブラリ 198
  7.2.1 学習部
    パッケージインストール
    コマンド
    オプション引数
    ファイル形式
    チェックポイントとモデルファイル
    ONNX形式への変換
  7.2.2 探索部
    推論ライブラリ
    探索部の特徴
  7.2.3 入力特徴量
  7.2.4 ニューラルネットワークの構成
    入力層
    中間層
    活性化関数
  7.2.5 学習テクニック
    指し手のみの学習と方策の分布の学習
    平均化
    ブートストラップ
    オプティマイザ
    学習率スケジューラ
    Stochastic Weight Averating(SWA)
    Automatic Mixed Precision(AMP)
  7.2.6 ユーティリティ
  Column dlshogiが影響を受けたソフトウェア 210

7.3 dlshogiライブラリを使用したモデルの学習 211
  7.3.1 ノートブックの処理時間
  7.3.2 本書で使用する棋譜
  7.3.3 ノートブックの実行
    ランタイムタイプの実行
    CUDAバージョンの確認
    タイムゾーンの変更
    共有アイテムのショートカット作成
    Google Driveのマウント
    作業ディレクトリの作成
    シンボリックリンクの作成
    データの確認
    学習
    ログの可視化
    学習済みファイルのコピー
    ONNX形式のモデルに変換

7.4 対局 226
  7.4.1 USIオプション設定
  7.4.2 ColabRTのインストール
    TensorRTのインストール
    dlshogiのビルド
    onnxモデルの準備
    USIエンジン同士の対局
  7.4.3 PCでの対局
    dlshogiのインストール
      GPU
      インストール
      CUDA
      cuDNN
      TensorRT
    将棋所で水匠4改と対局
      dlshogiのダウンロード
      水匠4改のダウンロード
      対局
  7.4.4 floodgateに放流

7.5 まとめ 256


  Part4 発展 編

第8章 さらに強くするために
8.1 強化学習 259
  8.1.1 初期局面集
  8.1.2 ランダムによる多様性確保
  8.1.3 並列実行
  8.1.4 詰み探索
  8.1.5 USIエンジンとのリーグ戦
  8.1.6 自己対局
    ビルド
    引数
    自己対局実行

8.2 定跡作成 265
  8.2.1 ビルド
  8.2.2 相手番定跡作成
  8.2.3 定跡作成実行

8.3 探索パラメータの最適化 268
  8.3.1 dlshogiのビルド
  8.3.2 基準USIエンジンとしてのやねうら王のビルド
  8.3.3 パッケージインストール
  8.3.4 optunaのstudy作成
  8.3.5 最適化実行

8.4 棋力計測 274
  8.4.1 互角局面集
  8.4.2 仮説検定
  8.4.3 連続対局の方法

8.5 まとめ 280


参考文献 [281]
INDEX:索引 [282-284]
著者について [285]




【メモランダム】
・著者それぞれがインタビューを受けた記事。コンピュータ将棋開発への情熱が伝わる。
最強CPU将棋ソフト『水匠』VS最強GPU将棋ソフト『dlshogi』長時間マッチ観戦記 第二譜『dlshogi』山岡忠夫の信念 | 文春オンライン
最強CPU将棋ソフト『水匠』VS最強GPU将棋ソフト『dlshogi』長時間マッチ観戦記 第三譜『GCT』加納邦彦の自信 | ニコニコニュース オリジナル




【関連記事】
『速習 強化学習――基礎理論とアルゴリズム』(Csaba Szepesvári著 小山田創哲ほか訳 共立出版 2017//2010)
『これからの強化学習』(牧野貴樹編 森北出版 2016)
『Java将棋のアルゴリズム――アルゴリズムの強化手法を探る』(池泰弘 工学社 2016//2007)


『先を読む頭脳』(羽生善治,松原仁,伊藤毅志 新潮文庫 2009//2006)
『頭脳対決!棋士vs.コンピュータ』(田中徹,難波美帆 新潮文庫 2013//2011)
『強いAI・弱いAI ―― 研究者に聞く人工知能の実像』(鳥海不二夫 丸善出版 2017)
『「次の一手」はどう決まるか――棋士の直観と脳科学』(中谷裕教,伊藤毅志,勝又清和,川妻庸男,大熊健司 勁草書房 2018)