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

    2. 假设局部连接的权重矩阵为一个 6 维的张量 三、基本卷积的变体 - 图1 ,其元素为 , 其中:三、基本卷积的变体 - 图2 为输出的通道; 为输出通道中的位置;三、基本卷积的变体 - 图3 为输入的通道; 为输入通道中的位置。

      则局部连接可以表示为:

      三、基本卷积的变体 - 图4

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

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

      • 与基本卷积相比,权重参数由 三、基本卷积的变体 - 图5

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

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

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

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

    5. 有时候,可以进一步限制卷积层或者局部连接层。如:限制输出的通道 三、基本卷积的变体 - 图6 仅仅利用了一部分输入通道(而不是全部输入通道) 的数据。

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

    3.2 拼接卷积

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

      • 拼接卷积在相邻的位置上拥有不同的过滤器,就像局部连接层一样。
      • 拼接卷积每隔一定的位置,使用相同的过滤器,就像卷积层一样。
      • 拼接卷积的参数仅仅会增长常数倍,常数就是过滤器集合的大小。
    2. 假设拼接卷积的权重矩阵为一个 6 维的张量 三、基本卷积的变体 - 图7 ,其元素为 , 其中:三、基本卷积的变体 - 图8 为输出的通道; 为输出通道中的位置;三、基本卷积的变体 - 图9 为输入的通道; 为输入通道中的位置。

      则拼接卷积可以表示为:

      三、基本卷积的变体 - 图10

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

      • 如果 三、基本卷积的变体 - 图11 等于输入的尺寸,则拼接卷积退化成局部连接。
      • 如果 等于 1 ,则拼接卷积退化成卷积。
    3. 通常在卷积层会引入非线性运算,而在非线性运算中,需要加入偏置项。

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

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

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

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

    3.3 分组卷积

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

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

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

      三、基本卷积的变体 - 图12

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

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

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

      假设输入feature map 具有 的输入通道、宽/高分别为 三、基本卷积的变体 - 图13,假设卷积核的宽/高分别为 ,有 三、基本卷积的变体 - 图14 个卷积核。则:

      • 参数数量:
      • 计算量(以一次乘-加计算为单位):三、基本卷积的变体 - 图15。 其中 分别为输出feature map 的宽/高

      假设采用分组卷积,将输入通道分成了 三、基本卷积的变体 - 图16 组,则分组之后:

      • 参数数量:
      • 计算量(以一次乘-加计算为单位):三、基本卷积的变体 - 图17

      因此分组卷积的参数数量、计算量均为标准卷积计算的 。

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

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

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

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

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

      假设大卷积核的宽度是 三、基本卷积的变体 - 图18 ,则每经过一层,输出的宽度减少了 。假设希望通过 三、基本卷积的变体 - 图19 个宽度为 的小卷积核来代替,则为了保持输出的大小一致,需要满足:

      三、基本卷积的变体 - 图20

      • 当 时,即用尺寸为 3 的卷积核代替尺寸为 三、基本卷积的变体 - 图21 的卷积核时,有:

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

        假设输入通道数为 三、基本卷积的变体 - 图22,输出通道数为 ,则5x5 卷积核的参数数量为 三、基本卷积的变体 - 图23

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

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

      三、基本卷积的变体 - 图24

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

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

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

      • 具有更少的参数数量。

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

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

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

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

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

    3.5 非对称卷积核

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

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

      • 感受野保持不变。

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

        假设输入通道数和输出通道数都为三、基本卷积的变体 - 图25 ,原始卷积nxn 的参数数量为: 。

        假设非对称卷积的1xn 的输出通道数也是 三、基本卷积的变体 - 图26 ,则非对称分解时参数数量为: 。它是原始卷积的参数数量的 三、基本卷积的变体 - 图27

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

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

    3.6 多尺寸卷积核

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

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

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

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

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

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

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

      三、基本卷积的变体 - 图28

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

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

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

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

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

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

    2. 假设输入张量为 三、基本卷积的变体 - 图29,即: 个通道、宽度为 三、基本卷积的变体 - 图30 、高度为 。

      • 如果图片直接通过一个宽度为 三、基本卷积的变体 - 图31,高度为 、输出通道为 三、基本卷积的变体 - 图32 的卷积层,则参数数量为:

      • 如果图片先通过一个1x1、输出通道为 三、基本卷积的变体 - 图33 的卷积层,再经过一个 、输出通道为 三、基本卷积的变体 - 图34 的卷积层;最后经过一个1x1、输出通道为 的卷积层。

        则参数数量为:

        三、基本卷积的变体 - 图35

      • 当 时(输入通道数与输出通道数接近),三、基本卷积的变体 - 图36 ,以及 。

        则二者参数的数量比例为:三、基本卷积的变体 - 图37 。因此后者的参数数量远远小于前者。

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

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

        其中 三、基本卷积的变体 - 图38 为样本的数量, 。即:行索引代表样本,列索引代表特征。所有特征由feature map 展平成一维得到。

        通常 三、基本卷积的变体 - 图39 ,则输入矩阵 的秩 三、基本卷积的变体 - 图40 。假设输入矩阵 的秩为 三、基本卷积的变体 - 图41

      • 信息膨胀过程:当 时,三、基本卷积的变体 - 图42 的容量要大于 的信息,因此所有的有效信息都可以得到保留。

      • 信息压缩过程:当 三、基本卷积的变体 - 图43 时, 的容量要小于 三、基本卷积的变体 - 图44 的信息,这时需要参考 的有效信息。

        三、基本卷积的变体 - 图45 的有效信息由矩阵 的秩 三、基本卷积的变体 - 图46 决定。

        • 当矩阵 是满秩时,即: 三、基本卷积的变体 - 图47 ,此时对 的任何压缩都会丢失有效信息。

        • 当矩阵 三、基本卷积的变体 - 图48 不是满秩时:

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

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

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

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

    3.8 DepthWise 卷积

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

      三、基本卷积的变体 - 图52

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

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

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

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

    3. 假设输入张量为 ,即:三、基本卷积的变体 - 图53 个通道、宽度为 、高度为 三、基本卷积的变体 - 图54

      • 假设使用标准卷积,输入通道的数量为 ,输出通道的数量为 三、基本卷积的变体 - 图55,卷积核的尺寸为 。则需要的参数数量为 三、基本卷积的变体 - 图56

      • 使用 卷积时,图像的每个通道先通过一个 的 deptpwise 卷积层,再经过一个 1x1、输出通道为 三、基本卷积的变体 - 图57 的卷积层。

        参数数量为:

        其参数数量是标准卷积的 三、基本卷积的变体 - 图58 。因此depthwise 卷积的参数数量远远小于标准卷积。

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

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

    3.9 通道混洗分组卷积

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

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

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

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

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

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

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

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

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

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

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

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

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

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

      三、基本卷积的变体 - 图59

    3.11 空洞卷积

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

      但是这里有几个问题:

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

      解决方案是空洞卷积。

    2. 空洞卷积:对于空洞数为 三、基本卷积的变体 - 图60 的空洞卷积,卷积结果为:

      它实际上等价于一个卷积核为 三、基本卷积的变体 - 图61 的新的卷积核,其中 为当前卷积核的大小。新的卷积核的特点是:每隔 三、基本卷积的变体 - 图62 个位置,权重非零;否则权重为零。另外首行、首列、尾行、尾列权重均为零。

      称作膨胀比 dilation rate

      三、基本卷积的变体 - 图63

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

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

    4. 空洞卷积的缺点:

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

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

        三、基本卷积的变体 - 图64

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

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

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

      该结构有三个特性:

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

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

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

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

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

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