此篇文章也是凯明大神的作品,Group Normalization下面简称GN,是一种可以用来代替Batch Normalization(BN)的一种正则方法。
一、为什么要提出GN
BN全称Batch Normalization,它是从batch维度对网络提取的特征进行归一化的一种处理。正是因为它是从batch维度进行特征归一化的,那么这种操作严重依赖于batchsize。当batchsize过小时,BN操作对batch维度的统计信息不准确,导致最终的网络效果变差,如下图所示。图中网络采用的是resnet-50,蓝线表示采用BN时减小batchsize对于imagenet任务的error在不断增加。
所以采用BN最好有个较大的batchsize,但是这样会受到显存的限制。
在进行推断时采用BN也会受到影响,因为BN是依赖于batch维度的,统计出来的特征的均值和方差也是根据batch维度计算的,当进行推断任务的时候,有时候并不会采用batch的操作。这样只能使用训练时计算好的均值和方差来参与推断阶段的计算,当训练的数据与测试数据分布不一致时,这样会导致推断结果变差。
通过上面分析可以知道,要解决的问题是使得归一化不从batch维度进行。GN就是从通道的维度对特征进行归一化的。
二、什么是GN
在GN提出前还有其他的一些归一化方法,如Layer Norm(LN)、Instance Norm(IN)。各种归一化方法的操作维度如下图所示。
下面来一一解释一下各种归一化的方法。
在解释之前先用一些通用的公式表达这些计算方法。
x
i
^
=
1
σ
(
x
i
−
μ
i
)
\hat{x_{i}}=\frac{1}{\sigma}(x_{i}-\mu_{i})
xi^=σ1(xi−μi)
上式中x表示卷积层输出的特征,i表示索引。对于二维图像来说
i
=
(
i
N
,
i
C
,
i
H
,
i
W
)
i=(i_{N},i_{C},i_{H},i_{W})
i=(iN,iC,iH,iW),它是一个四维的,其中N表示batch维度,C表示通道维度,H和W分别是特征的高和宽。
上式中的
μ
i
\mu_{i}
μi和
σ
i
\sigma_{i}
σi计算如下
μ
i
=
1
m
∑
k
∈
S
i
x
k
,
σ
i
=
1
m
∑
k
∈
S
i
(
x
k
−
μ
i
)
2
+
ϵ
\mu_{i}=\frac{1}{m}\sum_{k\in S_{i}}x_{k},\quad \sigma_{i}=\sqrt{\frac{1}{m}\sum_{k\in S_{i}}(x_{k}-\mu_{i})^2+\epsilon}
μi=m1∑k∈Sixk,σi=m1∑k∈Si(xk−μi)2+ϵ
上式中
ϵ
\epsilon
ϵ是个很小的常数。
S
i
S_{i}
Si表示用于计算均值和标准差的像素集,像素集的表示如上图中的蓝色区域表示。
Batch Norm
对于Batch Norm操作来说
S
i
S_{i}
Si表示如下
S
i
=
{
k
∣
k
C
=
i
C
}
S_{i}=\{k|k_{C}=i_{C} \}
Si={k∣kC=iC}
i
C
i_{C}
iC表示的是在通道维度上的索引。这表示BN的均值和方差计算是在(N,H,W)轴上进行的,即对每个通道进行BN的计算。
Layer Norm
对于Layer Norm操作来说
S
i
S_{i}
Si表示如下
S
i
=
{
k
∣
k
N
=
i
N
}
S_{i}=\{k|k_{N}=i_{N} \}
Si={k∣kN=iN}
表示LN的均值和方差计算是在(C,H,W)轴上进行的,即对每个样本层进行索引。
Instance Norm
对于Instance Norm操作来说
S
i
S_{i}
Si表示如下
S
i
=
{
k
∣
k
N
=
i
N
,
k
C
=
i
C
}
S_{i}=\{k|k_{N}=i_{N},k_{C}=i_{C} \}
Si={k∣kN=iN,kC=iC}
表示IN的均值和方差计算是在(H,W)轴上进行的。
Group Norm
对于Group Norm操作来说
S
i
S_{i}
Si表示如下
S
i
=
{
k
∣
k
N
=
i
N
,
⌊
k
C
C
/
G
⌋
=
⌊
i
C
C
/
G
⌋
}
S_{i}=\{k|k_{N}=i_{N},\lfloor \frac{k_{C}}{C/G}\rfloor = \lfloor \frac{i_{C}}{C/G}\rfloor \}
Si={k∣kN=iN,⌊C/GkC⌋=⌊C/GiC⌋}
G是个超参数,表示group的大小,默认为32。C/G表示group的个数。
⌊
{
⋅
}
⌋
\lfloor \{ \cdot\} \rfloor
⌊{⋅}⌋表示向下取整操作。说明GN操作是在(H,W)轴上并且属于同一个C/G通道的特征值进行均值和方差的计算。
另外上面所有的归一化在最后都会有下式的操作
y
i
=
γ
x
i
^
+
β
y_{i}=\gamma \hat{x_{i}}+\beta
yi=γxi^+β
其中
γ
,
β
\gamma,\beta
γ,β是学习得到的参数,对于上面所有的归一化都是和BN一样在batch维度进行学习的,即每个通道都有一对
γ
,
β
\gamma,\beta
γ,β。
三、为什么想到Group
这里解释一下,为什么凯明大神会想到对组进行卷积的。
通道维度的特征表示并不是完全独立的。
在传统的SIFT,HOG,GIST特征提取方法中就使用过组表示,每一个组通道都由相同种类的直方图构建而成。而更高维的特征比如VLAD和Fisher Vectors(FV)也可以看作是group-wise feature,此处的group可以被认为是每个聚类(cluster)下的子向量sub-vector。
相似的,对于卷积来说,卷积提取的特征是非结构化特征。对于一张图片来说,一个卷积和同一个卷积经一些变化(例如水平翻转)后得到的结果分布是相同的。通过相同卷积以及有一些其他的翻转等操作得到的特征可以一起进行组归一化。可以理解为,每个卷积输出的特征有一定的相似性,使用可以进行组归一化。
这样GN就诞生了。