SHOGI
モデル構造・重み可視化
自作強化学習モデル (Policy+Value Network) の中身
← 対局に戻る

本ページで表示している数値は、実際に自己対戦(セルフプレイ)で学習させたチェックポイントファイル (backend/data/models/*.pth) から直接読み取ったものです。 架空の例やダミー値ではありません。

将棋AI モデル構造・重み可視化

このAIは画像分類のような「正解ラベル付きデータ」では学習していません。自分自身と対局を繰り返し(セルフプレイ)、 その勝敗結果を遡って各局面の教師信号に変換する強化学習(AlphaZero系)で育てています。 さらに、保存されていた全チェックポイントを調べたところ、アーキテクチャ自体が学習途中で進化していたことが分かりました — 初期は「勝率だけを予測するシンプルな構造」、途中から「勝率と指し手候補を同時に予測する2ヘッド構造」に切り替わっています。 ここではその構造の変遷と、学習によって重みがどう育ったかを、実際のチェックポイントを比較しながら見ていきます。

モデル概要

ネットワーク構造 — アーキテクチャの進化

盤面を2285次元のベクトルにエンコードし、3層の全結合トランクを通したあと、 「勝率(value)」と「指し手(policy)」に分岐します(v3以降)。チェックポイントを切り替えると、 方策ヘッドが実際に追加される前後や、学習による重みの成長が見られます。列をクリックすると詳細が右側に表示されます。

緑の線=実際の重みが正 赤の線=実際の重みが負(太さ・濃さ=大きさ) 流れる光の粒=推論時のデータの流れ ドラッグでパン・Ctrl+スクロールでズーム(列をクリックで詳細)

レイヤーを選択してください

左の図のノードをクリックすると詳細が表示されます。

学習で重みはどう育ったか

各層の重み行列のL2ノルム(大きさ)を、v2(方策ヘッド無し)〜v3の学習初期・中間・最新まで比較します。 対数スケールです — v2にはpolicyヘッドの棒がそもそも存在しない点(=構造が違う証拠)と、 v3内でtrunk.0やpolicyヘッドの重みが学習につれて数十〜数百倍に成長している点に注目してください。

Policyヘッドの512バケット — 個々の重みの「指紋」

指し手の候補は512個のバケットにハッシュ化されています(USI文字列 → FNV-1aハッシュ → 0〜511)。 各バケットに対応する重みベクトルのL2ノルムを並べると、学習によって特定のバケットが強く反応するようになっていく様子が見えます。

なぜこの形なのか

正解ラベルがない学習

画像セグメンテーションのような人手ラベルの代わりに、自己対戦の勝敗結果を使います。 1局が終わった時点で、その対局中の全局面に「最終的に手番側が勝ったか」を遡って割り当て、valueヘッドの教師信号にします。

探索とネットワークの相互ブートストラップ

ModelPolicyはアルファベータ探索の葉ノード評価にvalueヘッドを使い、探索で裏付けられた手を教師にpolicyヘッドを鍛えます。 強くなった探索がより良い教師データを生み、より良いネットワークがより強い探索を生む、という循環です。

Policyのハッシュ化

将棋の合法手は局面によって可変・膨大なため、USI文字列を512バケットにハッシュして固定サイズの出力にしています。 衝突は許容し、推論時は合法手だけにマスクして選択するため実用上は問題になりません。

強さの測り方

テスト精度のような指標は存在しません。新旧チェックポイント同士を対局させ、Eloレーティングで「前より勝てるようになったか」を測定し、 上位10モデルだけを model_registry に保持しています。

将棋AIの系譜 — 世界の主要アーキテクチャとの比較

自作モデルがどの系譜に位置するかを、公開情報(Wikipedia等、各カードに出典リンクあり)をもとにした年表で示します。 「ルールベース探索」→「機械学習された線形評価関数+αβ探索(Bonanzaメソッド)」→ 「CNN+モンテカルロ木探索によるゼロからの自己対戦学習(AlphaZero型)」という3つの大きな波があり、 自作モデルは技術的には第3の波(セルフプレイで価値・方策を学習)に属しますが、 CNNではなく全結合層、MCTSではなくαβ探索を使うという点で簡易版のハイブリッドです。

ネットワークの深さ・規模比較(公開仕様ベース)

線形評価関数(深さ0)から、全結合3層の本モデル、10〜20ブロックのCNN(dlshogi・AlphaZero)まで規模感は大きく異なります。 参考としてチェスAIのLeela Chess Zero(将棋ではありません)も並べ、CNN系がどこまで深く/広くなり得るかの目安にしています。 本モデルの重み自体は上のセクションで実際のチェックポイントから可視化していますが、他エンジンは重みファイルを持たないため、 ここでは公開されている構造仕様(ブロック数・フィルタ数)の比較にとどめています。