文章

03 残差网络(ResNets)——深度神经网络的突破

03 残差网络(ResNets)——深度神经网络的突破

03 残差网络(ResNets)——深度神经网络的突破

🌟 课程核心目标

本节旨在解决深度神经网络训练中的梯度消失与梯度爆炸问题,通过引入“跳跃连接”(Skip Connection)构建残差网络(Residual Networks, ResNets) ,使得网络可以训练得更深、更稳定、性能更强。


🔍 一、传统神经网络的局限性

❌ 问题:深度网络难以训练

随着网络层数增加,会出现:

  • 梯度消失:反向传播时梯度逐层衰减,靠近输入层的参数几乎无法更新。
  • 梯度爆炸:梯度指数增长,导致训练不稳定。
  • 优化困难:即使使用梯度下降等算法,模型性能也会随深度增加而下降

✅ 结论:普通网络(Plain Network)在深度超过一定阈值后,训练误差反而上升。


🔁 二、什么是“残差块”(Residual Block)

💡 核心思想:学习“残差”而非直接映射

我们不直接让网络学习一个复杂的映射 $H(x)$,而是让它学习一个残差函数 $F(x) = H(x) - x$,然后通过:

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

来得到最终输出。这相当于给网络加了一条“捷径”,允许信息直接跳过某些层。


🧱 残差块结构详解

基础两层网络(Plain block)

标准前馈过程如下:

  1. 输入 $a^{[l]}$
  2. 线性变换:$z^{[l+1]} = W^{[l+1]} a^{[l]} + b^{[l+1]}$
  3. ReLU激活:$a^{[l+1]} = g(z^{[l+1]})$
  4. 再次线性变换:$z^{[l+2]} = W^{[l+2]} a^{[l+1]} + b^{[l+2]}$
  5. 最终输出:$a^{[l+2]} = g(z^{[l+2]})$

公式表示为:

\[a^{[l+2]} = g\left(W^{[l+2]} \cdot g\left(W^{[l+1]} a^{[l]} + b^{[l+1]}\right) + b^{[l+2]}\right)\]

这是一个非线性复合函数,路径长且容易出现梯度问题。


⚡️ 引入跳跃连接(Skip Connection)

在残差块中,我们将原始输入 $a^{[l]}$ 直接加到后续层的输出上:

\[a^{[l+2]} = g\left(z^{[l+2]} + a^{[l]}\right)\]

其中:

  • $z^{[l+2]} = W^{[l+2]} a^{[l+1]} + b^{[l+2]}$
  • $a^{[l+1]} = g(z^{[l+1]})$
  • $z^{[l+1]} = W^{[l+1]} a^{[l]} + b^{[l+1]}$

所以整体可写成:

\[a^{[l+2]} = g\left( W^{[l+2]} \cdot g\left( W^{[l+1]} a^{[l]} + b^{[l+1]} \right) + b^{[l+2]} + a^{[l]} \right)\]

但更常见的是将 $a^{[l]}$ 加在激活之前,即:

\[a^{[l+2]} = g\left( z^{[l+2]} + a^{[l]} \right) = g\left( W^{[l+2]} a^{[l+1]} + b^{[l+2]} + a^{[l]} \right)\]

✅ 这条从 $a^{[l]}$ 直接到 $a^{[l+2]}$ 的路径称为“跳跃连接”或“快捷连接”。


🔄 残差块的数学表达

设残差函数为:

\[F(a^{[l]}) = W^{[l+2]} \cdot g\left( W^{[l+1]} a^{[l]} + b^{[l+1]} \right) + b^{[l+2]}\]

则输出为:

\[a^{[l+2]} = g\left( F(a^{[l]}) + a^{[l]} \right)\]

这就是残差学习的核心公式。

✅ 意义:网络只需学习 $F(a^{[l]})$,即从 $a^{[l]}$ 到 $a^{[l+2]}$ 的“变化量”。如果理想情况是恒等映射,则 $F(a^{[l]}) = 0$,此时 $a^{[l+2]} = a^{[l]}$,无需训练即可保持不变。


🏗️ 三、构建完整的残差网络(ResNet)

📐 残差网络结构

将多个残差块堆叠起来,形成深度网络。每两个残差块之间添加跳跃连接,构成一个“残差单元”。

示意图如下:

1
2
3
4
x → [Block1] → [Block2] → ... → [BlockN] → a^[L]
       ↑         ↑                   ↑
       └─────────┴───────────────────┘
                  (Skip Connections)

每个残差块内部都有一个“短路”路径(Short Cut),允许输入直接传递到下一层。


🎯 为什么这样设计?

特点解释
恒等映射友好如果某几层不需要改变特征,可以直接设 $F=0$,实现恒等映射,避免退化问题。
梯度流动顺畅跳跃连接提供了额外的梯度路径,防止梯度消失。
易于优化学习残差比学习完整映射更容易,因为残差通常较小。

📈 四、实验结果对比:Plain vs ResNet

图表分析(来自He et al., 2015)

  • 普通网络(Plain)

    • 随着层数增加,训练误差先降后升(过拟合或训练失败)。
    • 深度超过一定值后,性能变差。
  • 残差网络(ResNet)

    • 训练误差持续下降,即使深度达到100+层。
    • 测试误差也显著降低,泛化能力强。

✅ 关键结论:ResNets 可以有效缓解深度带来的训练难题,实现极深网络的成功训练。


🤔 五、为什么 ResNets 有效?(Why ResNets Work?)

1. 解决了退化问题(Degradation Problem)

  • 在普通网络中,加深网络可能使性能变差,这不是过拟合,而是模型能力不足
  • ResNets 允许网络“选择性地”使用更多层,若新层无帮助,可通过跳跃连接保持原输出。

2. 梯度更容易传播

  • 跳跃连接提供了一条直接梯度路径,避免了长期依赖问题。
  • 梯度可以通过 skip connection 快速回传,减少梯度消失风险。

3. 残差学习简化了优化任务

  • 网络不再需要从零开始学习复杂映射,只需调整少量残差。
  • 类似于“增量学习”,更接近人类认知方式。

🔬 六、实际应用与意义

✅ ResNet 的影响

  • 成为现代 CNN 架构的基础模块。
  • 广泛应用于图像识别、目标检测、语义分割等领域。
  • 后续衍生出 ResNeXt、SE-ResNet、EfficientNet 等改进版本。

🛠️ 实践建议

  • 使用 ResNet 作为骨干网络(backbone)。
  • 在自定义网络中加入跳跃连接。
  • 注意维度匹配:当输入输出维度不一致时,可用 1×1 卷积调整尺寸。

🧩 七、关键公式总结(LaTeX 兼容)

1
2
3
4
5
6
7
8
9
10
11
% 普通网络输出
a^{[l+2]} = g\left( W^{[l+2]} \cdot g\left( W^{[l+1]} a^{[l]} + b^{[l+1]} \right) + b^{[l+2]} \right)

% 残差块输出
a^{[l+2]} = g\left( W^{[l+2]} \cdot g\left( W^{[l+1]} a^{[l]} + b^{[l+1]} \right) + b^{[l+2]} + a^{[l]} \right)

% 残差函数定义
F(a^{[l]}) = W^{[l+2]} \cdot g\left( W^{[l+1]} a^{[l]} + b^{[l+1]} \right) + b^{[l+2]}

% 残差学习公式
a^{[l+2]} = g\left( F(a^{[l]}) + a^{[l]} \right)

✅ 总结:ResNets 的三大优势

优势说明
深度可控可轻松构建百层以上的网络
训练稳定梯度传播良好,不易崩溃
性能优越在 ImageNet 等任务上大幅领先

📚 补充知识:ResNet 发明者

  • Kaiming He(何凯明):提出 ResNet 的核心思想
  • Xiangyu Zhang(张祥雨)、Shaoqing Ren(任少卿)、Jian Sun(孙剑)
  • 发表于 CVPR 2016,论文《Deep Residual Learning for Image Recognition》

🔥 该工作获得当年最佳论文奖,成为深度学习里程碑之一。


🚀 下一步建议

  1. 尝试用 PyTorch 或 TensorFlow 实现一个简单的 ResNet 模块。
  2. 对比 Plain Network 和 ResNet 在 MNIST 上的表现。
  3. 学习 ResNet 的变种如 ResNeXt、DenseNet 等。

📌 本节重点回顾

残差块 = 主路径 + 跳跃连接
学习残差 $F(x)$ ,而非完整映射 $H(x)$
跳跃连接允许信息直接传递,提升梯度流动
ResNets 支持超深网络训练,性能优异
是现代视觉模型的基础架构


📘 提示:如果你正在学习深度学习,掌握 ResNet 是通往先进模型的关键一步。它不仅是技术突破,更是思维方式的革新 —— “学会做加法,而不是硬推”


🎯 记住一句话

深度网络不是越深越好,而是要让信息流得动。
—— ResNet 给我们的最大启示。

本文由作者按照 CC BY 4.0 进行授权