前端analysis | 知其所以然

Resnet

2025-10-14

🧠 一、ResNet 是什么?

ResNet(Residual Network,残差网络)
何恺明(Kaiming He)等人 在 2015 年提出,论文是

《Deep Residual Learning for Image Recognition》

ResNet 最初用于 ImageNet 图像分类任务,在 2015 年 ILSVRC 比赛中夺冠,**Top-5 错误率仅 3.57%**,同时成功训练出超过 152 层 的深度网络——
这是以前的 CNN(如 VGG)难以做到的。


⚙️ 二、为什么要提出 ResNet?

📉 1. 深度模型的“退化问题”

直觉上,网络越深,效果越好。
但实际发现:

  • 网络越深,训练误差反而上升
  • 梯度在反向传播中会消失或爆炸,模型难以收敛。

也就是说:

加更多层 ≠ 学得更好。
深度带来了表达能力,却损害了可训练性。


💡 三、ResNet 的核心思想:残差学习(Residual Learning)

传统层学的是:
[
y = F(x)
]
ResNet 改成:
[
y = F(x) + x
]

也就是:
让每个模块只学习“残差”(差值),而不是完整映射。

🧩 残差块(Residual Block)

如下图结构(简化表示):

1
2
3
4
5
6
7
8
9
输入 x

[卷积 + BN + ReLU]

[卷积 + BN]

+ ───────────────┐
│ │
└──> 加法 (skip) ─> ReLU ─> 输出 y

这种“shortcut connection(跳跃连接)”直接把输入 x 加到输出 F(x) 上。


🔍 四、为什么这种结构有效?

1️⃣ 缓解梯度消失

  • 跳跃连接让梯度可以直接传到浅层,不被深层阻塞。
  • 反向传播时:
    [
    \frac{\partial L}{\partial x} = \frac{\partial L}{\partial y} (1 + \frac{\partial F}{\partial x})
    ]
    始终保留一个恒等路径,使梯度不会消失。

2️⃣ 容易优化

  • 如果最优函数接近恒等映射,F(x) ≈ 0 就行。
  • 模型只需“微调”已有特征,而不是重新学习一切。

3️⃣ 能训练超深网络

  • ResNet-50, ResNet-101, ResNet-152 甚至更深都能稳定训练。

🧱 五、ResNet 的结构层次(以 ResNet-50 为例)

模块 结构 输出尺寸
Conv1 7×7卷积 + MaxPool 112×112
Conv2_x 3个残差块 56×56
Conv3_x 4个残差块 28×28
Conv4_x 6个残差块 14×14
Conv5_x 3个残差块 7×7
全局平均池化 + FC 分类输出 1000类

瓶颈结构(Bottleneck Block)
采用 1×1 降维 → 3×3 卷积 → 1×1 升维,减少计算量。


🧬 六、ResNet 的变体家族

模型 说明
ResNet-18/34 基础残差块(两个 3×3 卷积)
ResNet-50/101/152 瓶颈残差块(1×1, 3×3, 1×1)
ResNeXt 引入分组卷积(更宽)
Wide-ResNet 减少深度,增加宽度
ResNet-D, ECA-ResNet, etc. 各种改进版,性能更优

🧠 七、ResNet 的意义(深远影响)

开启了深层网络可训练时代
— 深度从几十层 → 上百层甚至上千层。

启发了 Transformer 等架构
— “残差连接 + 层归一化”成为现代网络标配。

几乎所有 CNN 基础模型的基石
— 分类、检测、分割任务都以 ResNet 为 backbone。


🏁 八、总结一句话:

ResNet 让深度学习真正“学得更深”。
它的核心不在“更复杂的卷积”,而在让梯度流得更顺畅

🧭 一、ResNet 出现之前:深层网络的两大困境

在 ResNet 之前(约 2012–2014),卷积神经网络(CNN)主流结构是:

  • AlexNet (2012) → 8 层
  • VGGNet (2014) → 16/19 层
  • GoogLeNet (2014) → 22 层

研究者发现:当网络继续加深(如 30 层、50 层以上)时,出现了两个严重问题:


⚠️ 1️⃣ 梯度消失 / 梯度爆炸(Gradient Vanishing/Exploding)

🔹 现象

  • 网络越深,反向传播时梯度在层间不断相乘;
  • 小于 1 的梯度会逐层变小,趋近于 0;
  • 大于 1 的梯度则会爆炸成无穷大;
  • 导致浅层几乎无法更新权重。

🔹 结果

网络越深,反而训练误差越高。
明明更复杂的模型,却学不到东西。


⚠️ 2️⃣ 网络退化问题(Degradation Problem)

就算没有梯度消失,通过技巧(如 BatchNorm、ReLU)缓解了梯度问题,
仍会出现:

当层数增加,训练集误差反而上升

也就是说:

  • 并不是“过拟合”,因为训练误差都变差;
  • 而是网络无法学到更优解。

👉 原因:
深层网络要学习一个复杂映射 ( H(x) ),反而比学习“恒等映射”更难。
模型反而绕远路了。


⚙️ 二、ResNet 的突破点:残差思想(Residual Learning)

ResNet 提出一个革命性思路:

“让网络只学习差异(残差),而不是完整映射。”


🧩 1️⃣ 理论核心

假设原目标函数是:
[
H(x)
]
传统网络直接学习:
[
H(x)
]
ResNet 改为:
[
F(x) = H(x) - x \Rightarrow H(x) = F(x) + x
]
即:让网络学习一个残差函数 ( F(x) ),表示输入与目标输出的差异。


🧩 2️⃣ 残差块(Residual Block)

基本结构:

1
2
3
4
5
6
7
8
9
10
11
输入 x

[卷积 + BN + ReLU]

[卷积 + BN]

+───> x(Shortcut)

ReLU

输出 y = F(x) + x

公式化:
[
y = F(x, W_i) + x
]


🧩 3️⃣ Shortcut Connection(跳跃连接)

关键是这个“加法连接”:

  • 不增加额外参数;
  • 不增加计算复杂度;
  • 让梯度可以直接穿过层传播。

这条“捷径”路径(identity mapping)使得网络即使非常深,也能保持稳定的梯度流动。


🧮 三、ResNet 的工作原理与优势解析

方面 传统深层网络 ResNet 机制 效果
学习目标 直接拟合 H(x) 学习残差 F(x)=H(x)-x 更容易优化
梯度传播 梯度逐层衰减 跳跃连接提供恒等通路 缓解梯度消失
最优解存在性 难找到恒等映射 恒等映射即 F(x)=0 最优解更容易达到
训练稳定性 不稳定 非常稳定 能训练上百层
收敛速度 更深更准

⚗️ 四、ResNet 之后:影响与扩展

ResNet 不仅解决了“深度退化”问题,还奠定了现代深度架构的模板。

📚 后续改进

变体 核心改进 关键点
ResNet-50/101/152 使用瓶颈结构 (1x1, 3x3, 1x1) 提升效率
ResNeXt 引入分组卷积 提升表达能力
DenseNet 连接不再是加法,而是拼接 更强特征复用
Transformer 残差连接 + LayerNorm 从 CNN 扩展到序列建模

🧠 五、总结一句话

ResNet 的本质不是“多了跳线”,
而是改变了学习目标:
让模型学会修正(Residual Correction),而非重新发明(Re-learning)。

🧭 一、ResNet 出现前的深度网络发展简史(1998–2015)

阶段 代表网络 关键特征 问题所在
🧩 1️⃣ 早期阶段(1998–2011) LeNet-5(Yann LeCun) 手写数字识别CNN雏形 网络浅、计算弱、数据不足
🚀 2️⃣ 深度复兴(2012) AlexNet(Hinton、Krizhevsky) ReLU + Dropout + GPU训练 首次在ImageNet上大胜传统算法
🔥 3️⃣ 结构深化(2014) VGGNet、GoogLeNet 堆叠更多卷积层(16–22层) 性能提升,但出现“退化问题”
💡 4️⃣ 结构突破(2015) ResNet(何恺明) 引入残差连接 解决梯度消失与退化本质问题

⚙️ 二、ResNet 之前的问题根本:深度带来的“优化困境”

随着层数增加,网络理论上应该更强——但现实完全相反。
问题根源来自于三大机制性矛盾:


⚠️ 1️⃣ 梯度传播障碍(Gradient Flow Problem)

根源:反向传播链式求导

反向传播中,梯度逐层相乘:
[
\frac{\partial L}{\partial x_1} = \frac{\partial L}{\partial x_n} \prod_{i=2}^{n} \frac{\partial x_i}{\partial x_{i-1}}
]

如果每层的导数 ( < 1 ),梯度会指数衰减 → **梯度消失**;
如果 ( > 1 ),则梯度会迅速放大 → 梯度爆炸


🔹 后果

  • 浅层权重几乎得不到更新;
  • 模型训练不稳定;
  • 学习陷入局部最优或无法收敛。

⚠️ 2️⃣ 优化困难与退化问题(Degradation Problem)

即使通过 ReLU、BatchNorm 缓解了梯度问题,
仍发现当层数从 20 → 50 → 100 增加时:

训练误差反而上升。

这不是过拟合,而是优化失败

🔹 原因分析

深层网络在优化空间上更复杂:

  • 存在大量鞍点(saddle points);
  • 参数更新路径更难;
  • “恒等映射” H(x)=x 都学不出来。

也就是说:

网络越深,不是学不到真理,而是被「学习路径」卡住了。


⚠️ 3️⃣ 映射学习过难(Representation Difficulty)

传统网络强迫每一层都去学习一个复杂的目标函数 ( H(x) )。
但很多时候我们只需要微调输入(比如略做修正)。

学习一个“恒等映射”其实比“复杂非线性映射”更难,
因为参数必须精确拟合到 ( H(x)=x )。

🔹 举个比喻:

传统深层网络像让人从零造一辆新车;
而有时只是需要“在旧车上加点配件”——但模型不允许这样做。


🧩 三、问题的根本所在:网络学习目标与优化路径错配

这其实是一个“学习目标不匹配”的问题:

问题层面 传统网络做法 问题本质
学习目标 直接学习 ( H(x) ) 任务复杂、非线性强
参数优化 梯度逐层传播 梯度逐层衰减
表示路径 每层完全独立 缺乏“捷径”传递信息
恒等映射 需精确拟合 难以学习到恒等函数

因此:

问题根本不在于“层太多”,而在于每层都被迫学习过于复杂的映射函数


💡 四、ResNet 如何从根本上解决这些问题

ResNet 引入“恒等捷径连接(Identity Shortcut Connection)”:

[
H(x) = F(x) + x
]

让每一层只学习:
[
F(x) = H(x) - x
]


✅ 本质改进:

问题 ResNet 对策 效果
梯度消失 提供梯度直接通道 稳定传播
优化困难 简化学习任务(学残差) 易收敛
恒等映射难学 直接保留输入 学习恒等变得自然
深度退化 不再出现 训练上百层依然正常

🧠 五、总结一句话

ResNet 之前的问题根本在于:网络被迫学习完整映射,导致优化路径过长、梯度衰减、恒等难学。
ResNet 通过残差连接重新定义了学习目标,让“深度”与“可训练性”首次兼得。

使用支付宝打赏
使用微信打赏

若你觉得我的文章对你有帮助,欢迎点击上方按钮对我打赏