# dlshogi

dlshogi は、山岡忠夫氏によって開発されているディープラーニング系の将棋ソフト、およびその開発プロジェクトである。正式なリポジトリ名は DeepLearningShogi で、将棋でディープラーニングの実験を行うためのプロジェクトとして公開されている。

公式 README では、基本的に AlphaGo / [AlphaZero](/shogi/shogiwiki/alphazero/) の手法を参考に実装していく方針と説明されている。コンピュータ将棋では、[MCTS](/shogi/shogiwiki/search/monte-carlo-tree-search/)、方策・価値ネットワーク、[自己対局](/shogi/shogiwiki/self-play/)による学習を組み合わせた代表的な AlphaZero 型将棋AIとして位置づけられる。

## 技術的特徴

dlshogi は、ニューラルネットワークで局面の方策と価値を推定し、その出力を MCTS で利用する。自己対局プログラムで学習データを生成し、Python 側でニューラルネットワークを学習し、USI エンジン側で対局・検討に用いる構成になっている。

DeepLearningShogi の主な構成は次の通りである。

- `cppshogi`
Apery を流用した将棋ライブラリ。盤面管理、合法手生成、入力特徴量作成などを担当する。
- `dlshogi`
ニューラルネットワークの学習を行う Python 実装。
- `dlshogi/utils`
棋譜変換、教師データ処理、定跡処理、対局、探索パラメータ調整などの補助ツール群。
- `selfplay`
MCTS による自己対局を行い、学習用データを生成する。生成データでは [hcpe3](/shogi/shogiwiki/self-play/hcpe3/) も重要な形式である。
- `usi`
対局用 USI エンジン。[TensorRT](/shogi/shogiwiki/search/onnx-tensorrt/) を用いた推論、[バッチ推論](/shogi/shogiwiki/search/batch-inference/)、定跡、詰み探索などを扱う。
- `usi_onnxruntime`
ONNX Runtime 版の USI エンジン。

実装上は、Apery、Ray+Rn、Leela Chess Zero、やねうら王などの成果を参照・流用していることが README に記載されている。これは、将棋の合法手生成、MCTS、探索部、王手生成などを実用的に組み合わせるためである。

## AlphaZero 型としての位置づけ

dlshogi は、AlphaZero 論文の概念を将棋ソフト開発に取り込んだ実装例として重要である。純粋に論文通りの実装というより、将棋のルール、USI エンジンとしての運用、GPU 推論、詰み探索、定跡、既存棋譜や他エンジンとの対局データなどを組み合わせている。

このため、dlshogi を理解するには、ニューラルネットワーク単体ではなく、次の要素を一体として見る必要がある。

- 方策ネットワークによる有望手の絞り込み。
- 価値ネットワークによる局面評価。
- MCTS による探索。
- 自己対局や対局データからの[教師データ生成](/shogi/shogiwiki/self-play/training-data-generation/)。
- [ONNX / TensorRT](/shogi/shogiwiki/search/onnx-tensorrt/) を用いた高速推論と[バッチ推論](/shogi/shogiwiki/search/batch-inference/)。
- [Virtual loss](/shogi/shogiwiki/search/virtual-loss/) などを用いた並列 MCTS の制御。
- [FPU reduction](/shogi/shogiwiki/search/fpu-reduction/) などの PUCT 周辺パラメータ調整。
- 詰み探索、入玉、[PolicyBook](/shogi/shogiwiki/search/policy-book/) を含む定跡など将棋固有の実務的な補助。

## WCSC36 アピール文書での改良点

第36回世界コンピュータ将棋選手権の dlshogi アピール文書では、モデルサイズを単純に大きくするだけでは探索速度が落ちて強くできなかったため、40 ブロック 512 フィルタのモデルサイズを基準に、モデルアーキテクチャを変更して強くする試みが説明されている。

主な変更点として、Gated Attention、SwiGLU FFN、中間ブロックへの Transformer 配置、相対位置バイアス、絶対位置バイアス、入力層のラージカーネル、SEBlock などが挙げられている。訓練データには、60 ブロック 768 フィルタのモデルから蒸留したデータ、自己対局データ、NNUE 系との対局データが使われ、重複を平均化して 42.4 億局面になったとされる。

同文書では、改良後モデル `pre68_40x512` は改良前 40 ブロックモデルに対して探索速度が平均で 91.4% に低下した一方、精度向上により対局では R+55.4 になったと報告されている。dlshogi の開発では、モデル精度と探索速度のバランスが重要な課題であることが分かる。

## 大会成績

- WCSC35: dlshogi with HEROZ 決勝3位
- WCSC34: dlshogi with HEROZ 決勝2位
- WCSC33: dlshogi with HEROZ 優勝
- WCSC32: dlshogi with HEROZ 優勝
- WCSC31: 二次予選14位
- 第1回電竜戦本戦A級6位
- WCSC29: 一次予選8位、二次予選17位
- WCSC28: 一次予選7位、二次予選24位
- SDT5: 予選30位

## 関連項目

- [AlphaZero](/shogi/shogiwiki/alphazero/)
- [自己対局](/shogi/shogiwiki/self-play/)
- [教師データ生成](/shogi/shogiwiki/self-play/training-data-generation/)
- [hcpe3](/shogi/shogiwiki/self-play/hcpe3/)
- [探索](/shogi/shogiwiki/search/)
- [Virtual loss](/shogi/shogiwiki/search/virtual-loss/)
- [FPU reduction](/shogi/shogiwiki/search/fpu-reduction/)
- [バッチ推論](/shogi/shogiwiki/search/batch-inference/)
- [PolicyBook](/shogi/shogiwiki/search/policy-book/)
- [評価関数](/shogi/shogiwiki/evaluation-function/)
- [ふかうら王](/shogi/shogiwiki/softs/fukauraou/)
- [やねうら王](/shogi/shogiwiki/softs/YaneuraOu/)

## リンク

- 開発者 Twitter: [https://twitter.com/TadaoYamaoka](https://twitter.com/TadaoYamaoka)
- 開発者ブログ: [http://tadaoyamaoka.hatenablog.com/](http://tadaoyamaoka.hatenablog.com/)
- GitHub: [https://github.com/TadaoYamaoka/DeepLearningShogi](https://github.com/TadaoYamaoka/DeepLearningShogi)
- Releases: [https://github.com/TadaoYamaoka/DeepLearningShogi/releases](https://github.com/TadaoYamaoka/DeepLearningShogi/releases)

## アピール文

- WCSC36: [https://www.apply.computer-shogi.org/wcsc36/appeal/dlshogi/dlshogi_appeal_wcsc36.pdf](https://www.apply.computer-shogi.org/wcsc36/appeal/dlshogi/dlshogi_appeal_wcsc36.pdf)
- WCSC34: [https://www.apply.computer-shogi.org/wcsc34/appeal/dlshogi_with_HEROZ/dlshogi_with_HEROZ_appeal_wcsc34.pdf](https://www.apply.computer-shogi.org/wcsc34/appeal/dlshogi_with_HEROZ/dlshogi_with_HEROZ_appeal_wcsc34.pdf)
- WCSC32(決勝): [https://www.apply.computer-shogi.org/wcsc32/appeal/dlshogi_with_HEROZ/dlshogi_with_HEROZ_appeal_detail_wcsc32.pdf](https://www.apply.computer-shogi.org/wcsc32/appeal/dlshogi_with_HEROZ/dlshogi_with_HEROZ_appeal_detail_wcsc32.pdf)
- WCSC32: [https://www.apply.computer-shogi.org/wcsc32/appeal/dlshogi_with_HEROZ/dlshogi_with_HEROZ_appeal_wcsc32_v2.pdf](https://www.apply.computer-shogi.org/wcsc32/appeal/dlshogi_with_HEROZ/dlshogi_with_HEROZ_appeal_wcsc32_v2.pdf)
- WCSC31: [https://www.apply.computer-shogi.org/wcsc31/appeal/dlshogi_with_GCT/dlshogi_with_GCT_appeal_wcsc31.pdf](https://www.apply.computer-shogi.org/wcsc31/appeal/dlshogi_with_GCT/dlshogi_with_GCT_appeal_wcsc31.pdf)
- WCSC30(中止): [https://www.apply.computer-shogi.org/wcsc30/appeal/dlshogi/dlshogi_appeal_wcsc30.pdf](https://www.apply.computer-shogi.org/wcsc30/appeal/dlshogi/dlshogi_appeal_wcsc30.pdf)
- WCSC29: [https://www.apply.computer-shogi.org/wcsc29/appeal/dlshogi/dlshogi_appeal_wcsc29.pdf](https://www.apply.computer-shogi.org/wcsc29/appeal/dlshogi/dlshogi_appeal_wcsc29.pdf)
- WCSC28: [https://www.apply.computer-shogi.org/wcsc28/appeal/dlshogi/appeal.pdf](https://www.apply.computer-shogi.org/wcsc28/appeal/dlshogi/appeal.pdf)
- SDT5: [http://denou.jp/tournament2017/img/pr/dlshogi.pdf](http://denou.jp/tournament2017/img/pr/dlshogi.pdf)

## 参考にしたホームページ

- [TadaoYamaoka/DeepLearningShogi](https://github.com/TadaoYamaoka/DeepLearningShogi)
- [DeepLearningShogi Releases](https://github.com/TadaoYamaoka/DeepLearningShogi/releases)
- [第36回世界コンピュータ将棋選手権 dlshogi アピール文章](https://www.apply.computer-shogi.org/wcsc36/appeal/dlshogi/dlshogi_appeal_wcsc36.pdf)
- [世界コンピュータ将棋選手権](https://www2.computer-shogi.org/wcsc/)