Skip to content

稀疏注意力论文解读

稀疏注意力通过将 O(n²) 的全局注意力替换为稀疏的注意力模式,在保持模型性能的同时大幅降低计算和内存开销,是处理长序列的关键技术方向。

稀疏注意力模式

动机

标准自注意力的每个 Token 需要关注所有其他 Token,形成 O(n²) 的全连接注意力图。但实际中,大部分 Token 对之间的注意力权重接近零——注意力天然是稀疏的。

稀疏注意力模式

局部窗口注意力

每个 Token 仅关注邻近的 w 个 Token:

python
class LocalAttention(nn.Module):
    """局部窗口注意力"""
    def __init__(self, d_model, window_size=256):
        super().__init__()
        self.window_size = window_size
        self.qkv = nn.Linear(d_model, 3 * d_model)
        self.proj = nn.Linear(d_model, d_model)

    def forward(self, x):
        B, T, D = x.shape
        w = self.window_size

        # 填充使长度整除窗口
        pad = (w - T % w) % w
        x_pad = F.pad(x, (0, 0, 0, pad))
        T_pad = T + pad

        # 重塑为窗口
        x_windows = x_pad.reshape(B, T_pad // w, w, D)
        qkv = self.qkv(x_windows)
        q, k, v = qkv.chunk(3, dim=-1)

        # 窗口内注意力
        attn = (q @ k.transpose(-2, -1)) / (D ** 0.5)
        attn = F.softmax(attn, dim=-1)
        out = (attn @ v).reshape(B, T_pad, D)[:, :T, :]

        return self.proj(out)

组合稀疏模式

Longformer 提出了组合稀疏模式:

  1. 滑动窗口:局部上下文建模
  2. 扩张滑动窗口:增大感受野
  3. 全局注意力:少数关键 Token(如 [CLS])使用全局注意力

BigBird 的块稀疏注意力

BigBird 将注意力组织为块级别:

  • 随机块:随机选择块间连接,保证图连通性
  • 窗口块:局部滑动窗口
  • 全局块:关键 Token 全局连接

稀疏注意力的理论保证

Beltagy et al. (2020) 证明,包含随机 + 窗口 + 全局三种模式的稀疏注意力图是 Turing 完备的,理论上可以逼近全注意力。这为稀疏注意力的有效性提供了理论基础。

主要论文对比

模型注意力模式复杂度最大长度
Transformer全连接O(n²)~512
Sparse Transformer固定稀疏模式O(n√n)~8K
Longformer窗口+全局O(n×w)~16K
BigBird块稀疏O(n)~32K
Linformer低秩近似O(n)~64K

实际应用

稀疏注意力在以下场景特别有价值:

  • 长文档处理:法律合同、学术论文全文理解
  • 代码生成:需要理解整个代码库上下文
  • 对话系统:维护完整对话历史
  • 基因组学:处理极长 DNA 序列

相关资源

最近更新