【论文】
He K , Zhang X , Ren S , et al. Deep Residual Learning for Image Recognition[J]. 2016.(pdf)
He K , Zhang X , Ren S , et al. Identity Mappings in Deep Residual Networks[J]. 2016.(pdf)
【新颖点】
- 提出了短路机制解决深度网络退化的问题
- 提出了残差块
深度网络退化问题
从经验来看,网络的深度对模型的性能至关重要,当网络层数增加后,网络可以进行更复杂的特征模式的提取,但是这却只是经验上的判断。ResNet 的作者通过实验数据说明,56 层的网络不论是训练时错误率还是测试时错误率都高于 20 层网络。这不是因为深层网络存在的梯度消失或爆照问题引起的,我们可以通过 batch norm 等首段来解决梯度消失或爆炸导致的深度网络难训练的问题。但是,网络越深表示能力却越弱,这是一个非常令人诧异的问题,这就是网络的退化
残差学习
针对于网络退化问题,有两种解决思路:
- 一种是调整求解方法,比如更好的初始化、更好的梯度下降算法等
- 另一种是调整模型结构,让模型更易于优化
ResNet 的作者从后者入手,将堆叠的基层称为一个块,对于某个块,其可以拟合的函数为 ,如果期望的潜在映射为 ,与其让 直接学习潜在的映射,不如去学习残差 ,即 ,这样原本的前向路径上就变成了 ,用 来拟合 。这样更易于优化,因为相比于 学习恒等映射,让 学习成为 要更加容易(可以通过 L2 正则轻松实现)。这样,对于冗余的块,只需
我们理解一下上面这段话
首先什么是恒等映射?
如果我们在浅层网络上堆叠新的网络层,而这些增加的层什么也不学习,仅仅是复制浅层网络的特征,那么这样新增加层就是恒等映射。当残差为 0 时,堆积层就仅仅做了恒等映射。在这种情况下,我们猜想如此堆叠出来的深度网络应该至少和浅层网络的性能一样,不会出现退化现象。事实上,什么也不学习是神经网络最难做到的东西之一,残差不会为 0,这也就使得堆积层再说输入特征上学习到乐新的特征,从而拥有更好的性能
接着,怎么做残差学习?
想要让神经网络去拟合潜在的恒等映射函数 ,这是很难的。所以,我们只要让 ,就可以构成一个恒等映射 。于是,我们的出发点就变成了
最后,我们做一个简单数学分析解释为什么残差更容易学习?
设 和 分别表示第 个残差单元的输入和输出, 表示残差函数,表示学习到的残差, 表示恒等映射,
从浅层 到深层 的学习特征为
根据链式求导法则,
右式的第一项 表示损失到达 的梯度,括号中
清楚理解了残差学习之后,我们要考虑的就是如何设计
残差块
一个残差块有两条路径 和 , 路径拟合残差, 路径为恒等映射,称为 shortcut, 表示元素积,要求 与
我们用书数学公式描述一下残差块,假设残差块的输入为 ,输出为 ,有
其中经过一个激活函数,
另外,考虑对维度保持一致,可以在 shortcut 做一个线性变化 ,此时残差块的表示为
值得一提的是,残差块中至少要有两个权重层,否则会出现下面的情况,起不到任何作用
在论文中,残差路径可以分为两种,一种有 bottleneck 的结构,即下图右中的
因此 shortcut 路径大致也分为两种,取决于残差路径是否改变了特征图的数量和尺寸。一种是将 原封不动地输出,另外一种则需要经过 卷积来升维或者降维,主要目的是将输出与
网络结构
- ResNet 是参考 VGG19,在其基础上进行修改,通过短路机制添加残差单元实现的
- ResNet 直接使用步长为 2 的卷积做下采样,而不再在残差块之间引入 pooling 层
- 使用 global average pooling 代替了全连接层得到最终特征
- 每个卷积层之后都有 batch norm,图上并未标出这点
另外,ResNet 的一个重要设计原则是:当特征图大小降为一半的时候,特征图的数量增加一倍,如 conv3_1、conv4_1 和 conv5_1,这保证了网络层的复杂性。上图中虚线表示特征图数量发生了变化,shortcut 中通过
对于 18 层 ResNet 或者 34 层 ResNet 更多使用两层的残差块,当网络更深时,则更多使用 bottleneck 的残差块
error surface 对比
- ResNet-20(no short)的 error surface 还没有很复杂,优化不会十分困难;但是在增加到 56 层后,error surface 变得异常复杂,此时将很难做到很好的优化
- 引入 shortcut 后,error surface 变得平缓很多,梯度的可预测性变得很好,更易于优化
残差块的分析与改进
在 Identity Mappings in Deep Residual Networks 一文中进一步研究了 ResNet ,通过 ResNet 反向传播的理论分析调整了残差块的结构
和之前不同的是,在这片文章中将 shortcut 视为主干路径,而将残差路径视为旁路
新的残差块具有更强的泛化能力,也更能避免退化问题,即使在堆叠大于 1000 层之后,网络的性能仍在变好。具体的变化在于,
- 通过保持 shortcut 路径的纯净,可以让信息在前向传播和反向传播中更加平滑传递。为此,非必要情况下将不在 shortcut 引入
- 在残差路径上,将 BN 和 ReLU 同一放在权重前作为预激活