扩展3 - 注意力概率分布的计算方式
1 课程概览
本课讲解注意力概率分布的计算方式。假设 Encoder 和 Decoder 都采用 RNN 模型,通过 Q 与 K 计算相似度分数,再经过 softmax 归一化得到注意力权重分布。核心问题:生成当前词时,应该重点关注 Encoder 中的哪个或哪些词。
2 核心概念与定义
- 注意力概率分布:Q 与 K 计算相似度后,经 softmax 归一化得到的权重。
- 相似度分数(Similarity Score):Q 与每个 K 的匹配程度。
- Soft Attention(软注意力):给每个输入项分配 0~1 之间的权重。
3 模型与算法详解
注意力概率分布计算流程
Q(查询) → 与每个 K 计算相似度 → 相似度分数 → softmax 归一化 → 注意力权重分布
计算步骤
- Q 与每个 K 计算相似度:得到匹配分数
- 结合 $S_{t-1}$:解码器的上一时刻隐藏状态
- Softmax 归一化:转换为注意力权重分布
- 权重 × V:加权求和得到 $C_t$
核心问题
生成当前词时,应该重点关注 Encoder 中的哪个或哪些词?
示例:"Tom chases Jerry" 翻译
| 生成词 | 重点关注 | 权重分布 |
|---|---|---|
| 汤姆 | Tom | [0.6, 0.2, 0.2] |
| 追逐 | chases | [0.2, 0.6, 0.2] |
| 杰瑞 | Jerry | [0.2, 0.2, 0.6] |
N vs M 问题
输入 N 个词,可能输出 M 个词(N ≠ M)。
- 3 个英文词可能翻译成 5 个中文词
- 不能简单地"第几个输入对应第几个输出"
- 需要通过 Q 与所有 K 计算权重
4 数学原理与推导
第一步:计算相似度分数
$$\text{score}(Q, K_i) = Q \cdot K_i$$
第二步:结合解码器隐藏状态
$$\text{score}t = \text{score}(Q_t, K_i) + S{t-1}$$
第三步:Softmax 归一化
$$\alpha_{t,i} = \frac{e^{\text{score}{t,i}}}{\sum_j e^{\text{score}{t,j}}}$$
第四步:加权求和
$$C_t = \sum_i \alpha_{t,i} V_i$$
完整公式
$$\text{Attention}(Q_t, K, V) = \text{softmax}(Q_t K^T) V = C_t$$
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], # Tom
[0.0, 1.0, 0.0], # chases
[0.0, 0.0, 1.0], # Jerry
])
# V: 3 个词的词向量
V = torch.tensor([
[1.0, 0.0, 0.0], # Tom 的词向量
[0.0, 1.0, 0.0], # chases 的词向量
[0.0, 0.0, 1.0], # Jerry 的词向量
])
# 第一步:计算相似度分数
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.6, 0.2, 0.2](近似)
# 第三步:加权求和
C_t = torch.matmul(weights, V) # [3]
print("C_t:", C_t)
6 重难点与易错提醒
- ❗重点:注意力概率分布 = Q 与 K 计算相似度 → softmax 归一化。
- ❗重点:生成当前词时,重点关注 Encoder 中的哪个或哪些词。
- ⚠️易错:N vs M 问题,输入 N 个词可能输出 M 个词。
- 💡深入理解:软注意力给每个输入项分配 0~1 之间的权重。
- 💡深入理解:相似度分数结合解码器隐藏状态 $S_{t-1}$。
7 课堂问答精选
Q1:注意力概率分布如何计算?
A:①Q 与每个 K 计算相似度分数;②结合解码器隐藏状态 $S_{t-1}$;③Softmax 归一化得到注意力权重分布;④权重 × V 加权求和得到 $C_t$。
Q2:生成"汤姆"时,权重分布是什么?
A:生成"汤姆"时,重点关注 Encoder 中的"Tom",权重分布为 [0.6, 0.2, 0.2],即对"Tom"的权重最高。
Q3:N vs M 问题是什么?
A:输入 N 个词,可能输出 M 个词(N ≠ M)。例如 3 个英文词可能翻译成 5 个中文词,不能简单地"第几个输入对应第几个输出",需要通过 Q 与所有 K 计算权重。
Q4:软注意力机制的特点是什么?
A:软注意力给每个输入项分配 0~1 之间的权重,关联度再小也有一个值。
8 本课小结
- 注意力概率分布:Q 与 K 计算相似度 → softmax 归一化。
- 核心问题:生成当前词时,重点关注哪个或哪些词。
- 计算步骤:相似度分数 → softmax → 权重 × V。
- N vs M 问题:输入 N 个词可能输出 M 个词。
- 软注意力:权重在 0~1 之间。
9 延伸思考
- 相似度分数有哪些计算方式?
- 如何处理 N vs M 的对齐问题?