MSRA 152层网络 深度残差网络解读

首先感谢 @辛淼 博士的邀请,末学在这里把阅读《Deep》一文的心得和大家分享一下,做抛砖引玉之用,希望得到大家的广泛讨论 。
在具体介绍文章思想以前,先来看一下“深度残差学习”(Deep)的赫赫战功:MSRA凭借着这一利器在比赛的识别、检测和定位三个任务、以及COCO比赛的检测和分割任务上都获得了第一名,这主要归功于残差学习的这一思想使得学习更深的网络成为可能,从而学习到更好的表达 。
那么什么是深度残差学习呢?
【MSRA 152层网络深度残差网络解读】很久以前人们就已经认识到更深的网络能够产生更好的数据表达,但是如何训练一个很深的网络却一直是一个困扰人们的问题,这主要是由于梯度消失或爆炸以及尺度不均匀的初始化造成的 。围绕这一问题,人们提出了ReLU、、pReLU、batch 和path-SGD等一系列方法(详细内容参见社区第二次线下活动刘昕博士讲稿),但是本文作者何恺明等人却发现即使有这些方法,神经网络的训练仍然呈现了的现象 。所谓现象,就是随着网络深度的增加,网络的性能反而下降,而且这种性能的下降并不是由前面所说的问题造成的 。见图1,56层网络在训练误差和测试误差上都要比20层的网络大 。
图1 [图片选自原论文,版权归原作者所有]
这种现象是不合理的 。假如目前有一个可以工作的很好的网络A,这时来了一个比它更深的网络B,只需要让B的前一部分与A完全相同,后一部分只实现一个恒等映射,这样B最起码能获得与A相同的性能,而不至于更差 。深度残差学习的思想也由此而产生,既然B后面的部分完成的是恒等映射,何不在训练网络的时候加上这一先验,于是构造网络的时候加入了连接,即每层的输出不是传统神经网络当中输入的映射,而是映射和输入的叠加,如图2所示 。
图2 [图片选自原论文,版权归原作者所有]
这就是深度残差学习的思想,当然在具体实现上还有一些细节,比如输入和输出的维度不同是如何处理的、文中所实现网络何以更深但参数却比VGG要少、网络的设计原则是什么,这些细节请大家阅读论文Sec.3.3,也欢迎大家进行讨论 。
最后谈一点自己关于这篇文章的体会:
1. 在网络训练过程中,加入先验信息指导非常重要,合理的先验往往会取得非常好的效果 。本文中的恒等映射便是一例,这里再举一个例子,Meina Kan老师等人的的Auto- (SPAE) for Face 一文中在用深度神经网络做跨姿态的人脸识别问题时,加入了人脸姿态是渐变的过程这一先验信息,使得网络性能显著提升 。
2. 如果读过《 》一文,会发现深度残差学习是的一个特例,但这并不影响此文的贡献,能把一个很好的idea进行实现,取得不错的性能也是非常不易的 。另外,此文在一定程度上给出了直观上的解释 。
3. 神经网络的研究,可以分为网络结构和训练机制两大部分,刘昕博士形象地将它们分别比喻为计算机的硬件和软件,现今的计算机软硬件之间的界限日益模糊,正如本文所提出的深度残差学习也是一样,从网络结构方面来理解相当于在传统的CNN之上加上了连接,从训练机制来理解,本文在训练的过程中加入了恒等映射这一先验信息,相当于提出了一种新的训练机制 。
4. 文中的Sec.4.2实验部分挑战了把极限,设计了一个超大规模(1202层)的网络,使用深度残差学习也可以使网络收敛,但性能不如110层的网络好,主要原因是数据量相对偏少,因此实际应用当中,我们需要在网络的规模与数据量之间综合考量 。
最后,感谢caffe社区给我们提供交流和学习的平台,使我们受益良多 。