ResNet 教程:理解并实现针对 CIFAR-10 的残差网络

本教程提供了关于残差网络(ResNet)的全面指南,这是一种革命性的深度学习架构,改变了图像分类任务。我们将涵盖残差学习理论、ResNet 架构、在 PyTorch 中针对 CIFAR-10 数据集的实现,以及训练和调试的实用建议。本教程适合初学者和高级实践者,包含详细的解释和代码。


1. ResNet 简介

1.1 什么是 ResNet?

ResNet 由何凯明等人在 2015 年的论文 “Deep Residual Learning for Image Recognition” 中提出,解决了训练非常深的神经网络的挑战。传统深层网络面临梯度消失退化问题(随着深度增加,准确率饱和或下降)。ResNet 通过残差学习解决了这些问题,使得具有数百甚至上千层的网络成为可能。

1.2 深层网络的问题

随着神经网络加深:

  • 梯度消失:反向传播过程中梯度变得过小,导致学习减慢或停止。
  • 退化问题:更深的网络可能比浅层网络表现更差,这不是因为过拟合,而是优化变得更困难。

ResNet 通过引入快捷连接缓解了这些问题,使网络能够学习残差函数而非直接映射。

1.3 残差学习

在传统网络中,层堆栈学习映射 H ( x ) H(x) H(x),其中 x x x 是输入, H ( x ) H(x) H(x) 是期望输出。ResNet 将其重新定义为学习残差函数
H ( x ) = F ( x ) + x H(x) = F(x) + x H(x)=F(x)+x

  • F ( x ) F(x) F(x):由层(例如几个卷积层)学习的残差映射。
  • x x x:通过快捷连接添加的输入。
  • H ( x ) H(x) H(x):最终输出,计算为残差加上输入。

如果最优映射接近于恒等函数( H ( x ) ≈ x H(x) \approx x H(x)x), F ( x ) F(x) F(x) 学习小的扰动( F ( x ) ≈ 0 F(x) \approx 0 F(x)0)比传统层直接学习恒等函数更容易。这使得训练更深的网络更简单且更有效。

1.4 快捷连接

  • 恒等快捷连接:直接将输入 x x x 添加到输出,无需额外参数( H ( x ) = F ( x ) + x H(x) = F(x) + x H(x)=F(x)+x)。
  • 投影快捷连接:当输入和输出的尺寸不同(例如通道数或空间尺寸)时,使用 1x1 卷积匹配尺寸。

1.5 ResNet 的优势

  • 优化更简单:残差连接促进梯度流动,缓解梯度消失问题。
  • 提高准确率:更深的 ResNet(例如 ResNet-50、ResNet-101)比浅层网络具有更高的准确率。
  • 可扩展性:能够训练非常深的网络(高达 1000 多层)。
  • 泛化性:广泛应用于图像分类、目标检测、分割等领域。

2. ResNet 架构

ResNet 有多种深度(例如 ResNet-18、ResNet-50、ResNet-101)。我们将重点介绍通用结构,并实现一个适合 CIFAR-10(32x32 RGB 图像,10 个类别)的较小 ResNet。

2.1 构建模块

ResNet 由残差块组成,每个块实现残差学习原理。

基础块(用于 ResNet-18/34)
  • 结构:
    • 两个 3x3 卷积层,带有批量归一化和 ReLU。
    • 快捷连接将输入添加到输出。
  • 公式: y = F ( x , { W i } ) + x y = F(x, \{W_i\}) + x y=F(x,{ Wi})+x
  • 因其简单性,用于较浅的 ResNet。
瓶颈块(用于 ResNet-50/101/152)
  • 结构:
    • 1x1 卷积(减少通道数)。
    • 3x3 卷积。
    • 1x1 卷积(恢复通道数)。
    • 每个卷积后有批量归一化和 ReLU。
    • 快捷连接。
  • 公式:与基础块相同,但 F ( x ) F(x) F(x) 更复杂。
  • 用于更深的 ResNet 以降低计算成本。

2.2 架构概览

对于 CIFAR-10,我们将设计一个 ResNet-20(20 层,适合小图像)。架构包括:

  1. 初始卷积

你可能感兴趣的:(DL,ResNet)