Jerry's Blog

Back

返回专题总目录 · 上一讲:为什么需要 Attention

01 > [02] 03 > 04 > 05 > 06 | 07 > 08 > 09 > 10 > 11 > 12

“Query 是你的问题,Key 是书脊上的标题,Value 是书里的内容。Attention 就是一次带权重的查资料过程。“


这一讲要回答什么#

上一讲我们知道了 Attention 的核心动作是:每一步输出,都按相关性从不同输入位置取信息。

但还留了三个问题没解答:

  1. “相关性”到底怎么衡量?
  2. “取信息”到底取的是什么?
  3. 为什么需要 Query、Key、Value 三个不同的角色?

这一讲的目标是:用”查资料”的直觉把 Q / K / V 的角色彻底讲清楚,为下一讲的公式推导打好基础。


一个直觉起点:你在图书馆查资料#

想象你在图书馆里找资料。整个过程可以拆成三步:

  1. 你心里有一个问题——你想找关于”梯度消失”的内容。
  2. 你扫描书架上的标题/标签——看看哪些书和”梯度消失”最相关。
  3. 你从最相关的几本书中取走内容——翻开那几本书,读里面的段落。

这三步,恰好对应 Attention 中的三个角色:

交互演示:Q / K / V 的图书馆类比
点击三张卡片,看每个角色在查资料过程中扮演什么
图书馆动作Attention 角色含义
你心里的问题Query (Q)当前位置”想找什么”
书脊上的标题Key (K)每个候选位置”能提供什么线索”
书里的内容Value (V)匹配之后”真正要取走的信息”

关键的一点是:Key 和 Value 虽然来自同一个位置,但扮演的角色不同。 Key 用来做匹配,Value 用来做信息传递。


为什么不能只用两个角色#

读到这里你可能会问:为什么需要三个角色?直接用”Query 和 Content”两个不行吗?

答案是:“用来匹配的东西”和”匹配之后要取走的东西”,不一定是同一个。

交互演示:Key ≠ Value
搜索引擎场景:你的搜索词匹配的是标题/标签(Key),但你取走的是网页正文(Value)
你的搜索:
← 点击上面的搜索词试试

三个经典的现实场景都遵循这个模式:

场景QueryKey(用于匹配)Value(被取走)
图书馆你想查的主题书名 / 目录标题书中的具体段落
搜索引擎搜索关键词网页标题 / 标签网页正文内容
数据库SQL WHERE 条件索引列返回的数据行
考试翻笔记当前题目问了什么笔记页上的小标题标题下面的详细内容

Key 是”用来被搜索的摘要”,Value 是”搜到之后真正有价值的完整内容”。 这就是为什么 Attention 需要三个角色而不是两个。


从查资料到 Attention:完整的对应#

现在把图书馆类比映射到真实的 Attention 机制上。

假设我们有一个 4 个词的句子 [工程师, 在, 加州, 工作],模型正在处理”工程师”这个位置。

步进演示:一次完整的 Attention 查资料
逐步观察 Query 如何与每个 Key 匹配,然后按权重从 Value 中取信息(支持键盘 ←→)
0 / 6

用文字总结这个过程:

  1. Query:“工程师”位置发出一个”我想了解什么”的向量 q\mathbf{q}
  2. Key:所有位置各自生成一个”我能提供什么线索”的向量 k1,k2,k3,k4\mathbf{k}_1, \mathbf{k}_2, \mathbf{k}_3, \mathbf{k}_4
  3. 匹配:Query 和每个 Key 计算相似度(点积),得到分数。
  4. 权重:分数经过 softmax 变成注意力权重 α1,α2,α3,α4\alpha_1, \alpha_2, \alpha_3, \alpha_4
  5. Value:所有位置各自生成一个”我能提供什么内容”的向量 v1,v2,v3,v4\mathbf{v}_1, \mathbf{v}_2, \mathbf{v}_3, \mathbf{v}_4
  6. 加权求和:按权重对 Value 做加权求和,得到”工程师”位置的输出。

Q、K、V 从哪里来#

上面说 Query、Key、Value 是三种不同的”角色”。但在 Self-Attention 中,它们全都来自同一个输入序列——只是经过了不同的线性变换:

qi=xiWQ,ki=xiWK,vi=xiWV\mathbf{q}_i = \mathbf{x}_i \mathbf{W}^Q, \quad \mathbf{k}_i = \mathbf{x}_i \mathbf{W}^K, \quad \mathbf{v}_i = \mathbf{x}_i \mathbf{W}^V

其中 WQ,WK,WV\mathbf{W}^Q, \mathbf{W}^K, \mathbf{W}^V 是三个可学习的权重矩阵。

交互演示:同一个词,三种投影
点击不同的词,看它如何被同时投影成 Q、K、V 三种角色
← 点击一个词查看它的三种投影

这就像你在图书馆里,同一本书

  • 它被检索时用的是书名(Key 角色)
  • 它匹配到之后被取走的是内容(Value 角色)
  • 而如果你正在读这本书想查其他书,你从这本书中提取出的问题就是 Query 角色

三个角色源自同一个 xi\mathbf{x}_i,但 WQ,WK,WV\mathbf{W}^Q, \mathbf{W}^K, \mathbf{W}^V 让模型学会对同一个输入做不同的”解读”。

为什么要分开投影,而不是直接用 xi\mathbf{x}_i#

如果不做投影,那 Query 和 Key 就是同一个向量。这意味着:

  • “我想找什么”和”我能提供什么线索”完全绑死
  • 模型没有自由度去分别优化”怎么提问”和”怎么被匹配”

分开投影给了模型一个关键能力:同一个词可以以不同方式被搜索和被找到。

比如”加州”这个词:

  • 当别人在找地点信息时,它的 Key 应该强调”地理位置”
  • 当它自己想了解上下文时,它的 Query 可能在问”谁在这里?做了什么?”
  • 被匹配到之后,它的 Value 传递的是完整的语义信息

软检索 vs 硬检索#

传统数据库查询是硬检索:要么完全匹配(返回结果),要么不匹配(返回空)。

Attention 是软检索每个位置都会返回结果,只是权重不同。

交互对比:硬检索 vs 软检索
切换两种模式,看相同的 Query 会得到什么不同的结果

用数学来对比:

硬检索(argmax):只取最高分的位置

output=vj,j=argmaxj(qkj)\text{output} = \mathbf{v}_{j^*}, \quad j^* = \arg\max_j (\mathbf{q} \cdot \mathbf{k}_j)

软检索(softmax + 加权和):按相关性混合所有位置

output=j=1nαjvj,αj=softmax(qkj)\text{output} = \sum_{j=1}^{n} \alpha_j \mathbf{v}_j, \quad \alpha_j = \text{softmax}(\mathbf{q} \cdot \mathbf{k}_j)

软检索的三个关键优势:

  1. 不丢信息:即使次相关的位置也能贡献信息,不会因为”差一点”就被完全忽略。
  2. 可微分:softmax 和加权和都是可微的,可以端到端训练。argmax 不可微,无法直接反向传播。
  3. 鲁棒:当多个位置同样重要时(比如一个动词同时需要主语和宾语的信息),软检索能自然地混合多个来源。

Self-Attention:自己问自己#

上面的描述中,Query 来自一个序列,Key/Value 来自另一个序列——这是 Cross-Attention(比如翻译中 Decoder 查 Encoder)。

但在 Transformer 中更常见的是 Self-AttentionQ、K、V 全部来自同一个序列。

交互演示:Self-Attention — 每个词都在问所有词
点击左侧的词(Query 发起者),看它如何关注序列中的所有位置
发起 Query ↓
← 点击左侧的词,看它的注意力分布

Self-Attention 的核心意义是:让每个词都能直接看到序列中的所有其他词,从而理解上下文。

  • “工程师”可以关注”加州”来获取地点信息
  • “工作”可以关注”工程师”来知道谁在工作
  • “加州”可以关注”工作”和”十年”来理解完整事件

这就是为什么 Self-Attention 之后,每个词的表示都不再是”孤立的词义”,而是融合了上下文的动态表示


一个完整的类比总结#

让我们把所有概念拉到一起:

概念类比在 Attention 中
输入序列图书馆的所有书x1,x2,,xn\mathbf{x}_1, \mathbf{x}_2, \ldots, \mathbf{x}_n
Query你心里的问题qi=xiWQ\mathbf{q}_i = \mathbf{x}_i \mathbf{W}^Q
Key每本书的标题/索引kj=xjWK\mathbf{k}_j = \mathbf{x}_j \mathbf{W}^K
Value每本书的正文内容vj=xjWV\mathbf{v}_j = \mathbf{x}_j \mathbf{W}^V
匹配分数标题和你的问题有多相关eij=qikje_{ij} = \mathbf{q}_i \cdot \mathbf{k}_j
注意力权重你在每本书上花多少时间αij=softmax(eij)\alpha_{ij} = \text{softmax}(e_{ij})
输出你从所有书中综合得到的答案oi=jαijvj\mathbf{o}_i = \sum_j \alpha_{ij} \mathbf{v}_j
WQ,WK,WV\mathbf{W}^Q, \mathbf{W}^K, \mathbf{W}^V你学会的”怎么提问”、“怎么做索引”、“怎么提取内容”训练中学到的参数

这一讲先记住三句话#

  1. Query 是”我想找什么”,Key 是”我能匹配什么”,Value 是”匹配到了我能提供什么”。
  2. Q、K、V 来自同一个输入,但经过不同的线性投影,扮演不同角色。
  3. Attention 是软检索而非硬检索——不是只取最相关的一个,而是按相关性加权混合所有位置。

为什么这一讲很重要#

如果你只是把 Q / K / V 记成”三个矩阵”,后面看公式时会一直困惑”为什么要这样设计”。

但如果你建立了”查资料”的心理模型,那后面所有公式都只是在精确化这三步:

  1. qk\mathbf{q} \cdot \mathbf{k}:计算”我的问题”和”你的标题”有多匹配
  2. softmax\text{softmax}:把匹配分数转成概率分布
  3. αv\sum \alpha \mathbf{v}:按概率从各本”书”中取信息

试着想一想#

  1. 在 Self-Attention 中,为什么同一个词既可以是 Query(提问者)又可以是 Key(被匹配者)?
  2. 如果 WQ=WK\mathbf{W}^Q = \mathbf{W}^K,模型的能力会受什么限制?
  3. 如果去掉 Value 的独立投影,直接用 xj\mathbf{x}_j 代替 vj\mathbf{v}_j,会有什么后果?
  4. 你能想到一个场景,其中 Key 和 Value 最好来自同一个来源吗?(提示:Cross-Attention)
  5. “软检索”比”硬检索”强在哪里?有没有”软检索”不如”硬检索”的情况?

下一讲#

下一讲,我们终于要写出完整的公式了:

Attention(Q,K,V)=softmax(QKTdk)V\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V

我们会从一个 3~4 个词的短句出发,手推每一步的维度和数值,把这条公式链彻底拆开。


Attention 02:从查资料直觉理解 Q K V
https://jerry609.github.io/blog/attention-02-qkv-intuition
Author Jerry
Published at March 16, 2026
Comment seems to stuck. Try to refresh?✨