1. 基础注意力机制
1.1 核心概念
注意力机制模拟人类阅读时的"聚焦"行为,让模型在处理每个位置时,能够关注到输入序列中最重要的部分。
1.2 数学原理
\text{Attention}(Q,K,V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V
1.3 结构化示例
输入序列
句子: "The cat sat on the mat"
位置: [0, 1, 2, 3, 4, 5]
词汇: [The, cat, sat, on, the, mat]
步骤1: 生成Q、K、V矩阵
假设每个词用3维向量表示:
Query矩阵 (Q) - 每个位置"想要关注什么"
位置0 (The): [0.1, 0.2, 0.3]
位置1 (cat): [0.4, 0.5, 0.6]
位置2 (sat): [0.7, 0.8, 0.9]
位置3 (on): [1.0, 1.1, 1.2]
位置4 (the): [1.3, 1.4, 1.5]
位置5 (mat): [1.6, 1.7, 1.8]
Key矩阵 (K) - 每个位置"是什么"
位置0 (The): [0.2, 0.3, 0.4]
位置1 (cat): [0.5, 0.6, 0.7]
位置2 (sat): [0.8, 0.9, 1.0]
位置3 (on): [1.1, 1.2, 1.3]
位置4 (the): [1.4, 1.5, 1.6]
位置5 (mat): [1.7, 1.8, 1.9]
Value矩阵 (V) - 每个位置"包含什么信息"
位置0 (The): [0.3, 0.4, 0.5]
位置1 (cat): [0.6, 0.7, 0.8]
位置2 (sat): [0.9, 1.0, 1.1]
位置3 (on): [1.2, 1.3, 1.4]
位置4 (the): [1.5, 1.6, 1.7]
位置5 (mat): [1.8, 1.9, 2.0]
步骤2: 计算注意力分数
对于位置1 (cat),计算与所有位置的相似度:
点积计算公式:
s_{ij} = q_i \cdot k_j = \sum_{d=1}^{d_k} q_{i,d} \cdot k_{j,d}
具体计算:
cat的Query: [0.4, 0.5, 0.6]
与The的Key: [0.2, 0.3, 0.4] → 点积: 0.4×0.2 + 0.5×0.3 + 0.6×0.4 = 0.47
与cat的Key: [0.5, 0.6, 0.7] → 点积: 0.4×0.5 + 0.5×0.6 + 0.6×0.7 = 0.92
与sat的Key: [0.8, 0.9, 1.0] → 点积: 0.4×0.8 + 0.5×0.9 + 0.6×1.0 = 1.37
与on的Key: [1.1, 1.2, 1.3] → 点积: 0.4×1.1 + 0.5×1.2 + 0.6×1.3 = 1.82
与the的Key: [1.4, 1.5, 1.6] → 点积: 0.4×1.4 + 0.5×1.5 + 0.6×1.6 = 2.27
与mat的Key: [1.7, 1.8, 1.9] → 点积: 0.4×1.7 + 0.5×1.8 + 0.6×1.9 = 2.72
步骤3: 应用Softmax得到注意力权重
Softmax公式:
\alpha_i = \frac{\exp(s_i)}{\sum_{j=1}^{n} \exp(s_j)}
具体计算:
原始分数: [0.47, 0.92, 1.37, 1.82, 2.27, 2.72]
Softmax后: [0.05, 0.08, 0.12, 0.18, 0.25, 0.32]
步骤4: 加权求和得到输出
加权求和公式:
\text{output}_i = \sum_{j=1}^{n} \alpha_{ij} \cdot v_j
具体计算:
输出 = 0.05×[0.3,0.4,0.5] + 0.08×[0.6,0.7,0.8] + 0.12×[0.9,1.0,1.1]
+ 0.18×[1.2,1.3,1.4] + 0.25×[1.5,1.6,1.7] + 0.32×[1.8,1.9,2.0]
= [1.23, 1.33, 1.43]
2. 多头注意力机制
2.1 核心思想
使用多个并行的注意力头,每个头学习不同的注意力模式,然后融合所有头的输出。
2.2 结构化示例
假设有3个注意力头
头1: 语法注意力
- 关注主谓宾关系
- cat → sat (主语-谓语)
- sat → on (谓语-介词)
头2: 语义注意力
- 关注语义相关性
- cat → mat (动物-物体)
- sat → on (动作-位置)
头3: 位置注意力
- 关注相邻位置
- 每个词主要关注前后1-2个位置
多头计算过程
头1输出 (语法)
cat位置输出: [0.8, 0.9, 1.0] # 主要关注sat
头2输出 (语义)
cat位置输出: [1.1, 1.2, 1.3] # 主要关注mat
头3输出 (位置)
cat位置输出: [0.6, 0.7, 0.8] # 主要关注The和sat
多头融合
多头注意力公式:
\text{MultiHead}(Q,K,V) = \text{Concat}(\text{head}_1, ..., \text{head}_h)W^O
其中:
\text{head}_i = \text{Attention}(QW_i^Q, KW_i^K, VW_i^V)
具体计算:
# 拼接所有头的输出
concatenated = [0.8,0.9,1.0, 1.1,1.2,1.3, 0.6,0.7,0.8]
# 线性变换降维
final_output = W_o × concatenated = [1.2, 1.3, 1.4]
3. 注意力机制的优势
3.1 可解释性
- 注意力权重可视化显示模型关注的位置
- 不同头学习不同的语言模式
3.2 并行计算
- 所有位置的注意力可以同时计算
- 比RNN的串行计算更高效
3.3 长距离依赖
- 直接连接任意两个位置
- 无需多层堆叠就能捕获长距离关系
4. 实际应用示例
4.1 机器翻译
源语言: "The cat sat on the mat"
目标语言: "猫坐在垫子上"
翻译"坐"时,注意力机制会:
- 头1: 关注"sat" (对应动词)
- 头2: 关注"cat" (主语)
- 头3: 关注"on the mat" (位置信息)
4.2 文本摘要
原文: "人工智能技术发展迅速,在医疗、教育、金融等领域都有广泛应用..."
摘要: "AI技术在多个领域应用广泛"
生成"应用"时,注意力会关注原文中的"医疗、教育、金融"等关键词
5. 总结
注意力机制通过Query-Key-Value机制实现信息的选择性关注,多头注意力则通过并行学习多种注意力模式来增强模型的表达能力。这种设计使得Transformer能够有效处理长序列并捕获复杂的语言关系。