リバーシAIにTransformerとDiffusionをつっこんだ
CNNが主流のリバーシAIを昨今の生成AIの流れに従ってTransformerとDiffusionをつっこんだ
はじめに
リバーシAIでは主にCNNがアーキテクチャとして用いられます。CNNでは局所的に盤面状況を判断できるのでボードゲームに適しています。
CNNは局所的な強さ故に離れた場所の判断が鈍くなりますが、一方でLLMで主流のTransformerは、Attention機構によりすべてのマスの関連度を直接計算できます。そのため、CNNでは捉えきれない『角と辺』『離れた石同士』の関係性も、距離に関わらずフラットに評価できるのが強みです。
リバーシでは角や辺など離れたところが終盤でキーとなるため、Transformerベースで作り、ResNetと比較してどうだったかを紹介します。またTransformerに加えDiffusion拡散モデルを用いて探索無しで高効率なアーキテクチャもテストしましたが失敗したことも紹介します。
流れ
- 2025年7月 : ResNetモデル 1〜19世代
- 2025年10月 : Transformerモデル 1〜3世代
- 2025年12月 : MoE Transformerモデル 1〜2世代
- 2026年1月 : Transformer + Diffusionモデル 1世代
共通事項
すべてのモデルにおいて共通すること
- リバーシルールの演算とMCTS探索はpybind11によりC++で実装
- 盤面は8x8盤面を64bitのBigIntとして黒プレイヤーと白プレイヤー分それぞれ
学習
- MCTS探索量 : 1500
- 1世代あたりの試合数 : 10,000
- 学習時間 : 棋譜生成 7時間、モデル学習 5時間
ResNet
まずはAlphaGo Zeroと同じくデュアルヘッドResNet CNN構造のモデルから始めました。
入力
- その時の盤面
出力
- Policyヘッド(有望手の確率分布) 0.0~1.0 x 64
- Valueヘッド(勝敗の確率) -1.0~1.0
モデル
- 残差ブロック数 : 5
- 総パラメータ層数 : 16
- 畳み込みフィルタ数 : 64
- 総パラメータ数 : 約19M
結果
- ランダム相手 : Avg 50 / 64
19世代目まで学習を続けて人間と対等くらいにはなりましたが、相手が置いた場所(変化が発生した場所)を重点的に狙っているように見えます。
Transformer
ResNetでベースラインの強さは確認できましたが、リバーシAIの大きな課題として、角(コーナー)と辺の支配が勝負を分けるにも関わらずCNNは注目が局所的であるため盤面全体の関係性を捉えるのが苦手です。
Transformerであれば全トークン間のAttentionにより、角と角、角と辺、離れた石の関連を直接学習できるのではないかと考え、アーキテクチャをTransformerに切り替えました。
盤面のトークン化
リバーシの8×8盤面をTransformerに入力するため、64マスをそのまま64トークンとして扱いました。各トークンは自分の石・相手の石の2チャネルを持つ2次元ベクトルで、これをLinear層でd_model次元に射影します。
位置エンコーディングには通常のLLMで使う1次元の位置ではなく、行(Row)と列(Column)を別々のEmbeddingにしました。盤面は2次元構造なので、“3行目” “5列目”という空間情報を分離して与えた方が自然です。
- 入力 : (8, 8, 2) → Reshape(64, 2) → Dense(d_model)
- 位置 : Row Embedding(8, d_model) + Col Embedding(8, d_model)
- 最終 : token_emb + row_emb + col_emb
アーキテクチャ
- Decoder-only Transformer (GPT like)
- Pre-LayerNorm + Residual接続
- FFN: Dense(d_model×4, GELU) → Dense(d_model)
- Dropout: 0.2
- Policy Head: Dense → Reshape(64) → Softmax
- Value Head: Conv1D → Flatten → Dense → Tanh
ここではembed_dim=256, 8ブロック, 8ヘッドの約6.3Mパラメータ構成で学習しました。
結果
- ランダム相手 : Avg 54 / 64
- ResNet 19G相手 : 勝率88% (100試合) | Avg 46.1
3世代分の学習を行い、ResNetと比較して盤面全体を見通した手を打つようにはなりましたが、パラメータ数に対する強さの効率が悪く、推論速度も遅い。MCTSの各ノードで推論を回す都合上、モデルが重いと自己対戦の棋譜生成にかかる時間が大幅に増えます。
課題: Transformerの表現力は高いが、全レイヤーを常に全力で計算するのは無駄が多い。序盤と終盤で必要な計算は明らかに違うのに、同じ計算パスを通る。
Diffusion (失敗)
Transformerの次に試したのがDiffusion拡散モデルです。
画像生成で圧倒的な成果を出しているDiffusionモデルを、リバーシの盤面予測に転用できないかと考えました。Diffusionによる高精度な盤面予測を実現し、ボトルネックとなるMCTS探索回数を極限まで減らすことを目的としました。
学習
Transformer部分をまず学習させ、そのあとに入力データにn手先とm手先の盤面を追加することで現時点の盤面からn手先とm手先の盤面を拡散予測を行いました。
結果
Diffusion予測は全く効果が無く、そもそもリバーシルールではありえない盤面や石が増える/消えるといった推論のノイズになりました。
失敗の理由として、Diffusionは連続値空間を扱う前提が強く、画像生成においては多少のノイズや破綻があっても自然画像として完成しますが、リバーシ盤面は石が1つずれるだけで不正盤面となるような厳格なルールのもとに成立する離散状態空間です。画像生成とは違った厳格さがDiffusionでは対応することができなかったことが考えられます。
MoE Transformer
最終的にはここ数年のLLMで主流となっているMixture-of-Experts構造のTransformerモデルにたどり着きました。ここではTransformerモデルからいくつか改良を行い、これまでで最も強いリバーシAIが完成しました。
通常のMoEはトークンごとにエキスパートを選択しますが、今回のアーキテクチャでは盤面全体の状態に基づいてレイヤー単位でエキスパートを選択する設計にしました。
各MoEブロックの中では以下が繰り返されます:
- 盤面特徴のGlobal Average Poolingでブロック全体の状態ベクトルを作る
- Step Embeddingを加算(同じブロック内の何回目の処理かを伝える)
- RouterがMHA/FFNの各エキスパートに対する重みをsoftmaxで出力
- 全エキスパートを並列実行し、Router重みで加重和を取る
- 残差接続で元の表現に加算
これを1ブロック内で複数ステップ繰り返すことで、同じパラメータを使いながらフェーズに応じた計算パスを動的に選択します。
Temporal Embedding
もう一つの工夫として 石数ベースの時間埋め込み(Temporal Embedding) を導入しました。盤面上の石の数から4を引いた値(=何手目か)をEmbeddingで変換し、全トークンにブロードキャストします。これにより「序盤か終盤か」をモデルが明示的に認識でき、ゲームフェーズに応じたルーティングが可能になります。
構成
- 入力 : (8, 8, 2) → 64トークン × d_model=128
- 位置 : Row + Col + Temporal Embedding
- MoE Block ×4 : Router → [MHA Expert ×2, FFN Expert ×2] × 2 steps
- Policy Head : Dense(128) → GELU → Dense(1) → Reshape(64) → Softmax
- Value Head : Conv1D(32) → Flatten → Dense(128) → GELU → Dense(1) → Tanh
結果
- ランダム相手 : Avg 58 / 64
これまでで最も強いAIモデルが完成しました。MoE化したことで序盤・中盤・終盤が分業されており、途中までは少ない石数を中央に配置し、終盤で端からすべてを取っていく手法になっているように見えます。
MoE Transformerモデルを作る中で、FFN層よりもMHA層のほうが重要であることを発見しました。
- MHA : Multi Head Attention (盤面をチェックし、マスを関連付ける役割)
- FFN : Feed Forward Network (モデルパラメータにより最適な次の1手を出力する役割)
同じパラメータ、異なるExperts数で検証したところ、MHA:FFN比が1:3より3:1が圧倒的に強いことがわかりました。
このことから、リバーシAIにとっては次の1手を予測するより現状の盤面を正確に判断することが重要であることが考えられます。
理由としてはMHAが複数あることで角、辺、中央のようにそれぞれの分業(Expert化)が効果を発揮した可能性が挙げられます。
まとめ
半年間で4つのアーキテクチャを試しました。
| アーキテクチャ | 結果 |
|---|---|
| ResNet (CNN) | 安定して強い・速い。盤面全体の関係性に限界 |
| Transformer | 表現力は高いがパラメータ効率が悪く推論が重い |
| Diffusion | ゲームAIの離散行動空間とは根本的にミスマッチ。失敗 |
| MoE Transformer | 動的計算パスで効率と性能を両立。最終採用 |
振り返ると、一番面白かったのはMoEのルーター設計です。ゲームフェーズに応じてAttentionを重視するかFFNを重視するかが自動的に切り替わる挙動は、人間が序盤・中盤・終盤で思考法を変えるのに似ています。
Diffusionは完全に失敗でしたが、リバーシに合わなかった理由を考えること自体が学びになりました。最先端の手法が常に最適解ではなく、問題の性質に合ったアーキテクチャ選択が重要であるという当たり前でも忘れがちなことを再認識しました。
この内容のWebアプリ: ReversiGPT
この内容のリポジトリ: GitHub - rsu-Suba/ReversiGPT