【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】
残差网络(ResNet,Residual Networks) 是由微软研究院的何凯明等人在 2015 年提出的一种深度神经网络架构,在深度学习领域取得了巨大的成功。它通过引入残差连接(Residual Connection) 解决了深层神经网络中的梯度消失(Vanishing Gradient) 问题,从而实现了对非常深层网络的有效训练。
ResNet 的提出使得神经网络可以训练出更深层的模型,极大提升了模型的性能。在 2015 年的 ImageNet 大规模视觉识别挑战赛(ILSVRC 2015)中,ResNet 获得了冠军,并且它也是许多后续深度学习模型的基础。
1. 深度网络中的问题
随着神经网络层数的增加,深度网络面临两个主要问题:
- 梯度消失和梯度爆炸:在反向传播中,梯度会随着层数的增加逐层变小或变大,导致前几层的权重更新非常缓慢或更新过大,模型难以有效训练。
- 退化问题:在非常深的网络中,增加更多的层有时反而会导致模型的训练误差增大,而不是进一步减少。理想情况下,增加更多的层应该至少不会使性能变差,但实际上在深度网络中,随着层数增加,网络的表示能力可能反而下降。
2. 残差学习的核心思想
ResNet 的核心思想是引入残差块(Residual Block),通过跳跃连接(Skip Connection) 让信息直接跳过一层或多层网络,从而解决深度网络中的退化问题。
下图为跳过两层的残差连接示意图
图片来源:ResNet的原始论文 Deep Residual Learning for Image Recognition
假设普通的深度网络中的映射为
H
(
x
)
H(x)
H(x),在 ResNet 中,我们将其重新表示为残差函数
F
(
x
)
F(x)
F(x) 加上输入
x
x
x 的直接跳跃连接:
H
(
x
)
=
F
(
x
)
+
x
H(x) = F(x) + x
H(x)=F(x)+x
其中:
x x x 是输入,
F ( x ) F(x) F(x) 是要学习的残差函数,它表示某一层对输入的变化量。
这种设计的核心思想是,与其直接学习映射
H
(
x
)
H(x)
H(x),ResNet 通过学习**残差**
F
(
x
)
=
H
(
x
)
−
x
F(x) = H(x) - x
F(x)=H(x)−x,让网络去拟合残差。在实践中,残差学习更容易收敛,因为直接保留输入
x
x
x,可以有效防止梯度消失。
3. ResNet 的结构
ResNet 的基本单元是残差块(Residual Block),其结构如下:
图片来源:https://en.wikipedia.org/wiki/Residual_neural_network
- 输入 x x x 通过两层卷积,卷积层后接 Batch Normalization 和 ReLU 激活函数得到 F ( x ) F(x) F(x)。
- 跳跃连接:将输入 x x x 加到 F ( x ) F(x) F(x) 上得到输出 H ( x ) H(x) H(x)。
- 输出 H ( x ) H(x) H(x),该输出再输入到下一层。
- 如果输入的维度和输出的维度不同,则会引入 1x1卷积 进行调整,以确保两者维度一致。如图右边所示。
4. 为什么残差学习有效?
在 ResNet 中,跳跃连接可以让网络层直接学习更深层次的特征,而不必从头学习每一层的映射。它的两个关键优势是:
- 更容易优化:因为每一层只是学习输入与输出之间的残差,它减小了学习的难度。这意味着,如果某一层无法学习到任何有效的信息,网络至少可以通过跳跃连接直接传递输入,确保不会出现退化现象。
- 防止梯度消失:在反向传播过程中,跳跃连接让梯度能够绕过一些中间层,直接传递到前面的层,从而缓解了梯度消失的问题。
5. ResNet 的不同版本
ResNet 提出了多个不同深度的版本,包括 18 层、34 层、50 层、101 层和 152 层等。
- ResNet-18 和 ResNet-34:这些是比较浅的版本,通常用于计算资源有限的情况下。
- ResNet-50、ResNet-101 和 ResNet-152:这些是较深的版本,能够学习更加复杂的特征,用于高性能任务,比如大规模图像分类和目标检测。
以 ResNet-50 为例,它由 49 个卷积层和 1 个全连接层组成,其中包括多个残差块,深度足以捕获复杂的模式,但通过残差连接,训练仍然较为稳定。
下图为原始的 Resnet-18 架构图.
图片来源:https://en.wikipedia.org/wiki/Residual_neural_network
6. ResNet 的改进版本
ResNet 的成功使得许多后续的深度学习模型引入了残差结构,且出现了一些改进版本:
a. Wide ResNet(WRN)
- Wide ResNet 是通过增加每层的宽度(通道数)来提升网络的表示能力,提出了比增加深度更有效的优化方法。实验表明,增加网络宽度(而不是深度)在某些任务上表现更好。
b. ResNeXt
- ResNeXt 是对 ResNet 的进一步扩展,它引入了“分组卷积”的概念,将卷积操作分为多个组进行并行计算,类似于“组卷积”的概念,从而提升网络的计算效率,同时保持较高的准确率。
c. DenseNet
- DenseNet 也是一种基于跳跃连接的网络结构,但不同于 ResNet 中的简单残差连接,DenseNet 在每一层都连接了所有前面的层。它直接将前面所有层的输出拼接到一起,再传入当前层进行计算。DenseNet 的参数更少,且在某些任务上表现优于 ResNet。
7. ResNet 在实际中的应用
ResNet 在许多实际任务中表现优异,尤其是在图像处理任务上,它成为了许多深度学习模型的基础组件:
- 图像分类:ResNet 广泛应用于图像分类任务中,特别是在 ImageNet 这种大规模数据集上的表现非常突出。
- 目标检测和分割:ResNet 被广泛用于目标检测和语义分割的任务中,例如 Faster R-CNN、Mask R-CNN 等模型都使用 ResNet 作为特征提取器。
- 自然语言处理:虽然 ResNet 主要用于图像处理,但它的残差思想也被迁移到自然语言处理(NLP)领域,用于构建深层语言模型。
8. ResNet 的成功原因总结
- 有效解决了深度网络的训练问题:通过残差连接,ResNet 能够训练非常深的网络,而不会出现梯度消失或退化问题。
- 简单有效的结构:残差块结构简单,容易实现,而且在各种深度学习任务中表现良好。
- 可扩展性强:ResNet 的结构非常灵活,可以轻松地扩展到不同深度或不同宽度的版本,以适应不同的计算资源和任务需求。
9. ResNet 与传统卷积神经网络的比较
特性传统卷积神经网络(CNN)残差网络(ResNet)层数层数相对较少层数可以非常深,50 层甚至更多训练难度深层网络容易训练困难残差块降低了训练难度梯度消失问题容易出现梯度消失问题跳跃连接缓解了梯度消失问题网络性能层数增加后性能提升有限深层网络的性能提升显著训练速度较难优化,训练速度较慢相对较快,优化效果更好
10. 总结
ResNet(残差网络) 通过引入残差连接,有效解决了深度神经网络中的梯度消失和退化问题,使得训练深层网络变得更加可行和高效。它的成功不仅提升了图像分类、目标检测等任务的性能,还成为了许多现代深度学习模型的重要组成部分。
11. 进一步了解
可以阅读ResNet的原始论文:Deep Residual Learning for Image Recognition
我个人认为其实我们人类学习也可以借鉴残差学习的思想、有时候不用按部就班去学,可以适当跳过一些地方(比如暂时不需要或者比较难懂的),直接学习关键的残差部分。另外,跳跃思维,也称为发散性思维,我感觉也有点残差学习的影子。
版权归原作者 AI完全体 所有, 如有侵权,请联系我们删除。