在注意力机制里,为什么是 Q · K(Query 和 Key 的点积)
1. 背景知识:Q、K、V 是啥?
理解参考:注意力机制中的QKV代表什么,Bert中的CLS代表什么-CSDN博客
在注意力机制里(尤其是 Transformer 模型中):
-
Q(Query):你现在关注的这个词的“提问向量”。
-
K(Key):每个词的“关键词向量”,用来被匹配。
-
V(Value):每个词真正的内容信息。
你可以把 Query 当作“问题”,Key 是“候选答案”,点积就是计算:当前这个问题和每个候选答案匹不匹配?匹配程度是多少?
2. 为什么不是其他操作?
❌ 减法(Q - K)?
-
减法会得到“差距向量”,但不是一个相似度分数;
-
不好直接用于 softmax。
假设:
-
Query 向量 Q = [2, 4]
-
Key 向量 K = [1, 3]
那么:
Q−K=[2−1,4−3]=[1,1]
这个向量叫做“差距向量”或者“相对位置向量”,它代表的是 Q 相对 K 的偏移量。但这只是一个方向+大小的描述,并不告诉你 Q 和 K 有多“相似”。
为什么不好用于 softmax?
1. softmax 需要的是标量(分数)
softmax 的输入应该是一组标量分数,比如 [2.3, 1.1, 0.5],然后它把这些变成概率分布:
🧠 但 Q - K 得到的是一个向量(比如 [1, 1]),你根本不能直接把向量喂给 softmax,它不知道该怎么处理多个维度。
2. 减法结果的方向不能直接反映“相似度”
假设 Q 和 K 非常相似,那你希望输出的注意力值很高。但 Q - K = [0.1, 0.1] 和 Q - K = [-0.1, -0.1] 看起来方向相反,模长也小,但这无法直接反映“相似”还是“不相似”。
✅ 点积为什么就适合 softmax?
点积:
点积是一个标量,并且有以下几个优点:
-
点积越大,说明两个向量方向越相近(越相似)✅
-
点积为 0,说明两个向量正交(无关)🟰
-
点积为负,说明两个向量方向相反(不相似)❌
这种标量相似度,就非常适合用 softmax 去归一化成“注意力权重”。
总结一句话:
向量减法得到的是差距方向和大小,但不反映方向相似度,结果是一个向量,不能直接被 softmax 接收;而点积直接得到一个标量的相似度分数,正好适合 softmax 做概率分配。
✅ 3. 举个例子:
假如你现在处理的是句子:
“The cat sat on the mat.”
当前词是 mat(Query),我们想知道它应该注意哪些词。
-
Q = mat 的向量
-
K = 句子中所有词的向量
我们对每个 Key 做 Q·K 点积:
Q·K(cat) → 比如是 0.2
Q·K(sat) → 比如是 0.1
Q·K(mat) → 比如是 0.9(自己最相关)
接着做 softmax 得到注意力权重:
[0.2, 0.1, 0.9] → [0.2, 0.1, 0.7]
这告诉我们:mat 自己和自己最相关,但也要稍微关注 cat 和 sat。
更多推荐
所有评论(0)