AB
AiBoss
Wiki

什么是深度可分离卷积(Depthwise Separable Convolution)?

深度可分离卷积是一种把标准卷积拆成「逐通道卷积 + 逐点卷积」两步的卷积操作,由 arXiv 论文《Xception: Deep Learning with Depthwise Separable Convolutions》系统讨论。该论文把它解释为一种塔数极大的 Inception 模块,并据此提出 Xception 架构。

深度可分离卷积(Depthwise Separable Convolution)是一种把标准卷积运算拆解为两个连续步骤的卷积形式:先做逐通道卷积(depthwise convolution),再做逐点卷积(pointwise convolution)。它要解决的问题是:在保持卷积神经网络表达能力的同时,减少一次卷积所需的乘加运算量与参数量,让同样的参数预算能承载更深的网络或更大的输入。

这一术语在 arXiv 论文《Xception: Deep Learning with Depthwise Separable Convolutions》中被系统讨论。该论文由 François Chollet 提交,2016 年 10 月 7 日首次提交,2017 年 4 月 4 日发布第三版。

为什么重要

在深度可分离卷积被明确命名和讨论之前,卷积神经网络中的主流做法是标准卷积:一个卷积核同时在空间维度(高、宽)和通道维度上做加权求和。也就是说,一个输出通道的每个位置,都要对输入的所有通道、以及卷积核覆盖的所有空间位置做乘加。这种做法的代价是:计算量与输入通道数、输出通道数、卷积核面积三者同时成正比,参数量同样如此。

当网络变深、通道数变大时,这种「空间与通道一起算」的方式会迅速推高计算开销。研究者因此尝试各种折中结构。论文指出,Inception 系列模块可以被理解为处于标准卷积与深度可分离卷积之间的一个中间形态:它把通道维度的处理拆成若干分支,但并没有完全拆开。论文由此提出一个观察——深度可分离卷积可以看作「塔数极大」的 Inception 模块,也就是把通道维度的拆分推到极致。

这个观察的意义在于:它把一种看似工程化的轻量化技巧,与已有的模块化设计思路接上了线,从而说明深度可分离卷积不是凭空出现的近似手段,而是某条设计谱系的端点。

工作机制

深度可分离卷积的核心做法是把一次标准卷积拆成两步,两步各自负责一个维度。

  • 第一步:逐通道卷积。对输入的每一个通道单独施加一个空间卷积核,通道之间互不混合。也就是说,第 i 个通道只由第 i 个卷积核处理,输出通道数与输入通道数相同。这一步只负责在空间维度上提取局部模式,不负责跨通道组合信息。
  • 第二步:逐点卷积。使用 1×1 的卷积核,在通道维度上做线性组合。它把上一步得到的各通道特征按权重相加,映射到目标输出通道数。这一步只负责跨通道的信息融合,不涉及空间邻域。

把这两步串起来,就得到与标准卷积形状相同的输出,但计算的组织方式完全不同:标准卷积在一次运算里同时完成空间聚合与通道聚合,而深度可分离卷积把这两件事分派给两个独立的阶段。

论文给出的解释框架是:一个深度可分离卷积相当于一个 Inception 模块,其中分支(塔)的数量被推到最大。在 Inception 模块中,输入被切成若干组,每组先做各自的变换再拼接;当分组数等于通道数、每组只含一个通道时,这个模块就退化为逐通道卷积加逐点卷积的形式。因此,深度可分离卷积可以视为 Inception 思路的一个极端情形。

需要强调的是,上述「等价于塔数极大的 Inception 模块」是该论文提出的解释,而不是对所有卷积结构的普遍定义。它说明的是两种设计之间的对应关系,而不是说任何深度可分离卷积都必须由 Inception 模块改写而来。

典型例子

论文中给出的主要实例是 Xception 架构。作者以 Inception 为灵感,提出一种新的深度卷积神经网络架构,其做法是把 Inception 模块整体替换为深度可分离卷积。这个架构被命名为 Xception。

论文报告了在 ImageNet 数据集上的对比结果:Xception 在该数据集上略微优于 Inception V3,而 Inception V3 正是为 ImageNet 设计的。论文还报告,在一个包含 3.5 亿张图像、17000 个类别的更大规模图像分类数据集上,Xception 显著优于 Inception V3。

论文特别说明,Xception 架构与 Inception V3 具有相同数量的参数。因此论文认为,上述性能提升并非来自模型容量的增加,而是来自对模型参数更高效的利用。这一对比是论文自身的实验结论,其适用范围限于论文所报告的数据集与设置。

边界与常见误解

第一,深度可分离卷积不是「更小的标准卷积」。它改变的是运算的分解方式,而不是简单地把卷积核缩小。逐通道卷积与逐点卷积各自承担不同的职责,缺少任何一步都无法得到与标准卷积对应的输出形状。

第二,把深度可分离卷积等同于 Inception 模块是一种特定视角下的解释,出自该论文,而不是两者在实现层面的同一。论文的表述是「可以理解为」,强调的是设计谱系上的对应,而非结构上的完全一致。

第三,参数效率的提升不等于在所有任务上都更好。论文报告的优势是在 ImageNet 以及一个包含 3.5 亿张图像、17000 个类别的更大规模图像分类数据集上测得的,且是在与 Inception V3 参数量相同的条件下比较。这些结论不能直接外推到其他任务、其他数据集或其他网络规模。

第四,拆分成两步会带来额外的中间张量与两次运算的调度,因此「计算更省」与「实现更简单」并不是同一件事。论文关注的是参数使用效率与分类性能,并未主张这种分解在所有硬件与所有框架上都带来同等的实际收益。

第五,深度可分离卷积本身是一种算子层面的构造,它不规定网络整体如何堆叠、通道数如何增长、是否使用残差连接。Xception 是论文给出的一个具体架构选择,而不是深度可分离卷积的唯一用法。

参考资料