本文是对《ON THE CONNECTION BETWEEN LOCAL ATTENTION AND DYNAMIC DEPTH-WISE CONVOLUTION》作者在分析cnn该领域找到了和local attention模块相似的机制,构建了可和swin transformer分庭抗礼的CNN架构
研究局部自注意力机制
?作者提出了局部自注网络等swin transforme在稀疏连接的思路上,它们的主要区别在于以下两点:
- 参数共享: 空间层面共享深度可分离卷积参数,通道层面共享局部注意力参数;
- 动态权重的计算方法:局部注意力中的计算方法是基于局部窗口中点对位置的点积;动态卷积是基于中心表征的线性映射或全球池化表征。
location attention
?对于局部自注意力机制,作者主要从 包括稀疏连接和参数共享三个方面来研究。首先假定局部窗口的大小为 N k N_k Nk,即计算局部注意力的序列 [ x i 1 , x i 2 , x i N k ] [x_{i1},x_{i2},{x_{iN_k}}] [xi1,xi2,xiNk],给出局部自注意力机制的计算公式如下。 y i = ∑ j = 1 N k a i j x i j a i j = e x p ( Q i K i j T D ) Z i , Z s = ∑ j = 1 N k e x p ( Q i K i j T D ) (1) \bold{y}_i=\sum^{N_k}_{j=1}a_{ij}\bold{x}_{ij}\tag{1}\\ a_{ij}=\frac{exp(\frac{\bold{Q}_i\bold{K}^{T}_{ij}}{D})}{Z_i},Z_s=\sum_{j=1}^{N_k}exp(\frac{\bold{Q}_i\bold{K}^{T}_{ij}}{D}) yi=j=1∑Nkaijxijaij=Ziexp(DQiKijT),Zs=j=1∑Nkexp(DQiKijT)(1) 其中 y i ∈ R D , x i j ∈ R D , a i j ∈ R \bold{y}_i\in R^D,\bold{x}_{ij}\in R^D,a_{ij}\in R yi∈RD,xij∈RD,aij∈R,实际上就是由 Q , K Q,K Q,K计算出的输入向量和窗口内向量的归一化权重 a i j a_{ij} aij,再乘上对应向量的嵌入值得出该位置的输出。同样可以写成如下点积的形式: y i = ∑ j = 1 N k w i j ⊙ x i j \bold{y}_i=\sum^{N_k}_{j=1}\bold{w}_{ij}\odot\bold{x}_{ij} yi=j=1∑Nkwij⊙xij 其中 w i j = [ a i j , a i j , . . . , a i j ] ∈ R D \bold{w}_{ij}=[a_{ij},a_{ij},...,a_{ij}]\in R^D wij=[aij,aij,...,aij]∈RD,从这中形式的局部注意力我们可以分析出以下几条性质:
- :局部自注意力中的输出在空间上是稀疏连接的,输出向量中的某个元素 y i d y^d_i yid只与窗口内所有输入向量同位置的值 [ x i 1 d , x i 2 d , . . . x i N k d ] [x^d_{i1},x^d_{i2},...x^d_{iN_k}] [xi1d,xi2d,...xiNkd]相关,没有跨通道的联系。(感觉这又有点回到了LeNet和GoogLeNet的思路)
- :不同通道间参数是共享的(对于多头注意力来说,在组内的通道间共享),也就就是 w i j \bold{w}_{ij} wij所有值都相同。
- :注意力或者说权重的并不是如同CNN中MLP一样通过反向传播来学习,而是与窗口内输入向量的值有关,这就使得权重的计算中传递了跨通道的信息。
- :由于权重的计算是在窗口内部进行,如果窗口是稀疏采样的,比如swin transformer,那么当输入图样的平移长度为窗口的整数倍时,对应的输出值也会保持值相同而位置平移。如果窗口是密集采样,以sliding window的形式采样,那输出就是完全的平移不变。
- :窗口内的向量排列顺序并不会对输出造成影响,位置信息被忽略了,需要采用其他的方式来记录。比如可学习的位置表征或者固定的位置表征。
depth-wise convolution
首先介绍一下深度卷积,它指的是对与输入的每个通道都分开进行卷积,假定输入为 H × W × C H\times W\times C H×W×C那就用 C C C个 W × W × 1 W\times W\times 1 W×W×1的卷积D对每个通道分开处理得到 H × W × C H\times W\times C H×W×C的输出,给出窗口大小为 N K N_K NK的一维形式的深度卷积计算公式如下: y i = ∑ j = 1 N k w o f f s e t ( i , j ) ⊙ x i j \bold{y}_i=\sum^{N_k}_{j=1}\bold{w}_{offset(i,j)}\odot\bold{x}_{ij} yi=j=1∑Nkwoffset(i,j)⊙xij 同样是从以上几个角度分析:
- :同样的,由于深度卷积对输入的每个通道分开处理,某通道的输出只和同通道的输入有关,无跨通道的联系。
- :不同空间位置上是参数共享的,也就是窗口移动时 w o f f s e t ( i , j ) \bold{w}_{offset(i,j)} woffset(i,j)不变,而 w o f f s e t ( i , j ) \bold{w}_{offset(i,j)} woffset(i,j)中的元素则并不相同。
- :基础的深度卷积是无动态权重的,只是通过反向传播来学习卷积核的参数,而深度卷积的动态变体则引入了输入相关的权重预测,分为同质变体和异质变体,前者是对窗口内的所有输入向量做池化后线性变化,后者则是对卷积位置的输入向量直接线性变换,公式如下: h o m o { w 1 , w 2 , . . . , w N k } = g ( G A P ( x 1 , x 2 , . . . , x N ) i n h o m o { w i 1 , w i 2 , . . . , w i N k } = g ( x i ) homo\{\bold{w}_1,\bold{w}_2,...,\bold{w}_{N_k}\}=g(GAP(\bold{x}_1,\bold{x}_2,...,\bold{x}_{N})\\ inhomo\{\bold{w}_{i1},\bold{w}_{i2},...,\bold{w}_{i{N_k}}\}=g(\bold{x}_i) homo{ w1,w2,...,wNk}=g(GAP(x1,x2,...,xN)inhomo{ wi1,wi2,...,wiNk}=g(x