コンテンツにスキップ

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.json
  • logs/optimizer-comparison/v14-cycle001-optimizer-abc/comparison.md
  • logs/optimizer-comparison/v14-cycle001-optimizer-abc/manifest.json
  • checkpoints/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.json
  • data/eval/promotion-gate/v14-cycle001-lr-epochs-attempt-b-vs-v13-cycle010/promotion-benchmark.json