📋 论文概述
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-18 | 18 | Basic | 11.7M |
| ResNet-34 | 34 | Basic | 21.8M |
| ResNet-50 | 50 | Bottleneck | 25.6M |
| ResNet-101 | 101 | Bottleneck | 44.6M |
| ResNet-152 | 152 | Bottleneck | 60.2M |
📊 实验结果
ImageNet 分类
| 模型 | Top-1 Error | Top-5 Error |
|---|---|---|
| VGG-16 | 28.5% | 9.9% |
| GoogLeNet | - | 9.15% |
| ResNet-34 | 26.73% | 8.74% |
| ResNet-50 | 24.01% | 7.02% |
| ResNet-152 | 21.43% | 3.57% |
关键发现:
- ResNet-152 比 VGG-16 深 8 倍,但错误率减少一半
- 更深的 ResNet 始终优于浅层版本(解决了退化问题)
其他任务
在多个任务上取得 SOTA:
- COCO 目标检测:+28% 相对提升
- COCO 分割:显著超越之前方法
- CIFAR-10:1000+ 层网络仍能有效训练
消融实验
- 跳跃连接的重要性:没有跳跃连接的深层网络性能严重下降
- 残差 vs 直接映射:残差学习明显更容易优化
- 投影策略:恒等映射 > 零填充 > 投影(参数越少越好)
💭 个人评价
✅ 优点
- 简单有效:概念简单,实现容易,效果显著
- 解决根本问题:真正解决了深度网络的退化问题
- 可扩展性强:可以训练非常深的网络(1000+ 层)
- 通用性好:适用于各种视觉任务和其他领域
- 易于优化:梯度可以直接通过跳跃连接反向传播
- 影响深远:成为现代深度学习的标准组件
⚠️ 缺点
- 内存占用:跳跃连接需要保存中间激活,增加内存消耗
- 计算冗余:某些特征可能被重复计算
- 设计空间:残差块的最优设计仍有探索空间
💡 启发
- 从优化角度思考架构设计:让网络更容易优化比增加表达能力更重要
- 恒等映射的重要性:保留信息流动的"高速公路"
- 简单方案的力量:一个简单的想法(加法)可以产生巨大影响
- 深度仍然重要:在残差学习的帮助下,深度确实能带来更好性能
🔗 相关论文
前置工作:
- 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 保证梯度流动
残差块的演进
- 原始 ResNet:Conv-BN-ReLU-Conv-BN-Add-ReLU
- Pre-activation:BN-ReLU-Conv-BN-ReLU-Conv-Add(更好)
- ResNeXt:增加分组卷积
- SE-ResNet:增加通道注意力
实现细节
- 初始化:He initialization(考虑 ReLU 的特性)
- 批归一化:在每个卷积后使用
- 下采样:在残差块的第一个卷积使用 stride=2
- 全局平均池化:替代全连接层,减少参数
- 数据增强:随机裁剪、水平翻转、颜色抖动
为什么能训练 1000+ 层?
- 梯度高速公路:跳跃连接提供直接路径
- 有效深度:不是所有层都同等重要,网络自适应选择
- 集成效果:可以看作多个浅层网络的集成
阅读时间:约 2 小时
推荐指数:⭐⭐⭐⭐⭐
适合读者:所有深度学习从业者
ResNet 是 CV 领域必读论文,思想简单但影响深远。建议从头实现一遍加深理解。