通过分析很多网络结构,作者发现网络深度是一个影响网络性能的因素,因此提出:是否网络越深,神经网络的学习效果越好?
解决这个问题之前,一个有关深度神经网络的明显问题就是梯度消失。我们知道,在深层神经网络当中,经常会遇到梯度消失的问题,这可以通过标准初始化和中间层初始化来解决,这使得数十层的网络在通过SGD训练即可达到收敛。
在解决了梯度消失问题之后,网络越深,是否性能就越好呢?作者通过实验发现,情况并不是这样,网络越深反而会出现退化问题:模型收敛后,随着模型深度增加,准确率先达到饱和,然后下降。退化问题不是由过拟合引起的,因为如果过拟合的话,网络在训练集上的准确率不应该会减低。退化问题说明了深度网络不能简单地被很好的优化。
我们先做这样的一个假设:假设有一个比较浅的网络(Shallow Net)已经达到了饱和的准确率,这时在它的后面再加上几个恒等映射层(Identity mapping),这样就增加了网络的深度,并且起码误差不会增加,也即更深的网络不会带来训练集上误差的上升。这里的使用恒等映射将前一层的输出直接传到后面的思想,便是残差网络Resnet的灵感来源。
假定神经网络的输入是 x x x,输出是 H ( x ) H(x) H(x),如果直接学习这样的期望映射,训练难度会比较大。如果已经学习到较饱和的准确率,那么接下来的目标就是恒等映射的学习。下图中直接将 x x x传到输出做为初始结果,输出结果为 H ( x ) = F ( x ) + x H(x)=F(x)+x H(x)=F(x)+x,当 F ( x ) = 0 F(x)=0 F(x)=0时, H ( x ) = x H(x)=x H(x)=x,即为恒等映射,于是Resnet相当于将学习目标改变了,不再是学习一个完整的输出,而是目标值 H ( x ) H(x) H(x)和 x x x的差值,即残差: F ( x ) = H ( x ) − x F(x)=H(x)-x F(x)=H(x)−x,因此,后面的训练目标就是将残差结果逼近于0。
这种残差跳跃式的结构,打破了传统的神经网络n-1层的输出只能给n层作为输入的惯例,使某一层的输出可以直接跨过几层作为后面某一层的输入,其意义在于为叠加多层网络而使得整个学习模型的错误率不降反升的难题提供了新的方向。
在上图所示的结构中, F ( x ) + x F(x)+x F(x)+x可由带有“快捷连接”的前向神经网络来实现,快捷连接是那些跳过一层或更多层的连接。文中快捷连接简单地执行恒等映射,并将其输出添加到堆叠层的输出。这种恒等快捷连接既不增加额外的参数,也不增加计算的复杂度。整个网络仍可以由带有反向传播的SGD进行端到端的训练。
残差块的结构如上图所示,我们可以将这种构建块定义为: y = F ( x , W i ) + x y=F(x,W_i)+x y=F(x,Wi)+x。“short connection”操作没有引入多余的参数和计算复杂度,这里 x x x的维度必须要和 F F F的维度一样,如果不一样,我们可以通过执行线性投影Ws来进行快捷连接的维度匹配: y = F ( x , y=F(x, y=F(x,{Wi} ) + W s x )+W_sx )+Wsx。残差函数 F F F的形式比较灵活,文章中的实验涉及的函数 F F F是两层或者三层的,作者说,更多层也是可以的。但是如果 F F F只有一层,上述等式就类似与一个线性函数,这样是对网络没有贡献的。
实验所用的基本模型是VGG19,在此基础之上进行了34层简单网络和34层残差网络的实验,网络结构如下图所示:
卷积层主要是3×3的滤波器,并遵循两个原则:
(1)对相同的输出特征图尺寸,这些层有相同数量的滤波器。
(2)如果特征图尺寸减小一半,则滤波器数量翻倍,以保持每层的时间复杂度。
上图右侧为残差网络结构图,图中有的恒等映射连接线为实线,有的连接线为虚线,这是因为他们的维度不一样。实线的连接维度相同,虚线的连接维度不同。对于不同的连接维度,可以采用下面两种方式使得维度相同:
(1)通过zero padding增加维度:将剩余部分全部补0。
(2)乘以w矩阵投影到新空间,这个步骤由1×1卷积实现,直接改变1×1卷积过滤器的数目。这种方式会增加参数量。
如上图所述:将两层结构变为三层,用1×1,3×3,1×1的卷积结构来替换3×3,3×3的结构,他们所实现的功能完全一样,但是优点是减少了参数量。其中第一个1×1的作用是降维,让3×3的操作有更低的输入/输出维度,第二个1×1的作用是将维度恢复到初始维度。初始残差块的参数量是3×3×256×256×2=1179648,而使用瓶颈结构的模块参数量是1×1×256×64+3×3×64×64+1×1×64×256=69632,由此可见参数量减少了16.94倍。所以,在常规的Resnet或者较浅的网络结构中,可以使用左图的残差块,但是在更深的网络中(Resnet-101),使用右图的瓶颈结构可以降低网络参数。(实用目的)
经过检验,深度残差网路解决了退化问题,如下图所示,左图是初始网络,网络越深,误差率越高;右图是残差网络Resnet,网络层次越深,误差率越低。
(1)相比传统的VGG网络,复杂度降低,所需的参数量下降。
(2)网络深度更深,不会出现梯度消失现象。
(3)由于使用更深的网络,分类准确度加深。
(4)解决了深层次的网络退化问题。
在ResNet的作者的第二篇相关论文《Identity Mappings in Deep Residual Networks》中,提出了ResNet V2。ResNet V2 和 ResNet V1 的主要区别在于,作者通过研究 ResNet 残差学习单元的传播公式,发现前馈和反馈信号可以直接传输,因此“shortcut connection”(捷径连接)的非线性激活函数(如ReLU)替换为 Identity Mappings。同时,ResNet V2 在每一层中都使用了 Batch Normalization。这样处理后,新的残差学习单元比以前更容易训练且泛化性更强。