2026-07-15 V14 cycle001 optimizer A/B/C comparison¶
V14モデル幅の256次元化¶
次期V14 training profileへd_model: 256を追加した。shared
Transformerだけでなく、card、attack、object、history、deck、action
encoderと各headの共通幅が128から256へ拡張される。4
layer構成のparameter数は、cycle001の128次元checkpointの約28.4Mから約61.1Mになる。
この変更はcheckpoint非互換である。実測ではAttempt Bの205 tensorのうち、256次元modelへshapeを保って読み込めるのは16 tensor、shape不一致で新規初期化されるのは189 tensorだった。したがって初回256次元Candidateは既存性能を維持した単純なwarm startではない。validation baseline、Official Champion戦、rule-pool評価をarchitecture transitionの判定として使い、正式52%またはTraining Champion 50%の基準を満たさない限りlatest aliasを更新しない。
目的¶
V14 cycle001でCandidateがChampionに負けた原因として、gradient-clip-norm: 1.0と1 epoch cosine
schedulerが更新を弱めた可能性を検証した。新しいself-playは生成せず、同じ初期checkpoint、train
split、validation split、seedを固定し、optimizer設定だけを変更した。
固定条件¶
checkpoint: checkpoints/policy_value_v13_ismcts_iterative_10k_20260705-052512-cycle010_best.pt
train: data/selfplay/v14-gumbel-iterative-10k-20260714-005806-cycle001.train.jsonl
validation: data/selfplay/v14-gumbel-iterative-10k-20260714-005806-cycle001.validation.jsonl
records: train 116,418 / validation 6,041
seed: 0
device: mps
epochs: 1
learning rate: 1e-5
policy target temperature: 1.0
全attemptのpretrain_val_*は差0で一致した。
条件¶
| 試行 | スケジューラー | 勾配クリップ | 変更対象 |
|---|---|---|---|
| A | cosine | 1.0 | 現行baseline |
| B | cosine | 5.0 | clip上限のみ |
| C | none | 1.0 | schedulerのみ |
結果¶
学習前validationは次の通りだった。
| 指標 | 学習前 |
|---|---|
| total loss | 1.798504 |
| policy loss | 1.233407 |
| policy KL | 0.926214 |
| policy top-1 agreement | 50.68% |
| value loss | 0.466183 |
| 試行 | 検証損失 | 検証Policy KL | KL改善量 | 検証Top-1 | Top-1改善量 | 検証Value損失 | Value改善量 |
|---|---|---|---|---|---|---|---|
| A | 1.819555 | 0.902113 | +0.024101 | 51.16% | +0.48pt | 0.510263 | -0.044079 |
| B | 1.818482 | 0.901931 | +0.024283 | 51.05% | +0.37pt | 0.509417 | -0.043234 |
| C | 1.793524 | 0.901352 | +0.024862 | 50.73% | +0.05pt | 0.486036 | -0.019853 |
自動判定は、policy KL改善、top-1改善、value loss悪化が0.01以内であることを要求した。3条件ともvalue
lossの悪化が上限を超えたため、recommended_attempt: noneとなった。
分析¶
Clipは主要因ではない¶
Aではclip前norm 10.883、clip後norm 1.000、平均scale 0.100、適用率100%だった。Bではclip後norm 5.000、平均scale 0.501、適用率99.89%となり、勾配を約5倍残した。しかしA/Bのloss軌跡とvalidationはほぼ同じだった。AdamWのmoment正規化により、継続的な一様scale差が更新へ直接反映されにくいことと整合する。
したがって、clip上限1.0をCandidate退行の主要因とはみなさない。既定値を5.0へ変更する根拠も得られなかった。
Constant LRはvalue退行を軽減したが解決していない¶
Cはtotal validation lossを学習前より0.00498改善し、Aより0.02603低かった。主な差はvalue lossで、Aの悪化0.04408に対しCは0.01985まで抑えた。一方、valueは学習前より依然悪化し、policy top-1改善も0.05ptに留まった。
Policy KLは全条件で約0.024改善したため、optimizer更新が完全に弱すぎるわけではない。しかしtop-1はほぼ変わらず、鋭いGumbel targetの順位を十分に学べていない問題は残った。
結論¶
clip=1.0は主要なボトルネックではない。- 1 epoch cosineはvalue退行を増やしており、constant LRの方がよい。
- optimizerだけではpolicy top-1停滞を解決できない。
- CはA/Bより良い診断候補だが、value退行基準を満たさないためpromotionには送らない。
次はconstant LRを基準に、value更新を安定させる条件とpolicy
target設計を別々に比較する。具体的には、constant LR 5e-6、value loss
weightの調整、completed-QとVisitの混合targetを一度に一変数ずつ検証する。
保存した結果¶
logs/optimizer-comparison/v14-cycle001-optimizer-abc/comparison.jsonlogs/optimizer-comparison/v14-cycle001-optimizer-abc/comparison.mdlogs/optimizer-comparison/v14-cycle001-optimizer-abc/manifest.jsoncheckpoints/experiments/v14-cycle001-optimizer-abc/attempt-{a,b,c}-best.pt
Constant LRとepoch数の追加比較¶
optimizer A/B/C比較から、cycle内cosineよりconstant
LRの方がvalue退行を抑えられることが分かった。一方で、1e-5、1 epochではpolicy
top-1の改善が小さく、learning rateまたはoptimizer更新回数が不足している可能性が残った。
次の5条件を固定train/validation splitで比較するlearning-rate-epochs profileを追加した。
| 試行 | 学習率 | エポック数 | バッチサイズ | スケジューラー |
|---|---|---|---|---|
| A | 1e-5 |
1 | 64 | none |
| B | 1e-5 |
2 | 64 | none |
| C | 2e-5 |
1 | 64 | none |
| D | 2e-5 |
2 | 64 | none |
| E | 3e-5 |
1 | 64 | none |
比較はscripts/compare_train_learning_rates.shから実行する。manifestにはattemptごとの実LR、epoch、batch
size、実行commandを保存し、比較レポートにはbest epoch、予定optimizer step数、best/final validation
metricを残す。
フル比較ではattempt B(1e-5、2 epoch、constant LR)がpolicy KLとtop-1を最も改善したが、value
lossの許容条件をわずかに超えたため自動推薦はnoneだった。その後、attempt BをV13 cycle010
Championへ固定benchmarkで評価した。
Candidate wins: 70
Champion wins: 68
unfinished: 2
finished-game win rate: 50.72%
Candidate rule macro win rate: 22.32%
Champion rule macro win rate: 21.43%
Candidate pokemon-out loss rate: 36.61%
Champion pokemon-out loss rate: 39.29%
正式基準52%には届かなかったが、rule性能とpokemon-out敗北率を悪化させず、既存V14候補よりChampion対戦を改善した。この結果からV14標準train
configをattempt
Bへ変更した。また、正式Champion基準52%は維持しつつ、50%以上かつ同じ安全条件を満たす候補をTraining
Championとして次cycleへ進める二段階promotionを採用した。今回のattempt
Bは新判定ではtraining_promotedになる。
Artifacts:
logs/optimizer-comparison/v14-cycle001-lr-epochs/comparison.jsondata/eval/promotion-gate/v14-cycle001-lr-epochs-attempt-b-vs-v13-cycle010/promotion-benchmark.json