-
对数据进行归一化的原因:
-
在实际问题中,得到的样本数据是多个维度的,即一个样本是用多个特征来表示的,数据样本的不同特征可能会有不同的尺度,会影响到数据分析的结果。
-
原始数据经过归一化后各特征处于同一数量级,进行综合对比评价。
-
神经网络的训练速度是由梯度下降算法的速度决定的。分析:当两个特征尺度相差很大时,如果不进行归一化处理,则其形成的损失函数的等高线为长椭圆形,梯度下降可能走之字形路线(垂直等高线走,因为梯度的方向与等高线切线方向垂直)。则梯度下降路线波动很大,导致需要迭代多次才能收敛,即非归一化操作的神经网络训练速度慢的体现。
-
数据归一化后,损失函数变量前的系数差距已经不大,则等高面会近似圆形,此时求解的梯度方向可直指圆心,则在梯度下降求解时能更快地收敛。
-
神经网络是多层结构,即使输入数据做了归一化,但由于经过线性变换以及激活函数,下一层输入的取值范围可能又会有比较大的差别。则如果某个层的输入分布发生了变化,则其参数需要重新学习,此现象叫做内部协变量偏移。为解决该问题,需要使得每个神经层的输入的分布在训练过程中保持一致。
-
- 关于梯度和等高线:
- 等高线绘制:
- 梯度下降方向与等高线的切线方向垂直:
- 梯度:函数在变量空间沿梯度方向具有最大的变化率。当梯度退化到xoy平面的二维空间就是导数。
- 梯度是一个向量,既有大小又有方向。
- 梯度的方向是最大方向导数的方向。
- 梯度的模是方向导数的最大值。
- 四种归一化方法:
- N为批量,C为通道,(H,W)表示feature map,蓝色像素代表相同的均值和方差归一化
- 将输入的图像shape记为[N, C, H, W],这几个方法主要的区别:
- BatchNorm:batch方向做归一化,算N*H*W的均值,对小batchsize效果不好;
- LayerNorm:channel方向做归一化,算C*H*W的均值,主要对RNN作用明显;
- InstanceNorm:一个channel内做归一化,算H*W的均值,用在风格化迁移;
- GroupNorm:将channel方向分group,然后每个group内做归一化,算(C//G)*H*W的均值
-
批量归一化BN:
-
通过使用BN在模型训练过程中利用小批量的均值和方差调整神经网络中间的输出,使得各层之间的输出都符合均值、方差相同高斯分布,使得数据更加稳定
-
无论隐藏层的参数如何变化,可以确定的是前一层网络输出数据的均值、方差是已知的、固定的,这样就解决了数据分布不断改变带来的训练缓慢、小学习率等问题。
-
在深度学习中,由于采用full batch的训练方式对内存要求较大,且每一轮训练时间过长;一般都会采用对数据做划分,用mini-batch对网络进行训练。因此,Batch Normalization也就在mini-batch的基础进行计算。
-
对净输入z(l)的标准归一化会使得其取值集中在0附近,如果使用sigmoid型函数时,这个取值区间刚好接近线性变换区间,减弱了神经网络的非线性性质,因此,为了使得归一化不对网络的表示能力造成负面影响,我们可以通过一个附加的缩放和平移变换改变取值区间(即乘上一个值再加上一个值)
-
批量归一化可以看作是一个特殊的神经层,加在每一层非线性激活函数之前
-
和β作为调整参数可以调整被BN刻意改变过后的输入,即能够保证能够还原成原始的输入分布。BN对每一层输入分布的调整有可能改变某层原来的输入,当然有了这两个参数,经过调整也可以不发生改变,既可以改变同时也可以保持原输入,那么模型的容纳能力(capacity)就提升了。
-
BN是深度学习中常使用的归一化方法,在提升训练以及收敛速度上发挥了重大的作用,是深度学习上里程碑式的工作。
-
适应激活函数:
-
如果是sigmoid函数,那么BN后的分布在0-1之间,由于sigmoid在
近0的地方趋于线性,非线性表达能力可能会降低,因此通过γ和β可以自动调整输入分布,使得非线性表达能力增强。 - 如果激活函数为ReLU,那么意味着将有一半的激活函数无法使用,那么通过β可以进行调整参与激活的数据的比例,防止dead-Relu问题。
-
- 避免了梯度弥散和爆炸,BN可以控制数据的分布范围,在遇到sigmoid或者tanh等激活函数时,不会使数据落在饱和区域导致梯度弥散。并且BN可以避免ReLU激活函数数据死亡的问题。
- 降低权重初始化的困难,在深度网络中,网络的最终训练效果也受到初始化的影响,初始化决定了神经网络最终会收敛到哪个局部最小值中,具有随机性。通过BN来标准化分布,可以降低初始化权重的影响。
- BN可以起到和dropout一样的正则化效果,在正则化方面,一般全连接层用dropout,卷积层用BN。
- BN缺点:
- BN很受batch大小的影响:
- 通过实验证明:BN需要一个足够大的批量,小的批量大小会导致对批统计数据的不准确率提高,显著增加模型的错误率。比如在检测、分割、视频识别等任务中,比如在faster R-cnn或mask R-cnn框架中使用一个batchsize为1或2的图像,因为分辨率更高,其中BN被“冻结”转换为线性层;在3D卷积的视频分类中,空间时间特征的存在引入了时间长度和批处理大小之间的权衡。BN的使用经常会使这些系统在模型符号和批量大小之间做出妥协。
- 一般来说每GPU上batch设为32最合适。
- 在batch维度上进行归一化,但这个维度并不是固定不变的,比如训练和测试时一般不一样,一般都是训练的时候在训练集上通过滑动平均预先计算好平均-mean,和方差-variance参数。而在测试的时候,不再计算这些值,而是直接调用这些预计算好的来用,但,当训练数据和测试数据分布有差别是时,训练时上预计算好的数据并不能代表测试数据,这就导致在训练,验证,测试这三个阶段存在不一致。
- 对于不同长度的样本数据无法很好处理:
- 比如在RNN中,RNN可以展开成一个隐藏层共享参数的MLP,随着时间片的增多,展开后的MLP的层数也在增多,最终层数由输入数据的时间片的数量决定,所以RNN是一个动态的网络。
- 在一个batch中,通常各个样本的长度都是不同的,当统计到比较靠后的时间片时,例如下图中t>4 时,这时只有一个样本还有数据,基于这个样本的统计信息不能反映全局分布,所以这时BN的效果并不好。
- 如果在测试时遇到了长度大于任何一个训练样本的测试样本,无法找到保存的归一化统计量,所以BN无法运行。
- BN很受batch大小的影响:
- BN在网络中的位置为:Conv->Relu->BatchNorm->Dropout
- 批量归一化是对一个中间层的单个神经元进行归一化操作,因此要求小批量样本的数量不能太小,否则难以计算单个神经元的统计信息。
-
- 层归一化LN:
- 是对某一层的所有神经元进行归一化。层归一化也得附加一个缩放和平移变换的取值区间
- 批量归一化是不同训练数据之间对单个神经元的归一化,层归一化是单个训练数据对某一层所有神经元之间的归一化。
- BN如右侧所示,它是取不同样本的同一个通道的特征做归一化;LN则是如左侧所示,它取的是同一个样本的不同通道做归一化
- Group Normalization(GN):
- 针对Batch Normalization(BN)在batch size较小时错误率较高而提出的改进算法,因为BN层的计算结果依赖当前batch的数据,当batch size较小时(比如2、4这样),该batch数据的均值和方差的代表性较差,因此对最后的结果影响也较大。
- GN的归一化方式避开了batch size对模型的影响,特征的group归一化同样可以解决Internal Covariate Shift的问题,并取得较好的效果。
- GN 将通道分成几组,并在每组内计算归一化的均值和方差。 GN 的计算与批量大小无关,其准确性在很宽的批量大小范围内都很稳定。简单讲就是要使归一化操作的计算不依赖batch size的大小。
- GN的思想就是在相同feature map的相同group中进行归一化操作,而group只是在channel维度上进行划分,因此归一化操作就和batch size无关。
- 如果将组号设置为G = 1,则GN变为LN 。LN假设层中的所有通道都做出“类似的贡献”。GN比LN受限制更少,因为假设每组通道(而不是所有通道)都受共享均值和方差的影响; 该模型仍然具有为每个群体学习不同分布的灵活性。这导致GN相对于LN的代表能力提高。
- 如果将组号设置为G = C(即每组一个通道),则GN变为IN。 但是IN只能依靠空间维度来计算均值和方差,并且错过了利用信道依赖的机会。
- GN与BN的优劣比较:
- BN会受到batchsize大小的影响。如果batchsize太小,算出的均值和方差就会不准确,如果太大,显存又可能不够用。
- GN算的是channel方向每个group的均值和方差,和batchsize没关系,自然就不受batchsize大小的约束。
- 随着batchsize的减小,GN的表现基本不受影响,而BN的性能却越来越差。
- 实例归一化(IN):
- BN注重对每个batch进行归一化,保证数据分布一致,因为判别模型中结果取决于数据整体分布。但是图像风格化中,生成结果主要依赖于某个图像实例,所以对整个batch归一化不适合图像风格化中,因而对HW做归一化。可以加速模型收敛,并且保持每个图像实例之间的独立。即,对于IN,计算每个样本的每个通道(H,W)的μ和σ
- IN本质上是一种Style Normalization,它的作用相当于把不同的图片统一成一种风格。
- 黄勋等人提出,图像的风格(artistic style)就是特征图各个feature channel跨空间的统计信息,比如mean和variance。迁移各个channel的mean和variance就可以实现风格迁移,为此他们提出了Adaptive Instance Normalization。
- 对语义分割mask来说,每个像素值表示的是该像素点的类别,比如下图的分割mask,蓝色区域表示天空,这个区域的所有像素值都相同,白色的区域表示草地,这个区域的像数值都相同。
- 归一化的一般流程是数据先减去均值再除以方差,即先归一化到[0, 1]范围内,然后再将数据进行特定的仿射变换,这个仿射变换的参数就是希望网络学到的参数,仿射变换的过程称为调制**(modulate)。本来已经归一化的数据经过仿射变换就不再是normalized**,而是denormalized。
归一化---学习笔记
于 2022-08-17 21:47:15 首次发布