真实面经题目 · 原创解析
Attention如何计算?
Attention 的核心是用 query 和 key 计算相关性权重,再用这些权重对 value 做加权求和。Transformer 中常见的是 scaled dot-product attention:softmax(QK^T / sqrt(dk))V,多头注意力则并行学习多组关系。
真实面经题目 · 原创解析
Attention 的核心是用 query 和 key 计算相关性权重,再用这些权重对 value 做加权求和。Transformer 中常见的是 scaled dot-product attention:softmax(QK^T / sqrt(dk))V,多头注意力则并行学习多组关系。
Attention 可以按三步讲:先把输入映射成 Q、K、V;然后计算 Q 和 K 的相似度,常用点积并除以 sqrt(dk) 做缩放;再对分数做 softmax 得到权重,用权重对 V 加权求和。这样每个 token 都能根据相关性聚合其他 token 的信息。多头 attention 是把表示拆成多个 head,各自计算 attention 后再拼接投影。
Q 可以理解为当前位置想查询什么信息,K 表示每个位置能被匹配的索引,V 表示真正要被聚合的内容。它们通常由输入经过不同线性变换得到。这个拆分让模型能学习“匹配关系”和“传递内容”的不同表示空间。
计算 attention 时,先用 QK^T 得到每个 query 对每个 key 的打分。点积分数越高,说明两个位置在当前 head 下越相关。除以 sqrt(dk) 是为了控制分数尺度,避免维度较大时 softmax 过于尖锐。
分数经过 softmax 后变成概率权重,每一行代表当前位置对其他位置的关注分布。随后用这个分布对 V 做加权求和,得到融合上下文的新表示。attention 的输出不是选择一个 token,而是按权重混合多个 value。
在自回归模型中,需要 causal mask 防止当前位置看到未来;在变长批处理中,需要 padding mask 忽略补齐位置。多头 attention 会并行计算多组 QKV,让不同 head 捕捉不同语义、位置或依赖关系。
标准 attention 对序列长度的时间和空间复杂度通常是 O(n^2),长序列时成本很高。因此工程中会使用 KV cache、FlashAttention、稀疏注意力、滑动窗口或分块计算等方式优化推理和训练效率。
点积方差会随维度增大而增大,除以 sqrt(dk) 可以稳定 logits 尺度,避免 softmax 饱和和梯度变小。
不同 head 可以在不同子空间学习不同关系,例如局部依赖、长程引用、位置关系或语义匹配,最后拼接后得到更丰富的表示。
瓶颈通常在 QK^T 形成的 n×n 注意力矩阵,序列越长显存和计算越高,因此长序列模型会做稀疏化、分块或高效 kernel 优化。