ResNet (Residual Neural Network)由微软研究院的何情明等4名华人提出,它的深度达到了惊人的 152 层,而且以 top-5 错误率3.57%的好成绩在ILSVRC 2015比赛中获得了冠军。尽管ResNet的深度远远高于VGGNet,但是参数量却比VGGNet 低,效果相较之下更为突出。ResNet中最具创新的一点就是残差学习单元(ResidualUnit)的引入,而 Residual Unit 的设计则参考了瑞士教授 Schmidhuber在其 2015 年发表的论文《Training VeryDeep Networks》中提出的 Highway Network。在介绍 Residual Unit 前,我们先来看一下所谓的 Highway Network。在介绍 Residual Unit 前,我们先来看一下上述所说的 Highway Network。我们通常认为增加网络的深度可以在一定程度上提高网络的性能,但是这同时也会增加网络的训练难度。Highway Network 的出现就是为了解决较深的神经网络难以训练的问题。假设某一层的网络输出 y 与输入 x 的关系可以用 y=H(x,WH)来表示,这是经过了非线性变换之后得到的结果。Highway NetWork 在此基础上允许保留一定比例的原始输入 x ,即
上式中, T 被称为变换系数, C则是保留系数,论文中的取值是 C = l- T 。这样操作的结果是:有一定比例的前一层的信息没有经过矩阵乘法和非线性变换而是直接传输到下一层。得益于门控制单元的限制,增加Highway Network 的深度至上百层甚至上千层也能直接使用梯度下降算法进行训练。Highway Network 的这一做法启发了后来的 ResNet 残差学习单元。ResNet 可以被设计为上百层深,对于一个卷积神经网络来说,上百层的深度可以带来更好的性能,直接体现出来就是错误率的下降。
ResNet模型结构
如果只是简单地将层叠加在一起,增加网络深度,并不会起到什么作用。在增加网络深度的同时,我们还要考虑到梯度消失的问题。具体来讲,因为梯度反向传播到前层,重复乘法可能使梯度无穷小,梯度消失问题也就因此而出现。梯度消失造成的结果就是,随着网络层的加深,其性能(或者说准确率〉趋于饱和,更严重的就是准确率发生退化(准确率不升反降)。为了解决梯度消失的问题, ResNet 引入了所谓“身份近路连接(IdentityShortcut Connection)”的核心思想。其灵感来源:对于一个达到了饱和准确率的比较浅的网络,当在后面加上几个全等映射层(即 y = x)时,误差不会因此而增加。也就是说,更深的网络不应该带来训练集上误差上升。接下来我们看一下 ResNet. 中的残差学习单元。残差学习单元就是ResNet 中允许原始输入信息直接传输到后层的执行机构。左侧是 2 层的残差学习单元,右侧是 3 层的残差学习单元。2 层的残差学习单元中包含两个输出通道数一致(因为残差还要计算期望输出减去输入,这就要求输入、输出维度需保持一致)的3x3卷积;而 3 层的残差学习单元则先使用了 1x1的卷积,中间是 3×3的卷积,最后也是 l x l的卷积。如下图所示。
残差学习单元的引入相当于改变了ResNet 的学习目标,如果将卷积操作的结果作为没有加入残差前网络的期望输出 H(x),那么残差学习单元学习的将不再是 H(x),而是输出和输入的差别 H(x)-x ,这就是“残差”的含义。如下图。
总结
这一节我们讲述了又一个经典卷积神经网络——ResNet和它里面的“残差”原理,以及它模型结构,下一节我们将讲述如何使用TensorFlow实现ResNet卷积神经网络。