1. Introduction
由于更深的网络表达能力更强,并且梯度消失和爆炸的问题已经被normalization很大程度上解决。
因此,考虑使用更深的网络。
但是,问题来了:
通过实验表明,更深的网络比浅层网络拥有更高的training error。training accuracy饱和后会迅速下降。
为了解决这个性能下降问题,本文提出一个新的网络-残差网络。
我们不直接对期望底层映射(desired underlying mapping)进行拟合,而是拟合一个残差映射(residual mapping)。
我们用H(x)表示期望底层映射,残差映射为F(x),其中F(x)=H(x) - x.
所以原来的映射H(x) = F(x) + x
本文假设,优化F(x)比优化H(x)更容易。实验结果表明,确实极大改善。
2. Deep Residual Learning
2.1 Residual Learning
将H(x)定义为几个layers的output, 其中x是第一个layer的input
由于几个非线性层可以近似为一个复杂的函数,所以原先这个函数是H(x),现在我们让这个函数为一个残差函数F(x)。 所以原先的函数为F(x)+x.
也就是说,原先我们不断的迭代更新W,是为了正常输出H(x)。从而让整个网络(注意:不是这几层的output)的预测结果为我们期望的结果。
但是,由于学习残差映射更容易优化(能学到正确的参数),所以我们不断更新W,是为了输出一个合理的F(x),从而为最终整个网络的预测出期望的结果做贡献。
plain net(简单的堆叠layer)的缺点只是难优化(即得不到较好的参数)。
对于上图,F(x)与x的关系是:
sigma表示非线性函数,指ReLU。
令y为”+”号后的输出,则:
然后,将y进行ReLU操作。一切就和正常的网络操作一样了。
2.2 Network Architectures
网络结构由于太深,所以就不上图了。
放两个不同的block。
block与block之间如果channel不同,由上一个block得到的feature map需要增加channel。
两种方法:
(1) 直接补0,增加channel
(2)使用1x1的卷积,增加channel