返回介绍

数学基础

统计学习

深度学习

工具

Scala

三、基本卷积的变体

发布于 2023-07-17 23:38:25 字数 16645 浏览 0 评论 0 收藏 0

3.1 局部连接

  1. 局部连接与卷积很类似:局部连接也是连接受限的,但是每个连接都有自己的权重。

    即:局部连接实现了稀疏交互,但是没有实现参数共享。

  2. 假设局部连接的权重矩阵为一个 6 维的张量 $ MathJax-Element-363 $ ,其元素为 $ MathJax-Element-245 $ , 其中: $ MathJax-Element-345 $ 为输出的通道; $ MathJax-Element-247 $ 为输出通道中的位置; $ MathJax-Element-248 $ 为输入的通道; $ MathJax-Element-249 $ 为输入通道中的位置。

    则局部连接可以表示为:

    $ Z_{i,j,k}=\sum_{l}\sum_m\sum_nV_{l,j+m,k+n}W_{i,j,k,l,m,n} $

    当权重共享时, $ MathJax-Element-240 $ ,此时局部连接操作退化到卷积操作。

  3. 局部连接也称作非共享卷积,因为它并不横跨位置来共享参数。

    • 与基本卷积相比,权重参数由 $ MathJax-Element-241 $ 。

      这说明 $ MathJax-Element-363 $ 中,不同位置的输出的计算过程中,采用了不同的权重。这意味着局部连接不满足输入的等变表示。

    • 与全连接相比,局部连接实现了稀疏交互。

  4. 如果知道特征是一小部分区域的函数,而不是整个区域的函数时,局部连接层很有用。此时只需要处理部分输入即可。如:如果需要辨别一张图片是否人脸图像,则只需要在图像的下部中央部分寻找即可。

    卷积也可以处理局部特征,但是对于不满足平移不变性的特征,卷积层无能为力。此时需要使用局部连接层。

    在图片中识别是否存在人脸,这满足平移不变性,因此也可以使用卷积来处理。

  5. 有时候,可以进一步限制卷积层或者局部连接层。如:限制输出的通道 $ MathJax-Element-345 $ 仅仅利用了一部分输入通道(而不是全部输入通道) 的数据。

    这种方案减少了通道之间的连接,使得模型的参数更少,降低了存储消耗,减少了计算量。

3.2 拼接卷积

  1. 拼接卷积tiled convolution 对卷积和局部连接进行了折中:学习一组核,使得当核在空间移动时,它们可以循环利用。

    • 拼接卷积在相邻的位置上拥有不同的过滤器,就像局部连接层一样。
    • 拼接卷积每隔一定的位置,使用相同的过滤器,就像卷积层一样。
    • 拼接卷积的参数仅仅会增长常数倍,常数就是过滤器集合的大小。
  2. 假设拼接卷积的权重矩阵为一个 6 维的张量 $ MathJax-Element-363 $ ,其元素为 $ MathJax-Element-245 $ , 其中: $ MathJax-Element-345 $ 为输出的通道; $ MathJax-Element-247 $ 为输出通道中的位置; $ MathJax-Element-248 $ 为输入的通道; $ MathJax-Element-249 $ 为输入通道中的位置。

    则拼接卷积可以表示为:

    $ Z_{i,j,k}=\sum_{l}\sum_m\sum_nV_{l,j+m,k+n}W_{i,j\%t,k\%t,l,m,n} $

    这里百分号是取摸运算, $ MathJax-Element-252 $ 为不同的核的数量(它也就是核的轮换周期)。

    • 如果 $ MathJax-Element-252 $ 等于输入的尺寸,则拼接卷积退化成局部连接。
    • 如果 $ MathJax-Element-252 $ 等于 1 ,则拼接卷积退化成卷积。
  3. 通常在卷积层会引入非线性运算,而在非线性运算中,需要加入偏置项。

    • 对于局部连接,每个输入单元都有各自的偏置。

    • 对于拼接卷积,偏置项通过与核一样的拼接模式来共享。

    • 对于常规卷积,通常在输入通道级别上共享偏置。即:同一个通道使用一个偏置项。

      如果输入是固定大小的,也可以在每个输入位置上学习一个单独的偏置。其好处是:允许模型校正输入图像中不同位置的差异。

3.3 分组卷积

  1. 分组卷积 Group convolution :将多个卷积核拆分为分组,每个分组单独执行一系列运算之后,最终在全连接层再拼接在一起。

    • 通常每个分组会在单独的GPU 中训练,从而利用多GPU 来训练。

    • 分组卷积的重点不在于卷积,而在于分组:在执行卷积之后,将输出的feature map 执行分组。然后在每个组的数据会在各个GPU 上单独训练。

      对卷积的输出feature map 分组,等价于在卷积过程中对卷积核进行分组。

  2. 分组卷积在网络的全连接层才进行融合,这使得每个GPU 中只能看到部分通道的数据,这降低了模型的泛化能力。

    如果每次分组卷积之后,立即融合卷积的结果则可以解决这个问题。

  3. 分组卷积降低了模型的参数数量以及计算量。

    假设输入feature map 具有 $ MathJax-Element-329 $ 的输入通道、宽/高分别为 $ MathJax-Element-254 $ ,假设卷积核的宽/高分别为 $ MathJax-Element-255 $ ,有 $ MathJax-Element-334 $ 个卷积核。则:

    • 参数数量: $ MathJax-Element-257 $
    • 计算量(以一次乘-加计算为单位): $ MathJax-Element-258 $ 。 其中 $ MathJax-Element-259 $ 分别为输出feature map 的宽/高

    假设采用分组卷积,将输入通道分成了 $ MathJax-Element-260 $ 组,则分组之后:

    • 参数数量: $ MathJax-Element-261 $
    • 计算量(以一次乘-加计算为单位): $ MathJax-Element-262 $

    因此分组卷积的参数数量、计算量均为标准卷积计算的 $ MathJax-Element-263 $ 。

    考虑到全连接层的参数数量在网络中占据主导地位,因此即使采取分组卷积,网络最终的参数数量的减小幅度不会很大。

    因此分组卷积主要降低的是计算量。

  4. 分组卷积最早在AlexNet 中出现。由于当时的硬件资源的限制,训练AlexNet 时卷积操作无法全部放在同一个GPU 中处理。因此,通过分组来在多个GPU 上分别处理,然后将多个GPU 的处理结果融合。

3.4 小卷积核替代

  1. AlexNet 中用到了一些非常大的卷积核,如11x11、5x5 等尺寸的卷积核。

    • 卷积核的尺寸越大,则看到的图片信息越多,因此获得的特征会越好。

      但是卷积核的尺寸越大,模型的参数数量会爆涨,不利于模型的深度的增加,计算量和存储量也大幅上升。

    • 卷积核的尺寸越小,模型的参数数量越少,模型可以越深。

      但是卷积核的尺寸太小,则只能看到图片的一个非常小的局部区域,获得的特征越差。

  2. 一种解决方案是:用多个小卷积层的堆叠来代替较大的卷积核。

    假设大卷积核的宽度是 $ MathJax-Element-269 $ ,则每经过一层,输出的宽度减少了 $ MathJax-Element-265 $ 。假设希望通过 $ MathJax-Element-266 $ 个宽度为 $ MathJax-Element-267 $ 的小卷积核来代替,则为了保持输出的大小一致,需要满足:

    $ k-1=n(k^\prime -1) $
    • 当 $ MathJax-Element-268 $ 时,即用尺寸为 3 的卷积核代替尺寸为 $ MathJax-Element-269 $ 的卷积核时,有: $ MathJax-Element-270 $

    • 如:用 2 个 3x3 的卷积核来代替1个 5x5 的卷积核。

      假设输入通道数为 $ MathJax-Element-329 $ ,输出通道数为 $ MathJax-Element-334 $ ,则5x5 卷积核的参数数量为 $ MathJax-Element-273 $ ;

      而 2个 3x3 卷积核的参数数量为 $ MathJax-Element-274 $ ,是前者的 72% 。

    • 如果用 5 个 3x3 的卷积核来代替1个 11x11 的卷积核,则替代后的卷积核的参数数量是替代前的 37% 。

  3. 用多个小卷积层的堆叠代替一个大卷积层的优点:

    • 可以实现与大卷积层相同的感受野。

    • 具有更大的非线性,网络表达能力更强。

      虽然卷积是线性的,但是卷积层之后往往跟随一个ReLU 激活函数。这使得多个小卷积层的堆叠注入了更大的非线性。

    • 具有更少的参数数量。

  4. 小卷积层堆叠的缺点是:加深了网络的深度,容易引发梯度消失等问题,从而使得网络的训练难度加大。

  5. 用多个小卷积层的堆叠代替一个大卷积层可以看作是一种正则化:要求大卷积核通过多个小卷积核进行分解(同时在小卷积层之间注入非线性)。

  6. 感受野:一个特定的CNN 输出单元在输入空间所受影响的区域。上图中,染色的区域为某个输出单元的感受野。

    • 一个感受野可以用中心位置和大小来表示。
    • 用多个小卷积核来代替大卷积核时,输出单元的感受野不会受到影响。
  7. 通常选择使用3x3 卷积核的堆叠:

    • 1x1 的卷积核:它无法提升感受野,因此多个1x1 卷基层的堆叠无法实现大卷积层的感受野。
    • 2x2 的卷积核:如果希望输入的feature map 尺寸和输出的feature map 尺寸不变,则需要对输入执行非对称的padding。此时有四种padding 方式,填充方式的选择又成了一个问题。
    • 3x3 的卷积核:可以提升感受野,对称性填充(不需要考虑填充方式),且尺寸足够小。

3.5 非对称卷积核

  1. 在卷积核分解过程中,还有一种分解方式:非对称卷积核分解,将nxn 卷积替换为1xn 卷积和nx1 卷积。

  2. 非对称卷积核的分解有以下优点:

    • 感受野保持不变。

    • 节省计算成本,尤其是当n 较大时。

      假设输入通道数和输出通道数都为 $ MathJax-Element-277 $ ,原始卷积nxn 的参数数量为: $ MathJax-Element-276 $ 。

      假设非对称卷积的1xn 的输出通道数也是 $ MathJax-Element-277 $ ,则非对称分解时参数数量为: $ MathJax-Element-278 $ 。它是原始卷积的参数数量的 $ MathJax-Element-279 $ 。

  3. Inception v2 论文中作者指出:对于较大的特征图 ,这种分解不能很好的工作;但是对于中等大小的特征图(尺寸在12~20 之间),这种分解效果非常好。

    因此非对称卷积分解通常用在较高的网络层。

3.6 多尺寸卷积核

  1. 图像中目标对象的大小可能差别很大。如下图所示,每张图像中狗占据区域都是不同的。

    由于信息区域的巨大差异,为卷积操作选择合适的卷积核尺寸就非常困难。

    • 信息分布更具有全局性的图像中,更倾向于使用较大的卷积核。如最最侧的图片所示。
    • 信息分布更具有局部性的图像中,更倾向于使用较小的卷积核。如最右侧的图片所示。

  2. 一个解决方案是:分别使用多个不同尺寸的卷积核从而获得不同尺度的特征。然后将这些特征拼接起来。

    • Inception 系列的网络中,大量使用这种思想。

      在最初版本的Inception 结构中,一个输入图片会分别同时经过1x1,3x3,5x5 的卷积核的处理;得到的特征再组合起来。

    • 通过多种尺度的卷积核,无论感兴趣的信息区域尺寸多大,总有一种尺度的卷积核与之匹配。这样总可以提取到合适的特征。

  3. 多尺寸卷积核存在一个严重的问题:参数数量比单尺寸卷积核要多很多,这就使得计算量和存储量都大幅增长。

3.7 1x1 卷积核

  1. 1x1 卷积并不是复制输入,它会进行跨通道的卷积。它有三个作用:

    • 实现跨通道的信息整合。

    • 进行通道数的升维和降维。

    • 在不损失分辨率的前提下(即:feature map 尺寸不变),大幅增加非线性。

      事实上1x1 卷积本身是通道的线性组合,但是通常会在1x1卷积之后跟随一个ReLU 激活函数。

  2. 假设输入张量为 $ MathJax-Element-325 $ ,即: $ MathJax-Element-329 $ 个通道、宽度为 $ MathJax-Element-327 $ 、高度为 $ MathJax-Element-328 $ 。

    • 如果图片直接通过一个宽度为 $ MathJax-Element-284 $ ,高度为 $ MathJax-Element-285 $ 、输出通道为 $ MathJax-Element-334 $ 的卷积层,则参数数量为:

      $ C_I\times C_O\times W_K\times H_K $
    • 如果图片先通过一个1x1、输出通道为 $ MathJax-Element-291 $ 的卷积层,再经过一个 $ MathJax-Element-333 $ 、输出通道为 $ MathJax-Element-291 $ 的卷积层;最后经过一个1x1、输出通道为 $ MathJax-Element-334 $ 的卷积层。

      这里中间卷积层的输出通道不一定为 $ MathJax-Element-291 $ ,但是一定是一个比 $ MathJax-Element-334 $ 小的数。其作用是起到了信息压缩的作用(类似于PCA 降维)。

      则参数数量为:

      $ C_I\times1\times 1 \times \sqrt{C_O}+\sqrt{C_O}\times W_K\times H_K\times \sqrt{C_O}+\sqrt{C_O}\times1\times 1\times C_O\\ =C_I\sqrt{C_O}+W_KH_KC_O+C_O^{3/2} $
    • 当 $ MathJax-Element-293 $ 时(输入通道数与输出通道数接近), $ MathJax-Element-294 $ ,以及 $ MathJax-Element-295 $ 。

      则二者参数的数量比例为: $ MathJax-Element-296 $ 。因此后者的参数数量远远小于前者。

  3. 1x1 卷积层通常会形成瓶颈层bottleneck layer 。瓶颈层指的是网络中信息被压缩的层。

    • 输入feature map 中每个元素值代表某个特征,将所有图片在该feature map 上的取值扩成为矩阵:

      $ \mathbf P = \begin{bmatrix} P_{1,1}&P_{1,2}&\cdots&P_{1,n}\\ P_{2,1}&P_{2,2}&\cdots&P_{2,n}\\ \vdots&\vdots&\ddots&\vdots\\ P_{N,1}&P_{N,2}&\cdots&P_{N,n}\\ \end{bmatrix} $

      其中 $ MathJax-Element-297 $ 为样本的数量, $ MathJax-Element-298 $ 。即:行索引代表样本,列索引代表特征。所有特征由feature map 展平成一维得到。

      通常 $ MathJax-Element-299 $ ,则输入矩阵 $ MathJax-Element-324 $ 的秩 $ MathJax-Element-301 $ 。假设输入矩阵 $ MathJax-Element-324 $ 的秩为 $ MathJax-Element-314 $ 。

    • 不考虑1x1 卷积的非线性层,则1x1 卷积是输入特征的线性组合。输出 featuremap 以矩阵描述为:

      $ \mathbf P^* = \begin{bmatrix} P^*_{1,1}&P^*_{1,2}&\cdots&P^*_{1,n^*}\\ P^*_{2,1}&P^*_{2,2}&\cdots&P^*_{2,n^*}\\ \vdots&\vdots&\ddots&\vdots\\ P^*_{N,1}&P^*_{N,2}&\cdots&P^*_{N,n^*}\\ \end{bmatrix} $

      其中 $ MathJax-Element-304 $ 。

    • 信息膨胀过程:当 $ MathJax-Element-305 $ 时, $ MathJax-Element-323 $ 的容量要大于 $ MathJax-Element-324 $ 的信息,因此所有的有效信息都可以得到保留。

    • 信息压缩过程:当 $ MathJax-Element-308 $ 时, $ MathJax-Element-323 $ 的容量要小于 $ MathJax-Element-324 $ 的信息,这时需要参考 $ MathJax-Element-324 $ 的有效信息。

      $ MathJax-Element-324 $ 的有效信息由矩阵 $ MathJax-Element-324 $ 的秩 $ MathJax-Element-314 $ 决定。

      • 当矩阵 $ MathJax-Element-324 $ 是满秩时,即: $ MathJax-Element-316 $ ,此时对 $ MathJax-Element-324 $ 的任何压缩都会丢失有效信息。

      • 当矩阵 $ MathJax-Element-324 $ 不是满秩时:

        • 当 $ MathJax-Element-322 $ 非常小时, $ MathJax-Element-323 $ 的容量要小于 $ MathJax-Element-324 $ 的有效信息,此时会导致有效信息丢失。
        • 当 $ MathJax-Element-322 $ 较大时, $ MathJax-Element-323 $ 的容量要大于等于 $ MathJax-Element-324 $ 的有效信息,此时不会丢失有效信息。这是1x1 卷积相当于线性降维。
    • 在前文提到的例子(示意图如下所示)中,输入feature map 先经过1x1 卷积的压缩,这会导致该段信息容量的下降;然后经过常规卷积,此段信息容量不变;最后经过1x1 卷积的膨胀,恢复了信息容量。

      整体而言模型的信息容量很像一个bottleneck,因此1x1 卷积层也被称作瓶颈层。

  4. 事实上,不仅1x1 卷积层会形成bottleneck,任何会降低模型信息容量的层都会形成瓶颈。

    因此在卷积神经网络中,通常每经过一个卷积层,输出尺寸减半、输出通道数翻倍。

  5. 瓶颈层中的信息膨胀阶段不是必须存在,通常信息膨胀过程是为了保持整个瓶颈层的输入尺寸、输出尺寸满足某些约束。如:输出尺寸等于输入尺寸。

3.8 DepthWise 卷积

  1. 标准的卷积会考虑所有的输入通道,而DepthWise 卷积会针对每一个输入通道进行卷积操作,然后接一个1x1 的跨通道卷积操作。

  2. DepthWise 卷积与分组卷积的区别在于:

    • 分组卷积是一种通道分组的方式,它改变的是对输入的feature map 处理的方式。

      Depthwise 卷积是一种卷积的方式,它改变的是卷积的形式。

    • Depthwise 分组卷积结合了两者:首先沿着通道进行分组,然后每个分组执行DepthWise 卷积。

  3. 假设输入张量为 $ MathJax-Element-325 $ ,即: $ MathJax-Element-329 $ 个通道、宽度为 $ MathJax-Element-327 $ 、高度为 $ MathJax-Element-328 $ 。

    • 假设使用标准卷积,输入通道的数量为 $ MathJax-Element-329 $ ,输出通道的数量为 $ MathJax-Element-334 $ ,卷积核的尺寸为 $ MathJax-Element-333 $ 。则需要的参数数量为 $ MathJax-Element-332 $ 。

    • 使用Depthwise 卷积时,图像的每个通道先通过一个 $ MathJax-Element-333 $ 的 deptpwise 卷积层,再经过一个 1x1、输出通道为 $ MathJax-Element-334 $ 的卷积层。

      参数数量为:

      $ C_I\times W_K\times H_K+C_I\times 1\times 1\times C_O=W_KH_KC_I+C_IC_O $

      其参数数量是标准卷积的 $ MathJax-Element-335 $ 。因此depthwise 卷积的参数数量远远小于标准卷积。

  1. DepthWise 卷积有几种变形的形式:

    • 只有对每个输入通道执行单通道卷积,没有后续的1x1 的跨通道卷积。
    • 对输入通道执行单通道卷积的结果执行BNReLU,再后接1x1 的跨通道卷积。这会引入更多的非线性。

3.9 通道混洗分组卷积

  1. 在分组卷积中,特征的通道被平均分配到不同的分组中。如果融合的时刻非常靠后,则对模型的泛化性相当不利,因为如果能在早期知道其它通道的一些信息,则很可能得到更有效的特征。

  2. 通道混洗分组卷积在每一次分组卷积之后执行一次通道混洗,被混洗过的通道被分配到不同的分组中。

    经过通道混洗之后,每个分组输出的特征能够考虑到更多的通道,因此输出特征的表达能力更强。

    ShuffleNet 中,大量运用了这种通道混洗分组卷积。

  3. AlexNet 的分组卷积中,执行的是标准卷积操作。

    ShuffleNet 中,分组卷积执行的是deptiwise 卷积,从而使得参数更少。

3.10 通道加权卷积

  1. 在常规卷积中,各通道产生的特征都是不分权重直接结合的。通道加权卷积中,不同的通道具有不同的权重,各通道产生的特征经过加权之后再结合。

    所用到的权重是输入的函数。

    注意:因为卷积是线性过程,因此卷积计算的通道加权等价于对输入的feature map 的通道加权。

  2. SEnetSqueeze-and-Excitation Networks)网络大量使用通道加权卷积。在SEnet 中存在三个关键的操作:

    • Squeeze 操作:沿着空间维度压缩特征,将每个二维的feature map 通道压缩成一个实数。

      该实数具有全局的感受野,表征了在该feature map 通道上响应的全局分布。

    • Excitation 操作:通过一个类似循环神经网络中的门机制,用一个sigmoid 激活函数的全连接层获取每个feature map 通道的权重。

      实际上,Excitation 操作使用了两个全连接层来获取通道权重。

    • Reweight 操作:将特征通道的权重通过乘法逐通道的加权到先前的feature map 上。

3.11 空洞卷积

  1. 在图像分割任务,图像输入到传统卷积层,然后再输入到池化层。由于图像分割是逐像素的输出,因此需要将池化层的输出(一个较小的尺寸)升采样(一般使用反卷积操作)到原始的图像尺寸来进行预测。

    但是这里有几个问题:

    • 升采样(如:线性插值) 是确定性的映射,无法学习(也没有参数要学习)。
    • 在这个图像的先减少尺寸、再增大尺寸过程中,有一些信息损失。
    • 小物体信息无法重建。假设有 4个池化层,每个池化层的尺寸为2、步长为2,理论上任何小于 $ MathJax-Element-336 $ 个像素的物体信息将无法被重建。

    解决方案是空洞卷积。

  2. 空洞卷积:对于空洞数为 $ MathJax-Element-374 $ 的空洞卷积,卷积结果为:

    $ \mathbf S(i,j)=\sum_m\sum_n\mathbf I(i+m(d+1)+1,j+n(d+1)+1)\mathbf K(m,n) $

    它实际上等价于一个卷积核为 $ MathJax-Element-338 $ 的新的卷积核,其中 $ MathJax-Element-339 $ 为当前卷积核的大小。新的卷积核的特点是:每隔 $ MathJax-Element-374 $ 个位置,权重非零;否则权重为零。另外首行、首列、尾行、尾列权重均为零。

    $ MathJax-Element-341 $ 称作膨胀比 dilation rate

  3. 空洞卷积的优点:在不做池化损失信息的情况下,加大感受野,让每个卷积的输出都包含较大范围的信息。

    在图像需要全局信息,或者语音、文本需要较长序列信息的问题中,空洞卷积都能很好的应用。

  4. 空洞卷积的缺点:

    • 网格效应(Gridding Effect )。如果仅仅多次叠加多个 dilation rate=23x3 的卷积核时,会发现:并不是所有的输入像素都得到计算,也就是卷积核不连续。

      这对于逐像素的预测任务来说,是致命的问题。

    • 长距离信息可能与任务无关。采用空洞卷积可能对大物体的分割有效果,但是对于小物体的分割可能没有好处。

      如何同时处理不同大小的物体,则是设计好空洞卷积网络的关键。

  5. 为了解决空洞卷积的缺点,人们提出了一种混合空洞卷积的结构(Hybrid Dilated Convolution:HDC) 。

    该结构有三个特性:

    • 叠加的空洞卷积的dilation rate 不能有大于1的公约数。这是为了对抗网格效应。

      如:[2,4,6] 不是一个好的三层空洞卷积,因为会出现网格效应。

    • dilation rate 设计成锯齿状结构。这是为了同时满足小物体、大物体的分割要求。

      [1,2,5,1,2,5] 的循环结构。

    • 最后一层的空洞卷积的dilation rate 最大,且dilation rate 小于等于卷积核的大小。

      这也是为了对抗网格效应。

    下面是一组dilation rate 分别为[1,2,5] 的卷积核,卷积核的尺寸为3x3

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文