人们发现当深网深到一定程度时,模型的性能逐渐上升至饱和,然后下降,这被称为网络退化问题。
网络退化的原因是非线性激活函数造成的不可逆信息损失[52],因此深层网络比浅层网络错误率更高,更难以被优化。
为了解决这样的问题,需要提出一个能解决“恒等映射”的想法——哪怕更深的层什么都不做,也比变差更好(保留深层提取语义信息的能力和至少不网络退化)。
有了需求,一个满足需求的更大突破到来了。2015年ILSVRC竞赛冠军Resnet的成绩为3.57%(2014年冠军成绩为6.7%),模型深度达到了恐怖的152层[53]。如此深网而不造成网络退化的秘诀在于它的数学模型——残差级联,如图7。
如我们所知,“恒等映射”既然需要什么都不做,那不如直接把网络的浅层跳跃连接到深层。跳跃连接带着浅层的输出与被跳过的层的输出的加和作为深层的输入。
在这种短路结构中,需要优化的函数从H(x)变成了F(x)=H(x)-x,也就是所谓残差,残差F(x)比输出函数H(x)更易优化。
如图7中的两层残差结构,其数学表达式为式8。残差结构使用身份映射使跨层连接的维度一致,这在多层剩余函数连接时对网络退化有优势。
同时,反向传播时,残差结构对梯度消失问题也有缓解作用,如式9。残差结构解决了深网的网络退化问题,保证了网络深度带来的抽象理解能力。
Resnet的劣势也显而易见,如果说走跳跃连接shortcut更易收敛的话,非shortcut之路不传递梯度也是可以的,也就是说,有一些block块可能会直接废掉,这一点亟待解决。
图7 残差学习单元
式7 BN层的正向传播
式8 残差块数学原理
式9 残差结构缓解梯度弥散