🧠 一、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 | 输入 x |
这种“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 | 输入 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 通过残差连接重新定义了学习目标,让“深度”与“可训练性”首次兼得。
若你觉得我的文章对你有帮助,欢迎点击上方按钮对我打赏