本教程提供了关于残差网络(ResNet)的全面指南,这是一种革命性的深度学习架构,改变了图像分类任务。我们将涵盖残差学习理论、ResNet 架构、在 PyTorch 中针对 CIFAR-10 数据集的实现,以及训练和调试的实用建议。本教程适合初学者和高级实践者,包含详细的解释和代码。
ResNet 由何凯明等人在 2015 年的论文 “Deep Residual Learning for Image Recognition” 中提出,解决了训练非常深的神经网络的挑战。传统深层网络面临梯度消失和退化问题(随着深度增加,准确率饱和或下降)。ResNet 通过残差学习解决了这些问题,使得具有数百甚至上千层的网络成为可能。
随着神经网络加深:
ResNet 通过引入快捷连接缓解了这些问题,使网络能够学习残差函数而非直接映射。
在传统网络中,层堆栈学习映射 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
如果最优映射接近于恒等函数( 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)比传统层直接学习恒等函数更容易。这使得训练更深的网络更简单且更有效。
ResNet 有多种深度(例如 ResNet-18、ResNet-50、ResNet-101)。我们将重点介绍通用结构,并实现一个适合 CIFAR-10(32x32 RGB 图像,10 个类别)的较小 ResNet。
ResNet 由残差块组成,每个块实现残差学习原理。
对于 CIFAR-10,我们将设计一个 ResNet-20(20 层,适合小图像)。架构包括: