ResNet V1 vs V2详解

最近看李沐的gluon课程提到了conv、bn、relu等的顺序问题,现将resnet v1和v2总结如下。

首先给出resnet v2的paper里面kaiming大神给出的不同的结构对比:

图a为resnet v1的结构,图e为resnet v2的结构。(weight为conv层),左分支为identity分支,右分支为residual分支。

图的结构有两个特点:1、conv-bn-relu;2、最后的relu在addition后面,这么为什么这么做呢,下面我将一一讲解。

如果我们把relu作为residual分之的结尾,即图c所示,这样做会导致该分之经过relu后永远为非负值,这样在做forward的时候输入会单调递增,从而影响该层的表达能力,所以我们希望resdiual分支的结果应该为R。如果按照图c这样的做法,导致bn改变了分支的分布。

如果按照图b的做法,这里bn改变了identity的分支的分布,影响了信息的分布,在训练的时候会阻碍loss的下降,导致不能优化。

那么为什么identity分支的改变会影响其信息传递从而影响训练呢?下面的推导可以很好的解释这个问题。

根据上面的推导可以看出:如果identity改变,即导致h(x) != x,不管是左relu还是做线性映射变换(h(x)=ax),都会导致信息传递问题,详细的说明见上面的推导。

总结:图b(bn after addition):效果差,因为bn在addition后会改变分布,影响传递,会出现的现象就是训练初期误差下降缓慢。

图c(relu bafore addition):这样做或导致residual分支的分布为非负,会影响模型的表达能力。

图d和图e有两个特点:1、f为恒等变换,整个网络更易于优化;2、使用bn作为预激活函数可以加强对模型的正则化。

猜你喜欢

转载自blog.csdn.net/gbyy42299/article/details/81505083