• 卷积与自注意力的融合之On the Integration of SelfAttention and Convolution


    On the Integration of Self-Attention and Convolution

    image.png

    整体概览可见链接里的公众号文章,本文主要针对模型设计的细节进行解释。

    从摘要读文章

    Convolution and self-attention are two powerful techniques for representation learning, and they are usually considered as two peer approaches that are distinct from each other. In this paper, we show that there exists a strong underlying relation between them, in the sense that the bulk of computations of these two paradigms are in fact done with the same operation.

    指出卷积核自注意力实际上可以使用相同的操作完成。

    Specifically, we first show that a traditional convolution with kernel size kxk can be decomposed into k^2 individual 1x1 convolutions, followed by shift and summation operations.

    这里使用偏移和求和操作来实现对 kxk 的卷积进行拆解,空间偏移可以看:

    Then, we interpret the projections of queries, keys, and values in self-attention module as multiple 1x1 convolutions, followed by the computation of attention weights and aggregation of the values. Therefore, the first stage of both two modules comprises the similar operation.

    self-attention 和卷积的第一阶段有着类似的操作。

    More importantly, the first stage contributes a dominant computation complexity (square of the channel size) comparing to the second stage.

    这里强调了第一阶段的 1x1 卷积贡献了通道平方的计算复杂度。
    实际上,对于大多数任务而言,自注意力的问题主要还是集中在 attention 矩阵的计算过程,其与序列长度的平方成正比。往往这个时候通道带来的计算量反而不是很大。不知道本文如何解释这一点?
    在阅读文章后才知道,论文的关于计算复杂度的分析是针对与窗口的形式下的 attention 计算来考虑的。那这就解释的通了。不过这里的描述却有着误导的嫌疑。

    This observation naturally leads to an elegant integration of these two seemingly distinct paradigms, i.e., a mixed model that enjoys the benefit of both self-Attention and Convolution (ACmix), while having minimum computational overhead compared to the pure convolution or self-attention counterpart.

    由此引出了一种更优雅的集成两种运算的方式。看起来是要在前面这个 1x1 卷积上入手。

    Extensive experiments show that our model achieves consistently improved results over competitive baselines on image recognition and downstream tasks. Code and pre-trained models will be released at this https URL and this https URL.

    主要内容

    image.png

    从结构概览可以看出来,本文的目的是将卷积和自注意力中隐式包含的 1x1 卷积实现共享,从而减少这部分的计算量。

    image.png

    具体如何实现呢,虽然论文图中给出了大致的表示。图中虽然标注了符号,但是却并不够清晰。

    为了更加清晰地理解这个过程,我们可以分析下作者提供的计算量的统计。

    image.png

    这里对比了卷积、自注意力机制,以及本文整合二者得到的 ACmix 结构的两阶段计算形式下的计算量和参数量。

    卷积操作

    对于卷积而言,其可以拆分为变换和偏移聚合两个阶段:

    image.png

    这里又涉及到了空间偏移操作()。其搭配独立的点卷积(要是共享的话那就不是完全等价了)和加和操作可以实现对于标准卷积的等效替换。从表格中可以看到,这里的参数量包含了 \(k_c^2\)\(C^2\) 个参数,即标准的 \(1 \times 1\) 卷积。所以是等价变换。

    在第二阶段,卷积只有加和操作,其计算量(这里只考虑了加法计算,不同于第一阶段的 FLOPs,只考虑了乘法或者是加法计算,而非整体量)\(k_c^2C\)。此时没有中间参数,所以参数量为 0。

    自注意力操作

    对于自注意力操作而言,遵循卷积的拆分思路,这里可以拆分为变换和自适应动态加权聚合两个阶段:

    image.png

    第一个阶段就是对 qkv 计算过程。就是 3 个单纯的 1x1 卷积。

    第二个阶段包含了 attention 矩阵的计算以及拼接不同分组(头)的操作。此阶段的计算只考虑窗口 \(k_a \times k_a\) 范围内的元素。所以计算量中序列长度也是固定的为 \(k_a^2\)。所以在 q 和 k 的计算中,计算量为 \(k_a \times C \times k_a\),而在 qk 和 v 的计算中,计算量为 \(k_a \times k_a \times C\)。所以整体为 2 倍。而且此时没有额外的需要学习的参数。所以参数量为 0。

    ACmix 操作

    image.png

    ACmix 操作整合了卷积和自注意力操作。对他们使用了共享的特征变换结构。

    第一阶段中,共享的特征变换结构,将通道 C 扩展 3 倍,并将其折叠为 N 组。这里的 N 会被用于表示 self-attention 中的“头”的概念。这里的计算量和参数量也就是 3 各独立的 1x1 卷积操作对应的量。

    第二阶段中,需要考虑两部分结构:

    image.png

    • 卷积部分:
      • 先通过全连接层将通道数进行扩张,从而变换对应于不同偏移方向的多个点的特征。由于目的是为了等效 \(k_c \times k_c\) 大小的卷积核。所以这里需要扩张为 \(k_c^2 C\)。从图中来看,并不能明确这里具体使用的何种操作。但是按照前表中对应这一部分的计算量(\(3k_c^2C\))来看,这里的操作应该就是使用 \(N\) 组的分组卷积(N 间不共享,C/N 内共享),将 \(3\) 扩展到 \(k_c^2\)
      • 之后的空间偏移和聚合操作从而获得卷积分支的结果。
        • 按照表格中仍然保留了原始空间聚合操作的计算量(\(k_c^2C\)),这反映了 \(k_c^2\) 个偏移特征组(\(C'=C/N\))是被并行处理,并且最后会被直接加到一起。
        • 但是考虑到直接空间偏移的处理会破坏数据的局部性,并且很难实现向量化处理。这可能会极大地损害模块在推理时的实际效率。所以作者准备使用卷积类似的等效变换。如上图所示,作者设计了三种形式。最终应用了第三种可学习的分组卷积结构来实现替换。这里同时引入了一个 \(k_c \times k_c\) 大小的卷积操作。按照图中的形式这里使用的是分组卷积,但是却并没有说明具体是什么操作。表中给出的对应计算量为 \(k_c^4C\)
        • 考虑到输入为 \(N \times \overbrace{k_c^2 \times \underbrace{C/N \times H \times W}_{a \ single \ direction}}^{a \ single \ convolution \ group}\),输出为 \(N \times \overbrace{k_c^2 \times \underbrace{C/N \times H \times W}_{a \ single \ direction}}^{a \ single \ convolution \ group}\)。对于这 \(N\) 组特征,每组中直接用深度分离卷积,卷积参数为 \(1 \times (k^2_c \times C/N) \times k_c \times k_c\)。于是这部分的计算量为 \(N \times (k^2_c \times C/N) \times k_c \times k_c = k^4_cC\),也就是 N 间不共享,组内 C/N 通道之间也不共享。
      • 此时的参数量包含两部分:
        • \(3k_c^2N\):N 组 \(k^2_c \times 3 \times 1 \times 1\) 卷积。
        • \(k^4_cC = N \times (k^2_c \times C/N) \times k_c \times k_c = k^4_cC\):N 组 \(1 \times (k^2_c \times C/N) \times k_c \times k_c\) 的深度分离卷积。
    • 自注意力部分:
      • 考虑到分头的计算:\(N \times k_a \times C/N \times k_a + N \times k_a \times k_a \times C/N = 2k_a^{2}C\)
      • 这里不涉及到可学习参数,所以无额外参数量。

    实验结果

    image.png

    image.png

    总结

    这篇文章从另一个角度尝试去整合卷积和自注意力操作。整体来看,效果略有提升。并且整体结构是与现有注意力方法正交的,可以被整合到现有方法里。但是文中对于 FLOPs 却是基于固定窗口内的 attention 的计算来对比的。所以该方法如果与全局注意力结合仍然会面临同样的问题。

    链接

  • 相关阅读:
    linux如何用yum进行部署xampp环境
    jmeter关联案例的几种方法
    jmeter中元件
    CentOS7在VMware下设置成桥接模式
    CentOS7使用vsftpd搭建ftp
    虚拟机WMware15和CnetOS7安装
    MySql忘记密码的解决方案
    Windows下MySql8解压版的安装与完全卸载
    Idea设置统一为utf-8编码格式
    Idea常用快捷键
  • 原文地址:https://www.cnblogs.com/lart/p/15886055.html
Copyright © 2020-2023  润新知