V14サイクル3の複数ヘッド間のバランス¶
日付: 2026-07-23
目的¶
V14 d_model=256でCycle 3のself-playデータを学習した際、Policy targetへの適合が小さく、Value
lossが悪化する傾向が見られた。単純な学習率変更だけでは改善しなかったため、Policy、Value、Auxiliary
Prize、Integrated Beliefをすべて有効にしたまま、各lossがshared
Transformerへ与える相対的な強さを比較した。
この検証ではvalidation metricだけで設定を採用せず、選択したcheckpointを旧Championと直接対戦させ、同じrule-poolに対する性能も確認した。
固定条件¶
| Item | Value |
|---|---|
| Initial checkpoint | checkpoints/policy_value_v14_gumbel_iterative_10k_20260714-005806-cycle002_best.pt |
| Train input | data/selfplay/v14-gumbel-iterative-10k-20260714-005806-cycle003.train.jsonl |
| Replay input | data/replay/v14-gumbel-iterative-10k/20260714-005806-cycle003-history.jsonl |
| Validation input | data/selfplay/v14-gumbel-iterative-10k-20260714-005806-cycle003.validation.jsonl |
| Train records | 144,933 |
| Validation records | 6,340 |
| Model | Unified Policy/Value, d_model=256, 4 layers |
| Batch | 16 micro-batch、gradient accumulation 4、effective batch 64 |
| Learning rate | 1e-5 |
| スケジューラー | none |
| Epochs | 1 |
| Seed | 0 |
| Device | MPS |
比較run:
logs/optimizer-comparison/v14-cycle003-multi-head-balance/comparison.jsonlogs/optimizer-comparison/v14-cycle003-multi-head-balance/comparison.md
Multi-head比較¶
| 試行 | Valueの重み | Auxの倍率 | Beliefから共有層への倍率 | 検証Policy KL | Top-1 | 検証Value | 検証Aux | 検証Belief |
|---|---|---|---|---|---|---|---|---|
| K | 0.35 | 1.00 | 1.00 | 0.829386 | 54.36% | 0.292964 | 0.083048 | 0.002329 |
| L | 0.35 | 1.25 | 1.00 | 0.828564 | 54.71% | 0.294517 | 0.082955 | 0.002320 |
| M | 0.50 | 1.25 | 1.00 | 0.831790 | 54.41% | 0.289765 | 0.082661 | 0.002328 |
| N | 0.35 | 1.25 | 0.25 | 0.828859 | 54.39% | 0.297954 | 0.083264 | 0.002333 |
Attempt LはPolicyへの適合が最も良かったが、Value悪化が大きかった。Attempt MはPolicy改善量こそ小さいものの、ValueとAuxiliaryの劣化を最も抑え、Value backbone driftも比較候補中で最小だったため、実戦評価対象に選んだ。
Attempt Mのvalidation変化¶
| 指標 | 変更前 | 変更後 | 変化 |
|---|---|---|---|
| Policy KL | 0.832918 | 0.831790 | -0.001128 |
| Policy top-1 agreement | 53.95% | 54.41% | +0.46pt |
| Value loss | 0.282408 | 0.289765 | +0.007357 |
| Auxiliary prize loss | 0.084868 | 0.082661 | -0.002207 |
| Integrated belief loss | 0.002414 | 0.002328 | -0.000086 |
Value lossは悪化したが、比較時に許容した+0.01以内だった。Value
drift診断ではCandidate全体のMSE増加が+0.007365、backbone-only増加が+0.003332で、K、L、Nより小さかった。
昇格判定¶
Candidate:
checkpoints/experiments/v14-cycle003-multi-head-balance/attempt-m-best.pt
Champion:
checkpoints/policy_value_v14_gumbel_iterative_10k_20260714-005806-cycle002_best.pt
評価条件:
| Item | Value |
|---|---|
| Deck manifest | configs/benchmarks/model-decks-v1.yaml |
| Head-to-head | 7 decks × 10 games × 2 player directions = 140 games |
| Rule-pool | 7 model decks × 16 rule agents × 1 game = 112 games per model |
| Device | CPU |
| Seed | 0 |
| Criteria | any |
| Official head-to-head threshold | 52% |
| Training Champion threshold | 50% |
| Maximum rule win-rate drop | 2pt |
| Maximum unfinished-rate increase | 2pt |
| Maximum pokemon-out loss-rate increase | 2pt |
Artifact:
data/eval/promotion-gate/v14-cycle003-multi-head-attempt-m-vs-cycle002/promotion-benchmark.json
新旧モデルの直接対戦¶
| Result | Value |
|---|---|
| Candidate wins | 70 |
| Champion wins | 66 |
| Unfinished | 4 |
| Candidate win rate over all games | 50.00% |
| Candidate win rate over finished games | 51.47% |
| Wilson 95% confidence interval | 43.15% - 59.71% |
Candidateはplayer 0で31勝37敗、player 1で39勝29敗だった。先後を入れ替えた合算ではCandidate基準へ正規化できているが、player sideの影響が大きいため、勝率差そのものは確定的な優位性と解釈しない。
固定deck別のCandidate成績:
| Deck | Candidate | Champion | Unfinished |
|---|---|---|---|
| Archaludon ex | 8 | 12 | 0 |
| Garchomp ex | 8 | 12 | 0 |
| Dragapult | 10 | 10 | 0 |
| Iono Bellibolt ex | 9 | 7 | 4 |
| Mega Abomasnow ex | 12 | 8 | 0 |
| Starmie ex / Archaludon | 12 | 8 | 0 |
| Mega Lucario ex | 11 | 9 | 0 |
ルールエージェント群との対戦¶
| 指標 | 候補モデル | Champion | 差 |
|---|---|---|---|
| Wins / games | 25 / 112 | 21 / 112 | +4 wins |
| Macro win rate | 22.32% | 18.75% | +3.57pt |
| Average prizes | 1.670 | 1.643 | +0.027 |
| Average attacks | 3.473 | 4.071 | -0.598 |
| Unfinished rate | 0.00% | 0.00% | 0.00pt |
| Pokemon-out loss rate | 33.93% | 32.14% | +1.79pt |
| Deck-out loss rate | 1.79% | 2.68% | -0.89pt |
デッキ別ではGarchompとMega Lucarioがそれぞれ25pt改善した一方、Starmie / Archaludonは25pt悪化した。全体改善は4勝差であり、デッキ間の性能移動を含む。
判定¶
Head-to-headは正式基準52%には届かなかったが、Training Champion基準50%を満たした。Rule-poolはmacro勝率が改善し、unfinished増加はなく、pokemon-out loss増加も上限2pt以内だった。
criteria-mode=anyではhead-to-headまたはrule-poolのどちらかが合格すれば正式昇格するため、最終statusは
promotedとなった。
採用したV14 baseline¶
configs/v14/train-policy-gumbel-selfplay.yamlを次の設定へ更新する。
epochs: 1
batch-size: 16
gradient-accumulation-steps: 4
learning-rate: 0.00001
lr-scheduler: none
gradient-clip-norm: 10.0
value-loss-weight: 0.5
aux-prize-loss-scale: 1.25
belief-backbone-gradient-scale: 1.0
この設定は今回のデータだけで普遍的な最適値と証明されたものではない。V14の新しいbaselineとして採用し、各self-play cycleでpromotion gateを継続する。
運用Championへの反映¶
promotion-runは評価とgate判定だけを行うため、単独実験のAttempt Mは合格直後にはlatest alias、run
ledger、replay
registryへ反映されていなかった。pca promote-checkpointを追加し、2026-07-23に次の状態を検証してから正式採用した。
- promotion artifactのstatusが
promoted - Candidate checkpoint hashが評価時fingerprintと一致
- 現在latestが評価時のCycle 2 Championと一致
- Cycle 3のtrain JSONL、history JSONL、training metricsが存在
採用後:
checkpoints/policy_value_latest_best.ptはAttempt M bestを参照- official / trainingのrun-name scoped aliasもAttempt Mへ同期
- run ledgerの
champion.best_cycleはcycle003 - replay registryにはCycle 2とCycle 3を登録
- 採用receiptは
data/eval/promotion-gate/v14-cycle003-multi-head-attempt-m-vs-cycle002/champion-adoption.jsonに保存
この更新は同じrun IDを置換するため冪等であり、評価後に別のChampionへ進んでいた場合は古いartifactによる上書きを拒否する。
次に確認すること¶
- 新baselineで次cycleを学習し、Policy、Value、Auxiliary、Beliefのvalidation推移を確認する。
- Candidate対Championの先後差とデッキ別勝率を継続して記録する。
- 直接対戦が再び僅差なら、異なるseedまたはdeckあたり20試合で再評価する。
- Starmie / Archaludonのrule-pool低下が再現するか確認する。
- Average attacks低下が戦術改善か、攻撃機会損失かを試合ログで切り分ける。