提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
摘要
本文中,作者对卷积和self-attention进行对比研究,并证明了他们之间存在着很强的潜在关系,并且在某种意义上它们这两种操作实际上是在做相同的操作。作者验证了大小为k x k的卷积核可以被分解为 k 2 k^2 k2个独立的1x1卷积,接着是通过移位和求和的操作。然后作者还验证了self-attention,其中的映射query,key,value也是通过1x1卷积构成,接着计算它们的注意力权重以及聚合values。因此,这两种操作的第一个阶段是由类似的操作组成。更重要的是,与第二个阶段相比,第一个阶段的计算复杂度占了更大一部分(与通道数量成平方关系)。作者将两种操作进行融合,提出了一个混合模型AC-mix,同时具有卷积和Non-local的好处,同时比纯卷积或者self-attention具有更少的计算复杂度。
一、KeyPoint
传统的卷积根据卷积核的权重对局部感受野内的特征进行聚合,并且对于整个特征图来说权重是共享的。卷积操作属于inductive bias。而Self-attention是基于输入特征图的上下文来进行相关性计算生成注意力权重来实现全局建模,注意力权重通过相关的像素由相似函数动态的产生,这样的灵活性使得Self-attention能够自适应的关注不同的区域和捕获信息更加丰富的特征。
通过对这两个操作进行分解,作者发现它们和大程度的都依赖于1x1的卷积操作,作者因此也提出了ACmix,通过融合卷积和Self-attention操作来最小化计算开销,具体来说,首先使用1x1卷积获得中间特征,然后对中间特征分别使用self-attention和卷积进行特征的聚合。
二、Revisiting Convolution and Self-Attention
1.Convolution
卷积操作可以如上图所示,为了简化描述,首先假设卷积的步长为1,考虑到一个标准的卷积,卷积核大小为
C
o
u
t
∗
C
i
n
∗
k
∗
k
C_{out} *C_{in}*k*k
Cout∗Cin∗k∗k,给定输入特征张量F,大小为
C
i
n
∗
H
∗
W
C_{in}*H*W
Cin∗H∗W,输出特征图G大小为
C
o
u
t
∗
H
∗
W
C_{out}*H*W
Cout∗H∗W,定义
f
i
j
f_{ij}
fij为输入特征的像素点,
g
i
j
g_{ij}
gij为输出特征的像素点。然后标准的卷积可以通过如下式子进行计算:
K
p
,
q
K_{p,q}
Kp,q大小为
C
o
u
t
X
C
i
n
C_{out} XC_{in}
CoutXCin,
p
,
q
∈
0
,
1...
,
k
−
1
p,q\in {0,1...,k-1}
p,q∈0,1...,k−1,代表着卷积核的权重。为了方便,可以将卷积核重写成以下和的形式:
为了进一步的简化公式,作者定义了一个移位操作,
式子3就可以改写为如下:
因此一个标准的卷积,可以被总结为如下两个阶段的操作:
在第一个阶段,输入特征图通过1x1卷积进行线性投影,第二个阶段对投影后的的特征图根据位置进行移位和聚合。可以看到大量的计算都在1x1卷积上,然而第二阶段的移位和聚合操作是轻量级的。
2.Self-Attention
Attention机制如下图所示,和卷积相比它允许模型在一个更大的size的内容中去关注更重要的信息。
假设一个标准的Self-attention模块具有N个头,输入特征
F
∈
(
C
i
n
X
H
X
W
)
F\in(C_{in}XHXW)
F∈(CinXHXW),输出特征
G
∈
(
C
o
u
t
X
H
X
W
)
G\in (C_{out}XHXW)
G∈(CoutXHXW),假设
f
i
j
∈
(
C
i
n
)
,
g
i
j
∈
(
C
o
u
t
)
f_{ij}\in (C_{in}), g_{ij}\in (C_{out})
fij∈(Cin),gij∈(Cout)分别表示输入输出特征的像素点,attention的输出可以计算为:
||表示对N个attention头的输出进行concat,其中
N
k
(
i
,
j
)
N_{k}(i,j)
Nk(i,j)代表以i,j为中心点局部区域内的像素,A(.)代表与特征相关相应区域的的注意力权重。
对于广泛采用的self-attention模块来说,注意力权重计算如下:
d带抱着特征的维度,同样的,多头注意力也可以分解为如下两个步骤:
可以看到,和传统的卷积类似的,第一个阶段都是采用了1x1卷积。另一方面,第二阶段由计算注意力权重和聚合value矩阵组成,用于聚合局部特征。相应的计算开销也是比第一阶段要少的。
3.Computational Cost
FLOPS和参数量如下表格所示:
可以看到卷积的第一阶段的FLOPs和参数量与通道是呈二次方,然而在第二阶段的计算损耗是与通道呈线性,以及不需要参数的。
对于Self-attention而言也具有类似相同的趋势,所有的训练参数都在第一阶段,对于第二阶段计算量取决于ka和C。
四. 设计方法
1. Relating Self-Attention with Convolution
从第三章的分析中,我们可以看出,其实Convolution和Self-attention中的两个stage都扮演着类似的角色,对于第一阶段来说,都是一个特征学习的过程,两个的方法都具有相同的1x1操作去将特征投影到更深的空间,另一方面,第二阶段尽管他们操作的范式不一样,但他们都是为了将特征进行聚合。
因此可以知道,Convolution和Self-attention都是先用1x1卷积来将输入特征图进行映射,尽管捕获语义特征很重要,第二个阶段的聚合操作都是轻量级的而且不需要额外的学习参数。
2. Integration of Self-Attention and Convolution
因此基于上述的论述,很容易想到将Convolution和Self-Attention进行结合,因为两个的模块开始都有1x1卷积的操作,因此可以先将他们进行投影,然后使用获得的特征图分别用于不同的聚合操作,作者将提出的混合模型称为AC-mix,如下图所示:
ACmix也是由两个stage组成,在第一个阶段中,输入特征由三个1x1卷积进行映射然后reshaped成N个块,因此我们可以获得了中间特征包含3xN个特征图(这里定义的每个特征图是3维结构
(
H
X
W
X
C
/
N
)
X
3
X
N
(HXWXC/N)X3XN
(HXWXC/N)X3XN).
在第二阶段中,我们使用以下的不同的范式:
对于Self-attention路径,我们将中间特征分成N个组,每个组都包含三部分特征,分别来自每一个1x1卷积。相应的三部分特征图分别充当query,key,value,然后是传统的多头自注意力模块。
对于卷积路径,假设卷积核大小为k,我们采用一个全连接层来获得
k
2
k^2
k2个特征图。接着,通过移位和聚合特征(根据公式7和8),我们对输入特征以一个卷积的方式进行处理,然后和传统的一样从局部感受野中聚合信息。最终可以从两个路径中得到输出,然后通过两个学习的参数进行相加:
4.3 Improved Shift and Summation
如上图所示,在卷积的过程中可以看到,如果简单的直接将张量按不同的方向进行移动会导致很难通过向量化来实现,这会对推理时的效率造成影响。
因此作者想到了用固定权重的深度可分离卷积来代替tensor的一个移位,如上图b所。如果我们将深度可分离卷积核(核大小k=3)表示为:
相应的输出可以表示为:
因此,通过对特定的移位方向设计卷积核权重,卷积的输出与简单的tensor的移位是等价的。为了进一步对不同方向的特征进行相加,我们将输入特征和卷积核分别进行concat,然后通过一个组卷积来作为这个移位操作,如上图cI所示。
基于这样的基础上,我们额外的引入了一些自适应来提升模型的灵活性,如上图cII所示,我们将卷积核的权重换成是可学习的权重,然后用移位卷积核进行初始化。这会保持移位操作的能力的同时提升模型的能力。我们也使用了多组卷积核以匹配输出通道的维度,如上图cIII所示。
4.Computational Cost of ACmix
计算复杂度和参数量如第三章的表格所示,第一阶段的计算复杂度和参数量是和Self-Attention一样的,然后第二阶段,ACmix引入了额外的计算开销,因为用了很轻量的全连接和分组卷积,和通道C是呈线性相关的。
5.Generalization to Other Attention Modes
和多研究者都在关注于探索attention操作的变种来进一步提升模型的性能。Patchwise attention在局部区域中聚合所有特征信息来代替原始的softmax 操作。Window attention通过使用局部窗口保持相同的感受野以节约计算损耗和取得较快的推理速度。Global attention用于在单一层中保留长距离的依赖。
[.]代表特征的concat操作,
ϕ
(
.
)
\phi(.)
ϕ(.)代表两个线性投影层中间加一个非线性激活函数。
五. Experiments
在分类,语义分割和检测任务上验证了ACmix的性能。
1.ImageNet Classification
2.Downstream Tasks:
语义分割:
目标检测:
3.Ablation study
对比了不同路径对性能的影响
对比了卷积路径上的不同移位方式,结果如下:
六.总结
这篇文章给了一个很好的将Convolution和attention结合的思路,通过对每一种运算进行拆分,其实可以发现他们的共性与异性,然后加以进行组合