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
- Deep Residual Learning for Image Recognition
resnets lean on batch norm to make hundreds of convolutional layers trainable
- Layer Normalization
it keeps the normalization trick but removes dependence on batch statistics
- Dropout: A Simple Way to Prevent Neural Networks from Overfitting
batch norm changed the regularization toolbox that dropout had made standard