2015_Arxiv_Deep Residual Learning for Image Recognition

    首先感谢 @辛淼 博士的邀请,末学在这里把阅读《Deep Residual Learning for Image Recognition》一文的心得和大家分享一下,做抛砖引玉之用,希望得到大家的广泛讨论。
    在具体介绍文章思想以前,先来看一下“深度残差学习”(Deep Residual Learning)的赫赫战功:MSRA凭借着这一利器在Imagenet比赛的识别、检测和定位三个任务、以及COCO比赛的检测和分割任务上都获得了第一名,这主要归功于残差学习的这一思想使得学习更深的网络成为可能,从而学习到更好的表达。
    那么什么是深度残差学习呢?
    很久以前人们就已经认识到更深的网络能够产生更好的数据表达,但是如何训练一个很深的网络却一直是一个困扰人们的问题,这主要是由于梯度消失或爆炸以及尺度不均匀的初始化造成的。围绕这一问题,人们提出了ReLU、Xavier、pReLU、batch normalization和path-SGD等一系列方法(详细内容参见社区第二次线下活动刘昕博士讲稿),但是本文作者何恺明等人却发现即使有这些方法,神经网络的训练仍然呈现了degradation的现象。所谓degradation现象,就是随着网络深度的增加,网络的性能反而下降,而且这种性能的下降并不是由前面所说的问题造成的。见图1,56层网络在训练误差和测试误差上都要比20层的网络大。

fig1.JPG

图1 [图片选自原论文,版权归原作者所有]

    这种现象是不合理的。假如目前有一个可以工作的很好的网络A,这时来了一个比它更深的网络B,只需要让B的前一部分与A完全相同,后一部分只实现一个恒等映射,这样B最起码能获得与A相同的性能,而不至于更差。深度残差学习的思想也由此而产生,既然B后面的部分完成的是恒等映射,何不在训练网络的时候加上这一先验,于是构造网络的时候加入了shortcut连接,即每层的输出不是传统神经网络当中输入的映射,而是映射和输入的叠加,如图2所示。
 
111111.jpg

图2 [图片选自原论文,版权归原作者所有]

    这就是深度残差学习的思想,当然在具体实现上还有一些细节,比如输入和输出的维度不同是如何处理的、文中所实现网络何以更深但参数却比VGG要少、网络的设计原则是什么,这些细节请大家阅读论文Sec.3.3,也欢迎大家进行讨论。
    最后谈一点自己关于这篇文章的体会:
    1. 在网络训练过程中,加入先验信息指导非常重要,合理的先验往往会取得非常好的效果。本文中的恒等映射便是一例,这里再举一个例子,Meina Kan老师等人的2014CVPR的Stacked Progressive Auto-Encoders (SPAE) for Face Recognition一文中在用深度神经网络做跨姿态的人脸识别问题时,加入了人脸姿态是渐变的过程这一先验信息,使得网络性能显著提升。
    2. 如果读过《Highway Network》一文,会发现深度残差学习是highway的一个特例,但这并不影响此文的贡献,能把一个很好的idea进行实现,取得不错的性能也是非常不易的。另外,此文在一定程度上给出了highway直观上的解释。
    3. 神经网络的研究,可以分为网络结构和训练机制两大部分,刘昕博士形象地将它们分别比喻为计算机的硬件和软件,现今的计算机软硬件之间的界限日益模糊,正如本文所提出的深度残差学习也是一样,从网络结构方面来理解相当于在传统的CNN之上加上了shortcut连接,从训练机制来理解,本文在训练的过程中加入了恒等映射这一先验信息,相当于提出了一种新的训练机制。
    4. 文中的Sec.4.2实验部分挑战了把极限,设计了一个超大规模(1202层)的网络,使用深度残差学习也可以使网络收敛,但性能不如110层的网络好,主要原因是数据量相对偏少,因此实际应用当中,我们需要在网络的规模与数据量之间综合考量。
    最后,感谢caffe社区给我们提供交流和学习的平台,使我们受益良多。
 
董震:北京理工大学在读博士生,研究兴趣为模式识别、机器学习和计算机视觉。

3 个评论

Residual Net惊艳到我的地方是对hyper parameter 比较鲁棒
顺便更新了一下前几天的做实验的代码https://github.com/shuokay/resnet,mxnet官方也提供了代码。我这个和官方的网络结构不一样,实验结果差不多,可以做一下visualization就看出区别了。小伙伴们可以玩玩看
你好,请问恒等映射是对什么的恒等映射呢?

要回复文章请先登录注册