跳跃连接与残差连接 学习笔记
FCNVMB网络与InversionNet的另一组不同点在于,FCNVMB网络使用了跳跃连接,而ResNet使用的残差连接是一种特殊的跳跃连接,在学习相关知识点后,我将自己的理解记载在博客里。
跳跃连接
跳跃连接的基本思想是在网络的某些层中,将输入直接连接到输出,以允许信息在不同层之间跳跃传递。这种连接通常是通过加法操作来实现的,将输入和输出相加;同时,在图形相关的应用中,也可以通过在特征通道上叠加的操作实现,将输入作为特征图叠加到输出的特征通道上,并用内核大小1x1的通道卷积提取需要的特征。
其原理是建立从网络的较早部分到较晚部分的连接,并传输信息。 在多个卷积过程的过程中,当网络深入到较低级别的特征时,它会丢失较高级别特征的上下文。我们希望找回某些层上丢失的信息,以便为网络提供更好的上下文。这时就可以通过跳跃连接发送丢失的信息,这样在两层之间建立的连接不会按照发送信息的实际处理顺序,而直接到达更深的网络层。
FCNVMB网络是一种类U-Net网络,都由编码层和解码层组成。以我个人的实现为例,不添加跳跃连接的FCNVMB网络的编码层向解码层传递的特征形状为[512, 17, 18],约16万个数字信息。虽然传递的信息庞大,但相比于[5, 1000, 70]的输入数据,约35万数字信息,编码器在压缩特征时仍可能出现特征丢失的情况。使用跳跃连接就可以将部分特征矩阵在被压缩前就送往解码器,挽回了部分特征。下图是U-Net网络的示意图,图中的灰线就是跳跃连接。
残差连接
从上图中可以看出,跳跃连接的主要目的是将未压缩的特征直接送往解码器,因此跳跃连接往往会跨越深浅不一但普遍较深的网络层。而残差连接则不同,残差连接的主要目的是确保模型在变深时,训练效果不会变的更坏。以下是一个残差连接的例子:
这样一个残差连接就是一个残差块,而著名的残差神经网络就是由许多个这样的残差块组成的,对比跳跃连接,可以看出残差连接往往跳跃的深度固定,跳跃的网络层也固定,换言之,残差连接提供的是相邻网络层之间数据之间传输的连接。这种特性是由于残差连接的目的而决定的。
残差连接的设计目标
在深度学习的发展历程中,研究人员普遍遇到了一个问题。在加深模型以拟合更复杂的问题时,往往会出现梯度消失的问题。简单来说就是模型的深度过深,导致每一层网络对结果的影响都减小,在梯度反向传播时每一层的参数改变量都不大,不能使损失函数往较小的方向发展。因此研究人员就想研究一种操作,使网络加深时,模型的效果不会变的更差。因此,残差网络应运而生。
残差连接的数学原理
如果将残差连接跳过的网络层视作函数
F
(
x
)
F(x)
F(x),
x
i
n
x_{in}
xin作为网络层的输入,那么残差连接的输出
X
o
u
t
X_{out}
Xout就可以用以下公式来表示:
X
o
u
t
=
F
(
x
i
n
)
+
x
i
n
X_{out}=F(x_{in})+x_{in}
Xout=F(xin)+xin
结合残差连接的设计目标,我们可以这样理解:**在模型加深时,最坏的结果是增加的网络层毫无用处,即
F
(
x
i
n
)
=
0
F(x_{in})=0
F(xin)=0。**在没有添加残差连接时,该层的输出
X
o
u
t
=
0
X_{out}=0
Xout=0。使得新添加网络层之前的有用网络层一并变的没用起来。模型损失了大量有用网络层的输出,模型也就变的更差。在添加残差连接后,该层的输出变为
X
o
u
t
=
x
i
n
X_{out}=x_{in}
Xout=xin。即使添加的网络层毫无用处,之前网络层的有用结果也能进一步往后输出,网络的传输不至于在这里断开。
从梯度传播的角度来说,我们可以对残差连接进行求导,得到网络层的梯度如下:
X
o
u
t
′
=
F
′
(
x
i
n
)
+
1
X_{out}' = F'(x_{in})+1
Xout′=F′(xin)+1
在不添加残差连接时,
X
o
u
t
′
=
F
′
(
x
i
n
)
X'_{out}=F'(x_{in})
Xout′=F′(xin)。参考之前提出的最坏情况,当
F
(
x
i
n
)
=
0
F(x_{in})=0
F(xin)=0时
X
o
u
t
′
=
F
′
(
X
i
n
)
=
0
X'_{out}=F'(X_{in})=0
Xout′=F′(Xin)=0,梯度的传递就此终结,损失函数产生的梯度无法向更浅层传播,新添加层之前的网络层的参数全部失去了被优化的作用。添加了残差连接之后,在最坏情况下
X
o
u
t
′
=
1
X'_{out}=1
Xout′=1,使梯度的反向传播可以跨过这一层,继续优化原来的网络层。
残差连接的作用
因此,结合残差连接的目的和数学原理,我们可以总结出残差连接的作用。理论上,越深的网络能拟合更复杂的问题,效果应该更好;但实际上,过深的网络因为深层网络存在着梯度消失或者爆炸的问题会产生退化,效果反而不如相对较浅的网络,模型层数越多,越难训练。引入残差连接之后,残差连接允许输入直接跳过一些层,从而使得梯度能够更有效地传播。残差网络越深,训练集上的效果会越好。简单理解就是残差网络缓解了深层网络的梯度消失和梯度爆炸问题,使得训练更深的网络成为可能。
残差连接的补充
据组内同学的周报分享,如上图所示,残差连接有几种连接方式,但大致可分为两种。一种如图a,残差连接后经过激活器,残差层的输出经激活器激活;另一种连接方式如图b、c,激活器在残差连接跳跃的网络层内(图b和图c表达的是两种思想,图b表达的是下一个被残差连接跳过的激活器对上一组网络层进行激活,图c表达的是被残差连接跳过激活器先对输入数据进行激活,再经过其他网络层。但二者在网络结构上并无差距)。经过学者验证,使用图b、c展示的残差连接方式的网络效果更好。
参考
组内同学的周报分享