文章在一开始就说明了resnet提出的原因:
-
梯度爆炸/消失问题(这篇博客讲的很好)
-
退化问题(随着网络深度增加,准确率达到饱和,然后迅速下降)
为了解决这些问题,作者考虑了vgg以及inception网络的优劣,进行了以下思考:
1、但是如果所增加的层都是一样的,都是浅层模型的复制,那么深度的模型不应该产生更高的训练误差,但是这样的方法很难实现。
2、deep residual learning net来解决退化问题。
于是得出结论:与其让一些层直接学习输入的特征,还不如学习残差映射。我们使得非线性层学习残差表示:f(x) = H(x) - x,我们希望这样更容易收敛。在非常极端的情况下,如果是恒等映射,那么非线性层的权重应该是0.
Residual Block
在实现网络时,作者使用了Residual Block来拟合h(x)=f(x)+x,整个网络由多个包含相同形式的Residual Blocks(每一层的第一个Block的第一个卷积层的stride可能和其他的不同)的layers堆叠形成,他的结构是这样的
图中的弧线被称为short connection,随着网络不断优化达到最优时,f(x)被push为0,只剩下short connection。图中可以看到,作者在每一个节点都加入了**函数Relu,所以short connection的连接点是卷积之后,**函数之前。作者还提出,应用在不同深度网络的残差块内的隐藏层也不一样,较浅的网络隐藏层的数量也较少。
这个时候,1* 1卷积核的优势又一次体现出来。和GoogLenet相似,上面这种优化结构可以有效地控制参数数量,减小过拟合的发生,同时控制维度相同。
Resnet
作者把resnet与VGG,同等深度的网络放在一起比较
结果:与plant net相比较,1、resnet更加容易收敛,但是plain net训练误差会随着网络的加深而增大。2、随着网络的加深,resnet通过增加深度,准确率获得提高。
最后得出结论
‘我们提出了一个广义残差架构(generalized residual architecture),通过对原始方案简单的修改便可以实现这个网络(ResNet Init)。将ResNet Init应用到原始的ResNet中,从而得到RiR架构,RiR架构取得了state of art的结果。未来可以做的工作包括:RiR架构及相关残差模型的进一步研究,去进一步探索这些模型能够带来性能提升的原因(the cause of their beneficial effects)’
参考博客:https://blog.csdn.net/qq_35031375/article/details/81586616