教師あり学習による初期ブートストラップ: policy向上とvalueの早期過学習

Splendor(宝石の煌き)は、宝石トークンを集めて発展カードを購入し、カードのボーナス(購入割引)を活用してより高位のカードを獲得しながら、15点以上の勝利点を競い合うボードゲームである。現在開発しているのは2人対戦環境であり、最終的にはニューラルネットワークをゲーム木探索アルゴリズムに組み込み、自己対局(self-play)を通じた強化学習によって実力を高めていく構成を目指している。

その前段階(ブートストラップ)として、まずは既存のルールベースAIを教師とし、ニューラルネットワークに「次にどの候補手を選ぶべきか(方策:policy)」と「この局面から勝てそうか(局面評価:value)」を同時に学習させるパイプラインを構築した。

本稿では、その初期モデルにおける学習結果と検証内容をまとめる。

結論から述べると、手の選択確率を出力する policy は学習ステップが進むにつれて着実に改善したものの、最終勝敗を予測する value は途中で早々に過学習を起こした。結果として、最大ステップである8,000ステップまで回した最終モデルではなく、検証損失(validation loss)が最も低かった途中の3,356ステップ時点のチェックポイントを採用することになった。

教師データを作る

初期化直後のニューラルネットワークでいきなり自己対局を始めると、重みがランダムなため探索が拡散し、有意な対局データが得られにくい。そこで初期モデルは、ルールベースの教師AIを用いた教師あり学習によって立ち上げる方針をとった。

教師アルゴリズムには、これまで実装してきたルールベースの評価ロジックを採用した。カードの獲得点数や購入ボーナス、手持ちの宝石トークンなどから局面を静的に評価し、最大3手先まで読みを入れる。全候補手を深く読むと計算負荷が跳ね上がるため、各手番では評価値の高い上位4手程度に枝刈りして探索している。

また教師信号としては、最善手を1手だけ指定するのではなく、合法手ごとの確率分布を出力させた。例えば、明らかに一択となる局面では特定の手へ確率が集中し、複数の選択肢が拮抗している局面では確率が分散するように設計した。

このルールベース教師AI同士を対局させ、学習用のデータを生成した。

項目数
初期配置4,096
対局数8,192
学習に使える局面数478,194

同一の初期配置から派生した対局が学習用と評価用の双方に混入すると、類似局面の単純な暗記によって見かけの汎化性能が高く評価されるおそれがある。そのため初期配置ごとにグループ化したうえで、18:1:1 の比率で学習用(train)、モデル選択用(validation)、最終評価用(test)に分割した。

学習用データセットは、3,675種類の初期配置から生成された7,350対局、計429,066局面で構成される。

policy と value を1つのネットワークで学習する

モデルは1つの共有バックボーンから2系統の出力を得る構成とした。

方策(policy)は、その局面で選択可能な各合法手に対する事前確率を出力する。教師AIが出力した確率分布に近づくよう学習を進める。

局面評価(value)は、手番プレイヤーから見た最終対局結果を win / draw / loss の3クラス分類として予測する。将来的にはゲーム木探索の末端局面において「この局面がどれほど有利か」を即座に評価する役割を担う。

モデルの全体アーキテクチャは以下の通りである。

局面
↓
プレイヤー・宝石・場のカード・貴族などを埋め込み
↓
2層の self-attention でオブジェクト間の関係を見る
↓
局面全体の表現
├─ policy head → 各合法手の確率
└─ value head → win / draw / loss

Splendor では個々のカード情報だけでなく、「自陣のボーナスと対象カードの購入コスト」「相手の手持ち宝石と場のカードの奪い合い」「カード属性と貴族タイルの獲得条件」といったオブジェクト間の相互関係が勝敗を大きく左右する。そのため、各オブジェクトを独立に特徴抽出して単純連結するのではなく、まず2層の self-attention 機構によってオブジェクト間の相互作用を捉えてから局面全体のコンテキスト表現を構築するアーキテクチャを採用した。

パラメータ数は約138万と、比較的小規模なネットワーク設計に抑えている。

学習方法

損失関数は、policy における教師分布との交差エントロピー損失(cross-entropy loss)と、value における最終勝敗ラベルとの交差エントロピー損失の重み付き和とした。value 損失の重み係数は 0.5 に設定した。

L=Lpolicy+0.5LvalueL = L_{policy} + 0.5 L_{value}

policy 側では、教師が選んだ最善手1手のみを正解とするハードラベルではなく、教師AIが出力した確率分布全体を教師信号とするソフトターゲット学習を採用している。

Lpolicy=−∑aπteacher(a∣s)log⁡πθ(a∣s)L_{policy} = -\sum_a \pi_{teacher}(a \mid s) \log \pi_\theta(a \mid s)

value 側は win / draw / loss の3クラス分類問題として最適化した。

主なハイパーパラメータおよび学習環境は以下の通りである。

項目設定
OptimizerAdamW
Batch size512
Learning rate0.0003
Weight decay0.01
LR schedule100 step warmup + cosine decay
Gradient clippingmax norm 1
Precisionbfloat16 mixed precision
GPUTesla T4
最大更新回数8,000 step

学習中は一定ステップごとにチェックポイントを保存し、検証データ(validation split)の総合損失が最小となったモデルを採用する方針をとった。テストデータ(test split)はモデル選択の過程には一切用いず、最終モデルの確定後に行う汎化性能評価のみに使用した。

途中から value だけ悪くなった

8,000ステップまで学習を進めたところ、検証データ上で総合損失が最も小さくなったのは step 3,356 のモデルだった。

最良チェックポイント(step 3,356)と学習終了時(step 8,000)の性能を比較した結果は以下の通りである。

Checkpoint全体 losspolicy lossvalue lossvalue accuracy
3,356(採用)1.28240.93030.704365.86%
8,000(終了時)1.49000.91201.156061.82%

policy loss は 0.9303 から 0.9120 へと減少を続けており、教師AIの着手傾向を模倣する精度は後半のステップでも着実に改善していた。

対照的に、value loss は 0.7043 から 1.1560 へと約64%も悪化した。訓練データ上では value loss も低下し続けていたことから、典型的な過学習(overfitting)が生じていたことがわかる。

policy と value をマルチタスク学習させれば双方が足並みを揃えて改善すると見込んでいたため、このように途中から挙動が大きく乖離した点は興味深い知見となった。

この現象の主因は、policy と value の間で「独立した教師信号の有効サンプル数」に圧倒的な格差が存在したことにあると考えられる。

policy 側は、42万件以上の各局面において異なる合法手分布を固有の教師信号として受け取る。これに対し value 側は、1回の対局に含まれる数十局面すべてがまったく同一の勝敗結果(1個のラベル)を共有している。学習局面数としては429,066件に達するものの、独立した勝敗シグナルという意味では7,350対局分、初期盤面のバリエーションに至っては3,675種類にとどまる。

結果として value 側は見かけの局面数ほど独立した情報量を持たず、policy よりはるかに早い段階で特定の局面パターンの暗記に陥ったと推測される。

test データで確認する

採用した step 3,356 のチェックポイントについて、モデル選択には一切関与していないテストデータ(test split)を用いて評価を行った。

policy については、モデルが最大確率を割り当てた候補手と、教師AIの最善手が一致した割合(top-1 accuracy)は 68.15% であった。また教師AIが確率分布から実際にサンプリングして着手した手との一致率は 65.38% だった。

ただし局面の不確実性によって精度に顕著な差が見られた。教師側で選択肢がほぼ一択に絞られている確信度の高い局面では top-1 正解率が 97.8% に達したのに対し、教師側の着手確率が拮抗している局面では 17.4% まで低下した。

value の win / draw / loss 正解率は 63.26% だった。訓練データの勝敗出現比率をそのまま出力するダミー予測器(ベースライン: 49.74%)と比較すれば、一定の識別能力を獲得している。

しかし終局までの残り手数に応じた内訳を確認すると、終局まで33手以上残る序盤〜中盤の局面では 52.7% にとどまる一方、最後の1手では 90.0% に跳ね上がっていた。終盤の明確な勝勢・敗勢は判定できているものの、MCTSなどの木探索が真に必要とする「序中盤の長期的な局面評価」という観点では、まだ十分な精度に達していないことが窺える。

今回分かったこと

今回の検証により、ルールベース教師の着手傾向をある程度再現する方策(policy)の構築には成功し、勝敗を予測する評価関数(value)にも基礎的なシグナルが学習されることを確認できた。

一方で、単一ネットワークによる同時学習であっても、タスクごとに学習の収束速度や過学習に至る過程が大きく乖離することが浮き彫りとなった。特に終局勝敗をターゲットとする value においては、局面データ全体の行数にとらわれず、独立した対局単位での多様性を確保する重要性が明確になった。

また、最終ステップの重みを盲信せず、検証損失に基づいて適切なチェックポイントを選択する評価パイプラインを組んでいたことも功を奏した。この安全弁がなければ、policy のわずかな改善と引き換えに value が大幅に劣化した 8,000 ステップのモデルを運用に回すところだった。

もっとも、現段階では教師データに対するオフライン学習が完了した段階にとどまる。今後は本モデルをゲーム木探索へ組み込み、ランダムプレイヤや既存のルールベースAIとの対局を通して実戦での有効性を評価していく。

その実戦結果を踏まえ、自己対局ループへの移行可否や、value の学習手法およびサンプリング戦略の改善を判断する予定である。


あとから振り返って

そもそも教師あり学習から着手したのは、Splendor における人間の対局ログを大規模に収集することが難しかったためである。人間の棋譜を教師にできないのであれば、まずは自身でルールベースの教師AIを構築し、そこから学習データを合成するのが現実的なアプローチだと判断した。

この問題自体は先行研究にかなり直接的に書かれている。2016年の AlphaGo 論文 では、同一ゲーム内の局面は相関が極めて強く、同じ最終勝敗を共有するため value が過学習しやすいと指摘し、1ゲームから1局面だけを抽出して学習データセットを構築していた。

今回の初期データセットはまさにその逆で、1ゲームから数十局面を抽出し、そのすべてに同一の勝敗ラベルを付与していた。今振り返れば、value 側が早期に暗記へ傾倒したのは自然な結果だった。今回の過学習は「実験して初めて判明した現象」というより、先行研究で既に指摘されていた課題が自らの実装でも発生した形に近い。先行研究の知見を設計段階で十全に反映しきれていなかったと感じている。

DL将棋の開発過程を思い返しても同様の示唆が得られる。dlshogi の学習則 では、value を最終勝敗のみから学習するのではなく、探索を通じて得られた局面評価値と最終勝敗を併用するブートストラップ方式が採用されている。勝敗という遠い教師信号だけに依存せず、探索途中で得られる近傍の評価値を取り込む工夫がなされている。

一方で、policy と value を最初から同時に学習させた点については、先行研究の知見がダイレクトに寄与した。

DL将棋の初期開発ではまず policy network 単体の学習から着手されていたが、その後に policy と value のマルチタスク学習 へと移行し、共有バックボーンから双方を同時出力して学習可能であることが実証されていた。この経緯をあらかじめ把握していたため、「まず policy だけを作り、後から value を追加する」という手戻りを避け、最初から policy-value 統合モデルを採用できた。

先行研究の蓄積を活かして開発プロセスを効率化できた好例と言える。


この記事は、実装・実験記録をもとに、本文の大部分をLLMが執筆し、筆者が内容を確認・編集しています。