文章目录
归一化
(一)什么是归一化
在机器学习领域中,不同评价指标(即一组特征中的不同特征就是所述的不同评价指标)往往具有不同的量纲和量纲单位,这样的情况会影响到数据分析的结果,为了消除指标之间的量纲影响,需要进行数据标准化处理,以解决数据指标之间的可比性。即,原始数据经过数据标准化处理后,各指标处于同一数量级,适合进行综合对比评价。
数据归一化一般有[0,1]归一化和正态分布归一化两种方法:
-
[0,1]归一化:使结果值映射到[0,1]之间。
X 1 = X − X m i n X m a x − X m i n X_1 = \frac{X - X_{min}}{X_{max} - X_{min}} X1=Xmax−XminX−Xmin -
正态分布归一化:对原始数据减去均值并除以标准差,经过处理的数据符合标准正态分布,即均值为0,标准差为1。(μ为均值,σ为标准差。)
X 1 = X − μ σ X_1 =\frac{X - μ}{σ} X1=σX−μ
(二)归一化的作用
- 归一化有可能提高精度(如KNN)。归一化可以使不同量纲的特征处于同一数值量级,减少方差大的特征的影响,使模型更准确。
- 归一化后加快了梯度下降求最优解的速度。当我们使用梯度下降法做优化时,随着网络深度的增加,输入数据的特征分布会不断发生变化,为了保证数据特征分布的稳定性,会加入Normalization。从而可以使用更大的学习率,加速模型的收敛速度。
- Normalization也有一定的抗过拟合作用,使训练过程更加平稳。
(三)归一化层的设计方法
在深度学习中大多用到正态分布归一化,但是由于归一化所作用在不同的集合上又大体包括以下几种:
- 2015年 Batch Normalization
- 2016年 Weight Normalization
- 2016年 Layer Normalization
- 2017年 Instance Normalization
- 2018年 Group Normalization
- 2018年 Switchable Normalization
feature map的尺寸为 [ N , C , H , W ] [N,C,H,W] [N,C,H,W],( N N N表示样本, C C C表示通道数, H H H表示高, W W W表示宽)。为了可视化展示,将高 ( H ) (H) (H)和宽 ( W ) (W) (W)压缩到了一个维度上:
- BatchNorm:batch方向做归一化,每个通道C单独做归一化,算NHW的均值,batchsize较大时候效果才会比较理想;
- LayerNorm:channel方向做归一化,算CHW的均值,主要对RNN作用明显;
- InstanceNorm:在单张特征图上做归一化,算H*W的均值,常用于图像风格化迁移任务;
- GroupNorm:介于LayerNorm和InstanceNorm之间,将channel方向分group,然后每个group内做归一化。
除此之外,Switchable Norm的作用是让网络在训练过程中自己学习选用上述几种归一化方法中适合的操作。Weight Normalization是2016年openAI提出的思路,通过限制Weight来让训练变得更快,提高模型的泛化性和鲁棒性。
BN:batch方向归一化,算NHW的均值
(一)BN为了解决什么问题
-
深度神经网络训练的过程中通常以输入网络的每一个mini-batch进行训练,这样每个batch具有不同的分布,使模型训练起来特别困难。
-
Internal Covariate Shift (ICS) 问题:在训练的过程中,激活函数会改变各层数据的分布,随着网络的加深,这种改变(差异)会越来越大,使模型训练起来特别困难,收敛速度很慢,会出现梯度消失的问题。
(二)主要思想
BN是对一个batch-size样本内的每个特征做归一化。针对每个神经元,使数据在进入激活函数之前,沿着通道计算每个batch的均值、方差,‘强迫’数据保持均值为0,方差为1的正态分布,避免发生梯度消失。
具体来说,就是把第1个样本的第1个通道,加上第2个样本第1个通道 … 加上第 N 个样本第1个通道,求平均,得到通道 1 的均值(注意是除以 N×H×W 而不是单纯除以 N,最后得到的是一个代表这个 batch 第1个通道平均值的数字,而不是一个 H×W 的矩阵)。求通道 1 的方差也是同理。对所有通道都施加一遍这个操作,就得到了所有通道的均值和方差。
(三)计算公式
均值
μ
\mu
μ计算公式:
μ
=
1
m
∑
i
=
1
m
z
(
i
)
\mu=\frac{1}{m}\sum_{i=1}^mz^{(i)}
μ=m1i=1∑mz(i)
方差 σ 2 \sigma^2 σ2的计算公式:
σ 2 = 1 m ∑ i = 1 m ( z ( i ) − μ b ) 2 \sigma^2=\frac{1}{m}\sum_{i=1}^m(z^{(i)}-\mu_b)^2 σ2=m1i=1∑m(z(i)−μb)2
(四)BN的算法过程
- 求每一个训练批次数据的均值
- 求每一个训练批次数据的方差
- 使用求得的均值和方差对该批次的训练数据做归一化,获得(0,1)正态分布。
其中ε是为了避免除数为0时所使用的微小正数。
- 尺度变换和偏移:将xi乘以γ调整数值大小,再加上β增加偏移后得到yi,这里的γ是尺度因子,β是平移因子。
加入缩放和平移变量的原因是:由于归一化后的xi基本会被限制在正态分布下,使得网络的表达能力下降。引入γ,β后可以保证每一次数据经过归一化后还保留原有学习来的特征,同时又能完成归一化操作,加速训练。 这两个参数是用来学习的参数。
LN:channel方向归一化,算CHW的均值
(一)LN为了解决什么问题
-
BN存在的问题:在RNN这类时序网络中,时序的长度并不是一个定值(网络深度不一定相同),比如每句话的长短都不一定相同,很难去使用BN。
-
Layer Normalization简称LN,是针对自然语言处理领域提出的,例如像RNN循环神经网络。在图像处理领域中BN比LN是更有效的,但现在很多人将自然语言领域的模型用来处理图像,比如Vision Transformer。
-
LN针对单个训练样本进行归一化操作,即对每一个样本中多个通道(channel)进行归一化操作。
(二)主要思想
LN是对每个样本的所有特征进行归一化,在层这个维度上去做归一化,它的均值和方差是针对单个样本的所有通道进行计算的。
(三)计算公式
均值
μ
n
\mu_n
μn计算公式:
μ
n
(
x
)
=
1
C
H
W
∑
c
=
1
C
∑
h
=
1
H
∑
w
=
1
W
x
n
,
c
,
h
,
w
\mu_n(x)=\frac{1}{CHW}\sum_{c=1}^C\sum_{h=1}^H\sum_{w=1}^Wx_{n,c,h,w}
μn(x)=CHW1c=1∑Ch=1∑Hw=1∑Wxn,c,h,w
方差
σ
n
2
\sigma^2_n
σn2的计算公式:
σ
n
(
x
)
2
=
1
C
H
W
∑
c
=
1
C
∑
h
=
1
H
∑
w
=
1
W
(
x
n
,
c
,
h
,
w
−
μ
n
(
x
)
)
2
\sigma_n(x)^2=\frac{1}{CHW}\sum_{c=1}^C\sum_{h=1}^H\sum_{w=1}^W (x_{n,c,h,w}-\mu_n(x))^2
σn(x)2=CHW1c=1∑Ch=1∑Hw=1∑W(xn,c,h,w−μn(x))2
(四)LN常用于NLP任务中
NLP任务更多是关于文本的数据,而对文本数据来说,同一句话之间的联系比多句话相同位置上的数据之间的联系会更紧密一些,如果使用BN的话,会破坏一个句子间的语义关系。所以LN会更合适一些。
IN:一个channel内做归一化,算H*W的均值
(一)IN为了解决什么问题
IN针对图像像素做normalization,最初用于图像的风格化迁移。在图像风格化中,生成结果主要依赖于某个图像实例,feature map 的各个 channel 的均值和方差会影响到最终生成图像的风格。所以对整个batch归一化不适合图像风格化中,因而对H、W做归一化。可以加速模型收敛,并且保持每个图像实例之间的独立。如果特征图可以用到通道之间的相关性,那么不建议使用IN。
(二)主要思想
-
IN是在Instance level进行归一化,IN的计算就是把每个HW单独拿出来归一化处理,不受通道和batchsize 的影响。
-
BN是在整个样本上进行归一化,Batch维度共享归一化参数,而IN是在逐个样本内进行归一化。实例归一化(IN)可以看作是将BN公式单独应用到每个输入特性(又称实例),就好像它是批处理中的唯一成员一样。
-
BN对Batch中的每一张图片的同一个通道一起进行Norm操作,而IN是指单张图片的单个通道单独进行Norm操作。
(三)计算公式
均值
μ
n
c
\mu_{nc}
μnc计算公式:
μ
n
c
(
x
)
=
1
H
W
∑
h
=
1
H
∑
w
=
1
W
x
n
,
c
,
h
,
w
\mu_{nc}(x)=\frac{1}{HW}\sum_{h=1}^H\sum_{w=1}^Wx_{n,c,h,w}
μnc(x)=HW1h=1∑Hw=1∑Wxn,c,h,w
方差
σ
n
c
2
\sigma^2_{nc}
σnc2的计算公式:
σ
n
c
(
x
)
2
=
1
H
W
∑
h
=
1
H
∑
w
=
1
W
(
x
n
,
c
,
h
,
w
−
μ
n
c
(
x
)
)
2
\sigma_{nc}(x)^2=\frac{1}{HW}\sum_{h=1}^H\sum_{w=1}^W (x_{n,c,h,w}-\mu_{nc}(x))^2
σnc(x)2=HW1h=1∑Hw=1∑W(xn,c,h,w−μnc(x))2
(四)IN适用于图片风格迁移问题
由于IN的计算与批大小为1时BN的计算相同,在大多数情况下,IN实际上会使情况变得更糟。而对于样式转换任务,IN在丢弃图像对比度信息方面优于BN。
-
IN适用于生成模型中,比如图片风格迁移。因为图片生成的结果主要依赖于某个图像实例,所以对整个Batch进行Norm操作并不适合图像风格化的任务,在风格迁移中适用IN不仅可以加速模型收敛,并且可以保持每个图像实例之间的独立性。
-
BN适用于判别模型,比如图像分类模型,因为BN注重对每个Batch进行Norm操作,从而保证数据分布的一致性,而判别模型的结果正是取决于数据整体分布。但是BN对BatchSize的大小比较敏感,由于每次计算均值和方差是在一个Batch上,所以如果BatchSize太小,则计算的均值和方差不足以代表整个数据分布。
GN:channel方向分group,每个group内做归一化
(一)为什么提出GN?
- GN是为了解决BN对较小的mini-batch size效果差的问题。
- GN适用于占用显存比较大的任务,例如图像分割。对这类任务,可能 batch size 只能是个位数,再大显存就不够用了。而当 batch size 是个位数时,BN 的表现很差,因为没办法通过几个样本的数据量,来近似总体的均值和标准差。GN 也是独立于 batch 的,它是 LN 和 IN 的折中。
(二)主要思想
Group Normalization简称GN,GN与LN之间的关系就像分组卷积相比于常规卷积。GN将channel方向分group,然后每个group内做归一化;这样与batchsize无关,不受其约束。可以说LN和IN就是GN的特列,比如G的大小为1就成了LN或者为G的大小为C就成了IN。
(三)计算公式
均值
μ
n
g
\mu_{ng}
μng计算公式:
μ
n
g
(
x
)
=
1
(
C
/
G
)
H
W
∑
c
=
g
C
/
G
(
g
+
1
)
C
/
G
∑
h
=
1
H
∑
w
=
1
W
x
n
,
c
,
h
,
w
\mu_{ng}(x)=\frac{1}{(C/G)HW}\sum_{c=gC/G}^{(g+1)C/G}\sum_{h=1}^H\sum_{w=1}^Wx_{n,c,h,w}
μng(x)=(C/G)HW1c=gC/G∑(g+1)C/Gh=1∑Hw=1∑Wxn,c,h,w
方差
σ
n
c
2
\sigma^2_{nc}
σnc2的计算公式:
σ
n
g
(
x
)
2
=
1
(
C
/
G
)
H
W
∑
c
=
g
C
/
G
(
g
+
1
)
C
/
G
∑
h
=
1
H
∑
w
=
1
W
(
x
n
,
c
,
h
,
w
−
μ
n
g
(
x
)
)
2
\sigma_{ng}(x)^2=\frac{1}{(C/G)HW}\sum_{c=gC/G}^{(g+1)C/G}\sum_{h=1}^H\sum_{w=1}^W (x_{n,c,h,w}-\mu_{ng}(x))^2
σng(x)2=(C/G)HW1c=gC/G∑(g+1)C/Gh=1∑Hw=1∑W(xn,c,h,w−μng(x))2
SN:结合BN、LN、IN
SwitchableNorm是将BN、LN、IN结合,赋予权重,让网络自己去学习归一化层应该使用什么方法。
SN具有以下三个优点:
- 鲁棒性:无论batchsize的大小如何,SN均能取得非常好的效果;
- 通用性:SN可以直接应用到各种类型的应用中,减去了人工选择归一化策略的繁琐;
- 多样性:由于网络的不同层在网络中起着不同的作用,SN能够为每层学到不同的归一化策略,这种自适应的归一化策略往往要优于单一方案人工设定的归一化策略。
参考:
BN,LN,IN,GN的理解和用法
深度学习基础 之 ---- BN、LN、IN、GN、SN
Batch normalization和Instance normalization的对比
归一化层(LN,GN,IN,SN,WN)