第一次提出残差结构,主要解决两个问题
- 梯度消失
- 随着网络深度增加,性能没有提升反而有所下降
如下图,本来要学习H(x),现在转换为F(x)+x,二者效果相同,但是优化难度下降,并且因为多了一个x,使得求导时总有1,避免了梯度消失问题。
F(X)+X的公式可以通过在前馈网络中做一个“快捷连接”来实现(如图2) ,快捷连接跳过一个或多个层。在我们的用例中,快捷连接简单的执行自身映射,它们的输出被添加到叠加层的输出中。自身快捷连接既不会添加额外的参数也不会增加计算复杂度。整个网络依然可以用SGD+反向传播来做端到端的训练
如果添加的层可以以恒等的方式被构造为自身映射,一个加深的模型的训练误差一定会不大于较浅的对应模型。退化问题表明,求解过程中在使多个非线性层逼近自身映射时有困难。而用残差的方法重构它,如果自身映射达到最佳的,则求解可能仅仅是更新多个非线性层的权值向零去接近自身映射。
残差函数F的形式是灵活的,本文的实验包括了F为2层或3层的情况,虽然更多的层也是可以的,但如果只有一个层(公式1)会等价于一个线性层,y = W1x + x,这样一来就没有可见的优势了。