线性注意力机制全解析:从Linear Transformer到Mamba
为什么标准注意力是瓶颈? Transformer的核心——自注意力机制,其计算复杂度是序列长度的二次方 O(n²)。这个n²使得处理长序列时的计算和内存开销急剧增长。 标准注意力的计算过程 import torch import torch.nn.functional as F import math def standard_attention(Q, K, V): """ 标准自注意力 Q, K, V: (batch, num_heads, seq_len, d_head) """ d = Q.shape[-1] # 注意力分数: (batch, heads, seq, seq) scores = torch.matmul(Q, K.transpose(-2, -1)) / math.sqrt(d) # Softmax归一化 attn = F.softmax(scores, dim=-1) # 加权求和 output = torch.matmul(attn, V) # (batch, heads, seq, d_head) return output # 计算复杂度分析 # scores矩阵大小: seq_len × seq_len # 当 seq_len = 8192 时, 每个head的scores矩阵 = 8192² = 67M 个元素 # 当 seq_len = 32768 时, 每个head的scores矩阵 = 32768² = 1B 个元素 # 显存随序列长度平方增长! 不同序列长度的开销对比 序列长度 注意力矩阵大小 显存(FP16, 32头) 计算量(FLOPs) 4K 16M 1GB 0.13T 8K 64M 4GB 0.52T 32K 1B 64GB 8.4T 128K 16B 1TB 134T 1M 1T 64TB 8.2PT 这个表格清楚地展示了为什么标准注意力无法扩展到超长序列。 ...