本文目录导读:

我们来详细聊聊 CosFormer(Cosine Transformer),以及它为什么被称为“余弦”注意力机制的代表作。
核心一句话总结
CosFormer 是一种旨在替代传统 Softmax 注意力机制的线性复杂度 Transformer 变体,它通过引入余弦函数(Cosine) 和ReLU 激活函数,在保持全局建模能力的同时,将计算复杂度从 (O(L^2))(L为序列长度)降低到 (O(L))。
为什么要做 CosFormer?(背景与动机)
传统的 Transformer (如 BERT, GPT) 使用 Softmax Attention,其核心公式为:
[ \text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right) V ]
- 优点:强大的全局依赖建模能力。
- 致命缺点:计算和内存复杂度是 二次方 (Quadratic) 的 (O(L^2)),当处理长序列(如长文档、高分辨率图像、长视频)时,计算开销巨大,甚至无法运行。
为了降低复杂度,主流方向分为两类:
- 稀疏注意力:只关注部分 token(如 Longformer, BigBird),缺点是可能丢失全局信息。
- 线性注意力 (Linear Attention):利用核函数(Kernel Trick)将 (O(L^2)) 分解为 (O(L)),典型代表是 Linear Transformer ((\phi(x) = \text{elu}(x) + 1))、Performer (使用随机特征映射)。
CosFormer 属于第二类(线性注意力),但它解决了核函数方法中一个关键问题:无法保证注意力的非负性并能处理局部性/位置信息。
CosFormer 的核心技术细节(“余弦”体现在哪?)
CosFormer 对原生 Transformer 做了两个关键修改:
去掉 Softmax,使用 ReLU 作为核函数
- 原 Softmax 函数保证了注意力权重是非负且和为1。
- 问题:Softmax 的指数运算 (e^x) 使得 (QK^T) 无法被分解成两个独立向量的点积。
- CosFormer 的做法:用 ReLU 替换 Softmax 中的指数函数,因为 (\text{ReLU}(x) = \max(0, x)),它天然是非负的,并且可以写成 (Q' \cdot K') 的形式((Q'=\text{ReLU}(Q), K'=\text{ReLU}(K)))。
权重计算公式变成: [ \text{Attention}(Q, K, V) = \frac{\text{ReLU}(Q) \cdot \text{ReLU}(K)^T}{\text{归一化项}} V ]
由于 (\text{ReLU}(Q) \cdot \text{ReLU}(K)^T = \sum_i (\text{ReLU}(Q_i) \cdot \text{ReLU}(K_i))),这允许我们通过先做 (KV) 矩阵乘法,再乘以 Q 的方式来将复杂度降为 (O(L)):
[ O = Q' \cdot (K'^T V) \quad \text{(复杂度 O(Ld^2))} ] 而不是 [ O = (Q' \cdot K'^T) \cdot V \quad \text{(复杂度 O(L^2 d))} ]
引入余弦重新加权函数(CosFormer 的“灵魂”)
仅仅用 ReLU 替换 Softmax 会带来两个严重问题:
- 无法捕捉位置信息:ReLU 是逐元素的,不像 Softmax + 位置编码天然带位置关系。
- 注意力分布过于平滑:注意力权重无法区分“近距离”和“远距离”的 token。
CosFormer 的解决方案:在注意力计算中引入一个余弦函数作为重新加权因子。
具体改动如下(以序列维度为例):
- 对于位置 (i) 和 (j) 上的 token,它们的注意力权重 (A_{ij}) 不再是单纯的 (\text{ReLU}(Q_i) \cdot \text{ReLU}(K_j)),而是乘以一个基于 位置差 (i-j) 的余弦函数。
[ A_{ij} = \text{ReLU}(Q_i) \cdot \text{ReLU}(K_j) \cdot \cos\left(\frac{\pi}{2} \cdot \frac{i - j}{M}\right) \cdot \text{bias} ]
- (M):一个预定义的窗口大小(超参数),该函数在 (|i-j| < M) 时接近1,在 (|i-j| > M) 时快速衰减到0。
- 为什么用余弦? 因为余弦函数在 ([0, \pi/2]) 上单调递减且非负,完美地模拟了距离越近,权重越大;距离越远,权重越小的局部性归纳偏置。
线性化技巧:关键来了!余弦函数可以写成乘积形式: [ \cos(a - b) = \cos a \cos b + \sin a \sin b ]
[ A_{ij} = \text{ReLU}(Q_i) \cdot \text{ReLU}(K_j) \cdot [\cos(\phi_i)\cos(\phi_j) + \sin(\phi_i)\sin(\phi_j)] ]
(\phi_i = \frac{\pi}{2} \cdot \frac{i}{M}),(\phi_j = \frac{\pi}{2} \cdot \frac{j}{M})。
这完美地保持了可分性 (Separability)!我们可以将 (Q_i) 扩展成 ([\text{ReLU}(Q_i) \cos(\phi_i), \text{ReLU}(Q_i) \sin(\phi_i)]),将 (K_j) 扩展成 ([\text{ReLU}(K_j) \cos(\phi_j), \text{ReLU}(K_j) \sin(\phij)]),这样,(A{ij}) 仍然等于两个扩展向量的点积。
线性复杂度得以保留!
CosFormer 的优点
- 线性计算复杂度:(O(Ld^2)),特别适合长序列任务(如长文本理解、语音识别、时间序列预测)。
- 保留了较强的位置信息:通过余弦函数,天然赋予了模型对“远近距离”的感知,这是其他线性注意力(如 Linear Transformer)做不到的。
- 非负注意力:ReLU + 余弦(在范围内)确保了注意力权重非负,避免了 Performer 等模型可能出现的负权重问题。
- 性能强劲:在长序列任务(如 Long-Range Arena 基准测试)中,CosFormer 的表现显著优于其他线性注意力模型(Linear Transformer、Performer),甚至在某些任务上接近甚至超过原始 Softmax Transformer。
CosFormer 的缺点
- 不是万能替代品:对于中等长度序列,原生 Transformer 的二次复杂度尚可接受,使用 CosFormer 可能带来一些精度损失。
- 超参数 M(窗口大小):需要针对不同任务手动调整,M 太小,全局性变差;M 太大,局部性减弱。
- 实现稍复杂:需要对 Q 和 K 进行特征维度扩展(加余弦和正弦分量),增加了实现难度。
总结与对比
| 模型 | 特点 | 复杂度 | 位置信息 | 关键技巧 |
|---|---|---|---|---|
| 原始 Transformer | 精度最高 | (O(L^2)) | 位置编码 + Softmax | 指数归一化 |
| Linear Transformer | 线性化,简单 | (O(L)) | 无 (仅靠特征) | ELU+1 核函数 |
| Performer | 理论完备,正交 | (O(L)) | 需要额外工作 | 随机傅里叶特征 |
| CosFormer (我们这个) | 强位置感知,线性化 | (O(L)) | 强 (余弦距离) | ReLU + 余弦重新加权 |
一句话记忆点
CosFormer 通过在 ReLU 线性注意力的基础上,巧妙地嵌入余弦距离(位置差),使得模型在 (O(L)) 复杂度下,依然能像原生 Transformer 一样感知“谁离我近,谁离我远”,因此在长序列任务中表现优异。
希望这个解释对你有帮助!如果还有具体代码实现或论文细节需要讨论,可以继续提问。