← train.galvyn.xyz

Lesson 1.3 · Learning rate · Oct 18, 2026

Too high doesn't always explode

At 1e-2 a 30M model stalled for 800 steps and finished 1.4 nats behind 1e-3. On a tiny Shakespeare model the opposite was true.

The learning rate sets how far each update moves the weights. Run A uses 1e-3; run B uses 1e-2. Same 30M-parameter model, same data (FineWeb-Edu), same 100-step warmup and cosine decay, same seed.

Losssolid = train (smoothed), dots = validation
6810500100015002000step
Real data from the lab experiment. A: fineweb edu · B: fineweb edu
AB
val loss at step 4006.266.96
val loss at step 12005.606.94
best val loss (step 2000)5.3006.705

A follows the healthy curve from the baseline lesson. B gets stuck: from step 400 to 1,200 its validation loss barely moves (6.96 → 6.94). The updates are so large that each step undoes the last, and the model hovers at a crude solution instead of descending into a better one. B only starts improving after step 1,200, when the cosine schedule has lowered its learning rate, and it ends 1.4 nats behind A.

A 10× higher learning rate didn't make training faster; it made it fail to progress. The earlier version of this lesson (a 0.8M character model on Shakespeare, archived) found the opposite: there, 1e-2 beat 1e-3. The right learning rate depends on the model and the data. Bigger models and bigger vocabularies generally need smaller ones; GPT-2 124M trains at 6e-4.

Every number here comes from this experiment in the lab, trained on one RTX A5000.