注意力机制 - 实现步骤介绍
1 课程概览
本课讲解注意力机制的实现步骤,共两步:①用 Q 和 K 计算相似度,得到注意力权重分布;②用权重分布乘以 V 的张量形式,得到加权求和结果。最终目标是将普通 Q 升级为更强大的 Q(包含权重分布和内容信息)。
2 核心概念与定义
- 权重分布(Weight Distribution):Q 与 K 计算相似度后得到的权重系数。
- 注意力分数(Attention Score):Q 与 K 的相似度分数。
- 加权求和(Weighted Sum):用权重分布乘以 V 的张量形式。
- Attention Q:经过注意力机制处理后的更强大的 Q。
3 模型与算法详解
注意力机制实现步骤
第一步:计算注意力权重分布
- 用 Q 和 K 计算相似度
- 得到注意力权重分布(权重系数)
- 有多少个词,就有多少个权重值
第二步:加权求和
- 用权重分布乘以 V 的张量形式
- 每个权重对应一个 V(词向量)
- 加权求和得到最终结果
示例说明
假设有 3 个词,权重分布为 [0.8, 0.1, 0.1]:
0.8 × V1(第一个词的词向量)
0.1 × V2(第二个词的词向量)
0.1 × V3(第三个词的词向量)
→ 加权求和得到 Attention Q
最终目标
$$\text{Attention}(Q, K, V) = \text{Attention Q}$$
- 普通 Q:当前要查询的问题
- Attention Q:包含权重分布和内容信息的更强大的 Q
"it" 指代问题示例
句子:"A robot must obey the orders given it by human beings, except where such orders would conflict with the First Law."
- Q:it 代表谁?
- K:21 个单词的索引
- V:21 个单词的词向量
流程:
- 拿 it 与 21 个单词算相似度
- 得到 21 个权重值
- 用权重乘以对应词向量
- 加权求和得到 Attention Q
4 数学原理与推导
第一步:计算相似度分数
$$\text{score}_i = Q \cdot K_i$$
第二步:转换为权重分布(softmax)
$$\alpha_i = \text{softmax}(\text{score}_i) = \frac{e^{\text{score}_i}}{\sum_j e^{\text{score}_j}}$$
第三步:加权求和
$$\text{Attention Q} = \sum_i \alpha_i V_i$$
矩阵形式
$$\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V$$
5 代码示例
import torch
import torch.nn.functional as F
# 注意力机制实现步骤示例
# 假设有 3 个词
# Q: 查询张量(当前要查询的问题)
Q = torch.tensor([1.0, 0.0, 0.0])
# K: 键/索引(3个词的索引)
K = torch.tensor([
[1.0, 0.0, 0.0], # 词1的索引
[0.0, 1.0, 0.0], # 词2的索引
[0.0, 0.0, 1.0], # 词3的索引
])
# V: 值(3个词的词向量)
V = torch.tensor([
[1.0, 0.0, 0.0], # 词1的词向量
[0.0, 1.0, 0.0], # 词2的词向量
[0.0, 0.0, 1.0], # 词3的词向量
])
# 第一步:计算相似度分数
scores = torch.matmul(Q, K.T) # [3]
print("相似度分数:", scores) # [1.0, 0.0, 0.0]
# 第二步:转换为权重分布(softmax)
weights = F.softmax(scores, dim=0)
print("权重分布:", weights) # [0.8, 0.1, 0.1](近似)
# 第三步:加权求和
attention_q = torch.matmul(weights, V) # [3]
print("Attention Q:", attention_q)
6 重难点与易错提醒
- ❗重点:注意力机制两步——①Q 与 K 计算相似度得权重分布;②权重分布乘以 V 加权求和。
- ❗重点:有多少个词,就有多少个权重值。
- ⚠️易错:权重分布乘以的是 V 的张量形式(词向量),不是文本内容。
- 💡深入理解:最终目标是将普通 Q 升级为更强大的 Q(Attention Q)。
- 💡深入理解:权重分布反映模型对不同词的关注程度。
7 课堂问答精选
Q1:注意力机制的实现步骤是什么?
A:两步:①用 Q 和 K 计算相似度,得到注意力权重分布(权重系数);②用权重分布乘以 V 的张量形式,加权求和得到 Attention Q。
Q2:权重分布的个数由什么决定?
A:由词的数量决定。有多少个词,就有多少个权重值。例如 3 个词对应 3 个权重值(如 [0.8, 0.1, 0.1]),21 个词对应 21 个权重值。
Q3:权重分布乘以的是什么?
A:乘以的是 V 的张量形式(词向量),不是文本内容。每个权重对应一个词的词向量,加权求和得到 Attention Q。
Q4:注意力机制的最终目标是什么?
A:将普通 Q 升级为更强大的 Q(Attention Q)。普通 Q 只是当前要查询的问题,Attention Q 包含了权重分布和内容信息,比普通搜索更强大。
8 本课小结
- 第一步:Q 与 K 计算相似度 → 权重分布。
- 第二步:权重分布 × V(词向量)→ 加权求和。
- 权重个数 = 词的数量。
- 最终目标:普通 Q → Attention Q(更强大的 Q)。
- 示例:it 指代问题,21 个词对应 21 个权重。
9 延伸思考
- 权重分布如何反映模型对不同词的关注程度?
- Attention Q 相比普通 Q 有什么优势?