【论文阅读】Deep Residual Learning for Image Recognition

今天读ResNet的论文。现在ResNet几乎成为行业标杆,遇到什么任务要用模型几乎首选残差网络。

不知道为什么,国人写的文章看着就是亲切,读起来也很流畅,边和舍友聊天边读也读的很流畅,没有什么磕磕绊绊的地方,一口气就读完了。

论文地址:https://arxiv.org/abs/1512.03385

以下是正文:


引言

文章首先抛出当时阻碍进步的两大难题:

        1.梯度爆炸、梯度消失。这个问题已经很大程度上被归一初始化与中间层的归一化解决了。

        2.退化问题。这是指网络深度加深,最终的效果反而更差了(不是过拟合)。但这是不应该有的,因为比如在现有网络上加上几层新加层,那么只要这些新加层学到恒等变换(y=x),那至少应该和原来比较浅的网络取得一样的最终效果,即深层网络的效果至少应该不差于浅层网络。但深层网络却没有取得它该有的效果。

         作者认为的原因是,更深的那些层引入了非线性,导致作为线性操作的恒等映射很难被学习到。因此作者引入了一个“shortcut”(不知道怎么翻译了,现在的行话好像叫“残差连接”,我有点觉得这个翻译不太合适,因为残差应该是指另一条路,而不是这个新加的连接(后面再说)。但是翻译成“捷径连接”有点让我不能接受,还是不翻译了)。这个shortcut还是图说吧:

         这个shortcut就是一个没有任何参数的恒等映射。这么做的话,如果想让这个整体学习到恒等映射,只需要图中的另一条路F(x)学习到零映射就行了,零映射应该比恒等映射要更容易学习到,只要让所有的参数都是0就行了。

这就是整篇文章的核心了,读到这其实就已经吸收了90%了,剩下的就是些细节了。不过我还有一些疑问就继续读下去了。


相关工作

这一部分讲的是一些相关工作:

一是“残差表示”,说实话没看懂,提到的“VLAD”和“Fisher Vector”都没怎么听说过,基础知识不够,还是跳过吧。

二是“捷径连接”,提到了一个更早的工作“highway networks”,用的是一种“门”的方式,这个门对有些数据会开放形成捷径连接,另一些就不会开放。虽然有“shortcut”这个概念了,但是和作者的ResNet还是相差很多的。


深度残差学习

首先呢,这部分解答了我的最大的一个疑惑:这个网络为什么叫“残差”网络呢?首先应该搞懂残差是个啥意思,百度百科说:

作者设计这个残差结构,目的首要就是解决退化问题,因此作者假设这个整个残差结构应该是学习到恒等映射的,但是有时候它也会学习到更优的映射,这时候这个更优的映射与恒等映射之间的差就由这里的F(x)学习(所以我觉着这个笔直的一条路才应该叫残差连接),也就是说这个模块在优化过程中,其实是在学习最优映射与作者估计的映射(恒等映射)之间的差,即进行“残差学习”。如果整个网络都是这样的模块搭建的话,那其实每个模块都是在学习各自的“残差”,所以才叫做“残差网络ResNet”

这一部分的剩下部分算是补充一些细节吧,我列举一下:

        1.上图可知,这个模块在两条路相加之后又进行了一次relu激活函数的计算,顺序注意一下。

        2.上面进行的shortcut需要保持维度一致:

        维度不一致的时候,有两种办法:一是pad更多的0来扩充维度,这种方法同样是无参数的;另一种方式是进行一个线性投影(矩阵相乘)来改变维度:

         其实就算维度一致的时候也能用第二种方式来让网络自己进行学习,不过作者做实验证明最原始的恒等连接就足够来解决退化问题了,为且参数少好优化,是更经济的选择。

        3.F(x)(就是我认为的残差连接)的形式是任意的,可以使两层、三层、四层......不过至少应该是两层,如果是一层就成y=Wx+x了,没啥意义了。形式可以是全连接,也可以是卷积等等。

最后作者说他们在保持了深度、参数数量等大致一致的条件下,基于VGG的设计原则设计了一些一般结构的网络,用于与残差网络进行对比,然后给出了一些实验中的配置,就不再说啦。图示如下:


实验

这一部分就是在不同数据集上进行实验与对比。,我列举一下作者的实验结果和我的收获哈:

1.在ImageNet数据集上的结果如下:

 可以看到两点:

  1. 残差网络确实没有退化问题了,可以继续加深网络
  2. 残差结构使得模型在前期收敛得更快(不过我看结果感觉后期的收敛速度就几乎一样了)

2.作者也对shortcut的三种方式进行了对比,三个方式如下:

  1. 维度一致时用恒等映射,维度不一致时用0进行填充
  2. 维度一致时用恒等映射,维度不一致时用线性投影(参数可学习)
  3. 维度一不一致都用线性投影(参数可学习)

然后最终的误差是依次递减的,不过差别也不大。

3.当作者想堆叠到更深的深度时,为了减少运算量,作者新设计了一种结构,叫“Bottleneck Architectures”,图示如下:

 第一个1*1层用于减少维度,最后一个1*1层用于增加维度,这样中间的3*3层的计算量就减少下来了,形成一个类似“瓶颈”的结构。这两种模块的计算复杂度大致一致。

这种结构就必须用无参数的shortcut了,因为“瓶颈”结构的输入输出都是高维的,那如果用有参数的线性投影连接,计算复杂度与模型大小直接翻倍。因此作者采用的是第二点提到的第二个方式(度一致时用恒等映射,维度不一致时用线性投影(参数可学习))。

作者用这种“瓶颈”结构搭建了更深的ResNet50、101、152。

4.作者还提到,他们进行了六个不同深度的模型的集成学习,而这种方式就是让他们在ILSVRC 2015获得第一的方式。

5.作者在CIFAR-10数据集上进行110层模型的实验时,提到0.1的学习率太大以至于不能收敛。他们的做法是用0.01的学习率进行“暖身”直到训练误差讲到80%以下,然后再继续用0.1的学习率训练。这个方法我还没见过,记录一下,以后可能用得到(虽然没理解)

6.作者还搭建了一个1202层的残差网络(乖乖),不过误差相比101层的还降低了一点,作者给出的原因猜测是过拟合,一些比较强的正则化手段可能有助于改善。

7.这个方法还可以用于目标检测,作者用这种方式改造了一下Faster R-CNN,效果很好,取得了很多第一(应该是赢麻了)

除了以上的这些,作者还进行了他的猜想的验证,对每一层学习到的残差进行一个比较,具体方式是:计算每一层的输出(在Batch Normalization之后,在激活函数之前)的标准差,BN保证了均值为0,那么这个标准差就衡量了这“残差”与零映射的差别,也就是整个结构与恒等映射的差别,结果如下:

 作者的两个洞见是:

  1. 残差结构总体上确实比非残差结构更接近零映射(因为进行了BN,虽然残差结构的目标是学习到恒等映射,残差结构的可学习部分的学习目标是零映射,但是均值归一化后都是零映射,因此标准差大就意味着难以学习到想要的映射),也即让网络学习零映射比学习恒等映射容易。
  2. 随着层数加深,标准差也降低,也就是意味着更深的层就更像恒等映射,也就是说对最终误差降低的贡献也就越少。

这两点就足够证明作者在刚开始引言部分的假设与设想了。


记录一下不理解的点:

  • 在第三部分提到实验配置时,有说下面红字的部分,不太懂:

  • 作者在第四部分向我们展示一般结构的网络会有退化问题时,提到他们猜想的原因,不太懂:

  • 为什么这个“暖身”的学习率调整会有效呢?

 这么多字累死了,舍友带的饭已经放了有一个小时了还没吃,都凉了,赶紧吃

哦对,感谢作者!!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

野生的野蛮人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值