理解 Attention:Query、Key、Value

从一个具体句子开始,理解信息如何在 Token 之间流动。

可复习 · 原问题出处待确认

本章材料

Attention in transformers, step-by-step | Deep Learning Chapter 63Blue1Brown · 从 0:00 开始 · 在 YouTube 打开Query、Key、Value 和注意力权重在这一章讲解。

重点

  1. Attention 让每个位置的向量吸收其他位置的信息。 视频的例子是 “a fluffy blue creature”:经过 Attention,creature 的向量带上了 fluffy 和 blue 的含义。
  2. 每个 Token 的向量分别乘以三组学出来的矩阵,得到 Query、Key、Value。
  3. Query 和 Key 的点积衡量两个位置的相关程度。 除以 √dk 之后用 softmax 转成加起来等于 1 的权重。
  4. 用这些权重对 Value 加权求和,得到的是对原向量的更新量,再加回原来的向量上。
  5. GPT 这类模型使用因果掩码,并行运行多个注意力头。 因果掩码让每个位置只能看到它前面的位置;GPT-3 每一层有 96 个注意力头。
由 Claude 根据 3Blue1Brown《Deep Learning》第 6 章整理。读的时候哪一条看不懂,就把它记到「复习」的“我卡在哪里”。

难点

  1. 注意力权重不是准确率,也不是“下一个词的概率”。 它只表示这一次信息按什么比例混合。
  2. Q、K、V 都是数字向量,不是三个文本字段。 图书馆的比喻只是帮你区分它们的作用。
  3. 不能保证每个注意力头都学到一种能说出名字的关系。
  4. Attention 只负责让位置之间交换信息。 模型的大部分参数在 Attention 之外的 MLP 层里,那是下一章的内容。
由 Claude 根据 3Blue1Brown 第 6 章整理。读的时候哪一条看不懂,就把它记到「复习」的“我卡在哪里”。

基础:Token → Embedding → Attention

Token 是分词器切出的文本单位,不一定等于完整单词。Embedding 把 Token ID 映射成向量,让模型可以进行数值计算。经过 Attention,某个位置的表示可以吸收其他位置的信息,带上上下文。

下面沿着你截图中的 What、Why、How 三个问题理解 Q、K、V。

1. What:Q、K、V 分别是什么?

先用一个比喻:在图书馆找书。

概念中文作用图书馆类比
Query(Q)查询向量我正在寻找什么信息?你的搜索需求
Key(K)键向量我有哪些可用于匹配的特征?书籍的检索标签
Value(V)值向量被关注后,实际传递什么信息?书籍提供的内容

注意:Q、K、V 都是数字向量,不是三个真实的文本字段。这个比喻帮助区分它们的作用,并不表示模型真的在搜索图书馆。

2. Why:为什么需要三个?

看一个具体句子:

The animal was tired because it had been running.

当模型处理 it 时,需要结合前面的内容。在这个句子里,it 指向 animal。我们用这一关系说明“从其他位置获取信息”的直觉。

Attention 机制示意 简化示例

点击 it,查看它从哪里获取信息。

Theanimalwastiredbecause

it 从 animal 获取信息

Q

it

寻找相关上下文
K

animal

参与匹配的特征
V

animal

提供被整合的信息
只是一个可能的关系示意,不是模型测量结果。每个 Token 都可以产生 Q、K、V,Attention 不等同于代词指代判断。

这里最关键的区别:

  • Q 和 K:用于计算两个位置之间的匹配分数。
  • V:匹配之后,实际被加权组合的信息。

为什么不直接比较 Embedding?不同的投影矩阵让模型能够分别学习“怎样匹配”和“传递什么”,不必将二者绑定在同一种表示上。

3. How:模型到底怎么计算?

先从分数开始,观察它如何影响信息的混合比例。

简化的 Attention 计算器

假设当前处理 it,只展示三个可见位置。拖动 animal 的匹配分数,观察权重如何重新分配。

2.0

Softmax 转换后的注意力权重

The16.1%
animal72.0%
tired11.9%

输出 = 16.1% × V(The) + 72.0% × V(animal) + 11.9% × V(tired)

得到一个向量,不是直接输出单词。匹配分数为人工设定,视为已缩放的分数;非真实模型数据。

完整过程是:

  1. 每个位置的输入向量经过三组可学习的线性投影,得到 Q、K、V。
  2. 当前位置的 Q 与可见位置的 K 做点积,并除以缩放因子。
  3. 用 Softmax 将分数转换为和为 1 的权重。
  4. 按这些权重对 V 加权求和,得到这个注意力头的输出。

数学上写作:

Attention⁡(Q,K,V)=softmax⁡(QK⊤dk+M)V\operatorname{Attention}(Q,K,V)=\operatorname{softmax}\left(\frac{QK^\top}{\sqrt{d_k}}+M\right)V

这里每行表示一个 Token,M 是掩码。因果注意力会屏蔽未来位置。暂时不需要记住公式,先记住:Q 和 K 决定关注多少,权重与 V 决定组合什么信息。 注意力权重不是模型准确率。

深入理解:自己调整二维 Query,查看点积和因果掩码
交互实验室二维教学数值 · 非真实模型

1. 选择正在接收信息的位置

2. 调整这个位置的 Query

选中位置提供 Q;每一行提供 K 和 V。滑块直接修改示例 Q。

3. 匹配分数 → 权重 → Value

Token / Key分数权重
aK [0, 0] · V [0, 0]
0.00
6.3%
fluffyK [2, 0] · V [1, 0]
2.12
52.5%
blueK [0, 2] · V [0, 1]
1.41
25.9%
creatureK [0.5, 0.5] · V [0.2, 0.2]
0.88
15.2%
4. 加权组合后的输出[0.556, 0.290]

输出 = Σ 权重 × Value
权重总和为 1;它不是预测准确率。

这里的 Q/K/V 全部是人工设置的二维教学向量,没有模拟训练、投影矩阵或位置编码。单头结果还需要经过后续的输出投影、残差等步骤,并不是整个 Transformer 的最终输出。

4. Multi-head Attention 又是什么?

  • Single-head Attention:用一组 Q、K、V 投影计算信息之间的关系。
  • Multi-head Attention:用多组不同的投影并行计算,再组合各头输出并做输出投影。

不同的 Head 可能对不同关系产生响应,但这些行为是在训练中学到的,不保证每个 Head 都有固定、可命名的功能。

学完了?去 复习 看自己卡住的地方,或者直接 做测验。

来源与原始问题

本文根据你提供的三张 GPT 回答截图整理,并补充了计算边界。关系图、滑块和测验为重新实现的组件,不是从原对话导出的源码。完整历史和未出现在截图中的回答没有导入。

原来的问题见「复习」页,出处待确认。

参考:3Blue1Brown · Attention in transformers · Attention Is All You Need。

On this page