神经网络模型中常用的归一化方法了解

一,引言

BN(BatchNormalization)批量归一化,深度神经网络中常用的归一化方法,自提出以来,便成为模型中最常使用的归一化方法,后续出现的归一化方法大都是以BN为基础做出的改进。

BN归一化方法在几年的发展下日益丰富精进,针对不同的需求有不同的对应方法。

二,归一化的演变历程

1,BN的三个缺陷

  1. batch size 的依赖问题。主要表现在,随着
    batch size 变小,模型性能退化严重,BN效果变小。
  2. 无法适应RNN、LSTM等时间序列的动态网络,效果很差, 且测试集序列长度过长超过训练的所有序列时容易出问题。
  3. 要求样本和样本总体(即mini-batch 与整个样本数据集)是独立同分布的(统计学知识)。此时才能使用训练过程中每个mini-batch的均值和方差的期望作为推理过程中的均值和方差。当非两者非独立同分布时,模型性能变差。

2,LRN(局部响应归一化)

LRN是前期比较流行的归一化方法,首次在AlexNet网络中被提出,而后被BN取代。

LRN的创意来源于 神经生物学的侧抑制,被激活的的神经元会抑制相邻的神经元。即,让响应值大的 feature map 变得更大,让响应值小的变得更小。

它的主要思想是:让不同的卷积核产生的feature map 之间的相关性更小,以让不同通道上的feature map 能够专注于不同的特征。例如,在A通道上M特征更显著,而在B通道上N特征更显著。

3,BN(2015)

BN原文:Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift

使用BN的原因

原论文中提到,深度神经网络的训练非常复杂,因为在训练过程中,随着先前各层的参数发生变化,各层输入的分布也会发生变化;图层输入分布的变化使得图层需要不断去适应新的分布,由此导致训练变得更复杂;此外,随着网络变得更深,网络参数的细微变化也会被放大。

还有另一个解释说:假设输入数据包含多个特征x1,x2,…Xn。每个特征就可能具有不同的数域范围(即数值尺度)。例如特征x1的值域可能在1-5之间,而特征x2的值可能在1000-9999之间(即,不同的尺度标准)。

当两个特征数据不在同一范围,却使用相同的学习率时,将会导致梯度下降轨迹沿着一维来回振荡,从而需要更多的步骤才能达到最小值。同时,此时的学习率不容易进行设置和调整,学习率过大则对于范围小的数据来说来回震荡,学习率过小则对范围大的数据来说基本没什么变化,学习缓慢。

BN的基本原理(做法)

在一个batch 中,在每一BN层中,对每个样本的同一通道,计算它们的均值和方差,再对数据进行归一化,归一化的值就会具有 零均值和单位方差的特点,最后使用两个可学习参数 gamma 和 beta 对归一化的数据进行缩放和移位。

在训练过程中,保存每个mini-batch每一BN层的均值和方差,最后求所有mini-batch均值和方差的期望值,以此来作为推理过程中该BN层的均值和方差。

BN的作用

总的来说,当对网络模型数据进行归一化后,特征都在同一个大小范围,此时学习率会更容易设置,梯度下降也会比较平稳,更容易学习到‘东西’

  1. 与没有BN相比,可使用更大的学习率
  2. 防止过拟合,可去除Droupout和Local Response Normalization
  3. 由于dataloader打乱顺序,因此每个epoch中mini-batch都不一样,对不同mini-batch做归一化可以起到数据增强的效果。
  4. 明显加快收敛速度
  5. 缓减梯度爆炸和梯度消失

4,BN/、LN、IN、GN的区别和联系

后面三个解决的主要问题是BN的效果依赖于batch size,当batch size 比较小时,模型性能退化严重。而,IN,LN和GN这三个方法都与batch size无关。

区别和联系
它们之间的区别在于计算均值和方差的数据范围不同,LN计算单个在所有通道上的均值和方差;IN计算单个样本在每个通道上的均值和方差;GN将每个样本的通道分成g组,计算每组的均值和方差。

四者之间带来的效果无所谓谁一定强,谁一定弱,实际上是具体问题具体分析,根据具体情况进行使用和调整,它们各有自己的应用场景,在各自的应用场景上发挥着很不错的效果。

5,IN(Instance Normalization 2016)

原论文:Instance Normalization: The Missing Ingredient for Fast Stylization

在图像视频等识别任务上,BN的效果一般优于IN;而在GAN,style transfer和domain adaptation等生成任务上,IN有着更好的效果。

原因分析:BN对多个样本统计均值和方差,而这多个样本的domain很可能是不一样的,有不同作用的,这相当于模型把不同domain的数据分布进行了归一化。

6,LN(Layer Normalization 2016)

原论文:Layer Normalization

BN的第一个缺陷是依赖batch size,第二个缺陷是对于RNN这样的动态网络效果不明显,且当推理序列长度超过训练的所有序列长度时,容易出问题。为此,提出了Layer Normalization。

当我们直接将归一化应用在RNN模型上时,我们需要为序列中的每个时间步计算并存储单独的统计信息。如果测试序列比任何训练序列都长,就会出现问题。LN不会面临这样的问题,因为它的归一化项仅取决于当前时间步长对layer的总输入。此外,它还有一组在所有时间步中共享的增益和偏置参数(LN中的增益和偏置参数就相当于BN中的gamma 和beta

LN的应用场合主要有:RNN,LSTM,transformer等

7,GN(Group Normalization 2018)

原论文:Group Normalization

当batch size 减少时,BN退化的比较明显,而GN始终基本一致,在batch size 较大的时候,略低于BN,当batch size 比较小的时候,一般明显优于BN。

GN的缺陷

  1. batch size较大时,性能一般低于BN
  2. 通道数必须是分组数g的倍数

GN的应用场景:一般在目标检测、语义分割等要求尽可能大的分辨率的任务上,由于内存限制,为了更大的分辨率等原因,只能取比较小的batch size,此时可以选择GN这种不依赖于batch size的归一化方法。

(详细实现算法,请见原文)

8,WN(weights Normalization 2016)

原论文:Weight Normalization: A Simple Reparameterization to Accelerate Training of Deep Neural Networks

前面的方法都是基于feature map 做归一化,这篇论文提出对 Weights 做归一化。

基本原理(做法):将权重向量w分解为一个标量g和一个向量v,标量g表示权重向量w的长度,向量v表示权重向量的方向。

WN的这种方式可以改善优化问题的条件,以及加速随机梯度下降的收敛;其不依赖batch size,能够使用循环模型(RNN,LSTM等)和噪声敏感应用(如深度强化学习、生成模型等),而批量归一化BN不适用这些场景。

WN的缺陷:WN不像BN有归一化特征尺度的作用,因此WN对初始化数据有更高的要求,为此原论文作者有提出针对向量v和标量g的初始化方法。

9,BRN(Batch Renormalization 2017)

原论文:Batch Renormalization: Towards Reducing Minibatch Dependence in Batch-Normalized Models

BN使用训练过程中每个mini-batch的均值和方差的期望作为推理过程中的均值和方差时,要求mini-batch 与样本总体时独立同分布的,当mini-batch中的样本非独立同分布,则性能较差。

原论文的作者为解决BN的第一个和第二个缺陷,提出了BRN,

BRN与BN的主要区别为:BN使用训练过程中每个mini-batch的均值和方差的期望来当作整个数据集的均值和方差,而训练过程中每个mini-batch都有自己的均值和方差,因此在推理阶段的均值和方差与训练时不同(不是同一个样本数据集,即数据中划分出的测试集),而BRN提出在训练过程中就不断学习、修正整个数据集的均值和方差,使其尽可能逼近整个数据集的均值和方差,并最终用于推理阶段。

当使用小batch size或非独立同分布的mini-batch进行训练时,使用BRN训练的模型的性能一般优于BN。同时,BRN保留了BN的优势,例如对初始化的敏感性和训练效率。

10,CGBN(Cross-GPU BN 2018)

原论文:MegDet: A Large Mini-Batch Object Detector

在使用多卡分布式训练的情况下,输入数据会被等分成多份,然后在各个卡上完成前向和回传、参数更新,BN时针对单卡上的样本做的归一化,因此实际的归一化的样本数并不是batch size。例如batch size = 32,用四张卡训练,实际上只需要在 32/4=8 个样本上做归一化。

所有,Cross-GPU Batch Normalization 的思想就是在多张卡上做归一化。

具体实现算法详见以下‘原文’

11,FRN(2019)

原论文:Filter Response Normalization Layer: Eliminating Batch Dependence in the Training of Deep Neural Networks

FRN,依旧是基于小batch size 会性能退化的问题改进的。

FRN基本原理:FRN由两个组件构成,一个是Filter Response Normalization(FRN),另一个是 Thresholded Linear Unit(TLU)。

前者与IN非常相似,也是基于单样本单通道,区别是IN减去了均值,再除以标准差。而FRN没有减去均值。作者认为:虽然减去均值是归一化方案的正常操作,但对于batch independent 的归一化方案来说,它是任意的,即不会有太大负面影响的,可尝试的。

TLU则是在ReLU的基础上加了一个阙值,这个阙值是可学习的参数。这是考虑到FRN没有减去均值的操作,可能使得归一化的结果任意地偏向0;如果FRN之后是ReLU激活层,可能产生很多0值,这对于模型训练和性能是不利的。

12,CBN(Cross-Iteration BN 2020)

原论文:Cross-Iteration Batch Normalization

CBN的主要思想:其将前 k-1 个iteration的样本参与当前均值和方差的计算。但由于前 k-1 次iteration的数据是在更新的,因此无法直接拿来使用。于是论文作者提出了一个处理方式,即通过泰勒多项式近似计算出前 k-1 次iteration的数据。

在Yolo_v4中有提出改进版,在每个batch中只统计四个mini-batches的数据,并在第四个mini-batch后才更新权重、进行尺度缩放和偏移。

若想详细理解。请仔细阅读原文

本文仅作学习记录和分享,侵联删。欢迎一起认识和交流。

猜你喜欢

转载自blog.csdn.net/qq_53250079/article/details/128932166