注意力机制
注意力机制是深度学习的核心创新,它允许模型动态地关注输入中最相关的部分,是Transformer架构的基础。
01注意力类型
注意力机制可以根据不同的维度进行分类,每种类型都有其特定的应用场景和优势。
注意力分类
| 分类维度 | 类型 | 说明 |
|---|---|---|
| 注意力来源 | 自注意力 | Q、K、V来自同一序列 |
| 交叉注意力 | Q来自A,K/V来自B | |
| 注意力范围 | 全局注意力 | 关注所有位置 |
| 局部注意力 | 只关注局部窗口 | |
| 稀疏性 | 稠密注意力 | 所有位置参与 |
| 稀疏注意力 | 只计算部分位置 |
自注意力 vs 交叉注意力
自注意力(Self-Attention)
Q、K、V来自同一个序列。用于捕捉序列内部的依赖关系。
应用:Transformer编码器、BERT、GPT
交叉注意力(Cross-Attention)
Q来自解码器,K、V来自编码器。用于建立两个序列之间的联系。
应用:机器翻译、图像描述、视觉问答
02交叉注意力
交叉注意力允许两个不同序列之间进行信息交互,是Seq2Seq模型和多模态模型的关键组件。
交叉注意力原理
在交叉注意力中,Query来自当前处理的序列,而Key和Value来自另一个上下文序列。
公式
Qcross = XWQ # 当前序列
Kcross = YWK # 上下文序列
Vcross = YWV # 上下文序列
然后使用标准注意力公式计算:softmax(QKT/√d)V
应用场景
机器翻译
解码器通过交叉注意力关注源语言编码器输出,实现跨语言对齐。
图像描述生成
解码器通过交叉注意力关注图像特征,生成描述文字。
视觉问答
模型通过交叉注意力关联问题文本和图像内容。
文档问答
根据问题查询文档内容,提取相关片段。
03稀疏注意力
稀疏注意力通过只计算部分位置之间的注意力,大幅降低计算复杂度,使处理长序列成为可能。
稀疏注意力动机
标准注意力的计算复杂度是 O(n²),当序列长度增加时,计算和内存成本急剧上升。
长序列的挑战
- 计算量:n=10K时,需要100M次点积运算
- 内存:存储n×n的注意力矩阵需要O(n²)空间
- 实际观察:大多数位置之间的注意力权重接近于0
稀疏注意力方法
局部窗口注意力
只关注每个位置周围固定大小的窗口(如滑动窗口)。
代表:Longformer、BigBird
稀疏模式
基于预设的稀疏模式选择参与计算的位置。
代表:Sparse Transformer
学习式稀疏
通过可学习的模式动态决定关注哪些位置。
代表:Routing Transformer
线性注意力
通过核函数近似,将复杂度降到O(n)。
代表:Linear Transformer、Performer
Flash Attention
Flash Attention通过IO-aware的矩阵计算,在保持精确注意力结果的同时, 将内存复杂度从O(n²)降到O(n)。是目前最流行的注意力优化方法。