首先回顾ResNetv1, 这里把第一版本的ResNet叫做原始版本,原始版本中的网络结构由大量残差单元(“Residual Units”)组成,原文中的残差单元有两种(见图1),一种是building block,一种是“bottleneck” building block,本文中以building block为例。
图1.原版本ResNet中提到的两种残差单元。左边是building block,右边是“bottleneck” building block。二者计算量接近,但是右边能取得更好性能。
这些残差单元,可由以下公式表示:
y
l
=
h
(
x
l
)
+
F
(
x
l
,
W
l
)
,
(
1
)
y_l = h(x_l) + F(x_l, W_l) , (1)
yl=h(xl)+F(xl,Wl),(1)
x
l
+
1
=
f
(
y
l
)
,
(
2
)
x_{l+1} = f(y_l),(2)
xl+1=f(yl),(2)
xl和xl+1分别为第l个单元的输入和输出,
F
F
F代表残差函数,
h
(
x
l
)
=
x
l
h(x_l)=x_l
h(xl)=xl代表恒等映射(identity mapping ),
f
f
f代表ReLU。
该篇论文主要聚焦于构建一条贯通全网络的直通车道,使得前向传播和反向传播都能在这条通道上很好的传播信息,减少因网络层增加而带来的信息损失,也即梯度信息损失等,使得网络能够够造更深层的网络。
作者推导得出,如果
h
(
x
l
)
h(x_l)
h(xl)和
f
(
y
l
)
f(y_l)
f(yl)都是恒等映射,那么前向传播和反向传播的信号就能直接从一个单元传到任意一个其他单元。并且实验证明,但网络接近以上两个条件时网络更容易训练。
下面是推理:
当
h
(
x
l
)
h(x_l)
h(xl)和
f
(
y
l
)
f(y_l)
f(yl)都是恒等映射时,即
h
(
x
l
)
=
x
l
h(x_l)=x_l
h(xl)=xl,
x
l
+
1
=
f
(
y
l
)
≡
y
l
x_{l+1} =f(y_l)≡ y_l
xl+1=f(yl)≡yl。然后上面等式(1)就变成了下面的等式(3)。
x
l
+
1
=
x
l
+
F
(
x
l
,
W
l
)
,
(
3
)
x_{l+1} = x_l + F(x_l, W_l),(3)
xl+1=xl+F(xl,Wl),(3)
再把
x
l
+
2
=
x
l
+
1
+
F
(
x
l
+
1
,
W
l
+
1
)
=
x
l
+
F
(
x
l
,
W
l
)
+
F
(
x
l
+
1
,
W
l
+
1
)
x_{l+2} = x_{l+1}+ F(x_{l+1} ,W_{l+1})= x_l + F(x_l, W_l)+F(x_{l+1} ,W_{l+1})
xl+2=xl+1+F(xl+1,Wl+1)=xl+F(xl,Wl)+F(xl+1,Wl+1)等循环带入,得到:
x
L
=
x
l
+
∑
i
=
l
L
−
1
F
(
x
i
,
W
i
)
,
(
4
)
x_L=x_l+\sum_{i=l}^{L-1}F(x_i,W_i),(4)
xL=xl+i=l∑L−1F(xi,Wi),(4)
这样有两个好处:
- 任何一个深层的残差单元 L L L就能被表示维一个任意的浅层残差单元 l l l加上一个残差函数 ∑ i = l L − 1 F \begin{matrix}\sum_{i=l}^{L-1}F \end{matrix} ∑i=lL−1F
- 任何一层的残差单元L的特征变成之前所有层的残差函数之和,再加上
x
0
x_0
x0,即
x
L
=
x
0
+
∑
i
=
l
L
−
1
F
(
x
i
,
W
i
)
x_L=x_0+\begin{matrix}\sum_{i=l}^{L-1}F (x_i,W_i)\end{matrix}
xL=x0+∑i=lL−1F(xi,Wi)。这一点于普通网络形成对比,普通网络这里是等于前面所有网络的矩阵乘积相乘(忽略掉ReLU和BN)。
于是,我们可以说在前向传播方向,我们的直通车道是可行的。下面再说说另一个通道——反向传播方向。
由等式4能够得到一个很好的反向传播性质,这里将损失函数指代
ε
\varepsilon
ε,
∂
ε
∂
x
l
=
∂
ε
∂
x
L
∂
x
L
∂
x
l
=
∂
ε
∂
x
L
(
1
+
∂
∂
x
l
∑
i
=
l
L
−
1
F
(
x
i
,
W
i
)
)
.
(
5
)
\frac {\partial \varepsilon}{\partial x_l}= \frac {\partial \varepsilon}{\partial x_L}\frac {\partial x_L}{\partial x_l}=\frac {\partial \varepsilon}{\partial x_L} \left(1+ \frac{\partial}{\partial x_l} \sum_{i=l}^{L-1}F(x_i,W_i)\right).(5)
∂xl∂ε=∂xL∂ε∂xl∂xL=∂xL∂ε(1+∂xl∂i=l∑L−1F(xi,Wi)).(5)
上面等式5将梯度
∂
ε
∂
x
l
\frac {\partial \varepsilon}{\partial x_l}
∂xl∂ε分解成两部分,一个部分是
∂
ε
∂
x
L
\frac {\partial \varepsilon}{\partial x_L}
∂xL∂ε,该部分确保了梯度信号能够直接从
L
L
L层传到
l
l
l层而不需要考虑残差函数;另一部分是
∂
ε
∂
x
L
\frac {\partial \varepsilon}{\partial x_L}
∂xL∂ε
∂
∂
x
l
∑
i
=
l
L
−
1
F
(
x
i
,
W
i
)
\frac{\partial}{\partial x_l} \sum_{i=l}^{L-1}F(x_i,W_i)
∂xl∂∑i=lL−1F(xi,Wi),这部分通过残差结构传播。即等式5表面反向传播通道,信号能够从深层
L
L
L传递到任意浅层
l
l
l。
等式4+等式5就证明了我们直通车道的前向传播方向和反向传播方向可行性,但是这要基于两个条件: h ( x l ) = x l h(x_l) = x_l h(xl)=xl; f f f是恒等映射。
条件一简单的让
h
(
x
l
)
=
x
l
h(x_l) = x_l
h(xl)=xl即可,主要变换在条件二。为了满足条件二,修改了残差单元的结构(组成都一样,只是组成顺序不同),详见下图。
图2.左图是原ResNet的残差单元结构,右边是该论文提出的残差单元结构,该组织结构是通过若干对比后得出的最优结果。
以上两个条件,将激活部分(BN和ReLU)放到了计算前即满足,即使得图中灰色路径变得更简洁。
总结:
该版本主要就是推理了网络中信息如何在残差单元中更好传递,并调整了一个残差单元中BN和ReLu的顺序。