ResNets(残差网络)
本节课需要学习的是 skip connection(跳远连接)
跳远连接可以让我们能够训练非常深的网络,甚至超过100层
1. Residual block(残差快)
1.1 Plain Networks的原理
一般神经网络的信息传递如下:
(Figure 1.1) 一般神经网络部分信息传递过程
大体需要经历的过程如下:
a
[
l
]
→
L
i
n
e
a
r
→
R
e
L
U
→
a
[
l
+
1
]
→
L
i
n
e
a
r
→
R
e
L
U
→
a
[
l
+
2
]
a^{[l]} \quad → Linear \quad→ ReLU \quad → a^{[l+1]} \quad → Linear \quad → ReLU \quad → a^{[l+2]}
a[l]→Linear→ReLU→a[l+1]→Linear→ReLU→a[l+2]
公式推导如下:
z
[
l
+
1
]
=
W
[
l
+
1
]
a
[
l
]
+
b
[
l
+
1
]
a
[
l
+
1
]
=
g
(
z
[
l
+
1
]
)
z
[
l
+
2
]
=
W
[
l
+
2
]
a
[
l
+
1
]
+
b
[
l
+
2
]
a
[
l
+
2
]
=
g
(
z
[
l
+
2
]
)
z
[
l
+
1
]
=
W
[
l
+
1
]
a
[
l
]
+
b
[
l
+
1
]
z^{[l+1]}=W^{[l+1]} a^{[l]}+b^{[l+1]} \quad a^{[l+1]}=g\left(z^{[l+1]}\right) \quad z^{[l+2]}=W^{[l+2]} a^{[l+1]}+b^{[l+2]} \quad a^{[l+2]}=g\left(z^{[l+2]}\right)z^{[l+1]}=W^{[l+1]} a^{[l]}+b^{[l+1]} \quad
z[l+1]=W[l+1]a[l]+b[l+1]a[l+1]=g(z[l+1])z[l+2]=W[l+2]a[l+1]+b[l+2]a[l+2]=g(z[l+2])z[l+1]=W[l+1]a[l]+b[l+1]
1.2 Residual block的结构
但是此处的残差网络并非直接将 a[l]放入ReLU中得到的就算是a[l+2]了,而是将在将z[l+2]投入ReLU函数的前提下(main path),将a[l]也投入进去(skip connect /short cut),得到 a [ l + 2 ] = g ( z [ l + 2 ] + a [ l ] ) a^{[l+2]}=g\left(z^{[l+2]} + a^{[l]}\right) a[l+2]=g(z[l+2]+a[l])
综上,残差块是由 主路径 和 跳跃连接 二者共同组成的,如下图:
(Figure 1.2) 残差块的组成
2. ResNets(残差网络)
2.1 残差网络的组成
对于未添加残差块的网络叫做 Plain Networks(普通网络)
而由一个个残差块组成的网络就是ResNets(残差网络),如下图:
(Figure 2.1) 残差网络是由一个个残差块构成的
图中的中间部分就是main path, 上面的蓝色箭头为skip connect,下面每一个蓝线包含的就是一个Residual block(残差块)
2.2 残差网络的大体效果
Plain Networks的网络随着层数的增加,在一定程度后结构会变得十分的臃肿,以至于误差没能 继续降低 反而在 持续增加(因为梯度消失和梯度爆炸)
ResNets的网络可以有效地解决这个问题,让网络的层数可以达到上百层
(Figure 2.2) PlainNets VS ResNets随着层数增加效果图
本次所提及的论文为:
He et al., 2015, Deep Residual Learning networks for imagerecognition