引言

本文主要是对《FLatten Transformer: Vision Transformer using Focused Linear Attention》这篇论文的一个解读与总结,

本篇论文主要是对注意力机制的时间复杂度的一个优化,采用映射函数同时变换计算次序,将普通注意力机制的二次时间复杂度优化为线性时间复杂度。但是因为采用线性注意力模块会导致特征聚焦,减少特征多样性,限制了注意力模块的表达能力,导致信息丢失,减少区分度,进而导致线性注意力模块的性能下降,所以再采用深度卷积模块来解决这一局限,保证特征的多样性。

预备知识

① 首先我们需要了解softmax注意力机制的计算过程,

② 其次我们需要了解softmax注意力机制的时间复杂度:

LINESTRING转换geometry_点积

③ 最后我们需要了解现已有线性注意力机制是怎么实现的:

        不使用softmax函数计算权重分布,采用映射函数代替softmax函数,然后再改变计算次序,降低时间复杂度,即可得到线性时间复杂度的注意力机制。

LINESTRING转换geometry_点积_02

LINESTRING转换geometry_点积_03

现已有研究存在的问题

(1) 在已有的线性注意力模块中,注意力权重的分布相对平稳,缺乏解决信息量最大特征的聚焦能力。

LINESTRING转换geometry_transformer_04

(2)注意力矩阵的降秩限制了线性注意力的特征多样性,不能捕捉到多种信息,从而影响模型性能。

LINESTRING转换geometry_映射函数_05

作者的创新

        本文中,作者提出了一种新的聚焦线性注意力模块,该模块既高效又有表现力。具体来说,从两个角度分析了线性注意力表现下降的原因,并针对性的提出了相应的解决方案。

        首先,针对注意力权重的分布相对平滑。作者提出了一个简单的映射函数来调整查询和关键字的特征方向,恢复成原始softmax注意力的尖锐分布。

        其次,针对注意力矩阵的降秩限制了线性注意力的特征多样性。作者提出了一个秩恢复模块,通过对原始注意力矩阵应用额外的深度卷积(DWC),这有助于恢复矩阵秩,并保持不同位置的输出特征多样化。

(1)映射函数

作者使用以下映射函数   

LINESTRING转换geometry_深度学习_06

   ,

LINESTRING转换geometry_深度学习_07

,该映射函数只调整特征方向,不改变特征大小(后面有证明)。

LINESTRING转换geometry_点积_08

映射函数可以使相似的特征更接近,不相似的特征更远离,达到聚焦效果。

我们可以看到下图因为粉色和黑色都偏向与纵轴,属于同一组,映射函数让他们的夹角变得更小。同样粉色和蓝色属于不同组,所以映射函数让他们之间的夹角变得更大。从而达到一个特征聚焦的效果。(证明在最后解释)

LINESTRING转换geometry_transformer_09

但是因为让特征聚焦,减少特征多样性,会限制注意力模块的表达能力,导致信息丢失,减少区分度,进而导致线性注意力模块的性能下降。作者提出了深度卷积模块(DWC)来解决此问题。

(2)深度卷积模块

LINESTRING转换geometry_点积_10

将DWC模块看成一种关注,其中每个查询只关注空间中相邻的几个特征,而不是所有的特征 V。这种局部性保证了即使两个查询对应的线性关注值相同,我们仍然可以从不同的局部特征中得到不同的输出,从而保持特征的多样性。

本文中还有一种解释:将深度卷积模块

LINESTRING转换geometry_点积_11

看成满秩矩阵,增加了等效注意力矩阵

LINESTRING转换geometry_transformer_12

的秩上界。(我可以理解增加了秩上界,但是不太理解为什么一定能达到论文中图5的满秩状态,为什么满秩加非满秩矩阵可以使结果达到满秩,有理解的了可以交流一下吗)                                 

LINESTRING转换geometry_映射函数_13

消融实验

LINESTRING转换geometry_人工智能_14

证明过程

LINESTRING转换geometry_人工智能_15

① 首先通过取模证明该映射函数不改变特征大小

② 然后将使用映射函数变换之后的向量提取各自的模使用单位向量点积表示

③ 计算单位向量的点积,同时将点积上下分别同除两个向量中的最大值

④ 计算

LINESTRING转换geometry_人工智能_16


LINESTRING转换geometry_人工智能_17

的极限情况

⑤ 先计算<u,v>的极限情况,然后带入映射函数的点积,比较和原向量x,y的点积。

        当m=n时,也就是说明他们在同一维度最大,属于同一组,此时映射函数的点积就会大于原向量的点积,点积越大就说明夹角越小,所以映射函数让两个属于同一组的向量夹角变小了。

         当m!=n时,也就是说明他们在不同一维度最大,属于不同一组,此时映射函数的点积就会小于原向量的点积,点积越小就说明夹角越大,所以映射函数让两个不属于同一组的向量夹角变大了。

证明目前只想到这么解释,如有疑惑可以互相交流~~