5.1 Cross-Attention 计算逻辑 Cross-Attention(跨模态注意力)是跨模态融合最核心的算子。本节从第2章的 Self-Attention 出发,推出 Cross-Attention 的形式,并解释它的工程意义。 一、回顾:Self-Attention 的 Q/K/V 同源 第2章讲过,Self-Attention 中: $$ \text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^\top}{\sqrt{dk}}\right) V $$ 关键点是 Q、K、V 全部来自同一个输入序列 $X$: $$ Q = X W^Q, \quad K = X W^K, \quad V = X W^V $$
Cross-Attention(跨模态注意力)是跨模态融合最核心的算子。本节从第2章的 Self-Attention 出发,推出 Cross-Attention 的形式,并解释它的工程意义。
第2章讲过,Self-Attention 中:
关键点是 Q、K、V 全部来自同一个输入序列 X:
这种「自」注意力的语义是:序列内部各位置互相 attend。它适合做单模态内的信息聚合(一段文本内部、一张图内部)。
跨模态场景下,我们希望让一个模态去查询另一个模态——例如让文本 token 去查询图像 patch 的特征。这就需要 Cross-Attention。
Cross-Attention 与 Self-Attention 的唯一区别是 Q、K、V 的来源不同:
形式化地,给定文本序列 X_\text{text} 与图像序列 X_\text{image}:
注意力计算公式与 Self-Attention 完全一样:
但语义截然不同:输出形状与查询序列相同,每个文本 token 都得到了一个「根据图像内容调整后」的新表示。
设文本序列长度 N_t、图像序列长度 N_v、隐藏维度 d:
X_text : [N_t, d] X_image : [N_v, d] Q = X_text @ W^Q : [N_t, d_k] K = X_image @ W^K : [N_v, d_k] V = X_image @ W^V : [N_v, d_k] S = Q @ K^T : [N_t, N_v] # 注意力矩阵 S_scaled = S / sqrt(d_k) A = softmax(S_scaled, dim=-1) : [N_t, N_v] Out = A @ V : [N_t, d_k] # 与 X_text 同形
注意输出形状是 [N_t, d_k]——与查询序列长度相同,而非被查询序列。这一点对理解 Cross-Attention 在融合中的作用至关重要。
Cross-Attention 的语义可以总结为一句话:
让查询序列的每个位置,根据内容动态地从被查询序列中「抽取」相关信息。
具体到多模态场景:
这就是跨模态融合的本质——让语言符号有选择地「看见」图像内容。
下面这张 Mermaid 图展示了一个文本 token(「猫」)如何从图像 patch 中聚合信息:
「猫」这个 token 的注意力主要集中在 patch 2(猫脸)和 patch 3(猫身),其他 patch 几乎不参与。这就是 Cross-Attention 的「内容驱动选择」能力。
Cross-Attention 是有方向的。上面例子是「文本查询图像」,反过来也可以——让图像 patch 查询文本:
这适合「以图生文」的解码过程——每个图像 patch 从文本中抽取相关信息。
很多融合架构会双向使用 Cross-Attention:
Cross-Attention 可以插在融合模型的不同位置,对应不同的融合策略:
三种位置的差异会在 5.2 节详细展开。
与 Self-Attention 一样,Cross-Attention 也用多头机制提升表达力。每个头独立做跨模态注意力,最后拼接:
每个头可能学到不同的跨模态关系:
这种多视角的跨模态对齐是融合质量的关键。
Cross-Attention 的复杂度是 O(N_t \cdot N_v \cdot d):
例如 ViT-L/14 处理 224 图像有 256 个 patch,处理 512 图像就有 1024 个 patch。Cross-Attention 时每个文本 token 都要与这些 patch 计算相似度,开销可观。
这就是 Flamingo、BLIP-2 等模型要在 Cross-Attention 之前先压缩视觉特征的原因——把 256 或 1024 个 patch 压成 32 或 64 个 token,大幅降低后续 Cross-Attention 成本。
| 维度 | Self-Attention | Cross-Attention |
|---|---|---|
| Q 来源 | 序列自身 | 序列 A |
| K/V 来源 | 序列自身 | 序列 B |
| 输出长度 | 与输入相同 | 与 Q 序列相同 |
| 语义 | 序列内聚合 | 跨序列查询 |
| 典型用途 | 单模态理解 | 跨模态融合 |
| 复杂度 | O(N^2 d) | O(N_t N_v d) |
Cross-Attention 的核心价值是软选择(soft selection)——它不是硬性决定「文本 token A 对应图像 patch B」,而是给出一个概率分布,让信息按概率混合。
这种软性带来两个好处:
硬选择(如基于规则的区域-短语对齐)做不到这些。
总结 Cross-Attention 在多模态架构中的常见用法:
后续几节会逐一展开。
Cross-Attention 让一个模态的序列(Q)去动态查询另一个模态的序列(K, V),是跨模态融合的核心算子。它的输出形状与查询序列相同,语义是「内容驱动的软选择」。多头 Cross-Attention 能学到多种跨模态关系。计算复杂度是 O(N_t N_v d),高分辨率图像下开销可观,催生了视觉特征压缩的需求。
下一节(5.2)我们看 Cross-Attention 如何组装成三种主流融合范式:早期融合、中期融合、晚期融合。