§ 7.2 · Sub-chapter

QKV · Query / Key / Value 篇

The Three Vectors Behind Attention

上一篇我们说清了 Attention 的直觉——"跳回去看一眼相关的词"。这一篇要把这个直觉翻译成一个公式Attention(Q, K, V) = softmax(QKᵀ / √d) · V。看起来吓人,但只要你记住"图书馆查资料"这个比喻,它就变得再自然不过。

生活场景
📚 你去图书馆查一本书

周末,你走进图书馆,想找一本关于"深度学习"的书。你会怎么做?
第一步:脑子里先形成"我要查什么"——"深度学习相关的书",这是你的查询意图
第二步:走到目录检索机前,输入关键词。系统会拿你的关键词和每本书的索引标签做比对——"计算机 · 人工智能 · 深度学习"匹配度高、"烹饪 · 川菜"匹配度低。
第三步:系统告诉你:"这三本最相关,那两本次相关,其他不推荐"。你按推荐去书架取书,把书里的内容综合起来读。
这一整套流程,就是 QKV 的完整生活版本——查询、匹配、取值。

三个字母各是什么

对于句子里的每一个词,Transformer 会把它同时"变身"成三个不同的向量。不是三份复制,而是三种不同的"用途视角"——就像同一个人在图书馆里既是提问者、也是被别人翻阅的书目、还带着自己的一本内容。

字母全称角色直觉理解
QQuery(查询)"我想找什么"当前词发出的询问:"哪些词跟我有关?"
KKey(键)"我是什么"每个词自我描述的"标签":让别人用来匹配我。
VValue(值)"我带来什么"每个词真正携带的信息内容,被别人加权取用。

数学上:一个词的原始向量 x,会被三个不同的矩阵 WQ, WK, WV 分别乘一下,就得到了这个词的 q, k, v 三个向量。这三个矩阵是模型训练时学出来的——它们决定了"这个词该以什么姿态提问、以什么姿态展示自己、以什么姿态贡献内容"。

Analogy · 相亲会上的三种自我

把一句话想成一场相亲会:每个词是一位嘉宾。
Q(查询):你走过去时,脑子里"我在找什么样的对象"的清单——身高、爱好、性格。
K(键):每位嘉宾佩戴的"胸牌"——身高、爱好、性格的关键词摘要。
V(值):嘉宾本人——真正的内容、故事、经历。
你的清单(Q)去逐个匹配大家的胸牌(K),得出"跟谁最合"的分数,然后按分数决定坐下来听谁多聊、听谁少聊——听到的就是 V。

Attention 的完整四步公式

把生活场景翻译成公式,只有四步——记住它,你就懂了整个 Transformer 的核心运算。

1. 打分 · QKᵀ

当前词的 q 向量,和句子里每个词的 k 向量做点积——点积越大,说明两个向量方向越接近,代表越相关。
直觉:"我的查询"和"你的自我描述"匹配吗?
结果:得到一串"原始分数",句子多长就多少个数。

2. 缩放 · ÷ √d

把上一步的分数除以 √d(d 是向量维度,通常 64 或 128)。
直觉:把分数缩小到一个"温和"的范围,避免下一步 softmax 变得极端。
细节我们下面单独讲。

3. 归一化 · softmax

把一串分数转成一串"总和为 1"的概率权重
直觉:"每本书我该看多重?"——不是绝对分数,而是相对比例。
结果:得到一组权重,比如 [0.7, 0.2, 0.05, 0.05],总和恰好是 1。

4. 加权求和 · · V

把每个词的 v 向量按上面得到的权重加权相加
直觉:"把最相关的那本书的内容多抄一点,不相关的少抄"——最后得到当前词的新表示。
这一步就是 Attention 的最终输出。

把四步合成一行 · 那个著名的公式

把上面四步压成一行数学,就是这个 2017 年之后所有 AI 工程师都能背下来的公式:

公式 · Attention 的核心

Attention(Q, K, V) = softmax( QKᵀ / √d ) · V

拆开读一遍:把 Q 和 K 的转置相乘(打分)→ 除以 √d(缩放)→ 走一遍 softmax(归一化)→ 再乘 V(加权求和)
整个 Transformer 的核心运算,就是这一行;接下来的多头、层数堆叠、Encoder/Decoder,都是围绕这一行做扩展。

为什么要除以 √d?· 一个容易被忽略的细节

公式里那个不起眼的 √d,是很多人第一次看时都会一笔带过的。但它其实是整个 Transformer 稳定训练的关键之一
想象两个 d 维向量做点积。如果 d 很大(比如 512),点积的结果就会非常大——从统计上讲,方差会随 d 线性增长。而 softmax 有个不太友好的性质:输入数值一旦拉得太大,输出就会变得极端——最大的那个几乎是 1,其他全接近 0。

这会带来两个坏消息:

把点积除以 √d,正好把方差拉回到 1 附近——softmax 就能得到一个"温和分布",既有主次,也不会一边倒。这个看似不起眼的除法,是让 Transformer 能训练得动的核心技巧之一。没有这一除,你的 Transformer 十有八九训不起来。

Analogy · 调音量

把声音调太大,喇叭就炸了、只听得见一个声源;调太小,什么都听不见。
√d 缩放就是那个"合适的音量"——让每个词都能被听见,同时又有主有次
这就是为什么 Transformer 又叫 "Scaled Dot-Product Attention"——多的那个"Scaled",就是指这一步缩放。

一个具体例子 · 用数字走一遍

假设有一句超短的话:"猫追球"——三个词。为了简单,我们把每个词的 Q/K/V 都设成 2 维向量(真实里通常是 64 或 128 维)。

QKV
[1, 0][1, 0][1, 2]
[0, 1][0, 1][3, 0]
[1, 1][1, 1][0, 1]

现在算"追"这个词的 Attention 输出:

看出来了吗?"追"的新表示,融合了"猫"、"追"、"球"三个词的信息,各按不同权重。这个新向量不再是原来那个孤立的"追",而是"在这个句子里、由这些邻居定义的追"。

QKV 让 Attention 变得可训练

你可能会问:为什么要搞出 Q、K、V 三个不同的向量?直接拿词向量互相点积不行吗?——
答案是:不行,会太死板。如果直接用词向量互相点积,那"相关性"就是固定的,无法根据不同任务、不同上下文灵活调整。
引入 WQ, WK, WV 三个可学习的投影矩阵后,情况就完全不同了——同一个词,可以以不同的姿态提问、以不同的姿态展示、以不同的姿态贡献。模型通过训练,学会"处理这个词时,我应该关心什么方面的信息"——这才是 QKV 设计的精髓。

K 和 V 为什么要分开 · 一个常被忽略的问题

还有一个精妙的设计——为什么 K 和 V 是两个不同的向量而不是同一个?直觉上,"用来匹配的东西"和"被取走的内容",好像也可以合并成一个吧?
但仔细想想图书馆的比喻——目录卡片(K)上写的是"标题、作者、关键词",简短、便于快速匹配;而书的正文(V)是完整内容,是你真正要读的东西。检索时用简短的标签匹配,取用时读完整的内容——这是两件不同的事,用不同的向量表达才最自然。
在数学上,把 K 和 V 分开,让模型能学到:"我用哪些维度做匹配、用哪些维度贡献内容"——这两组维度可以完全不同。比如"猫"这个词,用"名词-动物-主语候选"这些标签做匹配(K);但真正被取走的内容(V)可能包含"猫的语义、情感联想、上下文角色"等更丰富的东西。K 和 V 分离,让 Attention 的表达能力翻了一倍。

Attention 是"软"的——不是硬选一个

要理解 Attention 的另一个精妙之处:它给出的是一组权重分布,而不是"选中一个"的硬性选择
很多人第一次学 Attention 时会想:"模型是不是像我们查资料一样,找到最相关的那一本书就打开?"——不是。Attention 是 softmax 输出的一组概率,比如 [0.4, 0.3, 0.15, 0.1, 0.05]——它不"选定"任何一个,而是按比例混合所有的候选。
这一点非常重要——它让 Attention 变成了一个可微分的操作,梯度可以通过它反向传播回去、调整参数。如果是"硬选一个",就没法算梯度,模型就没法学习了。"软注意力"是 Transformer 能被端到端训练的数学基础。

QKV 出现在 Transformer 的三个地方

了解了 QKV 的运作,还得清楚它在整个 Transformer 里出现的位置——共有三处,作用略有不同:

出现位置Q 来源K/V 来源用途
Encoder Self-Attention输入句子同一输入句子让每个输入词理解全句上下文
Decoder Self-Attention(带掩码)已生成部分同一已生成部分生成下一词时回顾自己写过的内容
Decoder Cross-AttentionDecoder 当前状态Encoder 全部输出翻译时"看一眼源语言"

三处使用的 QKV 是不同的三套矩阵——Encoder 有自己的一套 WQ/WK/WV,Decoder 的 Self-Attention 有另一套,Cross-Attention 又有一套。它们独立学习、各司其职。整个 Transformer 里,QKV 是最基础也是最反复出现的建筑构件

Recap · 收束

QKV 是 Attention 的心脏:Q 提问、K 展示、V 贡献。四步公式——打分 → 缩放 → 归一化 → 加权求和——就是 Transformer 每一层里最核心的运算。
但一组 QKV 只能捕捉一种相关性。人类看一句话时,会同时关注语法、语义、指代、情感——一组 QKV 显然不够用。下一篇,我们把"一组"变成"很多组"——多头注意力

☰ 主页
Xue Hai Wu Ya · § 7.2 · QKV