注意力机制:QKV 怎么算

注意力机制让模型在处理某个位置时,按需「关注」序列中与它相关的其他位置。它用查询(Q)、键(K)、值(V)三套向量表达「我想找什么、谁匹配、取什么信息」,取代了固定的局部窗口。

QKV 怎么算

对每个查询向量 q,计算它与所有键 k 的点积作为相关性分数,除以 sqrt(d_k) 做缩放以防梯度消失,再 softmax 得到权重,最后对值 v 加权求和。公式写作 Attention(Q,K,V)=softmax(QK^T/sqrt(d_k))V。

import torch

scores = Q @ K.transpose(-2, -1) / (d_k ** 0.5)
weights = torch.softmax(scores, dim=-1)
out = weights @ V

为什么缩放

当维度 d_k 较大时点积数值变大,softmax 进入梯度极小的饱和区,训练困难。除以 sqrt(d_k) 把方差拉回 1 附近,使梯度健康,这是原始论文的关键细节。

注意点

因果注意力需加掩码,防止位置看到未来信息;多头注意力把 QKV 投影到多组子空间并行计算再拼接,增强表达能力。注意力的开销随序列长度平方增长,长文本要留意显存。

小结

注意力用 Q 与 K 的点积算相关性、softmax 后加权 V,缩放保证梯度稳定。它是 Transformer 的心脏,理解 QKV 就理解了现代序列建模。

参考与延伸阅读

本文累计阅读