【要約】なんちゃって将棋AIを作ってみた [Zenn_Python] | Summary by TechDistill
> Source: Zenn_Python
Execute Primary Source
// Problem
著者は、限られた計算リソースで実用的な将棋AIを構築するため、学習コストと推論遅延の抑制という課題に直面した。具体的には以下の問題があった。
- ・全駒の全移動パターンを愚直に学習させると、計算量が膨大になる。
- ・ノートPCのスペックでは、学習および推論の遅延が懸念される。
- ・将棋の複雑なルール(成駒、持ち駒、合法手)をいかに効率的にモデルへ伝えるかが困難である。
// Approach
著者は、次の一手を「行動の種類 × 着手マス」の分類問題として定義するアプローチを採用した。計算量を抑えつつ、盤面情報を効率的に抽出するために以下の手順を踏んでいる。
- ・入力を42ch(盤面28ch + 持ち駒14ch)の9×9テンソルとして構成する。
- ・PyTorchを用い、6層のResBlockを持つResNet風のPolicy Networkを実装する。
- ・出力を「9種類の行動 × 81マス = 729クラス」の分類として扱う。
- ・モデルの出力に対し、合法手マスクを適用してルール違反の手を除外する。
// Result
著者は、学習データに含まれない棋譜を用いた検証を行い、モデルの特性を明らかにした。検証の結果、以下の傾向が確認された。
- ・序盤の定跡に近い局面では、候補手の正答率が高い。
- ・コンピュータ同士の対局では、人間とは異なる指し手により正答率が低下する。
- ・持ち駒が増える終盤の局面では、選択肢の増加に伴い精度が落ちる。
Senior Engineer Insight
> プロトタイピングの手法として非常に合理的である。特に、行動空間を「行動×マス」に分解して分類問題に落とし込む設計は、計算資源を抑える上で実戦的だ。しかし、合法手判定を後付けのマスク処理に依存している点は、モデルの学習効率を下げている可能性がある。実戦投入には、ルールを構造的に組み込むか、MCTS(モンテカルロ木探索)との統合が不可欠だ。また、終盤の精度向上には、より高度な盤面表現の検討が必要だろう。