Keras中的残差链接(residual connection),用于解决表示瓶颈与梯度消失

一、引言

残差链接是一种常见的类图网络组件,在2015年之后的许多网络架构(如Xception)中都可以见到。2015年末,何凯明等人在一个挑战赛上获胜,其中引入了这一方法。残差链接可以解决困扰所有大规模深度学习模块的两个共性问题:梯度消失和表示瓶颈。通常来说,向任何多于10层的模型中添加残差连接,都可能会有所帮助。残差连接让前面某层的输出作为后面某层的输入,从而在序列网络中有效地创造一条捷径。前面层的输出没有与后面层的激活连接在一起,而是与后面的激活相加(这里假设两个激活的形状相同)。如果形状不同,我们可以用一个线性变换将前面层的激活改变成目标形状。

如果特征图尺寸相同,在Keras中实现残差连接的方法如下,用的是恒等残差连接,这个例子假设我们有一个四维输入张量x:

from keras import layers
x=...
y=layers.Conv2D(128,3,activation='relu',padding='same')(x)#对x进行变换
y=layers.Conv2D(128,3,activation='relu',padding='same')(y)
y=layers.Conv2D(128,3,activation='relu',padding='same')(y)
y=layers.add([y,x])#将原始x与输出特征相加

如果特征图的尺寸不同,实现残差连接的方法如下,用的是线性残差连接。同样,假设我们有一个四维张量x:

from keras import layers
x=...
y=layers.Conv2D(128,3,activation='relu',padding='same')(x)#对x进行变换
y=layers.Conv2D(128,3,activation='relu',padding='same')(y)
y=layers.MaxPooling2D(2,strides=2)(y)
residual=layers.Conv2D(128,1,strides=2,padding='same')(x)#使用1*1卷积,将原始x张量线性下采样为与y具有相同的形状
y=layers.add([y,residual])#将残差张量与输出特征相加

二:表示瓶颈与梯度消失

表示瓶颈:在Sequential模型中,每个连续的表示层都构建于前一层之上,这意味着它只能访问前一层激活中包含的信息。如果某一层太小,那么模型将会受限于该层激活中能够塞入多少信息。残差连接可以将较早的信息重新注入到下游数据中,从而解决了部分深度学习模型的这一问题。

梯度消失:反向传播是用于训练深度神经网络的主要算法,工作原理是将来自输出损失的反馈信号向下传播到更底部的层。如果这个反馈信号的传播需要经过很多层,那么信号可能会变得非常微弱,甚至丢失,导致网络无法训练。残差连接在深度前馈网络中的工作原理更加简单,它引入了一个纯线性的信息携带轨道,类似于LSTM,与主要的层堆叠方向平行,从而有助于跨越任意深度的层来传播梯度。

求点赞+关注,谢谢啦!

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值