BatchNormalization、LayerNormalization、InstanceNormalization和GroupNormalization四者的比较

 
 
神经网络中有各种归一化算法:Batch Normalization (BN)、Layer Normalization (LN)、Instance Normalization (IN)、Group Normalization (GN)


 

 

从公式看它们都差不多:无非是减去均值,除以标准差,再施以线性映射:

 $y = \gamma (\frac{x-\mu (x)}{\sigma (x)}) + \beta$

 这些归一化算法的主要区别在于操作的 feature map 维度不同。

 

 

 

Batch Normalization

Batch Normalization (BN) 是最早出现的,也通常是效果最好的归一化方式。feature map  $x \in R ^{N\times C\times H\times W}$  包含 N 个样本,每个样本通道数为 C,高为 H,宽为 W。对其求均值和方差时,将在 N、H、W上操作,而保留通道 C 的维度。具体来说,就是把第1个样本的第1个通道,加上第2个样本第1个通道 ...... 加上第 N 个样本第1个通道,求平均,得到通道 1 的均值(注意是除以 N×H×W 而不是单纯除以 N,最后得到的是一个代表这个 batch 第1个通道平均值的数字,而不是一个 H×W 的矩阵)。求通道 1 的方差也是同理。对所有通道都施加一遍这个操作,就得到了所有通道的均值和方差。具体公式为:
 
$\mu_{c}(x) = \frac{1}{N\times H\times W}\sum_{n=1}^{N}\sum_{h=1}^{H}\sum_{w=1}^{W} x_{nchw}$
 
$ \sigma_{c}(x)  = \sqrt{\frac{1}{N\times H\times W}\sum_{n=1}^{N}\sum_{h=1}^{H}\sum_{w=1}^{W} (x_{nchw} - \mu_{c}(x))^{2} + \varepsilon }$

如果把 $x \in R ^{N\times C\times H\times W}$  类比为一摞书,这摞书总共有 N 本,每本有 C 页,每页有 H 行,每行 W 个字符。BN 求均值时,相当于把这些书按页码一一对应地加起来(例如第1本书第36页,第2本书第36页......),再除以每个页码下的字符总数:N×H×W,因此可以把 BN 看成求“平均书”的操作(注意这个“平均书”每页只有一个字),求标准差时也是同理。

 

 

 

Layer Normalization

BN 的一个缺点是需要较大的 batchsize 才能合理估训练数据的均值和方差,这导致内存很可能不够用,同时它也很难应用在训练数据长度不同的 RNN 模型上。Layer Normalization (LN) 的一个优势是不需要批训练,在单条数据内部就能归一化。

对于    $x \in R ^{N\times C\times H\times W}$   ,LN 对每个样本的 C、H、W 维度上的数据求均值和标准差,保留 N 维度。其均值和标准差公式为:

 
$\mu_{n}(x) = \frac{1}{C \times H \times W}\sum_{c=1}^{C}\sum_{h=1}^{H}\sum_{w=1}^{W} x_{nchw}$
 
$ \sigma_{n}(x)  = \sqrt{\frac{1}{C \times H\times W}\sum_{c=1}^{C}\sum_{h=1}^{H}\sum_{w=1}^{W} (x_{nchw} - \mu_{n}(x))^{2} + \varepsilon }$
 
继续采用上一节的类比,把一个 batch 的 feature 类比为一摞书。LN 求均值时,相当于把每一本书的所有字加起来,再除以这本书的字符总数:C×H×W,即求整本书的“平均字”,求标准差时也是同理。
 

 

 

Instance Normalization

Instance Normalization (IN) 最初用于图像的风格迁移。作者发现,在生成模型中, feature map 的各个 channel 的均值和方差会影响到最终生成图像的风格,因此可以先把图像在 channel 层面归一化,然后再用目标风格图片对应 channel 的均值和标准差“去归一化”,以期获得目标图片的风格。IN 操作也在单个样本内部进行,不依赖 batch。

对于   $x \in R ^{N\times C\times H\times W}$     ,IN 对每个样本的 H、W 维度的数据求均值和标准差,保留 N 、C 维度,也就是说,它只在 channel 内部求均值和标准差,其公式为:

 
$\mu_{nc}(x) = \frac{1}{H \times W}\sum_{h=1}^{H}\sum_{w=1}^{W} x_{nchw}$
 
$ \sigma_{nc}(x)  = \sqrt{\frac{1}{H\times W}\sum_{h=1}^{H}\sum_{w=1}^{W} (x_{nchw} - \mu_{nc}(x))^{2} + \varepsilon }$ 

IN 求均值时,相当于把一页书中所有字加起来,再除以该页的总字数:H×W,即求每页书的“平均字”,求标准差时也是同理。

 

 

 

Group Normalization

Group Normalization (GN) 适用于占用显存比较大的任务,例如图像分割。对这类任务,可能 batchsize 只能是个位数,再大显存就不够用了。而当 batchsize 是个位数时,BN 的表现很差,因为没办法通过几个样本的数据量,来近似总体的均值和标准差。GN 也是独立于 batch 的,它是 LN 和 IN 的折中。
GN 计算均值和标准差时,把每一个样本 feature map 的 channel 分成 G 组,每组将有 C/G 个 channel,然后将这些 channel 中的元素求均值和标准差。各组 channel 用其对应的归一化参数独立地归一化。

 
$\mu_{ng}(x) = \frac{1}{(C/G) \times H \times W}\sum_{c=(g)C/G}^{(g+1)C/G}\sum_{h=1}^{H}\sum_{w=1}^{W} x_{nchw}$
 
$ \sigma_{ng}(x)  = \sqrt{\frac{1}{(C/G) \times H\times W}\sum_{c=(g)C/G}^{(g+1)C/G}\sum_{h=1}^{H}\sum_{w=1}^{W} (x_{nchw} - \mu_{ng}(x))^{2} + \varepsilon }$ 
继续用书类比。GN 相当于把一本 C 页的书平均分成 G 份,每份成为有 C/G 页的小册子,求每个小册子的“平均字”和字的“标准差”。
 
 
 

比较

Weight Normalization和Layer Normalization 都是Batch Normalization的变体。Batch Normalization和Weight Normalization都是属于参数重写(Reparameterization)的方法,Layer Normalization不是。

1、Weight Normalization与Batch Normalization对比

Weight Normalization和Batch Normalization都属于参数重写(Reparameterization)的方法,只是采用的方式不同,Weight Normalization是对网络权值W进行normalization(L2 norm),因此也称为Weight Normalization;Batch Normalization是对网络某一层输入数据进行normalization。

Weight Normalization相比Batch Normalization有以下三点优势:

  • Weight Normalization通过重写深度学习网络的权重W的方式来加速深度学习网络参数收敛,没有引入minbatch的依赖,适用于RNN(LSTM)网络(Batch Normalization不能直接用于RNN,进行normalization操作,原因在于:1、RNN处理的Sequence是变长的;2、RNN是基于time step计算,如果直接使用Batch Normalization处理,需要保存每个time step下,mini btach的均值和方差,效率低且占内存)。
  • Batch Normalization基于一个mini batch的数据计算均值和方差,而不是基于整个Training set来做,相当于进行梯度计算式引入噪声。因此,Batch Normalization不适用于对噪声敏感的强化学习、生成模型(Generative model:GAN,VAE)使用。相反,Weight Normalization对通过标量g和向量v对权重W进行重写,重写向量v是固定的,因此,基于Weight Normalization的Normalization可以看做比Batch Normalization引入更少的噪声。
  • 不需要额外的存储空间来保存mini batch的均值和方差,同时实现Weight Normalization时,对深度学习网络进行正向信号传播和反向梯度计算带来的额外计算开销也很小。因此,要比采用Batch Normalization进行normalization操作时,速度快。 但是, Weight Normalization不具备Batch Normalization把网络每一层的输出Y固定在一个变化范围的作用。因此,采用Weight Normalization进行Normalization时需要特别注意参数初始值的选择。

 

2、Layer Normalization与Batch Normalization对比:

 

BN针对一个minibatch的输入样本,计算均值和方差,基于计算的均值和方差来对某一层神经网络的输入X中每一个case进行归一化操作。

但BN有两个明显不足:

1、高度依赖于mini-batch的大小,实际使用中会对mini-Batch大小进行约束,不适合类似在线学习(mini-batch为1)情况;

2、不适用于RNN网络中normalize操作:BN实际使用时需要计算并且保存某一层神经网络mini-batch的均值和方差等统计信息,对于对一个固定深度的前向神经网络(DNN,CNN)使用BN,很方便;但对于RNN来说,sequence的长度是不一致的,换句话说RNN的深度不是固定的,不同的time-step需要保存不同的statics特征,可能存在一个特殊sequence比其的sequence长很多,这样training时,计算很麻烦。但LN可以有效解决上面这两个问题。 LN适用于LSTM的加速,但用于CNN加速时并没有取得比BN更好的效果。

 

 

 

总结

这里再重复一下上文的类比。如果把     $x \in R ^{N\times C\times H\times W}$   类比为一摞书,这摞书总共有 N 本,每本有 C 页,每页有 H 行,每行 W 个字符。

计算均值时

  • BN 相当于把这些书按页码一一对应地加起来(例如:第1本书第36页,加第2本书第36页......),再除以每个页码下的字符总数:N×H×W,因此可以把 BN 看成求“平均书”的操作(注意这个“平均书”每页只有一个字)
  • LN 相当于把每一本书的所有字加起来,再除以这本书的字符总数:C×H×W,即求整本书的“平均字”
  • IN 相当于把一页书中所有字加起来,再除以该页的总字数:H×W,即求每页书的“平均字”
  • GN 相当于把一本 C 页的书平均分成 G 份,每份成为有 C/G 页的小册子,对这个 C/G 页的小册子,求每个小册子的“平均字”

计算方差同理

 

此外,还需要注意它们的映射参数γ和β的区别:对于 BN,IN,GN, 其γ和β都是维度等于通道数 C 的向量。而对于 LN,其γ和β都是维度等于 normalized_shape 的矩阵。
 
 
结果比较:
 
 
 
 
 
 
 
 
 
 
 
posted @ 2019-12-18 20:50  寒杰士  阅读(1229)  评论(0编辑  收藏  举报