📋 论文概述

ResNet(Residual Network)是深度学习历史上的里程碑式工作。论文提出了残差学习框架,通过引入"跳跃连接"(skip connection)解决了深度神经网络的退化问题。

在 ImageNet 2015 竞赛中,152 层的 ResNet 取得了 3.57% 的 top-5 错误率,大幅超越其他方法。ResNet 的思想影响深远,成为后续几乎所有深度网络架构的基础组件。

🎯 研究动机

  • 观察到的问题:网络越深,性能反而下降(不是过拟合,而是训练误差也增加)
  • 理论上的困惑:更深的网络至少应该能复制浅层网络的性能(通过恒等映射)
  • 实际难题:深层网络难以优化,梯度消失/爆炸问题
  • 目标:让网络能够学习恒等映射,从而能够训练更深的网络

🔬 主要方法

核心思想

残差学习:不直接学习目标映射 H(x),而是学习残差 F(x) = H(x) - x

y = F(x, {Wi}) + x
  • F(x, {Wi}) 是残差函数(通过几层网络学习)
  • x 是输入(通过跳跃连接直接加到输出)
  • 如果恒等映射是最优的,网络只需将 F(x) 学习为 0 即可

技术细节

1. 残差块(Residual Block)

基本结构:

x -> [Conv-BN-ReLU] -> [Conv-BN] -> + -> ReLU
 |__________________________________|
        (shortcut connection)

2. 两种残差块设计

  • 基本块(Basic Block):两个 3x3 卷积层

    • 用于 ResNet-18, ResNet-34
  • 瓶颈块(Bottleneck Block):1x1 -> 3x3 -> 1x1 卷积

    • 用于 ResNet-50, ResNet-101, ResNet-152
    • 1x1 降维和升维,减少计算量

3. 维度匹配

当输入输出维度不同时,使用两种策略:

  • A:零填充增加维度(不增加参数)
  • B:1x1 卷积投影(少量参数)

模型架构

模型层数残差块类型参数量
ResNet-1818Basic11.7M
ResNet-3434Basic21.8M
ResNet-5050Bottleneck25.6M
ResNet-101101Bottleneck44.6M
ResNet-152152Bottleneck60.2M

📊 实验结果

ImageNet 分类

模型Top-1 ErrorTop-5 Error
VGG-1628.5%9.9%
GoogLeNet-9.15%
ResNet-3426.73%8.74%
ResNet-5024.01%7.02%
ResNet-15221.43%3.57%

关键发现

  • ResNet-152 比 VGG-16 深 8 倍,但错误率减少一半
  • 更深的 ResNet 始终优于浅层版本(解决了退化问题)

其他任务

在多个任务上取得 SOTA:

  • COCO 目标检测:+28% 相对提升
  • COCO 分割:显著超越之前方法
  • CIFAR-10:1000+ 层网络仍能有效训练

消融实验

  1. 跳跃连接的重要性:没有跳跃连接的深层网络性能严重下降
  2. 残差 vs 直接映射:残差学习明显更容易优化
  3. 投影策略:恒等映射 > 零填充 > 投影(参数越少越好)

💭 个人评价

✅ 优点

  • 简单有效:概念简单,实现容易,效果显著
  • 解决根本问题:真正解决了深度网络的退化问题
  • 可扩展性强:可以训练非常深的网络(1000+ 层)
  • 通用性好:适用于各种视觉任务和其他领域
  • 易于优化:梯度可以直接通过跳跃连接反向传播
  • 影响深远:成为现代深度学习的标准组件

⚠️ 缺点

  • 内存占用:跳跃连接需要保存中间激活,增加内存消耗
  • 计算冗余:某些特征可能被重复计算
  • 设计空间:残差块的最优设计仍有探索空间

💡 启发

  1. 从优化角度思考架构设计:让网络更容易优化比增加表达能力更重要
  2. 恒等映射的重要性:保留信息流动的"高速公路"
  3. 简单方案的力量:一个简单的想法(加法)可以产生巨大影响
  4. 深度仍然重要:在残差学习的帮助下,深度确实能带来更好性能

🔗 相关论文

前置工作

  • Highway Networks (2015) - 最早提出门控跳跃连接
  • VGG (2014) - 展示了深度的重要性,但受限于退化问题

后续发展

  • ResNeXt (2017):引入分组卷积,增加基数维度
  • DenseNet (2017):密集连接,每层连接所有前面的层
  • SE-ResNet (2018):添加通道注意力机制
  • ResNeSt (2020):Split-Attention Networks
  • Vision Transformer (2020):Transformer 中也使用了残差连接
  • Pre-activation ResNet (2016):改进残差块结构,BN-ReLU-Conv 顺序

应用扩展

  • 目标检测:Faster R-CNN, Mask R-CNN
  • 语义分割:DeepLab, PSPNet
  • 其他领域:自然语言处理、强化学习、生成模型

📝 详细笔记

为什么残差学习更容易?

直觉解释

  • 学习恒等映射 H(x) = x 很难(需要精确拟合)
  • 学习残差 F(x) = 0 很容易(权重初始化接近 0 即可)
  • 当需要微调时,学习小的残差比学习完整映射更简单

数学解释

  • 梯度反向传播:∂L/∂x = ∂L/∂y · (1 + ∂F/∂x)
  • 即使 ∂F/∂x 很小,仍有常数项 1 保证梯度流动

残差块的演进

  1. 原始 ResNet:Conv-BN-ReLU-Conv-BN-Add-ReLU
  2. Pre-activation:BN-ReLU-Conv-BN-ReLU-Conv-Add(更好)
  3. ResNeXt:增加分组卷积
  4. SE-ResNet:增加通道注意力

实现细节

  • 初始化:He initialization(考虑 ReLU 的特性)
  • 批归一化:在每个卷积后使用
  • 下采样:在残差块的第一个卷积使用 stride=2
  • 全局平均池化:替代全连接层,减少参数
  • 数据增强:随机裁剪、水平翻转、颜色抖动

为什么能训练 1000+ 层?

  1. 梯度高速公路:跳跃连接提供直接路径
  2. 有效深度:不是所有层都同等重要,网络自适应选择
  3. 集成效果:可以看作多个浅层网络的集成

阅读时间:约 2 小时
推荐指数:⭐⭐⭐⭐⭐
适合读者:所有深度学习从业者

ResNet 是 CV 领域必读论文,思想简单但影响深远。建议从头实现一遍加深理解。