Self-Attention 与 Cross-Attention:自己看自己 vs 跨序列查询

01-注意力与基础 核心 约 15 分钟 #自注意力#交叉注意力#编码器解码器 更新 2026-10-02
当前状态:未学
本文基于模型知识整理(生成时未联网核对),结构差异建议对照原论文 §3.1 复核。

一句话定义

Self-Attention 的 Q、K、V 全部来自同一序列(自己看自己——建序列内部关系);Cross-Attention 的 Q 来自一个序列(如解码器),K/V 来自另一个序列(如编码器输出)——跨序列查询(翻译时每个目标词去源句"取料")。两者的注意力公式相同,唯一的区别是 K/V 的来源。

为什么重要

这一区分决定架构形态:Encoder-only(BERT)只有 Self;Decoder-only(GPT)只有带因果掩码的 Self;Encoder-Decoder(T5/翻译)两者都有——Cross-Attention 是"读入 A 生成 B"类任务的枢纽(kp-010 架构分化的核心分叉点)。现代 LLM 时代 Decoder-only 大获全胜,但理解 Cross-Attention 仍是读多模态模型(如把图像特征作 K/V)的必备知识。

前置知识

kp-002(注意力公式)。

核心概念

  • Self-Attention:Q=K=V 的来源都是 X 自己(各自经 W_Q/W_K/W_V 投影)。作用:序列内部的上下文混合——每个 token 吸收全序列相关信息。Decoder 版本加因果掩码(只允许看过去,kp-002)。
  • Cross-Attention:Q 来自解码器当前序列 Y,K/V 来自编码器输出 X 的表示:

$$\text{CrossAttn}(Q=YW_Q,\ K=XW_K,\ V=XW_V)$$ 作用:生成端按需查询源端——翻译到"狗"时,去源句把"dog"的表示取过来。

  • 三件套对照(Encoder-Decoder 架构的一层):

1. Masked Self-Attention(解码器内部,因果); 2. Cross-Attention(解码器→编码器,无掩码可看全源句); 3. FFN。

  • 信息流向图:Self 是"横向"(同层序列内混合),Cross 是"纵向"(跨模块/序列注入)——多模态模型把图像特征作为 K/V 注入文本生成,正是 Cross-Attention 的现代用法。

原理与机制

为什么 Cross-Attention 的 Q 与 K/V 分家:查询来自"生成侧"(我要写什么,需要什么信息),键值来自"理解侧"(源内容有什么可提供)——两侧各有各的表示空间,W_Q 与 W_K/W_V 独立学习"问什么"与"答什么"的对齐。翻译对齐(软对齐矩阵)在此自然涌现。

为什么 Decoder-only 不需要 Cross-Attention:GPT 把"源与目标"拼进同一条序列(prompt+生成),Self-Attention 天然覆盖"查询上下文"——序列拼接替代了跨序列查询。这是架构竞争的关键简化(kp-010/019 的 Decoder-only 胜利)。

复杂度对照:Self 是 n²(序列自乘);Cross 是 m×n(两序列长度积)——翻译时源句固定则 Cross 成本线性于目标长度。

图示

Self:   Q,K,V ← 同一序列X    "自己看自己"
        (Decoder版 + 因果掩码)
Cross:  Q ← 解码器Y ;  K,V ← 编码器输出X
        "生成端按需查询源端"
Encoder-Decoder一层: MaskedSelf → Cross → FFN
现代注脚: 多模态把图像特征当K/V注入文本Q

直观类比

Self-Attention 是"读书会":与会者互相讨论、吸收彼此观点(同一群人内部混合)。Cross-Attention 是"答辩":学生(Q)带着问题向评审团(K/V=论文内容)取证——提问方与信息源是两拨人。

实例或案例

  • 翻译:Cross-Attention 权重图与人工词对齐高度一致(原论文的可视化发现)。
  • Whisper 语音识别:音频编码器 + 文本解码器,Cross-Attention 对齐声学与文字。
  • 多模态 LLM(Flamingo 类):图像 token 作为 K/V 注入冻结的语言模型——Cross-Attention 的当代形态。

常见误区

  • 误区一:"Cross-attention 公式不同"。公式完全一致(softmax(QKᵀ/√d)V);区别仅在 Q 与 K/V 的来源不同。
  • 误区二:"Decoder-only 模型没有用到源信息"。它把源(prompt)拼进序列,Self-Attention 天然覆盖——不是丢功能而是换实现(kp-010)。
  • 误区三:"Cross 的 K/V 也要加因果掩码"。掩码属解码器自身的 Masked Self-Attention;Cross 看全源句无掩码(源是已知的完整输入)。

与其他知识点的关系

  • kp-002:共同公式。
  • kp-010/019:架构分化的分叉点。
  • kp-012:因果掩码与自回归的绑定。

自测题

  1. Cross-Attention 中 Q、K、V 各来自哪里?

答:Q 来自解码器当前序列;K、V 来自编码器输出(源序列表示)。

  1. 为什么 Decoder-only 范式里 Cross-Attention 消失了?

答:prompt 与生成拼成同一序列,Self-Attention 内在覆盖"查上下文"——架构简化胜出(kp-010/019)。

  1. 多模态模型如何用 Cross-Attention 注入图像信息?

答:图像特征作 K/V、文本 token 作 Q——文本生成按需查询视觉内容(Flamingo 类)。

延伸阅读

  • Vaswani 等 2017 §3.1(三种注意力层的定义)。
  • Alayrac 等, "Flamingo"(2022,多模态 Cross-Attention 注入)。
  • 《The Annotated Transformer》(Harvard NLP,带代码逐行对照)。