Splendor AIでPUCT探索がどれだけ強さを増幅するか測った

Splendor をプレイするニューラルネットワークを作っている。

前回は、ルールベースの教師から policy と value を同時に学習するところまで進めた。policy は「次にどの手を選ぶか」、value は「この局面から勝てそうか」を予測する。

その後、このモデルを PUCT というゲーム木探索に組み込み、自己対局から次のモデルを学習するループを作った。しかし、自己対局から学習した新しいモデルは、元のモデルを明確には上回らなかった。

そこで今回は、学習方法をさらにいじる前に、もっと基本的なことを測った。

「同じモデルでも、探索をかけることで本当に強くなっているのか?」

もし探索しても元の policy とほとんど同じ強さなら、自己対局で作る教師信号にも大きな改善余地がない。逆に、探索をかけるだけで明確に強くなるなら、その改善を学習側がまだ十分に取り込めていないことになる。

PUCT で何をしているか

policy-value モデルは、局面を見て合法手ごとの事前確率と、局面の勝敗予測を返す。

PUCT はその2つを使って、ゲーム木のどこを追加で読むかを決める探索方法だ。簡略化すると、各候補手について次のような値を比較する。

Q(a)+U(a)Q(a) + U(a)

ここで Q(a)Q(a) はこれまでの探索で得た局面評価、U(a)U(a) はまだ十分に読んでいない手を調べるための項で、policy が高く評価した手ほど優先される。

探索を1回進めることを simulation と呼ぶ。今回の simulation budget は、1手を決めるたびに何回 simulation するかを表す。

たとえば budget 32 なら、1手を選ぶまでにゲーム木を32回進める。探索後は、最も多く訪問された手を選ぶ。

同じモデルで探索回数だけ変える

今回はモデルそのものを固定し、探索回数だけを変えて対局させた。

各比較では同じ初期配置を使い、席順を入れ替えた2局を1組として300組、つまり600局を実行した。3つの比較で合計1,800局になる。

学習、新しい自己対局データ生成、モデル更新は一切していない。違うのは探索回数だけだ。

比較高budget側の pair score区間
32 simulations vs 8 simulations0.6300[0.5965, 0.6635]
128 simulations vs 32 simulations0.6642[0.6316, 0.6967]
32 simulations vs raw policy0.6583[0.6266, 0.6900]

pair score は席順を入れ替えた2局をペアとして集計したスコアで、0.5なら互角、それより高ければ左側の設定が強い。表の区間は報告で使った90%区間で、両端はそれぞれ one-sided 95% bound に対応する。

最初の2比較は事前に決めてから実行した。32 simulations vs raw policy は、32 vs 8 の結果を見た後に追加した測定なので、事前に決めた結論を変更するためには使わず、探索なしとの差の大きさを確認する用途に限定した。

3つとも0.5を明確に上回った。

特に重要なのは、32 simulations の PUCT が raw policy に対して 0.6583 だったことだ。同じニューラルネットワークでも、policy の最大確率の手をそのまま選ぶより、探索を32回行ってから選ぶ方がかなり強かった。

budget 1 の PUCT が raw policy の argmax と完全に一致することも、事前に1,138局面で確認した。したがって 32 vs 1 は「探索あり vs 探索なし」にかなり直接近い比較になっている。

128 simulationsでもまだ伸びた

32 simulations から128 simulationsに増やした場合も、128側の pair score は0.6642だった。

少なくとも今回試した範囲では、32 simulations付近で探索の効果が頭打ちになっているとは言えない。

ただし、「探索回数を増やすほど加速度的に強くなる」とまでは言えない。8→32 と 32→128 の改善幅の差を比較した信頼区間は0をまたいでおり、改善曲線の形までは今回の実験では決まらなかった。

分かったのは、32 simulationsでも探索による改善は大きく、128 simulationsまで増やしても追加の改善が残っていた、というところまでだ。

自己対局で学ぶべき信号は残っている

この結果は、自己対局学習の失敗原因をかなり絞る。

これまでは、新しいモデルが元のモデルを上回らない理由として、「そもそも探索が元の policy より良い手をほとんど作れていないのではないか」という可能性も残っていた。

今回、その説明はかなり弱くなった。

32 simulations の探索は raw policy より明確に強く、探索後の訪問分布も raw policy の順位をかなり変えている。自己対局で使っている32 simulationsの設定では、探索後に最も多く訪問された手が raw policy の1位と異なる局面が約29%あった。

つまり、探索側にはモデルがまだそのまま持っていない改善信号が存在している。

問題は、その信号を学習側でうまく吸収できているかどうかに移った。

tree reuse の前提も測り直した

今回の実験では、別の前提も崩れた。

探索では前の手番で作った木を次の手番でも再利用できる。これまで、budget 32でも木の再利用によって実質的には50〜85 simulations程度の探索量になる可能性を考えていた。

実際に測ると、自己対局では約75%の手で tree reuse 自体は発生していたが、平均 root visits は34.73だった。32に対して少し増える程度で、想定していた50〜85には届かなかった。

さらに、モデル同士を評価する arena では6,898 decisionを調べても tree reuse は一度も発生していなかった。評価では各プレイヤーが別々の探索セッションを持つため、自分の次の手番までに相手の手が1手挟まり、保持していた1手先の subtree と一致しない構造になっていた。

これは過去の対局評価を無効にする問題ではない。両者に同じ条件がかかっているからだ。ただし、自己対局と評価対局では、同じ nominal budget 32でも実際の探索量が少し違うことが分かった。

ここで重要なのは、実効探索量が想定よりかなり小さかったにもかかわらず、それでも探索による強さの増幅が大きかったことだ。

次に見ること

今回の結果から、「探索が弱すぎて学習するものがない」という方向は優先度が下がった。

次に見るべきなのは、探索で作った自己対局データが学習時にどのように混ざっているかだ。現在は元の教師データを残しながら自己対局データを加えているため、探索から得た改善信号が教師データ側に薄められている可能性がある。

次の実験ではこの混合比率を変え、探索で見つけた改善をニューラルネットワークがどこまで吸収できるかを測る。

今回の結果で、探索と学習をまとめて「強くならない」と見るのではなく、探索部分だけを切り出して評価できた。探索そのものには明確な改善効果がある。次は、その出力を学習側が取り込めているかを調べる。


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