解决了随着网络层数增加而带来的梯度消失/爆炸问题。ResNet于2015年由Microsoft Research提出,引入了Residual Network的网络结构
Residual Network
假如有一个浅层网络,你想通过向上堆积新层来建立深层网络,一个极端情况是这些增加的层什么也不学习,仅仅复制浅层网络的特征,即这样新层是恒等映射(Identity mapping)。在这种情况下,深层网络应该至少和浅层网络性能一样,不会出现退化现象。
对于一个堆积层结构(几层堆积而成)当输入为 x 时其学习到的特征记为 H(x) ,现在我们希望其可以学习到残差F(x)=H(x)-x,这样其实原始的学习特征是F(x)+x 。当残差为0时,此时堆积层仅仅做了恒等映射,至少网络性能不会下降。实际上残差不会为0,这也会使得堆积层在输入特征基础上学习到新的特征,从而拥有更好的性能。
残差学习的结构如图所示,类似于电路中的“短路”,是一种短路连接(shortcut connection)
这就是Residual Blocks,使用skip connections,将一层网络的激活层与跳过若干层网络后的另一层相连,这就形成了一个residual block,ResNet就由Residual Blocks构成。这样的好处是,如果有某一层网络影响到了整体表现,它将会被跳过。
网络结构
ResNet网络是参考了VGG19网络,在其基础上进行了修改,并通过短路机制加入了残差单元,如下图所示。变化主要体现在ResNet直接使用stride=2的卷积做下采样,并且用global average pool层替换了全连接层。ResNet的一个重要设计原则是:当feature map大小降低一半时,feature map的数量增加一倍,从而保持网络层的复杂度。
效果
与其他网络在ImageNet上的对比效果: