简介
承接 Transformers are RNNs 这篇论文
目的: 为了分析之前linear transformer的效果为什么不好。发现主要是两个原因造成的:
- 无界梯度(unbounded gradient),会导致模型在训练时不稳定,收敛不好;
-
注意力稀释(attention dilution),transformer在lower level时应该更关注局部特征,而higher level更关注全局特征,但线性transformer中的attention往往weight 更均匀化,不能聚焦在local区域上,因此称为attention稀释。
**解决方案: ** -
对linear attention算出来的output接着做个normalization,形成NormFormer的结构,增加训练的稳定性。
- 在底层的layer用diagonal的local attention。
自注意力机制的统一表示
在自注意力模块中,无论是传统的vanilla注意力还是线性注意力,其注意力矩阵 \(\mathbf{P} \in \mathbb{R}^{n \times n}\) 可以用以下统一形式表示:
其中 \(s_{ij}\) 表示token之间的相似度,注意这里19式其实就是 公式3, 只是在这篇论文写成了这个形式。
- Vanilla注意力
- 线性注意力
无界梯度(unbounded gradient)
梯度的一般形式
注意力矩阵 \(\mathbf{P}\) 关于相似度 \(s_{ik}\) 的梯度可以推导为:
📖 推导注意力矩阵 \(\mathbf{P}\) 关于相似度 \(s_{ik}\) 的梯度的一般形式。
- Vanilla注意力的梯度
- 线性注意力的梯度
由于 \(|s_{ik}|^{-1} = |\phi(\mathbf{q}_i)\phi(\mathbf{k}_j)^T|^{-1}\) 可以任意大,线性注意力的梯度没有上界。
更进一步,可以证明线性注意力的梯度也没有下界。
无界梯度会导致优化过程不稳定,在初步研究中表现为更差的收敛结果。这是线性注意力相比vanilla注意力性能下降的重要原因之一。
注意力稀释问题(Attention Dilution)

作者通过评估不同层级上query在邻域内其他query上的attention权重占比发现问题
- vanilla的attention主要集中在对角线附近
- linear attention 由于是low-rank来逼近的,所以必然是dense的(PS:有很多low-rank+sparse的方法来解决这个问题,可以从图中看到,注意力过多的给了分布较远的token。这种注意力"稀释"现象导致模型无法有效学习层次化特征表示
- 该文提出的方法(ie., TransNormer)的注意力则主要集中在对角线附近。
解决方案架构设计

NormAttention模块
- 设计思路:
- 实现细节:
DiagAttention模块
- 基于pattern的attention设计,将query按距离划分为不重叠的window
- 每个window内进行attention计算,使用vanilla attention
- 这种设计使早期层能更好地关注局部特征
作者首先分析了vanilla attention和线性attention(1+elu)的组合,发现在靠底层的layer用vanilla(更sparse)的attention效果要更好(感觉也合理,模型最开始的时候应该更关注临近的token,到后期开始关注比较远的token)。

为了保持整体架构线性复杂度,作者把靠底层的layer换成了local attention,然后后面的layer用去掉了分母的,normalize过后的线性attention。