残差网络(ResNet)深度解析:如何通过“残差”改变一切?

发布于 2025-9-19 07:32
浏览
0收藏

在人工智能的发展历程中,总有几个里程碑式的突破推动整个领域向前迈进。

2015年,何恺明等人提出的ResNet(残差网络)无疑是这样的一个里程碑。

它不仅以3.57%的top-5错误率夺得ImageNet2015分类任务冠军。

残差网络(ResNet)深度解析:如何通过“残差”改变一切?-AI.x社区图片

更重要的是,它解决了一个困扰深度学习社区多年的根本性问题:深度神经网络的退化问题

今天,就让我们深入解析ResNet的架构设计和核心原理,看看这个简单而巧妙的想法如何改变了深度学习的发展轨迹。

背景与核心问题

为什么需要残差网络?

在ResNet出现之前,深度神经网络(如VGG)面临一个严峻的问题:深度退化问题(Degradation Problem)。

注意哦!不是梯度消失/爆炸!这个问题通过 Normalized Initialization(如Xavier)和 Batch Normalization 层已经得到了很大程度的缓解。

残差网络(ResNet)深度解析:如何通过“残差”改变一切?-AI.x社区图片

而是性能饱和甚至下降!实验发现,随着网络层数的不断增加(比如从20层增加到56层),模型的训练误差和测试误差不降反升。

这非常违反直觉,因为更深的模型至少应该能做到和浅层模型一样好(比如让新增的层学习恒等映射,即输出等于输入),但事实并非如此。

这就引出了一个核心问题:对于传统神经网络网络,其思路是通过堆叠非线性层,让网络自己去学习一个目标映射函数 H(x)。这是一件非常困难的事情。

2015年,微软亚洲研究院的何恺明等人提出了一个看似简单却极其深刻的问题:如果深层网络难以学习目标映射H(x),那么我们是否可以让它学习另一个更容易优化的映射?

残差网络(ResNet)深度解析:如何通过“残差”改变一切?-AI.x社区图片

他们的答案是:不让网络直接学习,而是学习残差函数。这样,原始映射就变成了。

这一转变的意义极其深远:学习残差比学习恒等映射要容易得多。如果当前的层已经是最优的,只需要将残差推向0即可,而不需要改变已有的良好表示。

ResNet的核心原理

残差网络(ResNet)深度解析:如何通过“残差”改变一切?-AI.x社区

残差块的思想

残差网络(ResNet)深度解析:如何通过“残差”改变一切?-AI.x社区

这里:

  • ​x​​:块的输入。
  • ​H(x)​​:块的期望输出(即我们最终想得到的映射)。
  • ​F(x)​​:残差函数,是块中需要学习的部分。
  • ​+ x​​:通过一条残差连接(Shortcut Connection) 或跳跃连接(Skip Connection) 实现。

残差块的结构

残差块是ResNet的基本组成单位,其设计简洁而高效。一个标准的残差块包含两条路径:

  1. 主路径:包含一系列卷积层、批归一化层和激活函数,负责学习残差F(x)
  2. 残差连接:直接将输入  传递到输出端,与主路径的输出相加

残差网络(ResNet)深度解析:如何通过“残差”改变一切?-AI.x社区

这种设计带来了三个关键优势:

残差网络(ResNet)深度解析:如何通过“残差”改变一切?-AI.x社区

2.缓解梯度消失:在反向传播时,梯度不仅需要通过带有权重的层(主路径)反向传播,还可以通过残差连接这条“高速公路”直接传回更早的层。这有效地减轻了梯度在多层传播中的衰减问题,使得极深网络的训练成为可能。

3.前向传播的信息流:特征  可以无损地传递到更深的层,保留了底层的特征信息,使得网络可以同时学习到低层和高层的特征。

传统的网络像一个需要自己一步步爬楼的普通人,而ResNet像一个有“电梯”(残差连接)的楼。

残差网络(ResNet)深度解析:如何通过“残差”改变一切?-AI.x社区图片

你可以选择爬楼梯(主路径学习新东西),也可以选择坐电梯直接到达某一层(保留原始信息)。

这使得“上楼”(加深网络)变得轻松且高效。

3.ResNet网络架构经典ResNet网络架构详解

ResNet有多种深度版本,如ResNet-18、34、50、101和152,其中的数字表示权重层的深度(不包括池化层和全连接层)。

残差网络(ResNet)深度解析:如何通过“残差”改变一切?-AI.x社区图片

这些网络都基于残差块理念,但在具体设计上有所区别。

基本残差块设计

1. BasicBlock(用于较浅网络如ResNet-18/34)

BasicBlock设计简洁,包含两个3x3卷积层。当输入输出维度相同时,快捷连接直接进行恒等映射;当维度不同时(如下采样时),使用1x1卷积进行维度匹配。

残差网络(ResNet)深度解析:如何通过“残差”改变一切?-AI.x社区图片

2. Bottleneck(用于深层网络如ResNet-50/101/152)

Bottleneck采用“瓶颈”设计减少计算量:先使用1x1卷积降维,然后用3x3卷积在低维空间处理,最后再用1x1卷积升维。这种设计在保持模型表达能力的同时显著降低了计算复杂度。

整体架构(以ResNet-34为例)

ResNet的整体架构遵循了VGG的范式,即大量使用3x3卷积,并逐渐增加通道数、减小特征图尺寸。

残差网络(ResNet)深度解析:如何通过“残差”改变一切?-AI.x社区图片

1.  初始卷积层:

  • ​7x7卷积,64通道,stride=2​
  • ​3x3最大池化,stride=2​
  • 这一部分对输入图像进行初步的特征提取和下采样。

2.  卷积阶段(Conv2_x, Conv3_x, Conv4_x, Conv5_x):

  • 每个阶段由多个残差块堆叠而成。
  • 在每个阶段的第一个残差块中,会进行下采样(通常通过stride=2的卷积实现),同时特征图通道数会翻倍。
  • 例如:

​Conv2_x​​:输出尺寸 56x56, 64通道,包含3个残差块。

​Conv3_x​​:输出尺寸 28x28,128通道,包含4个残差块。(注意:第一个块会下采样并增加通道数)

​Conv4_x​​:输出尺寸 14x14,256通道,包含6个残差块。

​Conv5_x​​:输出尺寸 7x7,  512通道,包含3个残差块。

3.  末端:

  • 全局平均池化(Global Average Pooling):将7x7的特征图直接平均池化成1x1,得到512维的向量。
  • 全连接层:根据分类任务的类别数(如ImageNet是1000类)输出最终的分类结果。

ResNet的成功激发了一系列基于快捷连接的架构创新:

  • ResNeXt:引入“基数”概念,使用分组卷积增加网络宽度而非深度,在相同参数量下获得更好性能
  • DenseNet:将ResNet的“加性”连接发展为“拼接性”连接,每一层接收前面所有层的输出作为输入,极大增强了特征复用能力
  • Transformer中的残差连接:ResNet的思想被广泛应用于Transformer架构,编码器和解码器的每个子层都添加了残差连接

 结语 

ResNet的故事告诉我们,有时候最突破性的创新不是增加复杂性,而是通过简化问题来找到解决方案。

正如ResNet的创始人之一何恺明所说:“我们只是让网络更容易学习恒等映射。”这种化繁为简的智慧,正是科学研究的精髓所在。

本文转载自​​Fairy Girl​​,作者:Fairy Girl

收藏
回复
举报
回复
相关推荐