In machine learning, normalization is a statistical technique with various applications. There are mainly two forms of normalization, data normalization and activation normalization. Data normalization, or
feature scaling
Feature scaling is a method used to normalize the range of independent variables or features of data. In data processing, it is also known as data normalization and is generally performed during the data preprocessing step.
Motivation
Since th ...
, is a general technique in statistics, and it includes methods that rescale input data so that they have well-behaved range, mean, variance, and other statistical properties. Activation normalization is specific to deep learning, and it includes methods that rescale the activation of hidden neurons inside a neural network.
Normalization is often used for faster training convergence, less sensitivity to variations in input data, less overfitting, and better generalization to unseen data. They are often theoretically justified as reducing covariance shift, smoother optimization landscapes, increasing
regularization
Regularization may refer to:
* Regularization (linguistics)
* Regularization (mathematics)
* Regularization (physics)
* Regularization (solid modeling)
* Regularization Law, an Israeli law intended to retroactively legalize settlements
See also ...
, though they are mainly justified by empirical success.
Batch normalization
Batch normalization (BatchNorm)
operates on the activations of a layer for each mini-batch.
Consider a simple feedforward network, defined by chaining together modules:
where each network module can be a linear transform, a nonlinear activation function, a convolution, etc.
is the input vector,
is the output vector from the first module, etc.
BatchNorm is a module that can be inserted at any point in the feedforward network. For example, suppose it is inserted just after
, then the network would operate accordingly:
The BatchNorm module does not operate over individual inputs. Instead, it must operate over one batch of inputs at a time.
Concretely, suppose we have a batch of inputs
, fed all at once into the network. We would obtain in the middle of the network some vectors
The BatchNorm module computes the coordinate-wise mean and variance of these vectors:
where
indexes the coordinates of the vectors, and
indexes the elements of the batch. In other words, we are considering the
-th coordinate of each vector in the batch, and computing the mean and variance of this collection of numbers.
It then normalizes each coordinate to have zero mean and unit variance:
The
is a small positive constant such as
added to the variance for numerical stability, to avoid division by zero.
Finally, it applies a linear transform:
Here,
and
are parameters inside the BatchNorm module. They are learnable parameters, typically trained by gradient descent.
The following code illustrates BatchNorm.
import numpy as np
def batchnorm(x, gamma, beta, epsilon=1e-8):
# Mean and variance of each feature
mu = np.mean(x, axis=0) # shape (N,)
sigma2 = np.var(x, axis=0) # shape (N,)
# Normalize the activations
x_hat = (x - mu) / np.sqrt(sigma2 + epsilon) # shape (B, N)
# Apply the linear transform
y = gamma * x_hat + beta # shape (B, N)
return y
Interpretation
and
allow the network to learn to undo the normalization if that is beneficial.
Because a neural network can always be topped with a linear transform layer on top, BatchNorm can be interpreted as removing the purely linear transformations, so that its layers focus purely on modelling the nonlinear aspects of data.
It is claimed in the original publication that BatchNorm works by reducing "internal covariance shift", though the claim has both supporters and detractors.
Special cases
The original paper
recommended to only use BatchNorms after a linear transform, not after a nonlinear activation. That is, something like
, not
. Also, the bias
does not matter, since will be canceled by the subsequent mean subtraction, so it is of form
. That is, if a BatchNorm is preceded by a linear transform, then that linear transform's bias term is set to constant zero.
For
convolutional neural networks
In deep learning, a convolutional neural network (CNN, or ConvNet) is a class of artificial neural network (ANN), most commonly applied to analyze visual imagery. CNNs are also known as Shift Invariant or Space Invariant Artificial Neural Networ ...
(CNN), BatchNorm must preserve the translation invariance of CNN, which means that it must treat all outputs of the same kernel as if they are different data points within a batch.
Concretely, suppose we have a 2-dimensional convolutional layer defined by
where
*
is the activation of the neuron at position
in the
-th channel of the
-th layer.
*
is a kernel tensor. Each channel
corresponds to a kernel
, with indices
.
*
is the bias term for the
-th channel of the
-th layer.
In order to preserve the translational invariance, BatchNorm treats all outputs from the same kernel in the same batch as more data in a batch.
That is, it is applied once per ''kernel''
(equivalently, once per channel
), not per ''activation''
:
where
is the batch size,
is the height of the feature map, and
is the width of the feature map.
That is, even though there are only
data points in a batch, all
outputs from the kernel in this batch are treated equally.
Subsequently, normalization and the linear transform is also done per kernel:
Similar considerations apply for BatchNorm for ''n''-dimensional convolutions.
The following code illustrates BatchNorm for 2D convolutions:
import numpy as np
def batchnorm_cnn(x, gamma, beta, epsilon=1e-8):
# Calculate the mean and variance for each channel.
mean = np.mean(x, axis=(0, 1, 2), keepdims=True)
var = np.var(x, axis=(0, 1, 2), keepdims=True)
# Normalize the input tensor.
x_hat = (x - mean) / np.sqrt(var + epsilon)
# Scale and shift the normalized tensor.
y = gamma * x_hat + beta
return y
Layer normalization
Layer normalization (LayerNorm)
is a common competitor to BatchNorm. Unlike BatchNorm, which normalizes activations across the batch dimension for a given feature, LayerNorm normalizes across all the features within a single data sample. Compared to BatchNorm, LayerNorm's performance is not affected by batch size. It is a key component of
Transformers
''Transformers'' is a media franchise produced by American toy company Hasbro and Japanese toy company Tomy, Takara Tomy. It primarily follows the Autobots and the Decepticons, two alien robot factions at war that can transform into other forms ...
.
For a given data input and layer, LayerNorm computes the mean (
) and variance (
) over all the neurons in the layer. Similar to BatchNorm, learnable parameters
(scale) and
(shift) are applied. It is defined by:
where
and
, and
ranges over the neurons in that layer.
Examples
For example, in CNN, a LayerNorm applies to all activations in a layer. In the previous notation, we have
notice that the batch index
is removed, while the channel index
is added.
In
recurrent neural networks
A recurrent neural network (RNN) is a class of artificial neural networks where connections between nodes can create a cycle, allowing output from some nodes to affect subsequent input to the same nodes. This allows it to exhibit temporal dynamic ...
and
Transformers
''Transformers'' is a media franchise produced by American toy company Hasbro and Japanese toy company Tomy, Takara Tomy. It primarily follows the Autobots and the Decepticons, two alien robot factions at war that can transform into other forms ...
, LayerNorm is applied individually to each timestep.
For example, if the hidden vector in an RNN at timestep
is
where
is the dimension of the hidden vector, then LayerNorm will be applied with
where
and
.
Root mean square layer normalization
Root mean square layer normalization (RMSNorm) changes LayerNorm by
Essentially it is LayerNorm where we enforce
.
Other normalizations
Weight normalization (WeightNorm) is a technique inspired by BatchNorm. It normalizes weight matrices in a neural network, rather than its neural activations.
Gradient normalization (GradNorm) normalizes gradient vectors during backpropagation.
Adaptive layer norm (adaLN) computes the
in a LayerNorm not from the layer activation itself, but from other data.
CNN-specific normalization
There are some activation normalization techniques that are only used for CNNs.
Local response normalization
Local response normalization was used in
AlexNet
AlexNet is the name of a convolutional neural network (CNN) architecture, designed by Alex Krizhevsky in collaboration with Ilya Sutskever and Geoffrey Hinton, who was Krizhevsky's Ph.D. advisor.
AlexNet competed in the ImageNet Large Scale Vis ...
. It was applied in a convolutional layer, just after a nonlinear activation function. It was defined by
where
is the activation of the neuron at location
and channel
. In words, each pixel in a channel is suppressed by the activations of the same pixel in its adjacent channels.
The numbers
are hyperparameters picked by using a validation set.
It was a variant of the earlier local contrast normalization.
where
is the average activation in a small window centered on location
and channel
. The numbers
, and the size of the small window, are hyperparameters picked by using a validation set.
Similar methods were called divisive normalization, as they divide activations by a number depending on the activations. They were originally inspired by biology, where it was used to explain nonlinear responses of cortical neurons and nonlinear masking in visual perception.
Both kinds of local normalization were obsoleted by batch normalization, which is a more global form of normalization.
Group normalization
Group normalization (GroupNorm) is a technique only used for CNNs. It can be understood as the LayerNorm for CNN applied once per channel-group.
Suppose at a layer
, there are channels
, then we partition it into groups
. Then, we apply LayerNorm to each group.
Instance normalization
Instance normalization (InstanceNorm), or contrast normalization, is a technique first developed for
neural style transfer, and is only used for CNNs. It can be understood as the LayerNorm for CNN applied once per channel, or equivalently, as group normalization where each group consists of a single channel:
Adaptive instance normalization
Adaptive instance normalization (AdaIN) is a variant of instance normalization, designed specifically for neural style transfer with CNN, not for CNN in general.
In the AdaIN method of style transfer, we take a CNN, and two input images, one content and one style. Each image is processed through the same CNN, and at a certain layer
, the AdaIn is applied.
Let
be the activation in the content image, and
be the activation in the style image. Then, AdaIn first computes the mean and variance of the activations of the content image
, then use those as the
for InstanceNorm on
. Note that
itself remains unchanged. Explicitly, we have
See also
*
Data preprocessing Data preprocessing can refer to manipulation or dropping of data before it is used in order to ensure or enhance performance, and is an important step in the data mining process. The phrase "garbage in, garbage out" is particularly applicable to ...
*
Feature scaling
Feature scaling is a method used to normalize the range of independent variables or features of data. In data processing, it is also known as data normalization and is generally performed during the data preprocessing step.
Motivation
Since th ...
Further reading
* {{Cite web , title=Normalization Layers , url=https://nn.labml.ai/normalization/index.html , access-date=2024-08-07 , website=labml.ai Deep Learning Paper Implementations , language=en
References
Articles with example Python (programming language) code
Deep learning
Statistical data transformation
Machine learning
Neural networks