我理解的残差网络
这里引用了很多篇博客或者知乎上的内容~
首先,残差和误差的区别:
误差是衡量观测值和真实值之间的差距,残差是指预测值和观测值之间的差距。
了解残差网络结构:
h()是直接映射,f()是**函数,F()是经过weight、BN的那一部分。
如果f()也是直接映射,则变成如下形式:
对于一个更深的层L,其与l层的关系可以表示为:
这个公式反应了残差网络的两个属性:
残差网络解决梯度问题的原理
通过分析残差网络的正向和反向两个过程,我们发现,当残差块满足上面两个假设时,信息可以非常畅通的在高层和低层之间相互传导,说明这两个假设是让残差网络可以训练深度模型的充分条件。那么这两个假设是必要条件吗?
答案:不是必须的,详解可以看:详解残差网络
为什么要残差网络?
随着网络层数的增加,网络发生了退化(degradation)的现象:随着网络层数的增多,训练集loss逐渐下降,然后趋于饱和,当你再增加网络深度的话,训练集loss反而会增大。注意这并不是过拟合,因为在过拟合中训练loss是一直减小的。
当网络退化时,浅层网络能够达到比深层网络更好的训练效果,这时如果我们把低层的特征传到高层,那么效果应该至少不比浅层的网络效果差,或者说如果一个VGG-100网络在第98层使用的是和VGG-16第14层一模一样的特征,那么VGG-100的效果应该会和VGG-16的效果相同。所以,我们可以在VGG-100的98层和14层之间添加一条直接映射(Identity Mapping)来达到此效果。
从信息论的角度讲,由于DPI(数据处理不等式)的存在,在前向传输的过程中,随着层数的加深,Feature Map包含的图像信息会逐层减少,而ResNet的直接映射的加入,保证了 [公式] 层的网络一定比 [公式] 层包含更多的图像信息。
基于这种使用直接映射来连接网络不同层直接的思想,残差网络应运而生。
3.残差网络与模型集成
Andreas Veit等人的论文[3]指出残差网络可以从模型集成的角度理解。如图7所示,对于一个3层的残差网络可以展开成一棵含有8个节点的二叉树,而最终的输出便是这8个节点的集成。而他们的实验也验证了这一点,随机删除残差网络的一些节点网络的性能变化较为平滑,而对于VGG等stack到一起的网络来说,随机删除一些节点后,网络的输出将完全随机。