文章:
https://arxiv.org/pdf/2312.00596.pdf
代码:
https://github.com/AfifaKhaled/BatchChannel-Normalization.
背景:
归一化技术由于能够实现更高的学习率和初始化时不那么小心而被广泛应用于深度学习领域。然而,流行的归一化技术的有效性通常局限于特定领域。不同于标准的批归一化(Batch Normalization, BN)和层归一化(Layer Normalization, LN),其中BN计算沿(N,H,W)维度的均值和方差,LN计算沿(C,H,W)维度的均值和方差(N, C,H和W分别是批、通道、空间高度和宽度维度)。
解决:
提出了一种新的归一化技术,称为批通道归一化(Batch channel Normalization, BCN)。为了根据特定的数据集或任务,自适应地利用通道和批依赖关系并结合BN和LN的优势,BCN分别沿着(N, H, W)和(C, H, W)轴对输入进行归一化,然后根据自适应参数对归一化输出进行组合。作为一个基本块,BCN可以很容易地集成到现有的模型中,用于计算机视觉领域的各种应用。实验结果表明,该技术可以无缝应用于各种版本的CNN或Vision Transformer架构。
批处理归一化(Batch Normalization, BN)可以更快地收敛并稳定学习。在训练集中,BN计算各层输入的平均值µB和方差σ 2b,如下所示:
可以看到BN计算沿(N, H, W)轴的
和
。在测试过程中,BN通过指数移动平均计算训练集中的
和
:
其中n是批大小,γ和β是可学习的参数。这里α通常设为0.9,而λ是一个很小的常数。
层归一化(LN)沿(C, H, W)计算
和
如下:
与BN不同,LN在训练和推理时间执行相同的计算。此外,LN对于稳定递归神经网络中隐藏状态的动态是非常有用的。本文方法属于这一类。提出的BCN旨在沿(C, N, H, W)轴进行规范化,其目的是结合BN和LN的优点,同时减轻各自的不足。
Ghost BN等方法,它在批次的不同分割中独立归一化,以及Batch Re-normalization或Streaming Normalization,这两种方法都利用全局平均统计而不是批次统计进行了更改。虽然这些归一化技术实际上是成功的,但它们的改进只是最近才开始出现。同时,批处理归一化仍然是目前使用的最著名的归一化技术。此外,这些归一化技术在许多任务(例如,分割,检测和视频分类)中都无法接近BN的准确性。
包括权值归一化和权值归一化传播,两者都将权值除以它们的l2范数,只是在很小的细节上有所不同。最近有几篇论文提出了在更大范围的CNN上增强权值归一化的技术。一种方法是隐式正则化和收敛权值归一化。他们研究了权值归一化技术,并对过度参数化最小二乘回归的投影梯度下降进行了重新参数化。他们实验表明,与原始目标的梯度下降相比,非凸公式具有有用的正则化效果。
归一化(N, H, W)轴和(C, H, W)轴的想法在之前已经被提出。早期的工作通常沿(N, H, W)轴或(C, H, W)轴独立执行归一化。本文的目标是沿(N, C, H, W)进行归一化。然而,计算沿(N, C, H, W)的平均值和方差直接忽略了批维度和通道维度之间的不同重要性。因此,作者建议沿(N, H, W)和(C, H, W)轴分别进行归一化,然后根据自适应参数i组合归一化输出。这样做可以提高训练、验证和测试的准确性。
与BN标准化层输入的方式类似,在训练期间,BCN首先沿(N, H, W)轴计算层输入的平均值
和方差
:
其次,BCN计算沿(C, H, W)的平均值
和方差
接下来,
和
分别使用
,
和
,
进行归一化:
BCN引入了额外的可学习参数ι,以自适应地平衡沿(N, H, W)和(C, H, W)轴的归一化输出。
那么,BCN归一化的输出可以表示为:
其中γ和β是可学习的参数,而λ是数值稳定性的小常数。
在推理阶段,由于µ和σ是预先计算和固定的,因此可以将归一化融合到卷积运算中。
根据之前的工作,BCN在训练过程中沿(N, H, W)轴通过指数移动平均进行归一化,如下所示:
实验中,α被设为0.9。BCN归一化与现有归一化技术的关键区别在于,在BCN下,一层中的所有通道都具有相同的归一化项µ和
算法1给出了整个BCN过程:
def BatchChannelNorm(x, gamma, beta, momentum=0.9, num channels, eps=1e−5):
self.num channels = num channels
self.epsilon = epsilon
self.x1 = BCN 1(self.num channels, epsilon=self.epsilon) # normalized along (N, H, W) axes.
self.x2 = BCN 2(self.num channels, epsilon=self.epsilon) # normalized along (C, H, W) axes.
# x: input features with shape [N,C,H,W]
# gamma, beta: scale and offset
self.gamma = nn.Parameter(torch.ones(num channels))
self.beta = nn.Parameter(torch.zeros(num channels))
# iota is the BCN variable to be learned to adaptively balance the normalized outputs along (N, H, W) axes and (C, H, W)
axes.
self.iota = nn.Parameter(torch.ones(self.num channels))
X = self.x1(x)
Y = self.x2(x)
Result = self.iota.view([1, self.num channels, 1, 1]) ∗ X + ( 1 − self.iota.view([1, self.num channels, 1, 1])) ∗ Y
Result = self.gamma.view([1, self.num channels, 1, 1]) ∗ Result + self.beta.view([1, self.num channels, 1, 1])
return Result
表1显示了在CIFAR-10、CIFAR-100和SVHN数据集上BCN归一化和代表性归一化技术(BN、LN、IN和GN)的测试精度结果。所有实验均在相同的学习率、损失函数、批大小等条件下进行。结果表明,BCN具有普遍适用性,可获得最佳或次优效果。例如,在CIFAR-100数据集下,BCN比最先进的技术取得了显著的改进。
在ResNet上对图像分类任务进行了实验。该模型采用随机梯度下降法(SGD)进行训练,初始学习率为0.1,然后分别在第75和85次迭代时降低10倍。批量大小为8,动量为0.9。
BCN、BN和LN在图3和图4三个数据集上的训练和验证结果。正如所看到的,BCN学习速度最快。在CIFAR-10上,在大约20个epoch时,其训练准确率达到了86.12%,验证准确率达到了84.16%,而在相同的epoch数下,BN和LN的训练准确率分别为86.04%和79.74%,验证准确率分别为12.87%和78.58%。
图6显示了用BCN代替归一化技术后ViT性能的提高。替换BCN后,训练准确率接近0.73%,测试准确率为0.72%。此外,图7显示了BCN在测试集中的性能。总的来说,这些结果支持了我们的假设,即与现有的归一化技术BN和LN相比,BCN在像ViT这样的新模型中可以有更好的性能。