ResNet
译:《图像识别中的深度残差学习》
论文地址:《Deep_Residual_Learning_for_Image Recognition》
Motivation
深层的卷积神经网络可以为图像识别带来一系列突破。许多模型使用更深层的方式实现了新的突破。然而,学习更好的网络模型就和堆叠更多的网络层一样容易吗?一个臭名昭著的问题就是梯度消失和梯度爆炸,这从一开始就阻碍了收敛,然而这个问题在很大程度上已经通过归一化各个层来解决。但是,随着网络的加深,网络退化问题则又出现了,随着网络深度的增加,准确率会饱和,然后迅速下降,这种退化不是由于过拟合引起的。因此,深层的神经网络模型是不容易进行优化的。
目前存在的一种解决方案是:添加层是恒等映射( identity mapping
),其它层则是从学习的浅层模型复制而来,这种构造方法表明,较深的模型至少不会比浅模型产生更高的训练误差。但实验表明,这种递归递归结构的网络很难求解优化。
这篇论文通过引入深度残差学习解决了上述退化
问题。
方法简介
残差学习
设\(\mathcal{H}(X)\)为一些堆叠层的底层映射,其中的\(X\)表示的是这些堆叠层中第一层的输入。
论文显示地叠加层去近似于残差函数\(\mathcal{F}(X):=\mathcal{H}(X)-X\),而不是使这些层去近似\(\mathcal{H}(X)\),这样一来,原始函数就变成了\(\mathcal{F}(X)+X\),虽然两种形式应该都能渐进逼近所需函数,但学习的难易程度可能会有所不同。
即:过去是直接拟合\(\mathcal{H}(X)\),现在是拟合残差\(\mathcal{F}(X)=\mathcal{H}(X)-X\)
通过短路连接进行恒等映射
对每几个堆叠层进行残差学习,如图,形式上可定义为: \[
Y = \mathcal{F}(X,\{W_i\})+X
\] 这里的\(X\)和\(Y\)表示的是这些层的输入和输出,函数\(\mathcal{F}(X,\{W_i\})\)表示可以被学习的残差映射,对于上图情况,有两层,\(\mathcal{F} = W_2\sigma(W_1X)\),\(\sigma\)采用RELU激活函数,并且省略了偏差。\(\mathcal{F}+X\)的过程是通过短路连接(shortcut connection
)和逐元素相加的方式进行。
此外,如果\(\mathcal{F}\)和\(X\)维度不匹配,则需要对其进行线性映射\(Y=\mathcal{F}(X,\{W_i\}+W_sX)\)
残差函数的形式可以是灵活的,可以对应两层或三层或更多层,但如果只有一层,则会类似于线性层,这样情况下,残差没有发现有什么优点。
上述层主要是全连接层形式,但实际上也可以替换成卷积层,这样一来,函数\(\mathcal{F}(X,\{W_i\})\)表示多个卷积层,最后逐通道地对两个特征映射执行逐元素相加。
网络结构
如图,网络是受VGG网络理念的启发,中间的是基准网络,通过简单的将各个层进行堆叠实现深层神经网络,右边的是在基准网络中插入了短路连接("shortcut connections"),使其成功对应的残差网络版本,当维度保持不变时,可以直接进行连接,当存在升维时(图中虚线对应的情况),考虑两个选项:
- 仍然进行恒等映射(identity mapping),并使用填充零的方式升维,这种方式不会引入额外的参数
- 通过上述公式进行映射(使用\(1\times1\)卷积实现)
并且这两个选项在"shortcut"穿过两个尺寸的特征图时对应的步距都为2
后面的实验对两个选项的比较如下:
实现
更深的瓶颈架构
如图,论文修改了构建的块作为bottlenect
设计,对每个残差函数\(\mathcal{F}\),使用3层堆叠代替之前的两层,这三层分别是\(1\times1,3\times3,1\times1\)卷积,\(1\times1\)层负责降维和升维,使得\(3\times3\)层输入和输出具有较小的瓶颈,并且这两种设计具有相似的时间复杂度。
ResNet解决网络退化的机理
- 深层梯度回传顺畅
- 恒等映射这一路的梯度是1,把深层梯度注入底层,防止梯度消失。没有中间商层层盘剥
- 类比其它机器学习模型
- 集成学习boosting,每个弱分类器拟合“前面的模型与GT之差”
- 长短时记忆神经网络LSTM的遗忘门
- Relu激活函数
- 传统线性结构网络难以拟合“恒等映射”
- 什么都不做有时很重要,而传统线性结构网络通常无法做到这一点
- skip connection可以让模型自行选择要不要更新
- 弥补了高度非线性造成的不可逆的信息损失
ResNet的优点
- 易于优化收敛
- 解决退化问题
- 可以很深,准确率大大提升