Abstract
作者对resnet中三个主要的部分做了改进(不需要增加模型的复杂度,就可以训练比resnet更深的网络):
- 通过网络层的信息流残差块
- 残差块
- projection shortcut
Introduction
原始的resnet中的identity mapping 当层数加深(152 -> 200)的时候,会变得很难优化,从而导致训练错误。我们将网络分为多个阶段(start、middle和 end阶段),并在每个阶段的不同位置使用不同的模块,从而使得改进的resnet能够学习极深的网络,随着深度的增加,没有优化的困难。
在resnet中,当building block的尺寸与下一个building block的尺寸不匹配时,就必须使用projection shortcut。resnet的原始论文指出,projection shortcut并不是必须的,但是,由于它在主传播路径(main infomation propagation)上面,所以很容易干扰信号或者导致信息的丢失。针对这个问题,作者引入了一种改进的projection shortcut(不引入额外的参数,而且性能上也有提升)。
作者的贡献(下面的改进不会增加模型的复杂度):
- 提出了一个基于阶段的残差网络,通过 为信息在网络层传播提供更好路径 来促进网络学习过程(3.1)
- 提出了一种改进的projection shortcut,可以减少信息的丢失并产生比较好的效果(3.2)
- 提出了一个新的building block(3.3)
3.Improved residual networks
3.1 Improved information flow through the network
residual block的公式定义:
x[l] 与 x[l+1] 是第l个ResBlock的输入输出向量
:可学习的残差映射函数,例如:
W是一个可学习的线性投影矩阵,将x[l]的大小映射到F的输出大小,只有当执行F与x[l]的元素加法的维度不对应的情况下才存在
(a)原始的ResBlock,3个Conv,3个BN,3个ReLU。通过观察可以发现,在主传播路径上有一个ReLU激活函数,ReLU将负信号变为0会对信息的传播产生负面影响,在训练刚开始的时候,网络会调整权重产生了不受ReLU影响的正信号。(b)对这种情况进行了研究并且重新设计了ResBlock,成为pre-activation,主要的方法是将最后一个BN和ReLU移到了最开始的地方。
原始的resnet在主路径上有太多门阻碍信号的传播(比如 ReLU),然后pre-activaion的resnet 允许信号以不受控制的方式通过网络。这两种方法都不是最最优的。
使主路径完全自由(pre-act)所引起的问题:
(1)没有完整信号的归一化(BN),也就是说所有BN独立地施加在分支上,而没有加在完整的信号上面。将这样的block堆叠在一起时,会让信号变得更加unnormalized,这给学习带来了困难,原始的resnet和pre-act resnet都存在这样的问题。
(2)所有四个主要阶段的ResNet最终只有四个连续的1x1转换(来自主路径中的投影快捷方式),但是在两者之间没有任何非线性,从而限制了学习能力。
我们的方法解决了这两个问题,因为它稳定了每个,main stage之前的信号(我们在每个main stage之后的整个信号上使用BN),并确保在每个stage的结束至少存在一个非线性(应用于整个信号) 。
我们提出的ResBlock如图(c). 对于ResNet-50,我们获得了四个主要阶段(其中包含ResBlock)以及一个开始阶段和结束阶段。 四个主要阶段的每个阶段都可以包含许多ResBlock。 对于ResNet-50,第1阶段有3个ResBlock,第2阶段有4个,第3阶段有6个,第4阶段有3个。每个主要阶段分为三个部分:一个是Start ResBlock,一个是Middle ResBlock( 可以是任意数量;对于ResNet-50,对于相应的阶段,有[1、2、4、1]个Middle ResBlock)和一个End ResBlock。
我们称ResStage网络为将ResNet拆分为所提出的阶段架构的结果。
所提出的ResStage不会增加模型的复杂度。在每个主要阶段,我们都消除了第一个Middle ResBlock 中的第一个BN,因为信号已经被我们的Start ResStage进行标准化。
与原始的resnet相比,ResStage在main path上包含固定数量的ReLU,而在原始的resnet中,在主传播路径上的ReLU数量与网络深度成正比。在ResStage中,对于主要阶段,主信息传播路径上只有四个ReLU,不受深度的影响。 这使网络能够避免在信息经过许多层时妨碍信号。
与pre-activation resnet不同,我们专门将网络分为几个阶段,每个阶段包含三个部分。 每个阶段的End Resblock都由BN和ReLU完成,可以看作是下一阶段的准备工作,可以稳定并准备进入新阶段的信号。 在Start ResBlock中,最后一次转换之后有一个BN层,用于标准化信号,并准备使用投影快捷方式(也提供标准化信号)进行逐元素加法。 我们提出的方法通过提供更好的信息通过网络传播的路径来促进学习。 ResStage简化了优化过程,可以轻松地训练非常深的网络。 网络可以在学习过程中轻松动态地选择要使用的ResBlock和要丢弃的ResBlock(通过将权重轻松设置为0)。
分阶段的学习,可以有效传递信息,同时使信号处于被控制状态,并且在没有增加模型的复杂度的情况下提高了性能。
3.2 Improved projection shortcut
在原始的ResNet]中,当x的尺寸与F的输出尺寸不匹配时,则将projection shortcut应用于x以实现按元素加的操作 。
如图2(a)是原始的projection shortcut(使用1x1的conv 将x的通道映射到F的通道)
注意,1×1 conv的步幅为2,在将x与F的输出进行元素加法之前应用BN。 使用 stride=2的1×1卷积,当空间缩小2倍时,因为1×1卷积(步幅为2)跳过75%的特征图激活,这会导致信息大量丢失。
我们提出的projection shortcut如图2(b)。作者从通道投影中解开(disentangle)空间投影。 对于空间投影,我们使用步幅2执行3×3的max pooling。对通道投影应用步幅为1的1×1Conv。 作者提出的投影捷径可以减少信息损失,在实验部分,我们展示了性能上的好处
3.3 Grouped building block
提出新的构建块ResGroup,使用了分组卷积。
标准的卷积是每个输出通道都连接到输入通道,分组卷积是将输入通道分为几组,为每个组独立执行卷积操作。
其中,参数的数量和FLOP(在图像数据上)的数量可以计算为:
chin : 输入通道数
chout : 输出通道数
k1、k2:表示conv大小
w、h :通道的宽度和高度
G:通道划分的组数(G=1 则是标准卷积、G=通道数 表示深度卷积)
上图为提出的网络结构,所提出网络有两种ResGroupFix-50 和 ResGroup-50。ResGroupFix-50表示每个阶段的组数固定的情况(本例中为64), 对于50层,此选项生成的FLOP数量与基线。ResGroup-50表示我们将组的数量调整为通道的情况,以使每个阶段每个组具有相同数量的通道(在本例中为32)。 ResGroup-50具有与原始ResNet-50相似的参数数量以及更多的FLOP。
4.Experiments
top-1 和 top-5 是错误率