AI之attention机制(self-attention,multi-head attention)
从基础概念开始,逐步深入介绍Attention机制。
1. Attention机制的核心思想
注意力机制模仿了人类视觉注意力:当我们观察图像或阅读文本时,不会平等处理所有信息,而是将注意力集中在重点部分。
核心公式(基础形式):
Attention(Q,K,V) = softmax(QK^T/√d_k) V
-
Q (Query):当前关注点的表示
-
K (Key):所有位置的标识(标签)
-
V (Value):所有位置的实际内容
-
d_k:缩放因子(防止内积过大)
2. 传统Attention(Encoder-Decoder Attention)
2.1 应用场景
最早用于神经机器翻译(Neural Machine Translation),在Seq2Seq模型中连接编码器和解码器。
2.2 工作原理
# 伪代码示例 编码器输出: 源语言句子各词的隐藏状态 (K和V) 解码器输入: 当前要生成的目标语言词的状态 (Q) 计算过程: 1. Q与每个K计算相似度 → 得到权重分布 2. 对权重进行softmax归一化 3. 用权重加权求和V → 得到上下文向量 4. 上下文向量指导当前词的生成
2.3 特点
-
Q来自解码器,K和V来自编码器
-
解决长距离依赖问题
-
让解码器在生成每个词时"回看"源序列的不同部分
3. Self-Attention(自注意力)
3.1 核心概念
序列内部自己对自己的注意力。在同一序列中,每个位置都可以关注其他所有位置。
3.2 计算过程
输入序列: [x1, x2, x3, x4] 对每个xi: 1. 生成Qi, Ki, Vi(通过线性变换) 2. Qi与所有Kj计算相似度 3. softmax得到对每个位置的注意力权重 4. 加权求和所有Vj得到xi的新表示
3.3 关键优势
-
捕获长距离依赖:任意两个位置可以直接交互
-
并行计算:不像RNN需要逐步计算
-
全局感受野:每个位置能看到整个序列
4. Multi-Head Attention(多头注意力)
4.1 思想
将Q、K、V投影到多个子空间,并行执行多次注意力,最后拼接结果。
MultiHead(Q,K,V) = Concat(head1,...,headh)W^O 其中 headi = Attention(QW_i^Q, KW_i^K, VW_i^V)
4.2 作用
-
捕获不同类型的关系(语法、语义等)
-
增加模型的表达能力
-
类似卷积神经网络中的多通道
5. Transformer中的三种Attention
5.1 编码器的Self-Attention
-
Q、K、V都来自编码器输入
-
每个位置可以看到所有位置(包括自己)
5.2 解码器的Masked Self-Attention
-
只允许看到当前位置及之前的位置
-
使用掩码机制防止看到未来信息
-
确保自回归生成特性
5.3 编码器-解码器Attention
-
Q来自解码器,K、V来自编码器输出
-
让解码器关注输入序列的相关部分
-
类似传统Attention机制
6. 变体和改进
6.1 位置编码
由于Self-Attention没有位置概念,需要加入位置编码:
PE(pos, 2i) = sin(pos/10000^(2i/d_model)) PE(pos, 2i+1) = cos(pos/10000^(2i/d_model))
6.2 高效变体
-
Sparse Attention:限制注意力范围
-
Linear Attention:将计算复杂度从O(n²)降到O(n)
-
Reformer:使用局部敏感哈希
-
Performer:使用核方法近似
7. 应用实例
7.1 BERT中的Attention
# BERT使用双向Transformer 输入: [CLS] 我 爱 自然语言处理 [SEP] # 每个词可以关注所有词(包括左右上下文)
7.2 GPT中的Attention
# GPT使用单向(因果)Transformer 输入: 人工智能 是 未来 # 生成"未来"时只能看到"人工智能"和"是"
8. 优缺点总结
优点:
-
✅ 捕获长距离依赖
-
✅ 并行计算能力强
-
✅ 模型可解释性较好(可可视化注意力权重)
-
✅ 能捕获多层次的关系
缺点:
-
❌ 计算复杂度O(n²)(n是序列长度)
-
❌ 对位置信息不敏感(需要额外位置编码)
-
❌ 深层堆叠可能带来优化困难
-
❌ 需要大量数据和算力训练
9. 实践建议
-
序列长度较短(<512):使用标准Self-Attention
-
长文本处理:考虑稀疏注意力或线性注意力变体
-
需要位置信息:添加位置编码(绝对或相对)
-
多任务学习:多头注意力往往效果好
-
训练稳定性:注意层归一化和残差连接
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)