← 返回题目列表

分组卷积有什么作用?和深度可分离卷积有什么关系?

中等 第 21 / 25 题 更新于 2026/09/19
卷积神经网络机器学习面试题模型训练

简化版

分组卷积把输入和输出通道划成 G 组,每组独立卷积,计算量约降为普通卷积的 1/G。当 G=C_in 时得到 depthwise 卷积,但深度可分离卷积还必须再接 1×1 pointwise 卷积完成通道混合。

详细版

  • 普通卷积每个输出通道连接全部输入通道;分组卷积只连接所属组。

  • 参数量和 MACs 都从 Cout×Cin×K² 降为 Cout×Cin×K²/G

  • 分组阻断跨组信息,ResNeXt 用后续层融合,ShuffleNet 用 channel shuffle 交换通道。

  • depthwise 是组数等于输入通道数、每组一个输入通道的极端情况。

  • 理论 FLOPs 下降不保证同倍延迟下降,内存访问和硬件并行度会影响实测。

完整版教学

一、用稀疏通道连接换取计算效率

标准卷积在通道维是全连接的,表达充分但成本高。

分组卷积将权重矩阵变成块对角结构,保留组内空间建模,减少不必要的跨通道乘加。

这种稀疏性是一种架构先验:若分组过多且没有混合操作,各组会形成互不通信的信息孤岛,精度可能下降。

二、底层机制与关键公式

要求 CinCout 通常都能被 G 整除。

第 g 组只读取 Cin/G 个输入通道,并产生 Cout/G 个输出通道,最后沿通道拼接。

depthwise 层只负责每个通道内部的空间滤波,pointwise 1×1 才负责通道线性组合。

把二者合称深度可分离卷积,不能漏掉第二步。

standard params = Cout * Cin * K * K
grouped params = Cout * (Cin/G) * K * K
depthwise-separable = Cin*K*K + Cin*Cout

三、带数字的推演

Cin=Cout=64、K=3、G=4 时,普通卷积参数为 64×64×9=36,864;分组卷积为 9,216,正好降到 1/4。

若做 depthwise + pointwise,则为 64×9+64×64=4,672

四、方案对比与选择

方案/场景机制或优势主要代价
普通卷积G=1空间与通道一次完成,成本最高
分组卷积1<G<Cin组内混合,成本约 1/G
DepthwiseG=Cin仅空间滤波,需 pointwise 混通道

五、实际执行流程

输入 64 通道 -> 切成 4×16 通道 -> 4 组独立 3×3 卷积
             -> 拼接 4×16 输出 -> shuffle/1×1 促进跨组通信

六、边界条件与工程代价

GPU 对极端小组卷积可能启动许多低利用率 kernel,理论 MACs 很小但耗时未同步下降。

部署选型必须在目标硬件上测 latency,而不只报告 FLOPs。

组数改变会改变权重形状,不能把普通卷积预训练权重直接无损塞入任意分组结构;网络宽度和组数也要共同调节。

记忆钩子:沿着 G=1 → 普通卷积,1<G<C → 分组卷积,G=C → depthwise 记忆。

七、常见误区与追问

  • 误区:分组卷积就是深度可分离卷积。 depthwise 只是特殊分组,深度可分离还包含 pointwise。

  • 追问:计算量为什么约除以 G? 每个输出通道只连接原来 1/G 的输入通道。

  • 误区:FLOPs 降 4 倍,延迟一定降 4 倍。 访存、并行度和算子实现会限制实际加速。

  • 追问:组间如何交换信息? 可使用 1×1 卷积、channel shuffle 或后续非分组层。

  • 追问:ResNeXt 的 cardinality 指什么? 它对应并行变换分支或分组数,是宽度、深度之外的容量维度。

八、加强记忆

沿着 G=1 → 普通卷积,1<G<C → 分组卷积,G=C → depthwise 记忆。

成本随 G 下降,但跨组通信也随之减少,所以答案必须同时提到 1×1 或 shuffle 与硬件实测。