Skip to content
All papers

Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift

Sergey Ioffe, Christian Szegedy2015ICML 2015

Read it on arxiv.org(opens in a new tab)

Why this one

Worth reading twice, and for two different reasons. The first is practical: normalising each activation across the batch, then letting the network learn a scale and shift back, lets you use a much larger learning rate and makes deep stacks trainable in a way they were not before. The second is a lesson in how research works - the explanation the paper gives, internal covariate shift, has been substantially challenged since, and the technique kept working anyway. Hold both facts at once. It also has the trap that catches everyone in practice: the layer behaves differently at training time and at inference time, because inference uses running statistics rather than the batch, and forgetting to switch modes is one of the most common reasons a model that trained well scores badly.

What to take away

  • Train and eval modes are genuinely different computations. Check which one you are in.
  • Small batches degrade the statistics - that is where layer norm and group norm come from.
  • A technique can be correct and its stated explanation can be wrong. Read the follow-ups.

Reads with