Appearance
Transformer中的注意力机制基于三个核心概念
- 查询,Query
- 键,Key
- 值,Value
通常写为Q、K、V,这套术语来自信息检索领域,理解这个类比是掌握注意力机制的第一步
一、搜索引擎的类比
想象在搜索引擎中查找信息的过程:
- 输入一个搜索词(Query)——这是想要查找的内容
- 搜索引擎将搜索词与数据库中每个网页的关键词(Key)进行匹配
- 找到最匹配的结果后,返回对应网页的内容(Value)
注意力机制的工作方式与此惊人地相似:
- 当前位置的表示被投影为一个查询向量(Query)——“我需要什么信息?”
- 序列中每个位置的表示被投影为键向量(Key)——“我有什么信息?”
- 查询与所有键进行匹配,计算相关性分数
- 根据相关性分数,对每个位置的值向量(Value)进行加权求和——“提取相关信息”
但与搜索引擎不同的是,注意力机制做的是软匹配:它不是只返回最匹配的一个结果,而是根据匹配程度对所有结果进行加权混合。这种“软检索”使得梯度可以流过整个过程,从而允许端到端训练。
二、为什么需要三个独立的投影
一个自然的问题是:为什么需要把输入分别投影为 Q、K、V 三个不同的向量?直接用输入本身做比较不行吗?
如果直接用输入向量 xixi 和 xjxj 计算注意力,那么一个位置在“被查找”时和“提供信息”时使用的是完全相同的表示。但在语言中,一个词在不同语境下的“需求”(它需要关注什么)和“供给”(它能提供什么信息)往往是不同的。
以动词“跑”为例:作为查询时,它可能在寻找自己的主语和宾语;作为键时,它可能在向修饰词表明自己是一个动作。这两种角色需要不同的向量表示。
Q、K、V 的三重投影正是为每个位置创建了三种独立的表示,让模型能够灵活地区分“寻找什么”、“提供什么标识”和“提供什么内容”这三种不同的语义角色。数学上:

三、值和键为什么分开
还有一个更微妙的问题:键和值为什么要分开?能不能用同一个向量既做匹配又做信息提供?
分离键和值的设计,源于对“索引”和“内容”的区分。在数据库中,索引(键)和存储的数据(值)是不同的东西——用 ISBN 号(键)查找一本书,返回的是书的内容(值),而不是 ISBN 号本身。
类似地,在注意力机制中,键决定了“哪些位置应该被关注”,而值决定了“被关注后提供什么信息”。分离这两者让模型有更大的灵活性:匹配标准和实际提供的信息可以存在于不同的表示空间中。
这种设计在交叉注意力中尤为重要:解码器的查询来自目标序列,而键和值来自源序列。此时,键帮助解码器定位源序列中的相关位置,值则提供这些位置的实际内容。
实验也支持了这种分离的有效性——当 K 和 V 使用相同的投影矩阵时,模型性能会有可测量的下降。
四、向量的维度设定

