60 秒回答模板

Attention 可以按三步讲:先把输入映射成 Q、K、V;然后计算 Q 和 K 的相似度,常用点积并除以 sqrt(dk) 做缩放;再对分数做 softmax 得到权重,用权重对 V 加权求和。这样每个 token 都能根据相关性聚合其他 token 的信息。多头 attention 是把表示拆成多个 head,各自计算 attention 后再拼接投影。

考点 标准公式
难度 算法岗真实面经题
回答目标 讲清方法、取舍和追问

深入解析

01

QKV 的含义

Q 可以理解为当前位置想查询什么信息,K 表示每个位置能被匹配的索引,V 表示真正要被聚合的内容。它们通常由输入经过不同线性变换得到。这个拆分让模型能学习“匹配关系”和“传递内容”的不同表示空间。

02

相关性分数

计算 attention 时,先用 QK^T 得到每个 query 对每个 key 的打分。点积分数越高,说明两个位置在当前 head 下越相关。除以 sqrt(dk) 是为了控制分数尺度,避免维度较大时 softmax 过于尖锐。

03

归一化与聚合

分数经过 softmax 后变成概率权重,每一行代表当前位置对其他位置的关注分布。随后用这个分布对 V 做加权求和,得到融合上下文的新表示。attention 的输出不是选择一个 token,而是按权重混合多个 value。

04

mask 和多头

在自回归模型中,需要 causal mask 防止当前位置看到未来;在变长批处理中,需要 padding mask 忽略补齐位置。多头 attention 会并行计算多组 QKV,让不同 head 捕捉不同语义、位置或依赖关系。

05

复杂度与优化

标准 attention 对序列长度的时间和空间复杂度通常是 O(n^2),长序列时成本很高。因此工程中会使用 KV cache、FlashAttention、稀疏注意力、滑动窗口或分块计算等方式优化推理和训练效率。

易错点

  • 把 attention 说成只找最大相关 token,忽略它是对 V 的加权求和。
  • 只背公式,不解释 Q、K、V 各自作用。
  • 漏掉缩放、mask 和多头这些关键实现细节。
  • 没有说明标准 attention 的 O(n^2) 长序列成本。

面试官追问

为什么 attention 要除以 sqrt(dk)?

点积方差会随维度增大而增大,除以 sqrt(dk) 可以稳定 logits 尺度,避免 softmax 饱和和梯度变小。

多头注意力为什么有用?

不同 head 可以在不同子空间学习不同关系,例如局部依赖、长程引用、位置关系或语义匹配,最后拼接后得到更丰富的表示。

attention 的主要计算瓶颈在哪里?

瓶颈通常在 QK^T 形成的 n×n 注意力矩阵,序列越长显存和计算越高,因此长序列模型会做稀疏化、分块或高效 kernel 优化。