论文名称《Identity Mappings in Deep Residual Networks》
代码:https://github.com/KaimingHe/resnet-1k-layers
摘要
深度残差神经网络表现出了很好的分类准确率和很好的收敛特性。本文是残差网络的作者在原始resnet的基础上分析了残差块背后的数学原理,表明了无论在前向还是反向过程中,信号可以在任意一对残差块之间进行传递。同时作者设计了新的残差结构,使得网络更加易于训练和改善了网络的泛化性能。最终作者验证了使用新的1001层的resnet网络在cifar-10和cifar-100上的分类准确率;使用新的200层的resnet网络验证了在ImageNet数据集上的分类准确率。
简介
深度残差网络有多个堆积的残差单元组成,原始的残差块结构如下图所示:
可以用下式进行表示:
其中,
xl
和
xl+1
是第
l
个残差单元的输入和输出;
本文中,作者目的是在网络中而不是一个残差块内为信息传递过程设置一个直接的通路。下面的推导显示 如果
h(xl)
和
f(yl)
都是恒等映射,信号可以在网络中从一个单元直接传输到其他任意的单元。实验结果也表明,如果上述两个恒等映射的条件能够得到满足,那么网络的训练过程会变得更加的简单。
作者在后续的论文中做了两组实验以证明两个恒等条件的优越性。首先实验证明了
h(xl)=xl
使得网络结构易于最优化;其次,作者将ReLU和BN看做是权重层的”pre-activation”,基于这个观点,作者设计了如下图所示的新的残差块结构,相比原始的残差块结构,新结构更加易于训练且取得了更好的训练结果。
深度残差网络的数学分析
残差块可以表示为:
其中,
xl
和
xl+1
是第
l
个残差单元的输入和输出;
如果
xl+1=yl
,那么有
公式4有两个比较好的特性,首先,深层L的特征
xL
可以表示成任意浅层
l
的特征
对于任意一个L层的深度网络,最后一层的输入特征
xL
是
x0
加上中间层残差函数的结果。但是原来的非残差形式的”plain”网络却是矩阵连乘的形式,即
xL=∏L−1i=0Wix0
。
公式4同样具有很好的反向传播的特性,将网络的损失函数表示为
ε
,根据链式法则有
上式表明,损失函数对输入的梯度可以分解为两项相加的结果,第一项损失函数对
xL
的偏导数无关任何权重层,第二项却和权重层有关。
∂ε∂xL
表明了信息可以直接回传到网络的任意浅层
l
。上式同样说明对于一个mini-batch的训练数据而言,由于不大可能mini-batch中的每一个训练样本的括号中的第二项都为-1,那么整个的梯度值不大可能为0,这就实现了即便权重值很小的时候也不大可能发生梯度弥散的问题。
恒等的skip connection的作用
最理想的
下面对比几种不同的
h(xl)
对网络的影响。假设
h(xl)=λlxl
,那么就有
xl+1=λlxl+F(xl,Wl)
,那么有
xl+2=λl+1xl+1+F(xl+1,Wl+1)=λl+1(λlxl+F(xl,Wl))+F(xl+1,Wl+1)
,因此有
F^
为原始残差函数
F
和标量系数相乘之后的结果。依然假设损失函数为
相比较对
h(xl)
添加标量系数前后的结果,添加标量系数之后的偏导数的第一项包含了一个系数
∏L−1i=lλi
,对于一个特别深的网络,L很大,如果对于所有的i,
λi>1
,这个系数会非常大,造成了梯度爆炸;如果对于所有的i,
λi<1
,这个系数就会变得特别小,造成梯度弥散,阻碍了信号从shortcut连接直接反馈,逼迫信号必须通过权重层进行反馈。如下面实验所示这样会造成最优化的困难。
下面的实验就是为了验证各种
h(xl)
对分类结果的影响。网络中
f
函数为ReLU,原始的使用
常数缩放:如figure2(b)所示,设置
λ=0.5
,即
h(xl)=0.5xl
,对于残差函数有两种处理方式,一种是不加缩放系数,另一种是残差函数F以
1−λ
为系数进行缩放。实验结果表明,第一种方式的模型无法良好的收敛;第二种方式的模型能够收敛,但是最终的测试集上的分类错误率大于原始的模型。这组实验表明了对shortcut信号进行常数缩放之后会造成最优化的困难。
exclusive gating:如figure2(c)所示,考虑一个gating函数
g(x)=σ(Wgx+bg)
,g(x)通过1*1的卷积进行实现。对于残差部分F乘以系数
g(x)
,shortcut部分使用系数
1−g(x)
,实验结果表明
bg
的选择至关重要,最好的
bg=−6
在测试集上得到了8.70%的测试误差,效果依然远不如基准网络。
exclusive gating具有两方面的作用,当
1−g(x)
接近于1时,
g(x)
约等于0,这种情况下shortcut约等于恒等映射,有助于信号的传递过程;但是此时
g(x)
接近于0抑制了残差函数的作用。为了分析shortcut部分gating函数的作用,作者试验了shortcut-only gating的方式。
Shortcut-only gating:如figure2(d)所示,这种方式不再对残差部分进行缩放处理,只是对shortcut部分乘以
1−g(x)
,
bg
的取值依然很关键,如果设置
bg
为0,那么
1−g(x)
的期望为0.5,最终网络收敛到了12.86%的测试误差,主要是由于网络的训练误差很大;如果设置
bg
为-6,那么1-g(x)就很接近于1,那么网络块就接近于恒等映射,所以取得的6.91%的测试误差很接近于基准网络。
1*1卷积shortcut:在深层的101层残差网络中使用1*1卷积的测试误差为12.22%,取得的效果依然远不如基准网络,证明了1*1卷积依然阻碍了信号的传递过程。
dropout shortcut:以0.5的概率进行dropout,最终的结果远差于基准网络。因为这种情况相当于对shortcut乘了系数0.5,依然是阻碍了信号的传递过程。
总结:根据上面的实验结果,shortcut方式是最直接的信号传递方式,其他队shortcut的变种都阻碍了信号的传递过程,造成了最优化问题。
激活函数的使用
下面部分的实验是用来论证激活函数f该如何进行选择。
基准网络使用164层的ResNet网络,Fig. 4(a)的结构,在CIFAR-10数据集上取得了5.93%的测试误差。
BN after addition:如Fig.4(b)所示,效果不如基准网络。因为BN层阻碍了信号的传输过程。
ReLU before addition:如Fig.4(c)所示,将ReLU放到逐元素相加之前,但是这样做使得得到的残差值为非负值,这样会影响模型的表示能力,最终的测试误差也是不如基准网络。还是需要残差值分布于负无穷到正无穷之间。
Post-activation or pre-activation?原始的残差块处理方式中,
h(xl)=xl
,
yl+1=h(xl+1)+F(xl+1,Wl+1)=f(yl)+F(f(yl),Wl+1)
,可见激活函数既影响了shortcut部分,又影响了残差函数。现在作者设计了新的网络块结构,使得激活函数
f^
只影响残差部分,即
xl+1=xl+F(f^(xl),Wl)
。使用这种新的形式,元素相加之后的激活函数变成了恒等映射,这样设计也等价于对下一个残差块进行了预激活的操作。如下图所示:
作者试验了两种方式,如Fig. 4(d)所示和Fig. 4(e)所示,表2的结果表明了使用4(d)的结果很接近基准网络。但是使用4(e)的结果如表2和表3所示,全面超越了基准网络一个大的margin。
分析为什么pre-activation效果如此的好:一是最优化工作更加容易了,主要是因为f是一个恒等映射函数;第二,将BN用在pre-activation中也增强了模型的正则化能力。
易于最优化:
如上图所示,原始设计的网络的训练误差在训练初始阶段减小的较慢,这是因为f=ReLU时,如果信号为负则会收到ReLU函数的影响,当残差单元很多时,这个影响还会比较大。但是如果f是恒等映射时,就不会存在这个问题。
另外,如上图右侧fig所示,作者发现使用164层的网络时,这种影响会弱一点。
减小过拟合:如Fig.6右侧图所示,预激活方式训练误差略大,但是测试误差要小很多。这是因为BN层使用带来的正则化效应。作者认为在Fig. 4(a)所示的结构中,虽然BN层归一化了信号,但是加上shortcut之后的信号在输入到下一层之前并没有进行归一化操作。但是在提出的Fig. 4(e)结构中,所有输入到权重层的信号都被归一化处理了。
实验结果对比
cifar-10 & cifar-100
imagenet:
总结
论文通过理论和实验结果论证了为了使得信息顺利传输,恒等的shortcut连接和在逐元素相加之后的恒等激活函数都是必须的。作者的实验也证明了1000层的深度网络可以易于训练且取得良好的分类准确率。