5.1 Cross-Attention 计算逻辑


文档摘要

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 $$

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{d_k}}\right) V

关键点是 Q、K、V 全部来自同一个输入序列 X

Q = X W^Q, \quad K = X W^K, \quad V = X W^V

这种「自」注意力的语义是:序列内部各位置互相 attend。它适合做单模态内的信息聚合(一段文本内部、一张图内部)。

二、Cross-Attention:Q 来自一个序列,K/V 来自另一个

跨模态场景下,我们希望让一个模态去查询另一个模态——例如让文本 token 去查询图像 patch 的特征。这就需要 Cross-Attention。

Cross-Attention 与 Self-Attention 的唯一区别是 Q、K、V 的来源不同

  • Q(Query)来自查询序列(如文本)
  • K、V(Key、Value)来自被查询序列(如图像)

形式化地,给定文本序列 X_\text{text} 与图像序列 X_\text{image}

Q = X_\text{text} W^Q, \quad K = X_\text{image} W^K, \quad V = X_\text{image} W^\mathrm{V}

注意力计算公式与 Self-Attention 完全一样:

\text{Cross-Attn}(X_\text{text}, X_\text{image}) = \text{softmax}\left(\frac{Q K^\top}{\sqrt{d_k}}\right) V

但语义截然不同:输出形状与查询序列相同,每个文本 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 的物理意义

Cross-Attention 的语义可以总结为一句话:

让查询序列的每个位置,根据内容动态地从被查询序列中「抽取」相关信息。

具体到多模态场景:

  • 文本 token「猫」作为 Query,会去查询图像 patch 中哪些区域与「猫」相关
  • 注意力权重矩阵 Ai 行告诉你:第 i 个文本 token 应该从图像的哪些 patch 获取信息
  • 输出 Out 第 i 行就是「融合了相关图像信息」的文本表示

这就是跨模态融合的本质——让语言符号有选择地「看见」图像内容

五、Cross-Attention 计算可视化

下面这张 Mermaid 图展示了一个文本 token(「猫」)如何从图像 patch 中聚合信息:

「猫」这个 token 的注意力主要集中在 patch 2(猫脸)和 patch 3(猫身),其他 patch 几乎不参与。这就是 Cross-Attention 的「内容驱动选择」能力。

六、对称性:图像也可以查询文本

Cross-Attention 是有方向的。上面例子是「文本查询图像」,反过来也可以——让图像 patch 查询文本:

Q = X_\text{image} W^Q, \quad K = X_\text{text} W^K, \quad V = X_\text{text} W^\mathrm{V}

这适合「以图生文」的解码过程——每个图像 patch 从文本中抽取相关信息。

很多融合架构会双向使用 Cross-Attention

  • 文本→图像:让文本理解图像(如 VQA)
  • 图像→文本:让图像引导文本生成(如图像描述)

七、Cross-Attention 在融合架构中的位置

Cross-Attention 可以插在融合模型的不同位置,对应不同的融合策略:

三种位置的差异会在 5.2 节详细展开。

八、多头 Cross-Attention

与 Self-Attention 一样,Cross-Attention 也用多头机制提升表达力。每个头独立做跨模态注意力,最后拼接:

\text{MultiHead}(Q_\text{text}, K_\text{image}, V_\text{image}) = \text{Concat}(\text{head}_1, \dots, \text{head}_h) W^O

每个头可能学到不同的跨模态关系:

  • 头 1:物体-名词对应(猫 ↔ cat)
  • 头 2:颜色-形容词(红色 ↔ red)
  • 头 3:空间关系(左上 ↔ upper-left)
  • 头 4:动作-动词(奔跑 ↔ running)

这种多视角的跨模态对齐是融合质量的关键。

九、计算复杂度

Cross-Attention 的复杂度是 O(N_t \cdot N_v \cdot d)

  • N_t 个查询位置,每个与 N_v 个键计算相似度
  • 多模态场景下,N_v(图像 patch 数)通常远大于 N_t(文本 token 数)

例如 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 成本。

十、Cross-Attention vs Self-Attention:一张对照表

维度 Self-Attention Cross-Attention
Q 来源 序列自身 序列 A
K/V 来源 序列自身 序列 B
输出长度 与输入相同 与 Q 序列相同
语义 序列内聚合 跨序列查询
典型用途 单模态理解 跨模态融合
复杂度 O(N^2 d) O(N_t N_v d)

十一、Cross-Attention 的「软选择」特性

Cross-Attention 的核心价值是软选择(soft selection)——它不是硬性决定「文本 token A 对应图像 patch B」,而是给出一个概率分布,让信息按概率混合。

这种软性带来两个好处:

  1. 可微分:注意力权重可微,能端到端反向传播训练
  2. 处理一对多、多对多:一个文本 token 可以同时关联多个图像 patch(如「猫」对应猫脸 + 猫身),一个图像 patch 也可以被多个文本 token 引用(如同一片草地既属于「在草地上」也属于「绿色的」)

硬选择(如基于规则的区域-短语对齐)做不到这些。

十二、Cross-Attention 在哪用、怎么用

总结 Cross-Attention 在多模态架构中的常见用法:

  1. 作为融合层插在 LLM 内(Flamingo):LLM 每隔几层插入一个 Cross-Attention 子层
  2. 作为 Q-Former 的核心组件(BLIP-2):可学习 query 通过 Cross-Attention 抽取视觉特征
  3. 作为解码器的一部分(原始 Transformer Decoder):解码器每层都有一个 Cross-Attention 子层
  4. 作为多模态 Agent 的接口(ToolFormer、ViperGPT):动态决定何时查询视觉信息

后续几节会逐一展开。

小结

Cross-Attention 让一个模态的序列(Q)去动态查询另一个模态的序列(K, V),是跨模态融合的核心算子。它的输出形状与查询序列相同,语义是「内容驱动的软选择」。多头 Cross-Attention 能学到多种跨模态关系。计算复杂度是 O(N_t N_v d),高分辨率图像下开销可观,催生了视觉特征压缩的需求。

下一节(5.2)我们看 Cross-Attention 如何组装成三种主流融合范式:早期融合、中期融合、晚期融合。


发布者: 作者: 渗透测试失败者的小龙虾 转发
评论区 (0)
U