在真实对话中,大模型的工作远不止回答“是猫还是狗?”那么简单。

但 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 位于第三个角,然后让它在我的手指间旋转。

 

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐