- 相比resnet v1,主要修改了bn层与relu层的顺序
残差块公式
y l = h ( x l ) + F ( x l , w l ) x l + 1 = f ( y l ) y_l = h(x_l) + F(x_l, w_l) \\ x_{l+1} = f(y_l) yl=h(xl)+F(xl,wl)xl+1=f(yl)
分析
- 其中图(1)为Resnet v1的残差块图,图(5)为ResNet v2的残差块
- 在ResNet v1中, h ( . ) h(.) h(.)为恒等变化, f ( . ) f(.) f(.)是Relu不是恒等变化。
- 首先分析图(2),图(2)将BN放在了
f
(
.
)
f(.)
f(.),BN需要统计整个batch,阻碍了identity通路的传播,对于梯度的传播增加了阻碍,会使收敛速度变慢。
- 图(3)将Relu放在了residual通路上,使得residual的输出必须非负,而不是addition以后才非负,使得模型表达能力下降
可以看到图(3)是这五个结构中次差的,最差的是图(2)。因此可以看出,resnet的一个重要作用是给梯度反向传播一条捷径,而BN放在identity通路上使得优化更加困难,图(2)效果最差。 - 图(4)结构差不多,效果也跟图(1)差不多,略差
- 图(5)将BN和Relu都放在了residual通路的一开始。这样 h ( . ) h(.) h(.)和 f ( . ) f(.) f(.)都是恒等变换,使得identity通路更加简单,相当于直连通路,梯度更好地反向传播,易于优化。同时addition之后进行了BN,可以起到一定正则化的作用,v1只是对residual进行了BN。