标准回答
统一机制
三种注意力都遵循同一公式:用 Query 与 Key 做缩放点积得到相关性分数,经 softmax 归一化为权重,再对 Value 加权求和。区别只在 Q/K/V 的来源和掩码方式。
自注意力(Self-Attention)
Q、K、V 由同一序列线性变换得到,每个位置都能关注序列中所有位置,用来建模句子内部的长距离依赖。是 Transformer 编码器的核心。
交叉注意力(Cross-Attention)
Q 来自一个序列(如解码器当前状态),K、V 来自另一个序列(如编码器输出)。它让解码器在生成时「查询」源序列的信息,是机器翻译等编码器-解码器架构、以及多模态对齐的关键。
因果注意力(Causal / Masked Self-Attention)
在自注意力上加一个上三角掩码,把每个位置对「未来位置」的注意力分数置为 -∞,softmax 后权重为 0。这样位置 t 只能看到 1..t,保证自回归生成时不偷看未来,是 GPT 类解码器的标配。
常见误区
⚠️ 常见踩坑
把因果注意力当成独立机制——它就是加了未来位置掩码的自注意力;也别混淆交叉注意力的 Q/K/V 来源,Q 来自目标序列、K/V 来自源序列。
追问
追问 1:为什么自回归生成必须用因果掩码?
训练时整句并行输入,若不加掩码,预测第 t 个 token 时模型会看到 t 之后的真实词,造成信息泄漏,学到的能力在推理时(逐词生成、无未来信息)无法复现。因果掩码强制每个位置只依赖历史,使训练与自回归推理一致。
追问 2:交叉注意力在多模态模型里怎么用?
常用于让一种模态查询另一种模态,例如让文本作为 Query 去注意图像编码器输出的视觉特征(K、V),实现图文对齐;图像生成中也可让视觉 token 交叉注意文本提示。本质是用一段序列的表示去检索、融合另一段序列的信息。
延伸学习
与本题相关的知识库文章、术语、工具与行业资讯。