论文链接:https://arxiv.org/abs/1907.12273
文章的主要思想是将稠密的关联矩阵因式分解为两个稀疏的关联矩阵的乘积。使用两个连续的注意力模块,第一个注意力模块用于估计具有长空间间隔距离的位置子集内的相似度,第二个注意力模块用于估计具有短空间间隔距离的位置子集内的相似度。与原始的自注意力模块相比,大大降低了计算和内存复杂度,尤其是在处理高分辨率特征图时。
传统的深度卷积神经网络主要是通过叠加多个卷积来建立长距离依赖关系。
最近的self-attention (或non-local) 机制提出,通过计算每个输出位置的上下文信息,关注所有输入位置,来对长距离依赖关系进行建模。
给定大小为
N
N
N的输入,self-attention机制的计算复杂度约为
O
(
N
2
)
O(N^2)
O(N2),对于需要高分辨率输入的任务,如目标探测和语义分割,代价会非常大。在各种基础视觉任务中,高分辨率的输入对于提高性能至关重要,但它需要大量的计算/内存开销,这阻碍了自注意机制在实际应用中的潜在好处。
这篇文章的作者认为如何降低自注意机制的计算/记忆代价,对于各种对计算和记忆代价敏感的视觉任务具有重要的实用价值。
这篇文章提出了一种简单而有效的方案,将稠密关联矩阵
A
A
A的计算分解为两个稀疏关联矩阵
A
L
A^L
AL和
A
S
A^S
AS的乘积,大大减少了计算的复杂度。
具体做法如下:
首先,将输入分为大小相等的
Q
Q
Q个子集,每个子集包含
P
P
P个位置,即
N
=
P
×
Q
N=P \times Q
N=P×Q,
N
N
N为输入的大小;
对于长距离注意力,从每个子集中采样一个点来构造一个新的有
Q
Q
Q个位置的子集,按照上面的采样策略可以构造
P
P
P个这样的子集。每个构建子集内的位置都具有很长的空间间隔距离,对每个子集应用自注意力来计算稀疏块亲和矩阵;
对于短距离注意力,直接将自注意力应用到原始
Q
Q
Q子集上,计算稀疏关联矩阵为
A
S
A^S
AS;
结合这两种注意机制,可以将信息从每个输入位置传播到所有输出位置。
可以这么理解:
假设把一张图分为5个块(
Q
Q
Q),每个块里面有8个像素点(
P
P
P),想计算块1的第1个像素与块3的第5个像素的相似度,分为两步走,第一步,计算块1的第1个像素与块3的第1个像素的相似度(长距离);第二步,计算块3的第1个像素与块3的第5个像素的相似度(短距离)。
主要贡献:
- 提出了一个交错稀疏自注意力方法,以更有效地捕捉密集的长距离依赖
- 证明了交错稀疏自注意力机制(ISSA)在语义分割上的有效性,并与传统的注意机制相比取得了相似甚至更好的性能
- 与其他机制相比(CGNL,RCCA)来说明ISSA的好处
网络设计
对着上面的理解看这张网络图更加清晰。
复杂度分析
传统self-attention的复杂度为:
O
(
2
H
W
C
2
+
3
2
(
H
W
)
2
C
)
O(2HWC^{2}+ \frac{3}{2}(HW)^{2}C)
O(2HWC2+23(HW)2C)
本文中提到的ISSA的复杂度为:
O
(
4
H
W
C
2
+
3
2
(
H
W
)
2
C
(
1
P
h
P
w
+
1
Q
h
Q
w
)
)
O(4HWC^{2}+\frac{3}{2}(HW)^{2}C(\frac{1}{P_{h}P_{w}}+\frac{1}{Q_{h}Q_{w}}))
O(4HWC2+23(HW)2C(PhPw1+QhQw1))
当
P
h
P
w
=
H
W
P_{h}P_{w}=\sqrt{HW}
PhPw=HW时,复杂度最小为:
O
(
4
H
W
C
2
+
3
(
H
W
)
3
2
C
)
O(4HWC^{2}+3(HW)^{\frac{3}{2}}C)
O(4HWC2+3(HW)23C)
实验结果