在深度学习领域,构建更强大的神经网络通常有两条路径: 让网络更深或更宽。
VGG 架构展示了深度的影响力,它通过堆叠大量简单、重复的层取得了显著效果。ResNet 引入了残差连接,使得训练极深的神经网络成为可能,而不会陷入可怕的梯度消失问题。与此同时,谷歌的 Inception 系列则开辟了另一条通往宽度的道路,它创建了多分支模块,每个模块都有精心设计的并行路径和专用卷积核。
但如果还有另一种方式呢?
如果我们不只扩展深度或宽度,而是去探索神经网络设计中的一个新的第三维度呢?
这就是加州大学圣地亚哥分校和 Facebook 人工智能研究院的研究人员在论文《用于深度神经网络的聚合残差变换》中提出的核心思想,他们引入了 ResNeXt 架构。ResNeXt 建立在 Inception 的“分割–变换–合并”概念之上,但将其与 ResNet 的简洁性和可扩展性相结合,并引入了一个名为基数 (cardinality) 的新维度。
研究的惊人发现是什么?增加基数——即一个块内并行变换的数量——在提升准确率方面,可能比单纯地增加深度或宽度更有效。
在本文中,我们将深入探讨基数的含义、ResNeXt 的工作原理,以及为什么它代表了我们在扩展神经网络思路上的一次转变。
背景: 从特征工程到网络工程
计算机视觉模型的演变史,就是一个从手工“特征工程” (如 SIFT、HOG) 到自动化“网络工程”的转变过程,在后者中,特征是直接从数据中学习的。
VGG 与 ResNet —— 简洁性与深度的结合
VGG 网络倡导通过堆叠重复的卷积块 (通常是 3×3
卷积) 来构建具有统一且易于配置设计的深层网络架构。
ResNet 在此基础上更进一步,引入了残差 (shortcut) 连接,让信息和梯度能更容易地在网络中流动。这使得训练拥有数百层的极深模型成为可能。
一个标准的 ResNet 瓶颈块使用 1×1
卷积先减少通道数,然后再恢复通道数,从而使计算成本高昂的 3×3
卷积在降维后的表示上进行操作。
Inception —— 分割、变换、合并
相比之下,Inception 模块探索的是宽度。
一个 Inception 块会:
- 分割 (Splits) 输入,通过
1×1
卷积将其拆分成几个维度较低的特征图。 - 变换 (Transforms) 每个分支,使用不同尺寸的卷积核 (
3×3
、5×5
等) 。 - 合并 (Merges) 各分支的输出,通过拼接 (concatenation) 的方式。
这种设计以相对较低的计算成本提升了模型的表征能力。
但它的代价是: 每个分支都是人工精心设计的,具有定制的卷积核尺寸和数量,这增加了复杂性,并且在不进行手动调整的情况下,限制了其在新任务上的可移植性。
问题是: 我们能否将 ResNet/VGG 的简洁性与 Inception 的分割–变换–合并设计的强大功能结合起来?
ResNeXt 的思想: 基数 (Cardinality)
ResNeXt 的创新始于重新审视神经网络中最基本的单元: 神经元。
一个简单的神经元对其输入执行加权求和:
\[ \sum_{i=1}^{D} w_i x_i \]图 2. 一个简单神经元的操作可以看作: 将每个输入 \(x_i\) 分割,通过乘以权重 \(w_i\) 进行变换,并通过求和来聚合结果。
从这个角度看,神经元的工作包括:
- 分割 (Splitting): 将输入向量 \( \mathbf{x} \) 分解成更小的分量。
- 变换 (Transforming): 应用一个函数 (简单情况下为缩放) 。
- 聚合 (Aggregating): 将变换后的结果求和。
聚合变换
ResNeXt 对这一概念进行了泛化:
如果每次变换不再是简单的缩放,而是让每个变换 \( \mathcal{T}_i \) 本身就是一个小型神经网络,会怎样呢?聚合多个这样的变换可以得到:
其中:
- \( C \) = 基数 (cardinality) = 并行变换的数量
- 每个变换 \( \mathcal{T}_i \) 具有相同的架构 (拓扑结构)
在实践中,每个 \( \mathcal{T}_i \) 都是一个瓶颈残差块:1×1
卷积 → 3×3
卷积 → 1×1
卷积,就像在 ResNet 中一样。
聚合变换则成为残差函数:
\[ \mathbf{y} = \mathbf{x} + \sum_{i=1}^C \mathcal{T}_i(\mathbf{x}) \]图 1. 左: ResNet 瓶颈块 (
C=1
,宽度=64) 。右: ResNeXt 块 (C=32
,每条路径宽度=4) 。在探索更高基数的同时,保持了相当的总计算量。
ResNeXt 模块的三种等价视图
ResNeXt 最优雅的特性之一是,一个模块可以用三种等价形式来表示:
图 3. 同一聚合变换的等价实现。
- 分割–变换–求和 (Fig. 3a): 概念最简单——将输入分成 \(C\) 条路径,分别变换,然后求和输出。
- 早期拼接 (Fig. 3b): 类似 Inception-ResNet——先拼接各路径的输出,再通过一个
1×1
卷积合并。 - 分组卷积 (Fig. 3c): 效率最高——使用一个包含多个组的卷积层,每个组独立处理一部分输入通道。在 ResNeXt 中,
3×3
卷积是基数为 \(C\) 的分组卷积。
分组卷积最早在 AlexNet 中作为硬件限制下的权宜之计出现,而在这里演变成简洁的架构工具。其妙处在于: 整个网络可以通过堆叠相同的基于分组卷积的模块来构建,并遵循 ResNet 的下采样规则。
控制复杂度
为了公平衡量基数的影响,研究人员在各对比实验中保持计算复杂度和参数数量大致相同。
一个 ResNeXt 瓶颈块的参数数量为:
\[ \text{Params} \approx C \cdot (256 \cdot d + 3\cdot 3 \cdot d \cdot d + d \cdot 256) \]- \(C\) = 基数
- \(d\) = 瓶颈宽度 (每条路径的通道数)
通过反向调整 \(C\) 和 \(d\),他们保持了 FLOPs/参数量恒定。
例如: ResNet 瓶颈块 (C=1
, d=64
) ≈ ResNeXt 瓶颈块 (C=32
, d=4
)。
表 2. 随着基数 \(C\) 增加,宽度 \(d\) 相应减小,以维持恒定复杂度。
实验: 基数 vs. 宽度/深度
在恒定复杂度下的基数比较
在相同 FLOPs 下,增加基数可以降低 top-1 错误率:
表 3. 更高的基数在不增加计算量的情况下带来持续的准确率提升。
图 5. ResNeXt 在训练误差和验证误差上均更低,表明其表征学习能力更强,而不仅是正则化效果。
例如:
- ResNet-50 (
1×64d
): 23.9% 错误率 - ResNeXt-50 (
32×4d
): 22.2% 错误率
将计算预算加倍
在拥有约 ResNet-101 两倍 FLOPs 时,最优使用方式是?
- 加深网络 (ResNet-200)
- 加宽网络 (增加 ResNet-101 的瓶颈宽度)
- 增加基数 (如 ResNeXt-101
64×4d
)
表 4. 相较于深度或宽度,基数带来了最大的错误率下降。
结果:
- 深度提升 (ResNet-200): 约 0.3% 改进
- 宽度提升: 约 0.7% 改进
- 基数提升 (ResNeXt-101
64×4d
):** 1.6% 改进**
在其他任务上的泛化能力
ResNeXt 的优势延伸至多种数据集:
- ImageNet-5K: 在更大数据集上,ResNeXt 的准确率优势更明显。
- CIFAR-10:
图 7. 从每个参数的效率来看,基数相比宽度能更高效地提升准确率。
- COCO 目标检测: 在相同复杂度下,使用 ResNeXt 作为骨干网络可提升 Faster R-CNN 的检测性能。
达到业界领先水平的结果
通过使用 \(320\times320\) 的输入,ResNeXt 在 ImageNet-1K 上取得了 4.4% 的单裁剪 (single-crop) top-5 错误率,超过了 ResNet、Inception-v3/v4 以及 Inception-ResNet-v2,并且架构更加简洁。
表 5. ResNeXt 与其他先进架构在 ImageNet-1K 上的对比。
结论与启示
ResNeXt 的研究引入了基数,作为继深度和宽度之后的第三个架构维度:
- 提升准确率的新杠杆: 基数——模块中并行变换的数量,相比扩展深度或宽度更高效地解锁准确率提升。
- 高效性: 在增强表征能力的同时保持简洁性。分组卷积使实现变得简单且易扩展。
- 通用性: 优势可迁移到不同数据集和任务,从图像分类到目标检测。
ResNeXt 的配方很直接: 在已验证有效的架构 (如 ResNet) 中,将瓶颈块替换为具有更高基数的分组卷积块。这一简单的改动即可带来显著准确率提升,而无需复杂的手工设计模块。
这一思想此后影响了诸多先进架构,巩固了 ResNeXt 在神经网络设计史上的里程碑地位。