ResNet

Paper : Deep Residual Learning for Image Recognition
Code : torchvision

摘要

ResNet也是从“深就是好”的思想出发,为了解决梯度下降和梯度消失的问题,开创性的提出了shortcut connection的结构,之后大部分论文都引入了shortcut connection的结构。

网络结构

ResNet 中最重要的结构就是identity shortcut connection,结构如下

image.png

H ( x ) = F ( x ) + x \mathcal H(x) = \mathcal F(x)+x H(x)=F(x)+x,则有 F ( x ) = H ( x ) − x \mathcal F(x) = \mathcal H(x)-x F(x)=H(x)x,也被称为是残差(Residual),这也就是ResNet要学习的部分。一个ResNet块的最后一步是将残差和恒等映射相加,之后过一个激活函数层,如果 F ( x ) \mathcal F(\text x) F(x) x \text x x在channel一维的大小相同,那么只需要直接相加即可,否则,可以采用以下两种方式来对齐

  1. 对channel一维进行零扩展。
  2. 使用1*1的卷积进行channel维度的控制。

我们来简单分析一下为什么恒等映射的shortcut的引入会改善梯度爆炸和梯度消失的问题。设激活函数使用 σ \sigma σ来表示,那么对于第 l l l个残差模块来说可以得到如下的式子

x l + 1 = σ ( y l ) = σ ( x l + F ( x l , W l ) ) \\ x_{l+1} = \sigma( y_l )= \sigma(x_l + \mathcal F(x_l,W_l)) xl+1=σ(yl)=σ(xl+F(xl,Wl))

其中, x l x_l xl表示残差模块的输入, F ( x l , W l ) \mathcal F(x_l,W_l) F(xl,Wl)表示的是两层weight layer对 x l x_l xl所做的运算。如果令 σ = ReLU \sigma = \text{ReLU} σ=ReLU,则在有效的反向传播的过程中, ReLU \text {ReLU} ReLU可以看作是一个恒等映射,有 x l + 1 = y l x_{l+1} = y_{l} xl+1=yl,通过递推式得到如下的表达式

x L = x l + ∑ i = l L − 1 F ( x i , W i ) x_L = x_l + \sum_{i=l}^{L-1} F(x_i,W_i) xL=xl+i=lL1F(xi,Wi)

因此,在反向传播的过程中,有

∂ Loss ∂ x l = ∂ Loss ∂ x L ( 1 + ∂ ∂ x l ∑ i = l L − 1 F ( x i , W i ) ) \frac{\partial \text{Loss}}{\partial x_l} = \frac{\partial \text{Loss}}{\partial x_L} (1+ \frac{\partial }{\partial x_l}\sum_{i=l}^{L-1} F(x_i,W_i)) xlLoss=xLLoss(1+xli=lL1F(xi,Wi))

可以看到,对于任何一层的x的梯度由两部分组成,其中一部分直接就由L层不加任何衰减和改变的直接传导l层,这保证了梯度传播的有效性,另一部分也由链式法则的累乘变为了累加,这样有更好的稳定性。

完整的ResNet 34的结构如下,其中所有的虚线表示该shortcut需要使用以上的方法进行channel的对齐

image.png

参数如下所示

image.png

其中训练细节如下

  1. 使用Conv - BN - ReLU的结构,每个卷积层均采用该种连接方式
  2. 进行尺度放缩的增广,将短边放缩到[256,480]的范围内后随机剪裁224*224的图片进行训练
  3. 在测试时,使用10-crop测试,也就是从图片中随机剪裁出10个224*224的位置进行测试

错误率随着迭代轮数的进行表现如下,其中左图为相同的连接结构,不使用shortcut的神经网络训练出来的结果,右侧为使用shortcut的结果

image.png

接下来,我们比较一下零填充和1*1的卷积核的优劣性,表现排名如下

  1. 全部使用1*1 卷积核,无论是否需要对齐channel
  2. 只在对齐channel时使用1*1的卷积核
  3. 使用零填充

尽管如此,这三种方式的表现差异不大,引入1*1的卷积核的表现更优可能是因为引入了新的需要学习的参数,真正需要引入1*1卷积核的地方是ResNet中著名的bottleneck的结构,如下图所示,其中左侧为朴素的ResNet Block,而右侧为使用了bottleneck结构的ResNet Block

image.png

bottleneck结构的引入可以在网络深度较高的情况下有效的减小参数规模,便于训练,防止过拟合,因此在ResNet 50,ResNet 101 ResNet 152上均使用该结构代替朴素的ResNet Block。有关bottleneck和1*1卷积核对于参数规模的影响可以阅读我之前有关GoogLeNet的文章了解更多。

核心观点

  1. 恒等快捷连接的引入可以有效的缓解梯度消失/梯度爆炸的问题,大大增加了可训练网络模型的深度和表现能力。
  2. 再一次强调了1*1卷积核的作用,包括减小参数规模和对齐channel。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值