BN,LN,IN,GN都是什么?不同归一化方法的比较

2020-06-28 16:41:16 浏览数 (1)

批归一化(BN)已经成为许多先进深度学习模型的重要组成部分,特别是在计算机视觉领域。它通过批处理中计算的平均值和方差来规范化层输入,因此得名。要使BN工作,批大小必须足够大,通常至少为32。但是,在一些情况下,我们不得不满足于小批量:

当每个数据样本高度消耗内存时,例如视频或高分辨率图像

当我们训练一个很大的神经网络时,它只留下很少的GPU内存来处理数据

因此,我们需要BN的替代品,它能在小批量下很好地工作。组归一化(GN)是一种最新的规范化方法,可以避免利用批处理,因此与批处理大小无关。

不同的归一化方法

为了促进GN的表述,我们将首先看一下以前的一些标准化方法。

代码语言:javascript复制
xᵢ ← (xᵢ - ?ᵢ) / √(?ᵢ²   ?)

对于每个系数xᵢ输入特性。?ᵢ和?ᵢ²的均值和方差计算的集合Sᵢ系数,和?是一个小的常数数值稳定,避免除零。唯一的区别是集Sᵢ是如何选择的。

为说明归一化方法的计算,我们考虑一批N = 3,输入特征a, b, c,它们有通道c = 4,高度H = 1,宽度W = 2:

代码语言:javascript复制
a = [ [[2, 3]], [[5, 7]], [[11, 13]], [[17, 19]] ]
b = [ [[0, 1]], [[1, 2]], [[3, 5]], [[8, 13]] ]
c = [ [[1, 2]], [[3, 4]], [[5, 6]], [[7, 8]] ]

因此批将形状(N、C, H, W) =(3、4、1、2)。我们把?= 0.00001。

Batch Normalization

BN规范化的渠道和计算?ᵢ和?ᵢ沿轴(N、H、W)。批次ᵢ系数被定义为一组的批处理xᵢ相同的频道。

第一系数的ᵢ= 2,i=(0,0,0),相应的?ᵢ和?ᵢ²系数的计算,b和c的第一个频道:

代码语言:javascript复制
?ᵢ = mean(2, 3, 0, 1, 1, 2) = 1.5
?ᵢ² = var(2, 3, 0, 1, 1, 2) = 0.917

代入归一化公式,

代码语言:javascript复制
aᵢ ← (2 - 1.5) / √(0.917   0.00001) = 0.522

计算a的所有系数

代码语言:javascript复制
a ← [ [[0.522, 1.567]], [[0.676, 1.690]], [[1.071, 1.630]], [[1.066, 1.492]] ]

Layer Normalization

层归一化(LN)的设计是为了克服BN的缺点,包括它对批大小的限制。计算?ᵢ和?ᵢ沿着(C、H、W)轴,和Sᵢ定义为所有系数xᵢ属于相同的输入特性。因此,一个输入特征的计算完全独立于批处理中的其他输入特征。

所有的系数是由相同的归一化?ᵢ和?ᵢ²

代码语言:javascript复制
?ᵢ = mean(2, 3, 5, 7, 11, 13, 17, 19) = 9.625
?ᵢ² = var(2, 3, 5, 7, 11, 13, 17, 19) = 35.734

计算a的所有系数

代码语言:javascript复制
a ← [ [[-1.276, -1.108]], [[-0.773, -0.439]], [[0.230, 0.565]], [[1.234, 1.568]] ]

Instance Normalization

实例归一化(IN)可以看作是将BN公式单独应用到每个输入特性(又称实例),就好像它是批处理中的唯一成员一样。更准确地说,在计算?ᵢ和?ᵢ沿轴(H, W)和Sᵢ的系数被定义为一组相同的输入特性和xᵢ也在同一个频道。

由于IN的计算与批大小为1时BN的计算相同,在大多数情况下,IN实际上会使情况变得更糟。而对于样式转换任务,IN在丢弃图像对比度信息方面优于BN。

第一系数aᵢ= 2,i=i(0,0,0),相应的?ᵢ和?ᵢ²只是

代码语言:javascript复制
?ᵢ = mean(2, 3) = 2.5
?ᵢ² = var(2, 3) = 0.25

代码语言:javascript复制
aᵢ ← (2 - 2.5) / √(0.25   0.00001) = -1.000

得到

代码语言:javascript复制
a ← [ [[-1.000, 1.000]], [[-1.000, 1.000]], [[-1.000, 1.000]], [[-1.000, 1.000]] ]

Group Normalization

前面我们说过IN的计算与批大小为1时BN的计算相同,但是是针对对每个输入特性分别应用BN。注意,IN还可以看作是将LN单独应用于每个通道,就像通道的数量为1的LN一样。

组归一化(GN)是IN和LN的中间点。组织渠道分成不同的组,计算?ᵢ和?ᵢ沿着(H, W)轴和一组通道。批次ᵢ然后组系数,在相同的输入特性和同一组xᵢ渠道。

组的数量G是一个预定义的超参数,通常需要它来划分c。为了简单起见,我们将通道按顺序分组。所以频道1,…,C / G属于第一组,频道C / G 1,…,2C / G属于第二组,以此类推。当G = C时,即每组只有1个信道,则GN变为IN。另一方面,当G = 1时,GN变成LN。因此G控制了IN和LN之间的插值。

在我们的例子中,考虑G = 2。规范化的第一个系数aᵢ = 2,i=(0,0,0),我们使用的系数在4 / 2 = 2通道

代码语言:javascript复制
?ᵢ = mean(2, 3, 5, 7) = 4.25
?ᵢ² = var(2, 3, 5, 7) = 3.687

代入归一化公式,

代码语言:javascript复制
aᵢ ← (2 - 4.25) / √(3.687   0.00001) = -1.172

对于a的其他系数,计算方法相似:

代码语言:javascript复制
a ← [ [[-1.172, -0.651]], [[0.391, 1.432]], [[-1.265, -0.633]], [[0.633, 1.265]] ]

归一化方法比较

蓝色的区域对应的集Sᵢ计算?ᵢ和?ᵢ,然后用来正常化任何系数在蓝色区域。

从这个图中我们可以看到,GN如何在IN和LN之间插入。GN优于IN,因为GN可以利用跨渠道的依赖关系。它也比LN好,因为它允许对每一组通道学习不同的分布。

当批大小较小时,GN始终优于BN。但是,当批处理大小非常大时,GN的伸缩性不如BN,可能无法匹配BN的性能。

引用

  1. A. Kolesnikov, L. Beyer, X. Zhai, J. Puigcerver, J. Yung, S. Gelly, and N. Houlsby. Big Transfer (BiT): General Visual Representation Learning (2019), arXiv preprint.
  2. S. Qiao, H. Wang, C. Liu, W. Shen, and A. Yuille. Weight Standardization (2019), arXiv preprint.
  3. S. Santurkar, D. Tsipras, A. Ilyas, and A. Madry. How Does Batch Normalization Help Optimization? (2018), NIPS 2018.
  4. Y. Wu, and K. He. Group Normalization (2018), ECCV 2018.

作者:Wanshun Wong

0 人点赞