The noisy compass — every batch is a poll, not a census
The white arrow is the true gradient — the average over the whole dataset. Nobody computes that in practice; they poll a batch and hope. Each gold arrow below is one real minibatch estimate at batch size B. Drag the slider: at B=1 some arrows point backwards; by B=64 the poll is tight. The measured scatter shrinks like 1/√B — check the readout against the prediction.
Slider is powers of two, 1→256. Each arrow really averages B per-example gradients drawn from a noisy dataset; the std readout is computed from the 40 samples, the "theory" number is σ/√B.
One budget, three ways to spend it
Fix the real currency — 2,048 example-reads — and choose how to spend it: B=4 buys 512 noisy steps, B=32 buys 64 decent steps, B=256 buys just 8 immaculate ones. Run all three and compare final losses at the same compute. The x-axis is examples consumed, so the race is fair.
Same task, same lr, same budget of gradient evaluations — only the packaging differs. Rerun a few times; the ranking is robust, the exact numbers wander.
The GPU wall — hardware votes for big batches
So why not tiny batches everywhere? Because hardware hates them. Every step pays a fixed overhead (kernel launches, memory moves) before any math happens, and a GPU multiplies thousands of numbers at once whether you use them or not. The top curve is measured throughput; the bottom is time-to-target — a U: too small starves the silicon, too big wastes reads on steps you didn't need.
A simulation with honest structure: step time = overhead + ceil(B / width) × unit; statistical efficiency per example from EP 02's noise model. Both curves recompute as you drag.
Sharp landings — what big batches cost you later
The landscape below has two homes: a sharp pit (right next to where training starts) and a wide valley (further, slightly lower). Batch noise is the only force that can bounce the ball out of the pit. Press run: 30 independent trainings execute at your chosen B, and the tally shows where they ended up. Then judge them like production models — the "test shift" wobbles the landscape ±0.25.
Each dot is a finished run's final position. "Shifted loss" is measured by re-evaluating each endpoint on the wobbled landscape — flat-valley endpoints barely move, pit endpoints spike.
The thermostat — lr and batch are one dial wearing two hats
What actually shapes the trajectory isn't lr or B alone — it's their ratio, the noise temperature ≈ lr/B. Run the pairs below: (lr 0.04, B 8) and (lr 0.16, B 32) have the same temperature and land the same way. Then break the rule: scale B up 8× without touching lr, and watch the run go cold — straight into the nearest pit, exactly EP 04's disease.
Each button runs 20 fresh trainings and reports the flat-valley landing rate plus the measured step-noise std — the "temperature" line in the readout is computed from the runs, not the formula.