文章目录
- 前言
- ResNet
- 为什么有效
- ResNet结构
- 参考
前言
残差网络(ResNet)是深度学习的一个重要的概念,在许多关于深度学习的任务中都能够找到它的身影。在这篇文章当中,结合一些文献对ResNet进行分析,介绍其思想以及有效性的一些可能解释。在开始之前,先引出以下两个问题:
- 卷积神经网络的深度为什么重要?
因为卷积神经网络的层数越多,意味着能够提取不同级别的特征越丰富。越深的网络提取的特征越抽象,越具有语义信息。 - 增加网络深度是否可以提升性能?
对于原来的神经网络,如果简单地增加网络深度,会导致梯度弥散或梯度爆炸。地图弥散或梯度爆炸使得模型难以收敛,这个问题很大程度上已经被normalization和正则化方法控制了,使得深度神经网络可以收敛。但是深度神经网络面临一个问题是网络退化问题,如下图所示。从图中可以看出56层的网络性能比20层网络性能要差。在论文当中说明不是过拟合引起的,因为更深层网络在训练集上的表现也比不上浅层的神经网络。这一点是不符合常理:假设存在层网络,可以构造更深的层的网络,按理说更深的网络应该取得更好的效果,因为网络后面添加的层神经网络可以看作是网络第层后的恒等映射。但实际实验结果网络比网络的效果要差。其中一个合理的猜测是对神经网络来说,恒等映射并不容易拟合。于是引出了残差网络的基本思路。 - 梯度弥散/爆炸
ResNet
为了解决上述的问题,ResNet提出了拟合残差的思路,而不是直接拟合输出值,从而构造天然的恒等映射。个人认为拟合0比拟合5.1要简单多了。接下来假设神经网络的非线性单元的输入和输出维度一致,那么可以将神经网络单元要拟合的函数设为,则其中为残差函数,要使得网络高层学习到一个恒等映射,那么只需。网络结构上添加“shortcut”即可,实现如下图所示:
为什么有效
- 前后向传播角度分析
参考文献: Identity Mappings in Deep Residual Networks。
考虑到这样的残差块组成前馈神经网络,为了讨论简便,假设残差块不使用任何激活函数,即:考虑任意两个层数,递归展开有:,那么则有根据上式,在前向传播中,输入信号可以从任意底层直接传播到高层。由于包含了一个天然的恒等映射,一定程度上可以解决网络退化问题。
在后向传播阶段,最终损失对某底层输出的梯度可以展开为:
或者
反向传播时,错误信号可以不经过任何中间权重矩阵变换直接传播到低层,一定程度上可以缓解梯度弥散问题(即便中间层矩阵权重很小,梯度也基本不会消失)。综上,可以认为残差连接使得信息前后向传播更加顺畅。
- 集成学习的角度
参考文献: Residual Networks Behave Like Ensembles of Relatively Shallow Networks。 - 梯度破碎问题
这一点可以详细参考:The Shattered Gradients Problem: If resnets are the answer, then what is the question? - 自然语言处理中的残差结构
ResNet结构
ResNetV2:
参考
- Deep Residual Learning for Image Recognition
- Identity Mappings in Deep Residual Networks
- Residual Networks Behave Like Ensembles of Relatively Shallow Networks
- The Shattered Gradients Problem: If resnets are the answer, then what is the question?
- 残差网络解决了什么?为什么有效