TadaoYamaokaの開発日記

個人開発しているスマホアプリや将棋AIの開発ネタを中心に書いていきます。

AobaZeroの棋譜の加工

GCTでは、AobaZeroの棋譜を、事前学習に使用し、また、dlshogiの強化学習データに混ぜて使用している。

アンサンブル効果の仮説

dlshogiの強化学習データと混ぜて使用したという部分が強さに影響しているのではないかという仮説を立てている。

dlshogiは、ディープラーニングが中終盤に弱いという課題に対処するために、初期局面集に中終盤を大量に含める(約5億)、詰み探索の結果を報酬とするαβ探索のソフトをリーグ戦に加えて学習するということを行っている。

一方、AobaZeroは、序盤と入玉に強く、中終盤に比較的弱いという傾向がある。

そのため、dlshogiとAobaZeroの棋譜を混ぜることで、うまくアンサンブルの効果が出たのではないかと考える。
dlshogiのデータは序盤の局面はあまり含まれていないため、混ぜて学習しても局面の重なりは少なく、お互いの良いところだけを学習できたのかもしれない。

事前学習も不要で、単に混ぜて学習すればいいのでは?という気がするので、検証してみたいと考えている。


この記事では、前処理として、AobaZeroの棋譜を加工する方法について記す。

AobaZeroの棋譜の加工

一括ダウンロード

AobaZeroの棋譜は、rcloneGoogle Driveから一括ダウンロードできる。
rcloneのWindows版を使ってローカルにダウンロードした。
Google Drive向けの設定を行い、自分のGoogle DriveにRecords01フォルダのショートカットを作成し、rclone copyでバッチ処理を行った。

解凍

ダウンロードしたファイルは1万棋譜ごとのCSAファイルがxz形式で圧縮されている。
7zipをコマンドラインから使用してバッチ処理で解凍する。
例)

7z x arch000021660000.csa.xz -ocsa/

※2021/1/16 追記
下記のスクリプトaoba_to_hcpeで.csa.xzを直接読み込めるようにした(cshogi v0.1.0以上が必要)。

棋譜の形式

1つのCSAファイルには複数棋譜が含まれている。
各指し手にはコメントが付与されており、各候補手のMCTS探索の訪問数が記録されている。
30手までは、訪問数に応じた確率で選択されるため、訪問数が最大の手以外が選ばれている場合がある。

また、棋譜を調べたところ、数手の詰みを見逃して、逆転されている棋譜が含まれていた。
AobaZeroは詰ます手順に弱いことが分かる。

ILLEGAL_ACTIONで終了している棋譜が含まれているので除く必要がある。
CHUDANで終了している棋譜は、最大手数である512手を超えた棋譜である。

以上を考慮して、dlshogiの学習用に以下のように加工をする。

  • 30手までに最後に最善手以外を指した局面以降を使用する
  • 5手詰みのチェックを行い、詰みの局面であれば読み込みを中止し、勝敗を上書きする。

dlshogiはMCTSの探索中に、終端ノードで、5手詰みのチェックを行っているため、5手詰みの局面以降の局面は学習する必要がない。

  • ILLEGAL_ACTIONで終了している棋譜は除外する
  • CHUDANは引き分け扱いとする


参考までに棋譜の統計を取ると以下の通りであった。

kifu num : 7110000
moves sum : 907460289
moves mean : 127.63154556962026
moves median : 123.0
moves max : 513
moves min : 16
nyugyoku kachi : 193756

cshogiのAobaZero棋譜対応

Pythonでさくっと前処理を行いたいため、私が公開しているPython向けの将棋ライブラリであるcshogiをAobaZeroの棋譜に対応した。
cshogiは、python-shogiに比べて、CSAファイルの読み込みなどが10倍速い
また、hcpe形式ややねうら王の学習データへの出力機能などを備えている。

アップデートしたcshogi v0.0.8をPYPIにアップロードした。

pip install -U cshogi

でインストールできる。

作成したhcpe形式への変換スクリプト

https://github.com/TadaoYamaoka/DeepLearningShogi/blob/master/utils/aoba_to_hcpe.py

このスクリプトを使用し、AobaZeroのarch000015000000.csa ~ arch000022110000.csaまでの711ファイルの変換を行った。
4時間43分で変換できた。
※プロセスを並列で実行すればもっと早く変換できる。

まとめ

cshogiでAobaZeroの棋譜をdlshogiの学習に使用できるhcpe形式に加工する方法について紹介した。
hcpe形式に変換できたのでdlshogiのデータを混ぜて学習することで、GCTと同等以上のモデルができるか別途検証したい。