What is Normalization


What is Normalization?

LayerNorm和BatchNorm的区别

BatchNorm把同一个batch中同一通道的所有特征视为一个分布(有几个通道就有几个分布),并将其标准化。

​ 1.不同图片的的同一通道的相对关系是保留的,即不同图片的同一通达的特征是可以比较的
​ 2.同一图片的不同通道的特征则是失去了可比性

LayerNorm把一个句子样本的所有词义向量视为一个分布(有几个句子就有几个分布),并将其标准化。

词义向量是句子中每个词的特征,一般维度较高;做标准化操作的总数据数 = 词数 * 维度 (或seq_length * dimension)

​ 1.同一句子中词义向量的相对大小是保留的,或者也可以说LayerNorm不改变词义向量的方向,只改变它的模。
​ 2.不同句子的词义向量则是失去了可比性。

LayerNorm

normalized_shape = 4

如果normalized_shape = 4,则被看做一个整数的list,此时LayerNorm会对输入的最后一维进行归一化,normalized_shape = 4需要和输入的最后一维一致。

比如此时输入的数据维度是[3, 4],则对3个长度为4的向量求均值方差,得到3个均值和3个方差,分别对这3行进行归一化(每一行的4个数字都是均值为0,方差为1);LayerNorm中的weight和bias也分别包含4个数字,重复使用3次,对每一行进行仿射变换(仿射变换即上述的运算公式,乘weight中对应的数字后,再加bias中对应的数字),并会在反向传播时得到学习。

normalized_shape = [3, 4] or torch.Size([3, 4])

**如果输入的是个list或者torch.Size,比如[3, 4]或torch.Size([3, 4])**,则会对网络最后的两维进行归一化,且要求输入数据的最后两维尺寸也是[3, 4]。

假设此时输入的数据维度也是[3, 4],首先对这12个数字求均值和方差,然后归一化这个12个数字;weight和bias也分别包含12个数字,分别对12个归一化后的数字进行仿射变换(仿射变换即乘以weight中对应的数字后,然后加bias中对应的数字),并会在反向传播时得到学习。

假设此时输入的数据维度是[N, 3, 4],则对着N个[3,4]做和上述一样的操作,只是此时做仿射变换时,weight和bias被重复用了N次。

假设此时输入的数据维度是[N, T, 3, 4],也是一样的,维度可以更多。

注意:显然LayerNorm中weight和bias的shape就是传入的normalized_shape。

Batch Normalization

m = nn.BatchNorm1d(100)   #num_features指的是randn(20, 100)中(N, C)的第二维C
input = autograd.Variable(torch.randn(20, 100)) 
output = m(input) 

# Input: (N, C) or (N, C, L), where N is the batch size, C is the number of features or channels, and L is the sequence length
# Output: (N, C) or (N, C, L) (same shape as input)
m = nn.BatchNorm2d(100)
input = torch.randn(20, 100, 35, 45)
output = m(input)

# Input: (N, C, H, W)
# Output: (N, C, H, W) (same shape as input)
m = nn.BatchNorm3d(100)
input = torch.randn(20, 100, 35, 45, 10)
output = m(input)

# Input: (N, C, D, H, W)
# Output: (N, C, D, H, W) (same shape as input)

Summary

BatchNorm适用于CV,而LayerNorm适用于NLP,这是由两个任务的本质差异决定的,视觉的特征是客观存在的特征,而语义特征更多是由上下文语义决定的一种统计特征,因此他们的标准化方法也会有所不同。


Author: cipher
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint policy. If reproduced, please indicate source cipher !
  TOC