Cosformer余弦

wen IT资讯 20

本文目录导读:

Cosformer余弦

  1. 核心一句话总结
  2. 为什么要做 CosFormer?(背景与动机)
  3. CosFormer 的核心技术细节(“余弦”体现在哪?)
  4. CosFormer 的优点
  5. CosFormer 的缺点
  6. 总结与对比
  7. 一句话记忆点

我们来详细聊聊 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)),当处理长序列(如长文档、高分辨率图像、长视频)时,计算开销巨大,甚至无法运行。

为了降低复杂度,主流方向分为两类:

  1. 稀疏注意力:只关注部分 token(如 Longformer, BigBird),缺点是可能丢失全局信息。
  2. 线性注意力 (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 会带来两个严重问题:

  1. 无法捕捉位置信息:ReLU 是逐元素的,不像 Softmax + 位置编码天然带位置关系。
  2. 注意力分布过于平滑:注意力权重无法区分“近距离”和“远距离”的 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 的优点

  1. 线性计算复杂度:(O(Ld^2)),特别适合长序列任务(如长文本理解、语音识别、时间序列预测)。
  2. 保留了较强的位置信息:通过余弦函数,天然赋予了模型对“远近距离”的感知,这是其他线性注意力(如 Linear Transformer)做不到的。
  3. 非负注意力:ReLU + 余弦(在范围内)确保了注意力权重非负,避免了 Performer 等模型可能出现的负权重问题。
  4. 性能强劲:在长序列任务(如 Long-Range Arena 基准测试)中,CosFormer 的表现显著优于其他线性注意力模型(Linear Transformer、Performer),甚至在某些任务上接近甚至超过原始 Softmax Transformer。

CosFormer 的缺点

  1. 不是万能替代品:对于中等长度序列,原生 Transformer 的二次复杂度尚可接受,使用 CosFormer 可能带来一些精度损失。
  2. 超参数 M(窗口大小):需要针对不同任务手动调整,M 太小,全局性变差;M 太大,局部性减弱。
  3. 实现稍复杂:需要对 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 一样感知“谁离我近,谁离我远”,因此在长序列任务中表现优异。

希望这个解释对你有帮助!如果还有具体代码实现或论文细节需要讨论,可以继续提问。

上一篇Linformer线性

下一篇Big Bird

抱歉,评论功能暂时关闭!