注意力机制: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 就理解了现代序列建模。
参考与延伸阅读
- Vaswani 等 2017「Attention Is All You Need」。已核验。https://arxiv.org/abs/1706.03762
- 图解注意力「The Illustrated Transformer」。已核验。https://jalammar.github.io/illustrated-transformer/
本文累计阅读 — 次