深度残差网络自从2015年提出以来,在众多比赛中表现优越,且最终获得CVPR 2016年Best Paper Award。大家想必也已经耳熟能详。在这里,只是再简要说说深度残差网络是怎样的网络,关于为什么她表现如此优秀?如论文中描述,深度残差网络的缘起在于一个“反常”的现象。在训练深度神经网络的时候,训练误差和测试误差都随着网络深度的增加而增加。文中称之为Degradation问题。

深度卷积神经网络在图像分类方面,引发了一系列突破。通过改变叠层的数量(深度),深度网络自然整合低/中/高水平的功能,终端到终端多层方式的分层器,和特征的“水平”都变得更加丰富。最近的证据表明网络深度是至关重要的,在挑战性的ImageNet数据集中领先结果的团队,都利用了“很深”模型,该深度为十六至三十。而且很多特殊的视觉识别任务也从深度模型中大大受益。

受到深度意义的驱使,出现了一个问题:学习更好的网络是否和叠加层数一样简单?解决该问题的一大障碍是臭名昭著的梯度爆发与消失问题,它从一开始就阻碍了收敛。然而,这个问题很大程度上被归一的初始化和中心归一层解决了,它确保几十层的网络开始用反向传播收敛随机梯度下降(SGD)。

当更深的网络能够开始融合时,暴露出了降级问题:随着网络深度的增加,精准度开始饱和(这并不令人吃惊)然后迅速下降。预料之外的是,在[11,42]中报道并且经过我们实验彻底验,证精准度的下降并不是由过度拟合造成的,而且在相配的深度模式中增加更多的层数,会造成更高的训练误差。图1展示了一个经典的实例。


初始化:
我们设深度网络中某隐含层为H(x)-x→F(x),如果可以假设多个非线性层组合可以近似于一个复杂函数,那么也同样可以假设隐含层的残差近似于某个复杂函数[6]。即那么我们可以将隐含层表示为H(x)=F(x)+ x。

这样一来,我们就可以得到一种全新的残差结构单元,如图3所示。可以看到,残差单元的输出由多个卷积层级联的输出和输入元素间相加(保证卷积层输出和输入元素维度相同),再经过ReLU激活后得到。将这种结构级联起来,就得到了残差网络。典型网络结构表1所示。

图3 残差单元示意图

可以注意到残差网络有这样几个特点:1. 网络较瘦,控制了参数数量;2. 存在明显层级,特征图个数逐层递进,保证输出特征表达能力;3. 使用了较少的池化层,大量使用下采样,提高传播效率;4. 没有使用Dropout,利用BN和全局平均池化进行正则化,加快了训练速度;5. 层数较高时减少了3x3卷积个数,并用1x1卷积控制了3x3卷积的输入输出特征图数量,称这种结构为“瓶颈”(bottleneck)。


表1 典型的残差网络结构
图4 ImageNet数据集上“平整”网络和残差网络的收敛性能

图5 ImageNet数据集上残差网络和其他网络单模型分类验证错误率对比 (VGG对应值为测试误差)
图6 ImageNet数据集上残差网络和其他网络集成模型分类测试错误率对比

图7 在Cifar-10数据集上网络各层响应的方差分布 上图:按照原网络层数排列;下图:按照方差大小排列

收敛性能:图4中可以看到,与之前的实验不同,残差网络增加了一定层数之后,并未出现性能退化,反而性能有了一定程度的提升:残差网络有着更低的收敛损失,同时也没有产生过高的过拟合。同时注意到,残差网络在浅层时并未表现出更多的优势,说明残差网络必须要配合较深的深度才能发挥其结构优势,与“平整”网络拉开性能差距。

分类性能:图5和图6是几种网络结构在ImageNet数据集上单模型及集成模型分类错误率的对比。可以发现,残差网络系由于层数普遍高于以上模型,且又有残差结构作为极深度的支持前提,使得其性能普遍高于此前的各类优秀模型。此外,残差网络的性能也确实如期望随着网络层数的提升而提升。在100层以上时已经远远甩开了IRSVRC 2014的冠亚军网络模型。

网络响应:图7中可以看出,残差网络中大部分层的响应方差都处在较低水平,这一定程度上印证了我们的假设:这些响应方差较低的层响应较为固定,很有可能权重近似于零,这也就是说其所对应的残差结构可能近似于单位映射,网络的实际有效层数是要比全部层数要少一些的,产生了跳过连接(Skip-connection)的作用。这样也就是网络为什么在较深的深度下仍可以保持并提升性能,且没有过多增加训练难度的原因。

ResDeeper more

何恺明等人基于深度残差结构,进一步设计了一些其他的残差网络模型,用于Cifar-10数据集上的分类任务,分类错误率如图8所示。可以看到,110层以下的残差网络中均表现出了较强的分类性能。但在使用1202层残差网络模型时,分类性能出现了退化,甚至不如32层残差网络的表现。由于Cifar-10数据集尺寸和规模相对较小,此处1202层模型也并未使用Dropout等强正则化手段,1202层的网络有可能已经产生过拟合,但也不能排除和之前“平整”网络情况类似的原因导致的性能退化。

图8 Cifar-10数据集上残差网络和其他网络分类测试错误率对比

经过一段时间的研究,认为极其深的深度网络可能深受梯度消失问题的困扰,BN、ReLU等手段对于这种程度的梯度消失缓解能力有限,并提出了单位映射的残差结构[7]。这种结构从本源上杜绝了梯度消失的问题:
基于反向传播法计算梯度优化的神经网络,由于反向传播求隐藏层梯度时利用了链式法则,梯度值会进行一系列的连乘,导致浅层隐藏层的梯度会出现剧烈的衰减,这也就是梯度消失问题的本源,这种问题对于Sigmoid激活尤为严重,故后来深度网络均使用ReLU激活来缓解这个问题,但即使是ReLU激活也无法避免由于网络单元本身输出的尺度关系,在极深度条件下成百上千次的连乘带来的梯度消失。

图9 原始残差单元和预激活残差单元的对比

实验证明,将激活层融合到残差支路中,并使用ReLU预激活的残差单元,不仅可以满足之前的假设,并且实验证明在各种已知的结构里面也是最优的[7],预激活单元和原始残差单元的示意图如图9所示。可以看到,预激活的残差单元在残差支路中进行每次卷积之前即完成激活,然后再进行矩阵元素间加法进行合并,既满足了激活要求,也使得支路外不再需要额外激活。

图10 Cifar-10数据集上训练1001层残差网络的训练曲线

图11 Cifar-10和Cifar-100数据集上各种残差网络 使用不同残差单元的分类测试误差对比

使用预激活残差单元构筑的残差网络收敛性能和分类性能分别如图10和图11所示。可以看到,使用预激活残差单元,相较于使用原始单元更易收敛,且有一定正则化的效果,测试集上性能也普遍好于原始残差单元。

总结

残差网络结构简单,解决了极深度条件下深度卷积神经网络性能退化的问题,分类性能表现出色。从ILSVRC 2015至今半年多的时间里,残差网络的广泛使用已推进计算机视觉各任务的性能升入新的高度。

残差网络表现出的良好图像分类性能,同样也可以进一步推广到人脸识别领域上来。使用残差网络,可以大幅提升人脸分类性能。在人脸识别准确率每3个月提升一个数量级的今天,残差网络及未来更高性能的网络结构必定会将这个周期进一步的缩短。

注:

为什么深度残差网络表现这么好?

  • 梯度传播

    梯度传播一直是神经网络训练的一个主要问题。虽然有很多不同的解决方案都取得不错效果,比如早期的Layer-wise training, 激活函数,Batch Normalization等。但,在深层网络里面梯度随层数指数级衰减。


    深度残差网络的identity mapping(skip connection)可以使得低层网络部分得到充分训练。如下图,非线性网络部分f1(.)可以直接获得输出层梯度更新优化,而不是如原先网络结构那样,所有梯度需要先经过f3,f2。

  • 深度残差网络等价于浅层网络模型融合

一个来自于康奈尔大学的比较新的观点认为深度残差网络等价于指数级数目的浅层网络模型的融合。如下图,一个K层的深度残差网络,等价于2^K个浅层网络的模型融合。

深度残差网络(Deep Residual Network )相关推荐

  1. 深度残差网络(Deep Residual Network)ResNet

    一说起"深度学习",自然就联想到它非常显著的特点"深.深.深",通过很深层次的网络实现准确率非常高的图像识别.语音识别等能力.因此,我们自然很容易就想到:深的网 ...

  2. 深度残差网络 - Deep Residual Learning for Image Recognition

    CVPR2016 code: https://github.com/KaimingHe/deep-residual-networks 针对CNN网络深度问题,本文提出了一个叫深度残差学习网络,可以使得 ...

  3. ResNet残差网络——Deep Residual Learning for image recongnition

    作者简介--何凯明 2003 年广东省理科高考状元(2000后的业界翘楚的状元郎),2016年前在微软亚洲研究院,2016后在Facebbok AI 研究院. 知名论文: motivation 研究人 ...

  4. 经典卷积神经网络(二):VGG-Nets、Network-In-Network和深度残差网络

    上一节我们介绍了LeNet-5和AlexNet网络,本节我们将介绍VGG-Nets.Network-In-Network和深度残差网络(residual network). VGG-Nets网络模型 ...

  5. 吴恩达神经网络和深度学习-学习笔记-35-残差网络(Residual Network)

    非常非常深的网络是很难训练的,因为存在梯度消失和梯度爆炸的问题. ResNet用到了跳远连接,使得它可以从某一网络层获取激活,然后迅速反馈给另外一层,甚至是神经网络的更深层.这让ResNet可以训练很 ...

  6. 深度学习之卷积神经网络(12)深度残差网络

    深度学习之卷积神经网络(12)深度残差网络 ResNet原理 ResBlock实现 AlexNet.VGG.GoogleLeNet等网络模型的出现将神经网络的法阵带入了几十层的阶段,研究人员发现网络的 ...

  7. 深度残差网络:ResNet

    ResNet: 一.介绍 caffe-fast-rcnn(Caffe.FSRCNN.FastRCNN) name: "ResNet_50_1by2" layer {name: &q ...

  8. Deep Residual Learning for Image Recognition(深度残差网络用于图像识别)理解

    本文转载于https://blog.csdn.net/dulingtingzi/article/details/79870486,个人觉得博主写的通俗易懂,故将其转发,欢迎大家一起学习,一起进步 其实 ...

  9. Deep Residual Learning for Image Recognition 何凯明的深度残差网络

    中文翻译 深度残差网络PPT ICML 2016 Tutorial on Deep Residual Networks   (强烈推荐)

最新文章

  1. 笔记 | 深入理解深度学习语义分割
  2. intellij idea 用不起啊用不起
  3. mysql5.7只安装服务端_Windows Mysql5.7.11 服务端安装详解
  4. 【层次聚类】python scipy实现
  5. Transformer模型拆解分析
  6. C++面试/技巧(四)
  7. 关于简历的一点心得(纯属个人想法,非专业人士,欢迎批评指正~)
  8. FCKeditor在线编辑器的使用
  9. 浏览器地址栏传中文乱码
  10. 基于SSM的新闻管理系统
  11. 《软件设计师》备考笔记
  12. java看片_java – 如何正确查看片段
  13. 1688.item_get API接口
  14. python 图片自动分类机_用tensorflow神经网络实现一个简易的图片分类器
  15. 2020少儿编程教育政策大汇总!
  16. matlab弹簧振子的阻尼振动,MATLAB计算方法和技巧6_2阻尼振动
  17. redission使用案例
  18. 鸿蒙二部曲之一,网文封神之作,“鸿蒙二部曲”和“斗罗四部曲”你选择站哪边?...
  19. c语言实现逻辑谓词编程,头脑风暴-逻辑编程语言Prolog(01)
  20. Unity 实现鼠标双击

热门文章

  1. 去掉安卓网络的感叹号
  2. php重定向函数是什么,php重定向三方法
  3. [MtOI2019]永夜的报应
  4. 泊松积分、伽马函数——公式干货总结
  5. 编一程序,输入月份,输出该月份的英文名。
  6. startActivity在Activity和Service中的不同实现,以及“Calling startActivity() from outside of an Activity”错误解决
  7. 电脑开机出现绿屏错误无法启动怎么办?
  8. 中国石油大学(北京)-《安全与生活》第二阶段在线作业
  9. MyBatis批处理
  10. RUI topic 5