学习目标
- Batch Normalization
- Internal Covariate Shift
- GoggleNet-2
论文导读
论文研究背景、成果以及意义
背景
Internal Covariate Shift
ICS现象:输入数据分布变化,导致的模型训练困难,对深度神经网络影响极大. 具体到神经网络,就是一个网络层中的不同神经元输入的的数据分布不均匀,比如第一个神经元的输入数据是均值为0的正态分布,但是另一个神经元的输入数据是均值为-3的正态分布。
白化
去除输入数据的冗余信息,使得数据特征之间相关性较低,所有特征具有相同方差。依据概率论
N
(
x
)
=
x
−
m
e
a
n
std
\mathrm{N}(\mathrm{x})=\frac{x-m e a n}{\operatorname{std}}
N(x)=stdx−mean
使得
x
x
x变为0均值,1标准差的分布。
研究成果
- 提出BN层:加快模型收敛,比googlenet-v1快数十倍,获得更优结果
- GoogLeNet-v2 获得ILSVRC 分类任务 SOTA
BN优点:
- 可以用更大学习率,加速模型收敛
- 可以不用精心设计权值初始化
- 可以不用dropout或较小的dropout
- 可以不用L2或者较小的weight decay
- 可以不用LRN(local response normalization)
研究意义
- 加快了深度学习的发展
- 开启神经网络设计新时代,标准化层已经成为深度神经网络标配。在Batch Normalization基础上拓展出了一系例标准化网络层,如Layer Normalization(LN), Instance Normalization(IN),Group Normalization(GN)。 相同点都是用类似的白化公式,不同点就是公式中均值和方差的求取方式
论文泛读
摘要
- 提出问题:数据分布变化导致训练困难(PS:权重变化–输出变化–输入变化–训练困难)
- 已有方法:通过小学习率和精心权重初始化,但是很训练缓慢,效果不佳
- ICS:上述现象为ICS,本文提出标准化网络层来缓解它
- BN:在模型中增加BN层,可在mini-batch中执行标准化,让模型可以用大学习率,不需要精心 设计权值初始化,可以少用Dropout
- 本文成果:BN使模型训练加快14倍,并且可显著提高分类精度,在Imagenet分类任务中超越了人 类的表现
论文精读
BN层
Batch normalization: 批标准化
批:mini-batch
标准化: 使得分布为mean=0, std=1
x
^
(
k
)
=
x
k
−
E
[
x
(
k
)
]
Var
[
x
(
k
)
]
\widehat{x}^{(k)}=\frac{x^{k}-\mathrm{E}\left[x^{(k)}\right]}{\sqrt{\operatorname{Var}\left[x^{(k)}\right]}}
x
(k)=Var[x(k)]xk−E[x(k)]
比如如 1,2 ;mean=1.5, std=0.5, 变换得到-1, 1 一定有正有负,并且拉到0附近了.
【这里k是指第k个神经元。也就是说,标准化是以特征维度,以神经元为单位进行操作的。假设中间一层隐藏层有3个神经元,那么就是k=1, 2, 3】
算法步骤总结
加减乘除实现BN: 减均值除以标准差,乘以 γ \gamma γ加 β \beta β
-
在mini-batch上计算均值
-
在mini-batch上计算标准差
-
减均值除以标准差( ϵ = 1 e − 5 \epsilon=1 e^{-5} ϵ=1e−5, 避免分母为0)
-
线性变换,乘以 γ \gamma γ加上 β \beta β,实现缩放与平移
BN层的问题
线性退化
使得神经元输出值在sigmoid线性区,削弱了网络的表达能力。【就相当于把sigoid变成了一个线性linear函数,使得整个神经网络近似于变成了一个大的线性变换】
解决办法:
y
(
k
)
=
γ
(
k
)
x
^
(
k
)
+
β
(
k
)
y^{(k)}=\gamma^{(k)} \widehat{x}^{(k)}+\beta^{(k)}
y(k)=γ(k)x
(k)+β(k)
采用可学习参数
γ
\gamma
γ与
β
\beta
β, 增加线性变换,提升网络表达能力。同时提供恒等映射的可能。当
γ
(
k
)
=
Var
[
x
(
k
)
]
\gamma^{(k)}=\sqrt{\operatorname{Var}\left[x^{(k)}\right]}
γ(k)=Var[x(k)]和
β
(
k
)
=
E
[
x
(
k
)
]
\beta^{(k)}=\mathrm{E}\left[x^{(k)}\right]
β(k)=E[x(k)]时,BN层变为恒等映射,不改变神经元输出值。
均值和标准差的代表性
Mini-batch的统计信息充当总体是不准确的
解决办法:采用指数滑动平均。假设t时刻当前值是
a
t
a_t
at,指数滑动平均值是
m
v
t
mv_{t}
mvt,我们有
m
v
t
=
decay
∗
m
v
t
−
1
+
(
1
−
decay
)
∗
a
t
m
v
t
=
∑
i
=
1
t
decay
t
−
i
∗
(
1
−
decay
)
∗
a
t
\begin{array}{l} m v_{t} &=\operatorname{decay} * m v_{t-1}+(1-\operatorname{decay}) * a_{t} \\ m v_{t} &=\sum_{i=1}^{t} \operatorname{decay}^{t-i} *(1-\operatorname{decay}) * a_{t} \end{array}
mvtmvt=decay∗mvt−1+(1−decay)∗at=∑i=1tdecayt−i∗(1−decay)∗at
就是说我们用上一个时刻的滑动平均值作为参考,给予当前值和上一个平均滑动值不同的衰减权重,得到一个平均的结果。如果我们把递推公式展开,有
m
v
1
=
(
1
−
d
e
c
a
y
)
a
1
m
v
2
=
d
e
c
a
y
∗
m
v
1
+
(
1
−
d
e
c
a
y
)
a
2
=
d
e
c
a
y
(
1
−
d
e
c
a
y
)
∗
a
1
+
(
1
−
d
e
c
a
y
)
a
2
m
v
3
=
d
e
c
a
y
2
∗
(
1
−
d
e
c
a
y
)
∗
a
1
+
d
e
c
a
y
(
1
−
d
e
c
a
y
)
a
2
+
(
1
−
d
e
c
a
y
)
a
3
\begin{array}{l} m v_{1}=(1-d e c a y) a_{1} \\ m v_{2}=d e c a y * m v_{1}+(1-d e c a y) a_{2}=d e c a y(1-d e c a y) * a_{1}+(1-d e c a y) a_{2} \\ m v_{3}=d e c a y^{2} *(1-d e c a y) * a_{1}+d e c a y(1-d e c a y) a_{2}+(1-d e c a y) a_{3} \end{array}
mv1=(1−decay)a1mv2=decay∗mv1+(1−decay)a2=decay(1−decay)∗a1+(1−decay)a2mv3=decay2∗(1−decay)∗a1+decay(1−decay)a2+(1−decay)a3
decay可以取值0.9
假设到了时刻t,
t
−
i
>
C
t-i>C
t−i>C, 且C是正无穷大。这就意味着时间延续了很久,t变得很大。那么就有
m
v
t
=
∑
i
=
1
t
decay
t
−
i
∗
(
1
−
decay
)
∗
a
t
=
∑
i
=
1
t
−
C
−
1
decay
t
−
i
∗
(
1
−
decay
)
∗
a
t
+
∑
i
=
t
−
C
t
decay
t
−
i
∗
(
1
−
decay
)
∗
a
t
≈
∑
i
=
t
−
C
t
decay
t
−
i
∗
(
1
−
decay
)
∗
a
t
m v_{t} =\sum_{i=1}^{t} \operatorname{decay}^{t-i} *(1-\operatorname{decay}) * a_{t} \\ =\sum_{i=1}^{t-C-1} \operatorname{decay}^{t-i} *(1-\operatorname{decay}) * a_{t}+ \sum_{i=t-C}^{t} \operatorname{decay}^{t-i} *(1-\operatorname{decay}) * a_{t}\\ \approx \sum_{i=t-C}^{t} \operatorname{decay}^{t-i} *(1-\operatorname{decay}) * a_{t}
mvt=i=1∑tdecayt−i∗(1−decay)∗at=i=1∑t−C−1decayt−i∗(1−decay)∗at+i=t−C∑tdecayt−i∗(1−decay)∗at≈i=t−C∑tdecayt−i∗(1−decay)∗at
也就是说
m
v
t
mv_t
mvt只和
a
t
−
C
,
a
2
,
…
,
a
t
a_{t-C}, a_{2}, \ldots, a_{t}
at−C,a2,…,at有关。
BN优点
- 可采用较大学习率 针对类似Sigmoid的饱和激活函数,加上BN层后,可采用较大学习率
- 充当正则,顶替Dropout加入BN层后,在一个batch中,将当前样本与其他样本通过统计信息联系起来,相当于某种约束,经实验表明可减轻Dropout的使用。
BN注意事项
- BN层前一层不需要加偏置(bias),该偏置可被BN层中的Shift( β \beta β)给抵消
- 卷积网络时,是针对特征图为单位进行BN层,即使2D的BN操作, 我们也不是针对二维特征图中的神经元之间进行BN,而是以特征图为单位进行BN操作。
模型结构
对V1的改进:
- 激活函数前加入BN
- 5 × 5 5\times 5 5×5卷积替换为2个 3 × 3 3\times 3 3×3卷积
- 第一个Inception模块增加一个Inception结构
- 增多“5*5”卷积核
- 尺寸变化采用stride=2的卷积,放弃max pooling
- 增加9层(10-1层)到 31层.(10表示inception数量)
实验结果分析
MNIST:更快更稳定
ILSVRC:更快精读更高,可用大学习率
模型集成:超越人类精度
论文总结
关键点&创新点
- 提出BN层,缓解ICS带来的训练困难,可实现 1. 可以用更大学习率,加速模型收敛
- 可以不用精心设计权值初始化
- 可以不用dropout或较小的dropout
- 可以不用L2或者较小的weight decay
- 可以不用LRN(local response normalization)
- 借鉴VGG,全面将 5 × 5 5\times 5 5×5卷积替换为两个 3 × 3 3\times 3 3×3卷积堆叠
总结
- 两个模型组合优点,放在一句话。加速14倍是BN-x5,获得显著提升的是BN-x30
- 0均值,1标准差的数据分布可加速网络训练
- 即使不去相关,0均值,1方差的数据分布也可加快网络训练
- 推理时,BN相当于线性变换,即缩放加平移,进一步的,可将BN层融合到卷积层中
- bias作用被抵消,因此不需要bias,并且线性变换中的beta可充当bias
- 卷积层的BN中,不仅考虑batch维度,还考虑空间维度,以feature map维度进行求取均值,方差
- 一个样本的计算受到其它样本的约束,可认为是一种正则约束
- 堆叠使用2个 3 × 3 3\times 3 3×3卷积,全面替换 5 × 5 5\times 5 5×5卷积,并且给予更多卷积核
- 加速BN的7个改变
- Increase learning rate: BN特性
- Remove Dropout:BN可充当正则
- Reduce the L2 weight regularization by a factor of 5. 因为BN允许权重大一些,所以对于权重大小的限制可以减轻一些
- Accelerate the learning rate decay
- Remove Local Response Normalization
- Shuffle training examples more throughly
- Reduce the photometric distortions
- GoogLeNet-V1 采用ReLU和Sigmoid,获得的精度几乎是一样的,即ReLU在V1中并没有提升精度
- GoogLeNet-V1 训练到收敛,用了大约826个epochs,这一个数据在V1论文中从未给出