赞
踩
网络的深度在深度学习中非常重要,但是训练很深的网络是一件很难的事情。非常深的网络不是简单地堆叠更多的层,其中的梯度消失/梯度爆炸会使模型难以收敛。归一初始化和中间归一化在很大程度上解决了这一问题,使得数十层网络在反向传播的随机梯度下降上能够收敛。
但是深层网络收敛之后,出现了一个普遍的退化问题:精确度饱和之后就会快速退化。这并非由过拟合造成,但是实验表明在模型深度合理的情况下,更多的层却导致了更高的训练和测试误差。上图所示,56层的网络比20层网络往往会得出更大的训练误差和测试误差。
但是按理来说,一个更深模型的表现性能不应该比其更浅模型的性能差,但实际上目前的方法如SGD很难找到更深模型上的优化方法。
本文提出的方法核心:
使用了之前提出的shortcut,形成本文残差连接的identity mapping,这个identity mapping的输出和对叠层的输出相加。这种identity shortcut connection既不会给网络增加额外参数,也不会增加计算复杂度,整个模型还是可以使用SGD来反向传播,进行端到端的训练,也不用改动常用库就可以实现模型(当时常用caffe)。
作者实验:
在图像识别中,矢量计算中的残差矢量编码效率比原始矢量编码高。
在低层视觉和计算图形任务上,常用的多格方法(Multigrid method)将PDEs(Partial Differential Equations)问题归为多尺度问题中的子问题,每个子问题负责粗尺度和细尺度之间的残差解。
早期训练多层感知机(MLPs)的方法就是在网络的输入到输出中添加一个线性层。且有些中间层直接和辅助分类器相连来解决梯度消失和爆炸问题。“highway networks”中也有用过shortcut,不过是搭配门函数来实现,但其中的门是依赖数据并也含有参数的,但本文中的残差连接不含参数。且“highway networks”中的层为封闭的非残差层,但本文中的identity shortcut并非封闭,所有的信息可以直接传入,来学习额外的残差函数,且highway networks中并没有随着网络深度增加精确度增加的现象。
维度相同:
维度不同:
当输入和输出都是相同维度时,eqn1中的模块可以直接使用,如3.3. Network Architectures中图的实线shortcut。当维度增加时,如3.3. Network Architectures中图的虚线shortcut,残差连接处理这种输入和输出形状不同的情况时有两种解决方案可供选择:
对于以上两个方案,当shortcut要经过两个尺寸不同的特征图时,其stride都为2.
训练:
采用ImageNet 2012 的图像分类数据,含有1000个类别,128万训练集,5万验证集。在10万测试集上得到最终结果,测试了模型top-1和top-5的错误率。
评估了18-layer和34-layer的网络,table1为两个网络的结构细节。最后的FLOPs表示该网络需要计算的浮点次数。table1中的34-layer到50-layer的区别就是50-layer使用的是bottleneck设计,但是复杂度没有太大变化。
不同层网络主要是中间的卷积层结构不一样,其中
对应
其中包括两个3x3卷积,通道数为64
x3表示复制三次(复制次数为参数,可调),所以1+3x2+4x2+6x2+3x2+1=34 层
table2显示在深层的34-layer和浅层的18-layer网络中有无残差结构的top-1误差率。残差连接的性能提升效果显著。
Figure4可视化了残差连接的训练效果,有残差收敛会快很多。
表3对比了三个方案的结果:
A:填充0升维
B: 使用projection shortcuts升维,其他都是identity shortcuts
C:全部使用projection shortcuts
实验表明使用这三种方案的网络性能都比plain网络好,B稍微比A好,因为A的zero-padded维度不能残差学习;C稍微比B好,因为C用的全部都是projection shortcut,会比B额外引入更多的参数。但是ABC的细微差别也说明了projection shortcuts不是解决退化问题的关键,所以后文中并没有再使用C方案,以免提升了模型复杂性和规模大小。identity shortcuts对于不增加下面介绍的bottleneck架构的复杂性特别重要。
fig5中左边的Deeper non-bottleneck ResNets也能从增加的深度中提升精度,但是没有右边的bottleneck ResNets划得来(初始用256通道,再用1x1卷积将其通道数变为64,最后再用1x1卷积将通道数恢复为256)。
bottlenecks design:先把输入特征维度降一次维(1x1卷积降维),然后做空间特征提取(3x3卷积),再投影回去(1x1卷积升维)。
所以bottleneck的设计主要依据实际考量。但是使用bottleneck来设计plain网络还是会出现退化问题。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。