← Blog/blog/refresh-count-hides-schedule

Four optimizer refreshes are not one schedule

Expensive second-order optimizers often reuse a matrix factorization for many training steps. The usual shorthand says “refresh every k steps.” Wang and colleagues ask the missing question: which steps get the fresh preconditioner? Holding the number of refreshes fixed, they move the middle two updates earlier or later and find that the winner can reverse as learning rate changes.

01

A schedule leaves a sawtooth fingerprint

A Kronecker factor approximates layerwise curvature as a product of two smaller matrices. Its eigendecomposition supplies a preconditioning transform: a rescaling of the gradient intended to make optimization better conditioned. Because decompositions are costly, Mousse caches them. At step t, cache age is the distance to the most recent refresh: aₛ(t) = t − max{s ∈ S : s ≤ t}.

def cache_ages(horizon, schedule):
    if horizon < 1 or not schedule or schedule[0] != 1:
        raise ValueError("schedule must start at step 1")
    ages = []
    refresh_index = 0
    latest_refresh = schedule[0]
    for step in range(1, horizon + 1):
        while (refresh_index + 1 < len(schedule)
               and schedule[refresh_index + 1] <= step):
            refresh_index += 1
            latest_refresh = schedule[refresh_index]
        ages.append(step - latest_refresh)
    return ages

This page runs the TypeScript version. The curves below are exact consequences of the paper's 591-step schedules, not measured language-model losses. The Python and C++ variants expose the same state update line for line.

earlylateuniform
Core-computed cache age for the paper's early [1, 211, 291, 561], late [1, 301, 381, 561], and equal-budget uniform [1, 188, 374, 561] schedules. Index 0 is training step 1.
ScheduleRefresh stepsCountCumulative ageMaximum ageTerminal age
Early1, 211, 291, 561461,88526930
Late1, 301, 381, 561464,58529930
Uniform1, 188, 374, 561452,45218630
Core-computed sum of cache ages across all 591 steps. Late placement carries 2,700 more age-steps than early; uniform carries 9,433 fewer than early.
02

The winner flips with learning rate

On the 350M-parameter FineWeb experiment, the paper reports paired-seed validation-loss differences as late minus early. Negative means late wins; positive means early wins. The median moves from −0.0049 at learning rate 0.012 to +0.0157 at 0.024. A single-rate comparison could make either placement look universally superior.

late loss − early loss
Paper-reported Table 6 medians for a fixed-AdamW FineWeb cohort. Points correspond to learning rates 0.012, 0.016, and 0.024; zero is a tie.
CorpusTuned LR|effect| at tuned LRMax |effect| on surface
FineWeb0.0120.0090.033
Pile-CC0.0120.0110.031
GitHub0.0120.0840.084
PubMed0.0120.0680.082
arXiv0.0160.0390.095
Books30.0120.0430.063
Paper-reported maximum absolute early-versus-late loss difference over each corpus's learning-rate surface. These are sensitivity maxima, not gains from a deployable policy.
03

Scale moves the boundary too

The main-cohort estimates put the preference boundary at progressively smaller learning rates as the model grows: from 0.029393 at 64.1M parameters to 0.013196 at 928.8M. This is not a clean scaling law because model size, tokens per parameter, and training horizon move together.

estimated crossing learning rate
Paper-reported Table 7 preference-boundary estimates for 64.1M, 124.5M, 354.9M, 695.4M, and 928.8M parameters, in that order.
04

What to record—and what to probe next

Report the complete refresh-step list, learning-rate schedule, warmup, seed pairing, and total horizon. For a causal test, hold tokens per parameter fixed across scale, measure eigenvector rotation as well as spectral width, and repeat the grid with other preconditioners.

Start with the from-scratch neural network to make gradient scaling visible, then connect the schedule audit to the Transformer training loop. Frequency is a lossy label for a time-varying intervention.

References

  1. X. Wang, Z. Zhai, Y. Gu, Z. Yu, S. Lyu, J. Tian, L. Ding, Z. Song, and X.-W. Chang (2026). A Refresh Interval Does Not Fully Specify a Refresh Schedule: Learning-Rate-Dependent Placement in Kronecker-Preconditioned Language Model Training. arXiv:2610.18695
  2. J. Martens and R. Grosse (2015). Optimizing Neural Networks with Kronecker-factored Approximate Curvature. ICML