垃圾小白欢迎指正!
解决的问题:主要是解决了深层次的网络比较难以训练的问题。
原因:
原文这样说的When deeper networks are able to start converging, a degradation problem has been exposed: with the network
depth increasing, accuracy gets saturated (which might be unsurprising) and then degrades rapidly. Unexpectedly, such degradation is
not caused by overfifitting
, and adding more layers to a suitably deep model leads to higher train
ing error, as reported in [11, 42] and thoroughly verifified by our experiments. Fig. 1 shows a typical example.
我个人的总结就是随着网络加深,产生的误差并不是因为过拟合而是因为前面网络误差经过不断的传播对后面的影响过大。
训练误差和测试误差如下:
![](https://img-blog.csdnimg.cn/20191116135710563.png)
核心:
若将输入设为X,将某一有参网络层设为H,那么以X为输入的此层的输出将为H(X)。一般的CNN网络如Alexnet/VGG等会直接通过训练学习出参数函数H的表达,从而直接学习X -> H(X)。
而残差学习则是致力于使用多个有参网络层来学习输入、输出之间的参差即H(X) - X即学习X -> (H(X) - X) + X。其中X这一部分为直接的identity mapping,而H(X) - X则为有参网络层要学习的输入输出间残差。
y = F(x
,
{
W
i
}) + x
很自然的过程就是原本大家需要拟合的函数是f(x),但是经过修改之后如果前面网络已到达很好,那么我们网络的学习就是趋向于0的。也就是实现:
在前向过程中,当浅层的输出已经足够成熟(optimal),让深层网络后面的层能够实现恒等映射的作用。
举个例子,学习自行车以前可能是看人家怎么骑自行自己就跟着学。现在是看看自己和别人有什么不同的地方就修改。
反向传播时:
因此redidual模块会明显减小模块中参数的值从而让网络中的参数对反向传导的损失值有更敏感的响应能力,虽然根本上没有解决回传的损失小得问题,但是却让参数减小,相对而言增加了回传损失的效果,也产生了一定的正则化作用。
参考:https://www.jianshu.com/p/93990a641066