Initial-Only Weight Decay with Tail Averaging / report_super_2026-08-30T083749.md

Audited (legacy)

Raw ⬇ ZIP

Супер-проверка · промт оператора:

Вот конкретный эксперимент для агента. Скопируй как есть.


Эксперимент #85: Initial-Only Weight Decay + Tail Averaging

Статья: 2608.22953 Файл: exp85_initial_only_weight_decay_tail_averaging.py

Гипотеза

Weight decay нужен только на ранней фазе обучения, чтобы задать масштаб весов. На поздней фазе он мешает сходимости. Tail averaging последних шагов снижает дисперсию финальных параметров и улучшает generalization. Вместе они дают ту же или лучшую accuracy при меньшем числе шагов.

Задача

MNIST, MLP 3 слоя: 784 → 256 → 256 → 10, активация ReLU. Оптимизатор: AdamW, lr=1e-3, betas=(0.9,0.999), weight_decay=0.05. Расписание: cosine annealing, T=5000 шагов. Seeds: 5.

Варианты (4 режима)

| Код | Weight decay | Tail averaging | |---|---|---| | baseline | все T шагов | нет | | initwd | только первые p*T шагов, p=0.5 | нет | | initwd_tail | первые p*T шагов, p=0.5 | да, последние q*T шагов, q=0.2, равномерное усреднение | | wd_tail | все T шагов | да, последние q*T шагов, q=0.2 |

wd_tail — контроль, чтобы отделить эффект tail averaging от эффекта initial-only WD.

Реализация хитростей

  • Initial-only WD: модифицировать AdamW так, чтобы weight_decay применялся только на шагах step < p*T. После p*T — обычный Adam без WD.
  • Tail averaging: хранить копию параметров. На каждом из последних q*T шагов добавлять текущие параметры в сумму. В конце разделить на число шагов хвоста. Итоговую accuracy считать по усреднённым весам.

Метрики

  • test_accuracy (среднее ± std по 5 seeds)
  • best_test_accuracy за всё обучение
  • steps_to_best — на каком шаге достигнут лучший результат
  • final_weight_norm — L2-норма всех параметров в конце
  • mid_gradient_norm — средняя норма градиента на шагах 2000-3000

Критерий успеха

  1. initwd_tail по accuracy ≥ baseline при том же T.
  2. Или initwd_tail достигает accuracy baseline за меньше шагов (сравнить steps_to_best).
  3. initwd_tail лучше initwd и лучше wd_tail — значит оба компонента работают.

Фальсификация

Если initwd без tail averaging уже хуже baseline, а tail averaging не компенсирует — гипотеза неверна. Если wd_tailinitwd_tail, значит весь эффект от tail averaging, а не от initial-only WD.


Это минимальный воспроизводимый эксперимент на CPU/одной GPU. Запускается за минуты. Если агент хочет быстрее — уменьшить T до 3000 и width до 128, но тогда 5 seeds обязательны.

Ответ агента:

{ "worked": false, "confidence": 9, "verdict": "Built and ran the specified 784-128-128-10 ReLU MLP with AdamW, cosine learning-rate annealing, 3,000 steps, and five seeds on real MNIST. The operator inequality sanity check passed, but initial-only decay did not produce a distinct improvement: initwd_tail reached 0.97744 +/- 0.00110 accuracy versus 0.97720 +/- 0.00106 for constant WD, while constant-WD tail averaging also reached 0.97744 +/- 0.00109. Thus the observed small gain is attributable to tail averaging, not the proposed initial-only schedule; no faster best step was observed.", "metrics": { "baseline": "MNIST, 5 seeds: baseline constant WD test accuracy 0.97720 +/- 0.00106, best accuracy 0.97764 +/- 0.00058, steps-to-best 2700 +/- 300, weight norm 15.5723 +/- 0.1096, mid-gradient norm 0.5346 +/- 0.0108, runtime 23.06 +/- 1.37 sec/mode-seed. wd_tail: 0.97744 +/- 0.00109; paired gain over baseline +0.00024 +/- 0.00009.", "idea": "initwd_tail: test accuracy 0.97744 +/- 0.00110, best accuracy 0.97764 +/- 0.00059, steps-to-best 2700 +/- 300, weight norm 15.7558 +/- 0.1114, mid-gradient norm 0.5352 +/- 0.0105, runtime 23.62 +/- 1.25 sec/mode-seed. Paired gain over baseline +0.00024 +/- 0.00025, over initwd +0.00020 +/- 0.00032, and versus wd_tail approximately 0.00000 +/- 0.00019 (2/5 wins). Operator check passed with gaps -0.000371 and -0.000376." }, "how_to_run": "/home/maxwelhelp/main/bin/python3 exp85_initial_only_weight_decay_tail_averaging.py --runs 5 --T 3000 --width 128 --out super_results.json", "files": [ "exp85_initial_only_weight_decay_tail_averaging.py", "super_results.json", "report.md", "experiment.py", "results.json" ], "limitations": "Tested one real dataset, one MLP width, one prescribed weight-decay/horizon/window configuration, and five seeds; did not test CIFAR-10, ResNet, momentum SGD, hyperparameter sweeps, sharpness, or matched-FLOP/steps-to-target analyses. MNIST evaluation sampled every 300 steps, and the operator inequality uses finite Monte Carlo sampling. The reported final weight norm for tail modes is the non-averaged training norm." }