大模型推理(四):查询-键-值 Q/K/V
在真实对话中,大模型的工作远不止回答“是猫还是狗?”那么简单。
但 Transformer 并不真正关心内容是什么,它只是把所有内容编码成向量。所以,即使是你细微的语气、停顿、隐喻……都变成了词元 → 嵌入 → 向量(tokens → embeddings → vectors)。
在自注意力层内部,每个词条位置都会从其嵌入中产生三个东西:
- 查询向量 Q,
- 键向量 K,
- 值向量 V。
它们只是同一个词元嵌入的三个不同的线性投影。数学很简单:
Q = X W^Q,\quad K = X W^K,\quad V = X W^V
其中 X 是序列中所有词元tokens的嵌入矩阵。权重 W^Q、W^K 和 W^V 是学习出来的。
直观理解如下:
- 查询就像每个 token 提出的问题:“我在寻找什么?”
- 键就像每个 token 携带的标签:“如果你在找我,我可以提供这些。”
- 值就像找到匹配项后要传递的实际信息。
当一个 token 想知道应该关注其他 token 多少时,它会获取自己的查询 q_i 并将其与其他 token 的键 k_j 进行比较:
\text{score}_{ij} = \frac{q_i \cdot k_j}{\sqrt{d_k}}
Softmax 将这些分数转换为权重,然后对相应的值 v_j 进行加权求和,以生成该 token 的输出。
所以在大模型的对话中:
– 你的每个词都变成了一个词元token,拥有各自的 Q/K/V 值。
– 模型的每个输出词条也都拥有 Q/K/V 值,因为模型会关注整个输入(你)和模型自己生成的历史(模型)。
即使你的句子并非字面意义上的“问题”,模型会将每个位置都视为一个问题:“为了构建我的下一个表征,我应该关注谁?” 那就是 Q。
所以 Q 不是“你问模型的问题”。而是“模型当前位置寻找相关性的方式”,即,注意力机制中主动观察的部分。
这感觉就像,在空中画出一个微小的隐形三角形:Q 位于一个角,K 位于另一个角,V 位于第三个角,然后让它在我的手指间旋转。
更多推荐


所有评论(0)