我们知道在越深层的神经网络模型中,卷积层和池化层的数量就越多,而卷积和池化的目的是为了特征提取,所以理论上来讲越深层的网络会输出表示能力越强的特征
但是,我们发现在做实验时最深的56层网络得到了最高的错误率。说明了网络衰退的问题确实存在,即随着深度的增加,网络的性能会越来越差,残差网络就是解决这个问题的。
那残差网络具体做了什么工作呢?
- - 让深度网络后面的层实现恒等映射
- - 通过减小模块中参数的值从而让网络中的参数对反向传导的损失值有更敏感的响应能力
下面来具体解释以上两点
第一点(让深度网络后面的层实现恒等映射)的**解释**:恒等映射可以理解成:在某一层的输出已经很好的体现图像的特征了,后续的网络不能改变这些特征,即所谓恒等映射。我们已经知道在深度网络内部的特征会在某一层达到了最佳的情况,这时的特征如果继续用后面的层提取的话 ,会使网络性能降低。残差网络的功能是让深度网络实现和浅层网络一样的性能,即让深度网络后面的层至少实现恒等映射的作用。
那么残差网络是怎么实现恒等映射的呢?让我们看一下残差网络的基本模块
F(x)=H(x)-x,x为浅层的输出,H(x)为深层的输出,F(x)为夹在两者中间的两层代表的变换,当浅层的x代表的特征达到最优的时候,那么对于任何特征x的改变的会让loss变大,这是F(x)会自动趋向于学习为0,x则从恒定映射的路径继续传递。这样就在不增加计算成本的情况下实现了一开始的目的:在前向传播过程中,当浅层的输出已经足够优秀,让深层网络后面的层能够实现恒等映射的作用。
**第二点**(通过减小模块中参数的值从而让网络中的参数对反向传导的损失值有更敏感的响应能力)的**解释**:
先理解反向传播:
所谓反向传播就是网络输出一个值,然后与真实值做比较的到一个误差损失,同时将这个损失做差改变参数,返回的损失大小取决于原来的损失和梯度,既然目的是为了改变参数,而问题是改变参数的力度过小,则可以减小参数的值,使损失对参数改变的力度相对更大。
举个例子,假设不加residual模块的输出为h(x)。当x= 10 , h ( x ) = 11 时h简化为线性运算W h ,W h明显为1.1,加了redidual模块后,F ( x ) = 1 ,H ( x ) = F ( x ) + x = 11,F也简化为线性运算,对应的W F 为0.1。当标签中的真实值为12,反向传播的损失为1,而对于F中的参数和h中参数回传的损失实际上是一样大的而且梯度都是x的值,但是对于F的参数就从0.1到0.2,而h的参数是从1.1到1.2,**因此redidual模块会明显减小模块中参数的值从而让网络中的参数对反向传导的损失值有更敏感的响应能力,虽然根本上没有解决回传的损失小得问题,但是却让参数减小,相对而言增加了回传损失的效果,也产生了一定的正则化作用。**其次,**因为前向过程中有恒等映射的支路存在,因此在反向传播过程中梯度的传导也多了更简便的路径**
因此残差模块最重要的作用就是改变了前向和后向信息传递的方式从而很大程度上促进了网络的优化