transformer一统天下?depth-wise conv有话要说

1,755 阅读6分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路

本文是对《ON THE CONNECTION BETWEEN LOCAL ATTENTION AND DYNAMIC DEPTH-WISE CONVOLUTION》的分析,作者在cnn领域找到了和local attention模块相似的机制,以此构建出了可以和swin transformer分庭抗礼的CNN架构

局部自注意力机制研究

 作者提出局部自注意力网络如swin transforme和深度可分离卷积及其动态变体在稀疏连接这一思路上有相似之处,他们的主要区别在于以下两点:

  1. 参数共享方面: 深度可分离卷积的参数共享在空间层面,而局部注意力的参数共享在通道层面;
  2. 动态权重的计算方式:局部注意力中的计算方式是基于局部窗口中的点对位置的点积;而动态卷积中的是基于中心表征的线性映射或者全局池化的表征。

location attention

 对于局部自注意力机制,作者主要从 网络正则化策略包括稀疏连接和参数共享以及动态权重预测三个方面来研究。首先假定局部窗口的大小为NkN_k,即计算局部注意力的序列为[xi1,xi2,xiNk][x_{i1},x_{i2},{x_{iN_k}}],给出局部自注意力机制的计算公式如下。

yi=j=1Nkaijxijaij=exp(QiKijTD)Zi,Zs=j=1Nkexp(QiKijTD)(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})

其中yiRD,xijRD,aijR\bold{y}_i\in R^D,\bold{x}_{ij}\in R^D,a_{ij}\in R,实际上就是由Q,KQ,K计算出的输入向量和窗口内向量的归一化权重aija_{ij},再乘上对应向量的嵌入值得出该位置的输出。同样可以写成如下点积的形式:

yi=j=1Nkwijxij\bold{y}_i=\sum^{N_k}_{j=1}\bold{w}_{ij}\odot\bold{x}_{ij}

其中wij=[aij,aij,...,aij]RD\bold{w}_{ij}=[a_{ij},a_{ij},...,a_{ij}]\in R^D,从这中形式的局部注意力我们可以分析出以下几条性质:

  1. 稀疏连接:局部自注意力中的输出在空间上是稀疏连接的,输出向量中的某个元素yidy^d_i只与窗口内所有输入向量同位置的值[xi1d,xi2d,...xiNkd][x^d_{i1},x^d_{i2},...x^d_{iN_k}]相关,没有跨通道的联系。(感觉这又有点回到了LeNet和GoogLeNet的思路)
  2. 参数共享:不同通道间参数是共享的(对于多头注意力来说,在组内的通道间共享),也就就是wij\bold{w}_{ij}所有值都相同。
  3. 动态权重:注意力或者说权重的并不是如同CNN中MLP一样通过反向传播来学习,而是与窗口内输入向量的值有关,这就使得权重的计算中传递了跨通道的信息。
  4. 平移不变性:由于权重的计算是在窗口内部进行,如果窗口是稀疏采样的,比如swin transformer,那么当输入图样的平移长度为窗口的整数倍时,对应的输出值也会保持值相同而位置平移。如果窗口是密集采样,以sliding window的形式采样,那输出就是完全的平移不变。
  5. 集合表征:窗口内的向量排列顺序并不会对输出造成影响,位置信息被忽略了,需要采用其他的方式来记录。比如可学习的位置表征或者固定的位置表征。

depth-wise convolution

 首先介绍一下深度卷积1,它指的是对与输入的每个通道都分开进行卷积,假定输入为H×W×CH\times W\times C那就用CCW×W×1W\times W\times 1的卷积D对每个通道分开处理得到H×W×CH\times W\times C的输出,给出窗口大小为NKN_K的一维形式的深度卷积计算公式如下:

yi=j=1Nkwoffset(i,j)xij\bold{y}_i=\sum^{N_k}_{j=1}\bold{w}_{offset(i,j)}\odot\bold{x}_{ij}

同样是从以上几个角度分析:

  1. 稀疏连接:同样的,由于深度卷积对输入的每个通道分开处理,某通道的输出只和同通道的输入有关,无跨通道的联系。

  2. 参数共享:不同空间位置上是参数共享的,也就是窗口移动时woffset(i,j)\bold{w}_{offset(i,j)}不变,而woffset(i,j)\bold{w}_{offset(i,j)}中的元素则并不相同。

  3. 动态权重:基础的深度卷积是无动态权重的,只是通过反向传播来学习卷积核的参数,而深度卷积的动态变体则引入了输入相关的权重预测,分为同质变体和异质变体,前者是对窗口内的所有输入向量做池化后线性变化,后者则是对卷积位置的输入向量直接线性变换,公式如下:

    homo{w1,w2,...,wNk}=g(GAP(x1,x2,...,xN)inhomo{wi1,wi2,...,wiNk}=g(xi)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)

    其中g()g()为FC+BN+ReLu+,FC在后者的情况下,权重参数在空间位置上不共享了,而是随着窗口位置变化,但是计算权重参数的FC层参数是共享的(和多头注意力一样)。

    4.集合表征:由于计算深度卷积时的权重woffset(i,j)\bold{w}_{offset(i,j)}是与输入向量的对计算向量的相对位置有关的,所以隐含了空间位置信息表征,不用使用显式的位置表征。

给出性质对比图如下:

1.png 其中Local MLP指用MLP而非注意力来求输出yi\bold{y}_i,D-DW-Conv指深度卷积的动态变体。可以看出深度卷积和局部注意力是非常相似的,同样是具有空间和通道层面的稀疏性,同样存在权重共享,而深度卷积的变体更进一步的拥有了相同的动态权重预测性质。

实验

 作者使用深度卷积及其变体来代替swin transformer中注意力模块,前置和后置的线性变换层被替换成了1*1卷积,在多项视觉任务上进行了实验,结果如下:

2.png 可以看到在分类任务上基础的DW-Conv已经取得了和swin transformer相近的结果,而且参数和计算量更少;引入了变体之后准确率更是超过了swin transformer,其余任务上的结果类似,基础版深度卷积和swin transformer效果接近,改进版更好。

消融实验

 正如之前说的,稀疏连接参数共享以及动态权重预测是swin transformer非常重要的三个性质。稀疏连接的重要性通过swin trans和vit以及DW-CONV和CONV的结果对比就可以见得,作者通过实验来验证其余两项的重要性:

参数共享

 作者对local-mlp和local-attention共享参数的通道数目对性能的影响进行了研究,对后者而言,共享参数的通道数目通过控制head的数目来改变,结果如下:

3.png 结论是适当设置共享参数的通道数目,可以涨点。(这个实验说了和没说一样,没有明确结论。) 作者也研究了通道层面的参数共享和空间层面参数共享的影响,但结果也没什么说服力,加了通道层面参数共享后,DW的结果反而更差。

4.png

动态权重预测

 类似的,动态权重的有效性在前表中就可见得,作者在这里讨论了动态权重计算方式以及窗口移动方式(滑动或者是平移)的影响:

5.png 对attention机制而言,窗口移动方式影响不大;同样使用sliding的情况下,线性映射的效果要优于attention,但作者又说大模型的情况下基本没差别,也是没用的实验。

结论

 local attention和深度卷积很像,且非同质动态深度卷积要优于local attention,但消融实验属实做的不咋地。

参考

Footnotes

  1. A Basic Introduction to Separable Convolutions | by Chi-Feng Wang | Towards Data Science