深度学习中的各种卷积原理解析

我们都知道卷积的重要性,但你知道深度学习领域的卷积究竟是什么,又有多少种类吗?研究学者 kunlun bai 发布了一篇介绍深度学习的卷积文章,用浅显易懂的方式介绍了深度学习领域的各种卷积及其优势。
如果你听说过深度学习中不同种类的卷积(比如 2d / 3d / 1x1 /转置/扩张(atrous)/空间可分/深度可分/平展/分组/混洗分组卷积),并且搞不清楚它们究竟是什么意思,那么这篇文章就是为你写的,能帮你理解它们实际的工作方式。   在这篇文章中,我会归纳总结深度学习中常用的几种卷积,并会试图用一种每个人都能理解的方式解释它们。
除了本文之外,还有一些关于这一主题的好文章,请参看原文。   希望本文能帮助你构建起对卷积的直观认知,并成为你研究或学习的有用参考。      
本文目录
  1.卷积与互相关 2.深度学习中的卷积(单通道版本,多通道版本) 3.3d 卷积 4.1×1 卷积 5.卷积算术 6.转置卷积(去卷积、棋盘效应) 7.扩张卷积 8.可分卷积(空间可分卷积,深度可分卷积) 9.平展卷积 10.分组卷积 11.混洗分组卷积 12.逐点分组卷积     
 卷积与互相关
  在信号处理、图像处理和其它工程/科学领域,卷积都是一种使用广泛的技术。在深度学习领域,卷积神经网络(cnn)这种模型架构就得名于这种技术。但是,深度学习领域的卷积本质上是信号/图像处理领域内的互相关(cross-correlation)。这两种操作之间存在细微的差别。   无需太过深入细节,我们就能看到这个差别。在信号/图像处理领域,卷积的定义是:
其定义是两个函数中一个函数经过反转和位移后再相乘得到的积的积分。下面的可视化展示了这一思想:
信号处理中的卷积。过滤器 g 经过反转,然后再沿水平轴滑动。在每一个位置,我们都计算 f 和反转后的 g 之间相交区域的面积。这个相交区域的面积就是特定位置出的卷积值。   这里,函数 g 是过滤器。它被反转后再沿水平轴滑动。在每一个位置,我们都计算 f 和反转后的 g 之间相交区域的面积。这个相交区域的面积就是特定位置出的卷积值。   另一方面,互相关是两个函数之间的滑动点积或滑动内积。互相关中的过滤器不经过反转,而是直接滑过函数 f。f 与 g 之间的交叉区域即是互相关。下图展示了卷积与互相关之间的差异。
信号处理中卷积与互相关之间的差异   在深度学习中,卷积中的过滤器不经过反转。严格来说,这是互相关。我们本质上是执行逐元素乘法和加法。但在深度学习中,直接将其称之为卷积更加方便。这没什么问题,因为过滤器的权重是在训练阶段学习到的。如果上面例子中的反转函数 g 是正确的函数,那么经过训练后,学习得到的过滤器看起来就会像是反转后的函数 g。因此,在训练之前,没必要像在真正的卷积中那样首先反转过滤器。     
 3d 卷积
在上一节的解释中,我们看到我们实际上是对一个 3d 体积执行卷积。但通常而言,我们仍在深度学习中称之为 2d 卷积。这是在 3d 体积数据上的 2d 卷积。过滤器深度与输入层深度一样。这个 3d 过滤器仅沿两个方向移动(图像的高和宽)。这种操作的输出是一张 2d 图像(仅有一个通道)。   很自然,3d 卷积确实存在。这是 2d 卷积的泛化。下面就是 3d 卷积,其过滤器深度小于输入层深度(核大小>m),所以这个比就变成了 2/m。也就是说,在这种渐进情况(n>>m)下,当过滤器大小为 3×3 时,空间可分卷积的计算成本是标准卷积的 2/3。过滤器大小为 5×5 时这一数值是 2/5;过滤器大小为 7×7 时则为 2/7。   尽管空间可分卷积能节省成本,但深度学习却很少使用它。一大主要原因是并非所有的核都能分成两个更小的核。如果我们用空间可分卷积替代所有的传统卷积,那么我们就限制了自己在训练过程中搜索所有可能的核。这样得到的训练结果可能是次优的。
2、深度可分卷积
现在来看深度可分卷积,这在深度学习领域要常用得多(比如 mobilenet 和 xception)。深度可分卷积包含两个步骤:深度卷积核 1×1 卷积。   在描述这些步骤之前,有必要回顾一下我们之前介绍的 2d 卷积核 1×1 卷积。首先快速回顾标准的 2d 卷积。举一个具体例子,假设输入层的大小是 7×7×3(高×宽×通道),而过滤器的大小是 3×3×3。经过与一个过滤器的 2d 卷积之后,输出层的大小是 5×5×1(仅有一个通道)。
用于创建仅有 1 层的输出的标准 2d 卷积,使用 1 个过滤器
  一般来说,两个神经网络层之间会应用多个过滤器。假设我们这里有 128 个过滤器。在应用了这 128 个 2d 卷积之后,我们有 128 个 5×5×1 的输出映射图(map)。然后我们将这些映射图堆叠成大小为 5×5×128 的单层。通过这种操作,我们可将输入层(7×7×3)转换成输出层(5×5×128)。空间维度(即高度和宽度)会变小,而深度会增大。
用于创建有 128 层的输出的标准 2d 卷积,要使用 128 个过滤器   
现在使用深度可分卷积,看看我们如何实现同样的变换。   首先,我们将深度卷积应用于输入层。但我们不使用 2d 卷积中大小为 3×3×3 的单个过滤器,而是分开使用 3 个核。每个过滤器的大小为 3×3×1。每个核与输入层的一个通道卷积(仅一个通道,而非所有通道!)。每个这样的卷积都能提供大小为 5×5×1 的映射图。然后我们将这些映射图堆叠在一起,创建一个 5×5×3 的图像。经过这个操作之后,我们得到大小为 5×5×3 的输出。现在我们可以降低空间维度了,但深度还是和之前一样。
深度可分卷积——第一步:我们不使用 2d 卷积中大小为 3×3×3 的单个过滤器,而是分开使用 3 个核。每个过滤器的大小为 3×3×1。每个核与输入层的一个通道卷积(仅一个通道,而非所有通道!)。每个这样的卷积都能提供大小为 5×5×1 的映射图。然后我们将这些映射图堆叠在一起,创建一个 5×5×3 的图像。经过这个操作之后,我们得到大小为 5×5×3 的输出。
  在深度可分卷积的第二步,为了扩展深度,我们应用一个核大小为 1×1×3 的 1×1 卷积。将 5×5×3 的输入图像与每个 1×1×3 的核卷积,可得到大小为 5×5×1 的映射图。
因此,在应用了 128 个 1×1 卷积之后,我们得到大小为 5×5×128 的层。
深度可分卷积——第二步:应用多个 1×1 卷积来修改深度。   通过这两个步骤,深度可分卷积也会将输入层(7×7×3)变换到输出层(5×5×128)。   下图展示了深度可分卷积的整个过程。
深度可分卷积的整个过程   所以,深度可分卷积有何优势呢?效率!相比于 2d 卷积,深度可分卷积所需的操作要少得多。   回忆一下我们的 2d 卷积例子的计算成本。有 128 个 3×3×3 个核移动了 5×5 次,也就是 128 x 3 x 3 x 3 x 5 x 5 = 86400 次乘法。   可分卷积又如何呢?在第一个深度卷积步骤,有 3 个 3×3×1 核移动 5×5 次,也就是 3x3x3x1x5x5 = 675 次乘法。在 1×1 卷积的第二步,有 128 个 1×1×3 核移动 5×5 次,即 128 x 1 x 1 x 3 x 5 x 5 = 9600 次乘法。因此,深度可分卷积共有 675 + 9600 = 10275 次乘法。这样的成本大概仅有 2d 卷积的 12%!   所以,对于任意尺寸的图像,如果我们应用深度可分卷积,我们可以节省多少时间?让我们泛化以上例子。现在,对于大小为 h×w×d 的输入图像,如果使用 nc 个大小为 h×h×d 的核执行 2d 卷积(步幅为 1,填充为 0,其中 h 是偶数)。为了将输入层(h×w×d)变换到输出层((h-h+1)x (w-h+1) x nc),所需的总乘法次数为:   nc x h x h x d x (h-h+1) x (w-h+1)   另一方面,对于同样的变换,深度可分卷积所需的乘法次数为:   d x h x h x 1 x (h-h+1) x (w-h+1) + nc x 1 x 1 x d x (h-h+1) x (w-h+1) = (h x h + nc) x d x (h-h+1) x (w-h+1)   则深度可分卷积与 2d 卷积所需的乘法次数比为:     现代大多数架构的输出层通常都有很多通道,可达数百甚至上千。对于这样的层(nc >> h),则上式可约简为 1 / h²。基于此,如果使用 3×3 过滤器,则 2d 卷积所需的乘法次数是深度可分卷积的 9 倍。如果使用 5×5 过滤器,则 2d 卷积所需的乘法次数是深度可分卷积的 25 倍。  
使用深度可分卷积有什么坏处吗?当然是有的。深度可分卷积会降低卷积中参数的数量。因此,对于较小的模型而言,如果用深度可分卷积替代 2d 卷积,模型的能力可能会显著下降。因此,得到的模型可能是次优的。但是,如果使用得当,深度可分卷积能在不降低你的模型性能的前提下帮助你实现效率提升。  
   分组卷积  
alexnet 论文(https://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf)在 2012 年引入了分组卷积。实现分组卷积的主要原因是让网络训练可在 2 个内存有限(每个 gpu 有 1.5 gb 内存)的 gpu 上进行。下面的 alexnet 表明在大多数层中都有两个分开的卷积路径。这是在两个 gpu 上执行模型并行化(当然如果可以使用更多 gpu,还能执行多 gpu 并行化)。
图片来自 alexnet 论文  
这里我们介绍一下分组卷积的工作方式。首先,典型的 2d 卷积的步骤如下图所示。在这个例子中,通过应用 128 个大小为 3×3×3 的过滤器将输入层(7×7×3)变换到输出层(5×5×128)。推广而言,即通过应用 dout 个大小为 h x w x din 的核将输入层(hin x win x din)变换到输出层(hout x wout x dout)。
标准的 2d 卷积   在分组卷积中,过滤器会被分为不同的组。每一组都负责特定深度的典型 2d 卷积。下面的例子能让你更清楚地理解。
具有两个过滤器分组的分组卷积
  上图展示了具有两个过滤器分组的分组卷积。在每个过滤器分组中,每个过滤器的深度仅有名义上的 2d 卷积的一半。它们的深度是 din/2。每个过滤器分组包含 dout/2 个过滤器。第一个过滤器分组(红色)与输入层的前一半([:, :, 0:din/2])卷积,而第二个过滤器分组(橙色)与输入层的后一半([:, :, din/2:din])卷积。因此,每个过滤器分组都会创建 dout/2 个通道。整体而言,两个分组会创建 2×dout/2 = dout 个通道。然后我们将这些通道堆叠在一起,得到有 dout 个通道的输出层。  
1、分组卷积与深度卷积  
你可能会注意到分组卷积与深度可分卷积中使用的深度卷积之间存在一些联系和差异。如果过滤器分组的数量与输入层通道的数量相同,则每个过滤器的深度都为 din/din=1。这样的过滤器深度就与深度卷积中的一样了。   另一方面,现在每个过滤器分组都包含 dout/din 个过滤器。整体而言,输出层的深度为 dout。这不同于深度卷积的情况——深度卷积并不会改变层的深度。在深度可分卷积中,层的深度之后通过 1×1 卷积进行扩展。
  分组卷积有几个优点。   第一个优点是高效训练。因为卷积被分成了多个路径,每个路径都可由不同的 gpu 分开处理,所以模型可以并行方式在多个 gpu 上进行训练。相比于在单个 gpu 上完成所有任务,这样的在多个 gpu 上的模型并行化能让网络在每个步骤处理更多图像。人们一般认为模型并行化比数据并行化更好。后者是将数据集分成多个批次,然后分开训练每一批。但是,当批量大小变得过小时,我们本质上是执行随机梯度下降,而非批梯度下降。这会造成更慢,有时候更差的收敛结果。   在训练非常深的神经网络时,分组卷积会非常重要,正如在 resnext 中那样。
图片来自 resnext 论文,https://arxiv.org/abs/1611.05431
  第二个优点是模型会更高效,即模型参数会随过滤器分组数的增大而减少。在之前的例子中,完整的标准 2d 卷积有 h x w x din x dout 个参数。具有 2 个过滤器分组的分组卷积有 (h x w x din/2 x dout/2) x 2 个参数。参数数量减少了一半。   第三个优点有些让人惊讶。分组卷积也许能提供比标准完整 2d 卷积更好的模型。另一篇出色的博客已经解释了这一点:https://blog.yani.io/filter-group-tutorial。这里简要总结一下。   原因和稀疏过滤器的关系有关。下图是相邻层过滤器的相关性。其中的关系是稀疏的。
在 cifar10 上训练的一个 network-in-network 模型中相邻层的过滤器的相关性矩阵。高度相关的过滤器对更明亮,而相关性更低的过滤器则更暗。图片来自:https://blog.yani.io/filter-group-tutorial   分组矩阵的相关性映射图又如何?
在 cifar10 上训练的一个 network-in-network 模型中相邻层的过滤器的相关性,动图分别展示了有 1、2、4、8、16 个过滤器分组的情况。图片来自 https://blog.yani.io/filter-group-tutorial   上图是当用 1、2、4、8、16 个过滤器分组训练模型时,相邻层的过滤器之间的相关性。那篇文章提出了一个推理:「过滤器分组的效果是在通道维度上学习块对角结构的稀疏性……在网络中,具有高相关性的过滤器是使用过滤器分组以一种更为结构化的方式学习到。从效果上看,不必学习的过滤器关系就不再参数化。这样显著地减少网络中的参数数量能使其不容易过拟合,因此,一种类似正则化的效果让优化器可以学习得到更准确更高效的深度网络。」
alexnet conv1 过滤器分解:正如作者指出的那样,过滤器分组似乎会将学习到的过滤器结构性地组织成两个不同的分组。本图来自 alexnet 论文。  
此外,每个过滤器分组都会学习数据的一个独特表征。正如 alexnet 的作者指出的那样,过滤器分组似乎会将学习到的过滤器结构性地组织成两个不同的分组——黑白过滤器和彩色过滤器。   你认为深度学习领域的卷积还有那些值得注意的地方?


基于宽带巴伦设计的3GHz至20GHz高性能集成混频器
东大金智科技10GBASE-SR/SW 400m|SFP+|FTLX8574D3BCL特征英文版
双面电路板需要的工艺
人工智能的大趋势:已经进入高中课堂!
5G技术令人惊叹 中国如何实现自我突破
深度学习中的各种卷积原理解析
黑科技让技术多样性 全球生物识别技术炙手可热
一家专门研究格式的公司可能异军突起 在VR界投下炸弹
电气线路起火的原因_防止电气线路起火的措施
保护电气系统安全的重要设备,芯森电流传感器在断路器中的应用
七孔2开插座的接线方法
全球城市复原力支出在2024年达到3350亿美元
识读电气图的基本要求
雷达液位计常见故障
有电容器的地方就有电感器
专访三星权桂贤:5G 是一次能够带来巨大变化的技术变革
让您更懂工业连接器 倍捷“连接器小百科”系列视频课程上线
与传统PC相比桌面云有哪些优势?又有哪些价值?
音质好的蓝牙耳机有哪些?音质好的蓝牙耳机排行榜
Millar收购Sentron,重新定义MEMS压力传感器行业格局