通常来说,增加卷积神经网络的层数有利于提高模型的准确率,但是深层的神经网络也变得难以训练的,因为存在梯度消失与梯度爆炸问题。Microsoft 亚洲研究院的 Kaiming He 等人提出了一个残差学习框架,以简化对 CNN 网络的训练。通过将层重新表述为参考层输入的学习残差函数,深层神经网络变得更容易优化,并且可以从显著增加网络的准确性。本文主要介绍 ResNet 残差网络的基本结构(Residual block)及其工作原理。
目录
1 深层网络的瓶颈
2 残差块与残差网络
1 深层网络的瓶颈
在 ImageNet 挑战赛中,排名靠前的团队都使用深度较深的模型,一般是深度在 16 到 30 层之间的神经网络。通过叠加多个网络层,神经网络能够更容易地提取出丰富的分类特征,从而提高分类准确性。
但随之而来的问题是,简单地增加网络层数,就能获得学习效果更好的模型吗?前面提到的梯度消失与梯度爆炸问题是一个阻碍。实际上,神经网络的学习误差,一开始会随着网络层数的增加而减少,但是当层数增大到一定数量时,学习误差反而会增加,这种问题被称为退化(Degradation problem)。
下图展现了 20 层模型与 56 层模型的训练误差,和测试误差随迭代次数的变化情况,图片来源《Deep Residual Learning for Image Recognition》论文。
2 残差块与残差网络
在《Deep Residual Learning for Image Recognition》论文中,Kaiming He 等人通过引入深度残差学习框架来解决退化问题。
残差网络使用了被称为残差块的基本结构,如下图所示。
在残差块中,输入 x 除了沿着主分支(即经过两层线性加权与非线性激活)传播之外,还沿着一条捷径进行传播,作为第二层非线性激活的输入,这条捷径被称为 “Shortcur connection”。
假设神经网络需要学习的函数为 H(x) = x,对于不存在捷径的网络,神经网络需要学习 F(x) = H(x) = x 这个函数,当神经网络的层数增加时,优化算法训练模型的复杂度会增加。
而引入 Shortcut connection 之后,模型学习的函数变为 F(x) = H(x) - x = 0,这只需要让 weight layer 的权重为 0 即可实现,这说明残差网络更擅长学习 H(x) = x 恒等映射。当神经网络的层数增加时,Shortcut connection 的引入不会增额外的训练参数,也不会增加训练的复杂度,可以有效解决前面提到的退化问题。
残差网络(Residual Networks)使用了多个堆叠的残差块,在《Deep Residual Learning for Image Recognition》论文中,Kaiming He 等人对比了使用与未使用残差结构网络的表现,网络结构如下图所示。
当残差块的输入与输出具有相同维度时,x 可以直接加到 F(x) 之上;当输出维度增加时,可以使用 0 值填充多出来的维度,也可以使用 1x1 卷积(上图中用虚线连接表示)。
在 ImageNet 训练集上,ResNet-34 实现了比 ResNet-18 更低的误差。
【参考文献】
[1] Kaiming He, Xiangyu Zhang, Xiangyu Zhang, et al. Deep residual learning for image recognition[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2016: 770-778.