上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
2.1.7 preResNet
ResNet中的短路连接实际上并不是完全的短路,在两个分支相加合并之后,仍然会经过一个ReLU 激活函数,这会使得梯度反向传播时并不是真正无损地在短路分支传播。preResNet(pre-activation ResNet,预先激活的ResNet)(He et al.,2016b)是ResNet的改进,希望使得短路分支是完全短路。
如图2-11所示,preResNet 调整了ResNet 残差模块中各层的顺序。相比于图2-11(a)的经典残差模块(即 ResNet中使用的结构),图2-11(b)将 BN 共享会更加影响信息的短路传播,使网络更难训练,性能也更差;图2-11(c)直接将ReLU 移到BN 后会使残差分支的输出始终非负,使网络表示能力下降;图2-11(d)将ReLU 提前解决了图2-11(c)的非负问题,但 ReLU 无法享受 BN的效果;图2-11(e)将 ReLU和BN 都提前解决了图2-11(d)的问题,效果也优于图2-11(a)中的经典残差模块,基于图2-11(e)的网络结构称为preResNet。
图2-11 调整残差模块中 ReLU和BN层的不同位置
实验发现,如果直接训练 ResNet-1202(即 1202 层的ResNet),仍然会出现过拟合现象,ResNet-1202的错误率会高于ResNet-110。如果使用preResNet,preResNet 的短路连接能更加直接有效地传递信息,因此可以直接训练 1001 层的网络,preResNet-1001 的错误率会低于preResNet-164。