这样的一个好处可能是当需要这个F(x)时,网络就会把他正常优化,当不需要这几层时,网络就会自动把它训练的趋近于0(相比于把他由非线性层拟合成恒等映射,变成0而另外直接添加一个恒等映射x会更容易),这样让网络来整体的自动选择一个最佳的网络的层数。
那么实际的映射关系即可表示为F(x)+x。我们认为对残差映射寻优可能会比直接对原始的参考映射寻优更为方便。更进一步的,如果一个识别映射是被优化了的,相比于利用一个堆叠的非线性组合拟合一个恒等映射,则使得其残差值趋于0值会更加容易一些
让我们考虑H(x)是一个将通过若干堆叠的网络层(不需要一定是整个网络)进行映射关系的拟合,这里用x表示对这些层中第一层的输入。多层非线性层次可以逐渐逼近某个复杂函数的假设等价于它可以渐进的逼近残差函数,即H(x)-x(这里假设输入和输出是相同维度的)。也就是说,与其指望这些堆叠的层能够逼近H(x),我们也可以显式的用它们来逼近残差函数F(x) := H(x)-x。如此,对应的原函数即为F(x)+x。尽管采用这两种形式都有可能渐进的逼近到目标函数(根据上述假设),然而学习的难度可能会存在差异。
此番重构的动因是由于退化问题中所表现出的反直觉的现象(图1(左图))。正如我们在引言里对这个问题所作出的说明那样,如果能够以恒等映射的方式来构建所增加的层,一个加深模型的训练误差就不会大于它所基于的较浅模型。
退化问题表明利用多个非线性网络层对于恒等映射作逼近可能会存在求解上的困难
。通过残差学习的办法重构这个方法,当恒等映射达到最优,则求解可能就仅仅是简单的更新多个非线性网络层中的权重来求解恒等映射关系。
在实际案例中,恒等映射不大可能一开始就已经达到最优,
然而我们重新构造的模型可能有助于问题求解的预处理环节。若最优函数接近于一个恒等映射(x)而不是一个零值映射,求解时可能更容易通过参考一个恒等映射的办法确定扰动,而不是将其作为全新的函数来学习
。我们通过实验(图7)展示了完成了学习的残差网络一般响应较小,这表明恒等映射是一种合理的预处理手段。
深度残差网络。如果深层网络的后面那些层是恒等映射,那么模型就退化为一个浅层网络。那现在要解决的就是学习恒等映射函数了。 但是直接让一些层去拟合一个潜在的恒等映射函数H(x) = x,比较困难,这可能就是深层网络难以训练的原因。但是,如果把网络设计为H(x) = F(x) + x,如下图。我们可以转换为学习一个残差函数F(x) = H(x) - x. 只要F(x)=0,就构成了一个恒等映射H(x) = x. 而且,拟合残差肯定更加容易。
其他解释
ResNet 全称是 Residual Network,每一个节点学到的不再是参数本身,而是残差,这就决定了网络有可能无限加深,基线不变,后面的节点学到的是对前面节点的补充,虽然有震荡,但震荡范围越来越小,直到趋于0。
- F是求和前网络映射,H是从输入到求和后的网络映射。比如把5映射到5.1,那么引入残差前是F'(5)=5.1,引入残差后是H(5)=5.1, H(5)=F(5)+5, F(5)=0.1。这里的F'和F都表示网络参数映射,引入残差后的映射对输出的变化更敏感。比如s输出从5.1变到5.2,映射F'的输出增加了1/51=2%,而对于残差结构输出从5.1到5.2,映射F是从0.1到0.2,增加了100%。明显后者输出变化对权重的调整作用更大,所以效果更好。残差的思想都是去掉相同的主体部分,从而突出微小的变化,看到残差网络我第一反应就是差分放大器...地址
- 至于为何shortcut的输入时X,而不是X/2或是其他形式。kaiming大神的另一篇文章[2]中探讨了这个问题,对以下6种结构的残差结构进行实验比较,shortcut是X/2的就是第二种,结果发现还是第一种效果好啊(摊手)。
把恒等映射(x)边换成一些近似恒等映射的线性及非线性函数(0.5x, gate.x)之后,效果会变差,,说明直接用最优的恒等映射的重要性。
最后的梯度也是可以通过捷径传送到前面的层的。