V14 d_model=256 実験結果¶
更新日: 2026-07-19
概要¶
V14 unified policy/value
modelの共通埋め込み幅をd_model=128から256へ拡張し、既存データによるbootstrap、V14
self-playデータによるfinetune、反復self-play trainを実施した。本稿はcycle
2のpromotion完了時点までを対象とする。cycle 3はd_model=256のcycle 2
Candidateから開始済みだが、結果はまだ含めない。
現時点の結論は次の通りである。
- 256幅モデルは、ほぼ新規初期化された状態から既存データを学習し、実用的なvalidation指標まで回復できた。
- cycle 2 CandidateはV13 cycle 10
Championとの同一デッキ対戦で、終了試合ベース
65.44%の勝率を記録した。 - policy指標は少し改善したが、value lossはself-play更新後に悪化した。validation total lossだけでは対戦性能を選べない。
- 今回の対戦結果が示すのはV13 Championに対する相対性能であり、未知の相手を含む絶対性能はまだ確定していない。
- 同一条件の128幅モデルとのcontrolled A/Bではないため、対戦性能の改善をモデル幅だけの効果とは断定できない。
評価範囲¶
本稿では、validation指標とCandidate対Championの直接対戦だけを評価に使用する。以前実施した対ルール評価は、対戦相手の品質と評価指標の信頼性が十分でないため、実験結果と結論から除外した。
モデル構成¶
| 項目 | V13までの主構成 | V14 256幅構成 |
|---|---|---|
d_model |
128 | 256 |
| Transformer layer数 | 4 | 4 |
| attention head数 | 4 | 4 |
| parameter数 | 約28.4M | 61,166,915 |
parameter数はcheckpoints/policy_value_v14_256_finetuned_best.ptのmodel
tensorを集計した実測値である。V13構成の約2.15倍になった。shared
Transformerだけでなく、card、attack、object、history、deck、action
encoderと各headの共通幅も256へ拡張される。
128幅checkpointからの移行は、性能を保存したまま幅だけを増やす変換ではない。205 tensorのうちshapeを保って読み込めたのは16 tensorで、189 tensorはshape不一致により新規初期化された。そのため、以下のbootstrap結果は256幅モデルの学習可能性を示すが、128幅モデルからの純粋な差分学習ではない。
学習設定¶
現在の標準training profileは次の設定である。
| 項目 | 値 |
|---|---|
| config | configs/v14/train-policy-gumbel-selfplay.yaml |
| optimizer | AdamW |
| learning rate | 1e-5 |
| scheduler | none |
| epoch | 2 |
| micro batch | 16 |
| gradient accumulation | 4 |
| effective batch | 64 |
| weight decay | 0.01 |
| gradient clip norm | 1.0 |
| training device | MPS |
| self-play device | CPU / fp32 |
| self-play search | Gumbel Sequential Halving ISMCTS |
MPSでは長時間実行時のdriver memory増加へ対処するため、安定padding、定期checkpoint、process restartを使用する。詳細は2026-07-16 V14 256次元trainingのMPS OOM対策を参照する。
既存データによるbootstrap¶
データ¶
次の約171万recordを使用した。
- V13 rule bootstrap filtered 10k
- V13 iterative self-play cycle 1
- V13 iterative self-play cycle 5
- V13 iterative self-play cycle 10
validationにはV14 cycle 1から抽出した6,041 recordを使用した。
結果¶
| 指標 | 学習前 | 最良エポック1 | 改善量 |
|---|---|---|---|
| validation total loss | 2.881381 | 1.832472 | 1.048909 |
| validation policy loss | 1.440740 | 1.239512 | 0.201228 |
| validation policy KL | 1.132244 | 0.931016 | 0.201228 |
| policy top-1 agreement | 30.51% | 50.28% | +19.78pt |
| validation value loss | 1.095099 | 0.498839 | 0.596260 |
| aux prize loss | 0.241012 | 0.091508 | 0.149504 |
| integrated belief loss | 0.104530 | 0.002613 | 0.101917 |
初期値の大半が新規初期化だったため改善幅は大きい。この結果から、256幅構成が既存record schemaを学習でき、policy/value/aux/beliefの各headを同時に収束させられることを確認した。
V14 cycle 1データによるfinetune¶
bootstrap checkpointを、cycle 1のtrain 116,418 recordで2 epoch追加学習した。
| 指標 | 学習前 | 最良エポック2 | 変化 |
|---|---|---|---|
| validation total loss | 1.832472 | 1.814381 | -0.018091 |
| validation policy loss | 1.239512 | 1.201979 | -0.037533 |
| validation policy KL | 0.931016 | 0.893483 | -0.037533 |
| policy top-1 agreement | 50.28% | 51.05% | +0.77pt |
| validation value loss | 0.498839 | 0.517988 | +0.019149 |
| aux prize loss | 0.091508 | 0.091913 | +0.000405 |
| integrated belief loss | 0.002613 | 0.002502 | -0.000112 |
policyは改善したがvalueは悪化した。total
lossはpolicy改善が上回って小幅に改善している。生成checkpointは
checkpoints/policy_value_v14_256_finetuned_best.ptであり、cycle 2
self-playの初期modelとして使用した。
反復self-play train¶
Cycle 1の位置づけ¶
cycle 1はV13 Championを初期checkpointとして開始したarchitecture transitionであり、完成した256幅bootstrap checkpointから始めたcycleではない。promotion対象のattempt 2は次の結果でrejectされた。
| 評価 | Candidate | Champion |
|---|---|---|
| head-to-head勝率(終了試合) | 48.91% | 51.09% |
また、当時はchunkごとのgame IDが重複し、split summary上は1,000試合が100 unique gameとして扱われた。record数はtrain 116,418、validation 6,041だったが、game単位splitの独立性に制約がある。このID問題はcycle 2より前に修正した。
したがってcycle 1は移行失敗とpipeline診断の記録として扱い、256幅モデルの現在性能はcycle 2を主要根拠とする。
Cycle 2のデータ¶
| 項目 | 値 |
|---|---|
| 初期checkpoint | policy_value_v14_256_finetuned_best.pt |
| self-play games | 1,000 |
| train games | 950 |
| validation games | 50 |
| train records | 116,751 |
| validation records | 6,537 |
| history replay | なし。cycle 1が未昇格だったため登録済み履歴がなかった。 |
サイクル2の学習試行¶
3条件を同じtrain/validation splitから学習した。attempt 2と3はpolicy target temperatureが異なるため、raw policy lossとKLをattempt間で直接順位付けする際には注意が必要である。
| 試行 | 最良エポック | 教師分布の温度 | 検証損失 | Policy損失 | Policy KL | Top-1 | Value損失 |
|---|---|---|---|---|---|---|---|
| 1 | 1 | 1.00 | 1.670951 | 1.195540 | 0.898629 | 50.80% | 0.386493 |
| 2 | 2 | 1.25 | 1.679269 | 1.207106 | 0.851829 | 50.98% | 0.383088 |
| 3 | 1 | 1.50 | 1.678851 | 1.221238 | 0.810815 | 51.04% | 0.369471 |
全attemptで、各attemptの学習前評価に対してpolicy
lossとKLは約0.013から0.014改善した。一方、top-1はほぼ横ばいから最大+0.23ptで、value
lossは約0.095から0.112悪化した。特にattempt 1では次の変化だった。
| 指標 | 学習前 | 最良エポック1 | 変化 |
|---|---|---|---|
| validation total loss | 1.571892 | 1.670951 | +0.099059 |
| validation policy loss | 1.208431 | 1.195540 | -0.012891 |
| validation policy KL | 0.911520 | 0.898629 | -0.012891 |
| policy top-1 agreement | 50.81% | 50.80% | -0.01pt |
| validation value loss | 0.274539 | 0.386493 | +0.111954 |
| aux prize loss | - | 0.086588 | - |
| integrated belief loss | - | 0.002330 | - |
retry選択時のvalidation scoreだけではattempt 3が選ばれていたが、最終的なpromotion benchmarkではattempt 1をCandidateとして評価した。最終manifest、run ledger、latest aliasではattempt 1をcycle 2の正式結果として扱う。
Cycle 2 promotion結果¶
Candidateはcheckpoints/policy_value_v14_gumbel_iterative_10k_20260714-005806-cycle002_best.pt、ChampionはV13
cycle
10のcheckpoints/policy_value_v13_ismcts_iterative_10k_20260705-052512-cycle010_best.ptである。
Championとのhead-to-head¶
head-to-headとは、CandidateとChampionを同じ条件で直接対戦させ、どちらが相対的に強いかを測る評価である。ルールベースなど第三の相手に対する勝率ではない。
固定7デッキを使用し、CandidateとChampionへ同じデッキを渡した。各デッキでCandidateがplayer
0になる10試合と、player
1になる10試合を行い、先後の影響を均した。合計は7デッキ x 2方向 x 10試合 = 140試合である。
| 項目 | 結果 |
|---|---|
| Candidate wins | 89 |
| Champion wins | 47 |
| unfinished | 4 |
| 終了試合でのCandidate勝率 | 65.44% |
| 95% confidence interval | 57.12%から72.91% |
勝率はunfinished
4試合を分母から除き、89 / (89 + 47) = 65.44%と計算する。52%の正式基準を明確に超えたため、cycle 2
Candidateはこの固定benchmark上でV13 Championより強いと判断した。最終statusは promotedで、cycle
3の初期modelに使用している。
この数値は「あらゆる相手に65.44%勝てる」という意味ではない。使用した7デッキとV13 Championに対する相対勝率である。
デッキ別結果¶
head-to-headは各デッキ20試合である。
| Model側デッキ | Candidate勝 | Champion勝 | Unfinished | Candidate勝率 |
|---|---|---|---|---|
| Mega Abomasnow official sample | 16 | 4 | 0 | 80.0% |
| Mega Lucario ex | 16 | 4 | 0 | 80.0% |
| Dragapult citytop | 14 | 6 | 0 | 70.0% |
| Archaludon ex metal | 13 | 7 | 0 | 65.0% |
| Garchomp ex Cynthia | 12 | 8 | 0 | 60.0% |
| Starmie ex Archaludon counter | 11 | 9 | 0 | 55.0% |
| Iono Bellibolt ex | 7 | 9 | 4 | 43.8% |
Iono Bellibolt exでは4試合がunfinishedだったため、H2H勝率は終了16試合を分母にした。
主要な傾向は次の通りである。
- Mega AbomasnowとMega Lucarioでは、CandidateがChampionに対して80%勝った。
- Dragapult、Archaludon、GarchompでもCandidateが60%以上勝った。
- Starmieは55%で差が小さく、この試合数だけでは明確な優位を判断しにくい。
- Iono Bellibolt exだけはCandidateが負け越し、unfinishedも4試合発生したため、優先的な局面診断対象である。
各デッキの予定20試合ではconfidence intervalが広い。Ionoは終了試合が16試合に限られるため、さらに不確実性が大きい。デッキ別の順位を確定値として扱わず、再現試験の優先順位付けに使う。
総合分析¶
確認できたこと¶
256幅モデルは学習不能にはなっておらず、V13 Championより強いCandidateを生成できた。特にcycle 2のhead-to-head差は偶然だけでは説明しにくい大きさで、256幅モデルを次cycleへ進める根拠として十分である。
policy lossとKLが小幅に改善し、head-to-headでも大きく勝ち越したため、更新が完全に壊れているわけではない。aux prizeとbelief headも低いlossを維持している。
残る問題¶
value lossは全attemptで悪化した。self-play validationに対するvalueの汎化、終局結果の分布変化、policy/valueの共有表現におけるgradient競合を切り分ける必要がある。total validation lossが悪化しても対戦性能が上がったことから、現行のloss重みとpromotion指標は同じ目的を直接測っていない。
デッキ別の改善は均一ではなく、Ionoでは負け越している。self-play相手への適応と、異なるデッキや未知の相手への汎化を区別して評価する必要がある。
まだ断定できないこと¶
今回の実験ではモデル幅のほかに、bootstrapデータ、Gumbel
target、optimizer設定、学習回数、self-play局面分布も変わっている。したがって、65.44%のhead-to-head勝率をd_model=256だけの効果とは断定できない。
幅の純粋な効果を測るには、128幅と256幅を同じ初期データ、同じsplit、同じoptimizer step数、同じseedで学習し、固定benchmarkへ送るcontrolled A/Bが必要である。
次に確認すること¶
- cycle 3でcycle 2 Candidateからの改善が継続するか確認する。
- 負け越したIonoと差が小さいStarmieのCandidate対Champion traceを局面別に比較する。
- value loss悪化を、turn、終局理由、デッキ、勝敗、探索Qのconfidence別に分解する。
- 異なるseedで同じhead-to-head benchmarkを再実行し、65.44%の再現性を確認する。
- 128幅と256幅のcontrolled A/Bを実施し、parameter増加そのものの効果を測る。
分析方法¶
本稿では、training metricsのbest.metricsからbest
epochのvalidation値を取得した。cycleごとの試合数、split、checkpoint chainはmanifestとsplit
summaryを正とした。
head-to-head勝率は、CandidateとChampionの先後を入れ替えた両方向の結果を合算し、unfinishedを除く終了試合を分母にした。デッキ別結果もforwardでのCandidate勝利数とreverseでのCandidate勝利数を合算した。対ルール評価は分析対象に含めていない。
cycle 2のretry選択記録と最終promotion結果が異なるため、最終的なcheckpoint採用状態はmanifest、run ledger、promotion benchmarkを優先した。
保存した結果¶
logs/v14-256-bootstrap-metrics.jsonlogs/v14-256-finetuned-metrics.jsonlogs/selfplay-train/v14-gumbel-iterative-10k-20260714-005806-cycle001.manifest.yamllogs/selfplay-train/v14-gumbel-iterative-10k-20260714-005806-cycle002.manifest.yamllogs/selfplay-train/v14-gumbel-iterative-10k-20260714-005806-cycle002.train-metrics.jsonlogs/selfplay-train/v14-gumbel-iterative-10k-20260714-005806-cycle002.train-metrics_attempt002.jsonlogs/selfplay-train/v14-gumbel-iterative-10k-20260714-005806-cycle002.train-metrics_attempt003.jsondata/selfplay/v14-gumbel-iterative-10k-20260714-005806-cycle002.split-summary.jsondata/eval/promotion-gate/v14-gumbel-iterative-10k-20260714-005806-cycle002-attempt001/promotion-benchmark.jsonのhead_to_headlogs/selfplay-train/v14-gumbel-iterative-10k-20260714-005806.ledger.yaml