为什么使用残差网络?
深度学习中,随着网络层数的增加,容易导致:
- 计算资源的过多消耗
- 模型容易过拟合
- 不恰当的激活函数导致梯度消失/梯度爆炸
通过引入残差网络直接映射的加入,保证了L+1层网络,一定比L层网络包含更多的图像信息。
残差块表示为:
4. 残差:表示预测值与观测者之间的差距
5. 误差:表示观测值与真实值之间的差距
6. 预测值:表模型训练以后得到的输出值
7. 观测值:表模型的输入,如模型测试时通过图像传感器输入的图像信息
8. 真实值:人的肉眼所见的图像信息,无任何误差,如Label
残差网络的原理:
- 残差块的详细表达:
其中,h(x)为直接映射,f(x)为激活函数,为避免梯度爆炸与消失,一般采用relu等。
对于一个深度L层的模型,残差块可以表示为:
- 上式说明, L层可以表示为任意一个比它浅的l层和他们之间的残差部分之和
- L是各个残差块特征的单位累和,而MLP是特征矩阵的累积。
根据BP中使用的导数的链式法则,损失函数关于xl的梯度可以表示为:
在整个训练过程中,
不可能一直为-1 ,也就是说在残差网络中不会出现梯度消失的问题。
表示L层的梯度可以直接传递到任何一个比它浅的l层。
看了许多论文,结论都表明:
- 将激活函数移动到残差部分可以提高模型的精度。
- 直接映射依然是最好的选择。