文章

RNN和QKV区别

RNN和QKV区别

RNN和QKV区别

用「指代消解实验 → RNN 传话困境 → Attention 全场扫描 → Q/K/V 三分工 → 注意力公式」这条线,通俗说明 RNN 与 QKV(Self-Attention)在信息流动方式上的根本差异,以及 Q、K、V 为什么要拆成三个矩阵。

  • 原文作者:最后的绅士
  • 原文链接:https://www.zhihu.com/question/298810062/answer/2041184627159814333
  • 问题:如何理解 attention 中的 Q、K、V?

目录


1. 从一句话说起:「它」指谁

先做一个实验。默念这句话:

「猫坐在垫子上因为它很舒服。」

念完后回答:「它」指的是「猫」还是「垫子」?

大多数人会在极短时间内得出答案:垫子。垫子是拿来坐的,坐在垫子上所以舒服——逻辑自洽。若理解成「猫坐在自己身上因为自己舒服」,则说不通。

大脑是怎么做到的?正确答案是:读到「它」的那一瞬间,脑中同时亮起「猫」和「垫子」两个选项,语义系统在毫秒级完成比较——选垫子。

你不是「读完一个词、再读下一个词」这样理解句子的,而是把所有词摊在面前,同时扫描

在 2017 年 Transformer 出现之前,若要让 AI 理解「它」指「垫子」,主流方案之一是 RNN(循环神经网络)。RNN 与后来的 Q/K/V 注意力,在「信息如何流动」上走了完全不同的路。


2. RNN:传话游戏的困境

2.1 传话游戏类比

十个人排成一列。第一个人看纸条上的一句话,必须耳语传给第二个人,依次传到第十个人。最后第十个人大声说出听到的内容。

结局众所周知:第十个人说的,往往与原文毫无关系

不是因为听力差或故意搞怪,而是规则本身有缺陷——每个人只能和紧挨着的邻居说话。信息跨越十人,须经九次转述;每次转述都是一次压缩、损耗、微小偏差。九次叠加,面目全非。

RNN 读句子的方式,与传话游戏一样。

2.2 RNN 的信息流

1
2
3
4
5
6
「猫」     → 处理完,把理解传给下一位置
「坐在」   → 拿到上一位置的理解 + 自己 → 再传
「垫子」   → 继续往后传
「上」     → 继续传
「因为」   → 继续传
「它」     → 拿到经五次转述的理解 → 判断「它」指谁

当「它」出场时,关于「垫子」的信息已被转了五次手。每一步 RNN 的隐藏状态都在做同一件事:把上一状态当前词强行压缩在一起。五次压缩后,「垫子」的原始信号还剩多少?

RNN 并非单纯「算力不够」,而是被架构约束:信息只能沿序列逐站传递,天然逐站衰减。句子短尚可;句子一长(上百、数百词),开头信息传到末尾时,往往只剩噪声。

维度RNN 特点
信息流动沿时间步串行传递
远距离依赖路径长,易衰减
并行计算训练/推理难以充分并行
典型问题长程指代、长句理解

3. Attention:废除排队,全场同时对话

2017 年论文《Attention Is All You Need》提出一个问题:

谁说信息只能沿着一条线、一站一站地传?

  • RNN:每个词只能和紧挨着的词「说话」。
  • Transformer:把绳子解开,让每个词直接和所有词同时说话——不是改良传话游戏,而是直接废除排队

回到同一句。在 Transformer 里,「它」不必等前面信息一层层传过来,而是在同一瞬间扫描整句:

1
2
3
4
5
6
「它」同时看向每个词:
  看向「猫」   → 是被坐的物体吗?不太像。
  看向「坐在」 → 是动作,不是指代对象。
  看向「垫子」 → 被坐在上面,「舒服」是其属性——就是你了!
  看向「因为」 → 解释原因,间接有用。
  看向「舒服」 → 垫子的属性,确认「垫子」。

每个词不再是被动等待前面传话的听众,而是主动出击的情报员:在同一时刻扫描全场,自行判断谁值得关注。

这就是 Attention(注意力)

但「自行判断谁值得关注」在数学上如何实现?若简单认为「两个词向量比相似度就行」,会掉进多数教程的同一个坑——接下来用 Q、K、V 填这个坑。


4. Q、K、V 为什么是三个不同的东西

4.1 常见误区

很多人第一反应:输入向量乘一个矩阵不就完了?为什么要乘三个不同矩阵?

教程常说:「Q 是查询,K 是键,V 是值,就像数据库检索。」这解释了分工,却常没解释为何这种分工必要

4.2 行业会议类比

假设你在一个嘈杂、几千人的行业会议上找人,目标是找到能帮你解决当前技术问题的人。你有三个工具:

工具对应作用
你的嘴(Q)Query发问:「有人做过大模型推理优化吗?」——只负责提出问题,不是「你这个人」的全部
胸前的名牌(K)Key别人的标签:「CV 算法」「CUDA 优化」「产品经理」——用于被检索,不是人的全部
肚子里的干货(V)Value聊十分钟后得到的方案、踩坑、代码架构——真正价值,与名牌是两回事

灵魂问题:为什么嘴、名牌、内容必须是三种不同的东西?

  1. 问问题的方式 ≠ 写名牌的方式
    你问「大模型推理优化」,对方名牌写「vLLM 贡献者」「FP8 量化」。语义空间不同,却能匹配——故 Q 与 K 需要不同权重矩阵 (W_q, W_k)。

  2. 名牌 ≠ 肚子里的内容
    通过名牌找到人,最终获得的是经验与方法——故 K 与 V 需要不同权重矩阵 (W_k, W_v)。

  3. 若三者相同
    只能找到「说话方式和你一模一样的人」;而高手往往术语体系不同。你要的是能力匹配,不是用词匹配

4.3 QKV 分离的底层逻辑

矩阵它在干什么它关心什么
(W_q)把每个词变成「我要找什么」的问题问题的表述与标签的表述是两套语言
(W_k)把每个词变成「我是什么」的标签标签要让「对的人」能发现自己
(W_v)把每个词变成「我真正能贡献什么」标签是门面,内容才是干货

若三个矩阵相同,等于强迫所有人用同一套语言提问、贴标签、交付内容——模型难以学会「用不同方式描述同一件事」,而这正是语言理解的核心能力之一。


5. 矩阵视角:同一词的三重人格

假设一句话 3 个词,每个词是 4 维向量:

1
2
3
「猫」 → [1.0, 0.0, 0.5, 0.2]
「吃」 → [0.0, 1.0, 0.3, 0.8]
「鱼」 → [0.5, 0.3, 1.0, 0.1]

组成矩阵 (X),形状 ((3, 4))。分别投影到 Q、K、V:

1
2
3
Q = X × Wq    (3,4) × (4,3) → (3,3)
K = X × Wk    (3,4) × (4,3) → (3,3)
V = X × Wv    (3,4) × (4,3) → (3,3)

同一词「猫」,在同一输入向量基础上,经三个不同变换,变成三种角色:

  • 猫_Q:四处张望、寻找相关词的「搜寻者」
  • 猫_K:安静站着、供别人匹配的「被搜寻者」
  • 猫_V:被确定关注后才贡献信息的「内容提供者」

同一身份,三重人格——且由训练通过反向传播学出:什么样的 Q 能找到对的 K,什么样的 V 携带最多有效信息。Transformer 不是给每个词贴固定标签,而是让词在不同场合扮演不同角色。


6. d_k 与多头注意力

教程常说 (d_k = d_{\text{model}} / \text{num_heads})(如 GPT-3 中 768/12=64),但 (d_k) 选 3 还是 64,影响的是模型能表达什么

回到会议比喻:

  • (d_k=3):名牌只能写 3 个词,「后端、Go、微服务」——粗匹配够用,难描述复杂能力组合。
  • (d_k=64):可更精细描述技术栈与经历,匹配更准,但计算与显存更重。

工程上常用 Multi-Head Attention(多头注意力):不做一个超大名牌,而是 12 个并行、各关注不同侧面的头(语法、语义、位置关系等),最后拼接——把「理解」拆成多条赛道再汇总。


7. 注意力公式在做什么

核心公式(Scaled Dot-Product Attention):

1
2
Attention 分数 = Q × K^T / √d_k
输出           = Softmax(分数) × V

逐步拆解:

步骤含义
Q × K^T每个词的 Query 与所有词的 Key 做点积 → 「我的问题与你的标签有多匹配」→ 得到 ((L,L)) 分数矩阵
÷ √d_k随维度增大点积方差变大,缩放防止数值爆炸,稳定 Softmax 梯度
Softmax分数变概率,每行和为 1;总注意力有限,须竞争式分配给重要词
× V用权重从 V 提取内容;高注意力词的 V 被大量采用,低注意力几乎忽略

本质:先决定「听谁的」(Q×K → Softmax),再决定「听什么」(×V)。Q 与 K 分离,使模型能学会:用易被检索的方式写 K,用善于发现的方式写 Q——即便两种「语言」表面不同。


8. RNN 与 QKV 对比小结

维度RNNQ/K/V + Self-Attention
信息流动沿序列串行,隐藏状态逐步传递任意两词可直接交互
长距离依赖路径长,信息易衰减一步可达,与距离无关
并行性时间步依赖强,难并行同一层内可大规模并行
表示方式单一隐藏状态压缩历史每词分 Q/K/V 三种角色
核心操作上一状态 + 当前输入 → 新状态Q 匹配 K,加权聚合 V
典型架构地位2017 年前 Seq2Seq 主流编码方式Transformer 的核心

多数教程要么只给「数据库检索」类比,要么直接堆公式,容易跳过最关键的一环:在 QKV 出现之前,世界在忍受什么(RNN 的串行衰减);以及 出现之后,为何非要长成 Q、K、V 三分而不是一个矩阵

QKV 不是巧合,而是在「每个词需要同时和所有词对话」这一硬需求下,推导出的信息分流方案:用 K 做可检索的标签,用 Q 做可发现的查询,用 V 做被加权提取的真正内容。


延伸阅读

资源说明
Attention Is All You NeedTransformer 原论文
知乎原回答本文主要整理来源
本文由作者按照 CC BY 4.0 进行授权