Cross Attention:Transformer 如何融合双侧信息

AI 基础Cross Attentionopenstarry.com

Cross Attention:Transformer 如何融合双侧信息

Cross Attention 是 Transformer 编码器-解码器架构中的桥梁,它让解码器在生成每个词时能够"看到"编码器的全部输出信息。

Self Attention vs Cross Attention

先明确两者的区别:

类型 Q 来源 K、V 来源 用途
Self Attention自身序列自身序列理解输入内部关系
Cross Attention解码器编码器融合源端和目标端信息
Self Attention:
  Q = 目标序列自己的表示
  K, V = 目标序列自己的表示
  "我" → 关注 "我" "喜欢" "吃" "苹果"(都在目标端)

Cross Attention:
  Q = 解码器的当前状态
  K, V = 编码器的输出
  生成 "eat" 时 → 关注 "我" "喜欢" "吃" "苹果"(来自源端)

在翻译任务中的工作流程

以英译中 "I like eating apples" → "我喜欢吃苹果" 为例:

编码器(Encoder):
  输入: [I, like, eating, apples]
  经过 Self Attention × N 层
  输出: [enc_I, enc_like, enc_eating, enc_apples]

解码器(Decoder)生成过程:
  步骤 1: 生成 "我"
    Self Attention: "我" 看到自己
    Cross Attention: Q="我", K/V=[enc_I, enc_like, enc_eating, enc_apples]
    注意力: "我" 最关注 "I"(权重 0.72)

  步骤 2: 生成 "喜欢"
    Self Attention: "喜欢" 看到 "我"
    Cross Attention: Q="喜欢", K/V=编码器输出
    注意力: "喜欢" 最关注 "like"(权重 0.68)

  步骤 3: 生成 "吃"
    Cross Attention: "吃" 最关注 "eating"(权重 0.71)

  步骤 4: 生成 "苹果"
    Cross Attention: "苹果" 最关注 "apples"(权重 0.85)

Cross Attention 的三种典型应用

1. 机器翻译

源语言 → 编码器 → Cross Attention → 解码器 → 目标语言

2. 图像描述(Image Captioning)

图像特征(ViT/CNN) → 编码器 → Cross Attention → 解码器 → 文字描述

3. 文生图(Stable Diffusion)

文本嵌入 → Cross Attention → UNet 的每个层 → 引导图像生成

Stable Diffusion 中的 Cross Attention:
  Q = 图像特征(UNet 中间层)
  K, V = 文本 CLIP 嵌入

  效果:文本中的 "红色" 会影响图像对应区域生成红色

交叉注意力的 Mask 机制

在解码器中,Cross Attention 不需要 Mask(因为编码器的全部输出都是可见的)。但解码器的 Self Attention 需要 Mask,确保生成位置 i 时只能看到位置 1 到 i-1 的内容。

# 解码器中的注意力 Mask
Self Attention Mask(下三角矩阵):
[[1, 0, 0, 0],
 [1, 1, 0, 0],
 [1, 1, 1, 0],
 [1, 1, 1, 1]]

Cross Attention: 无 Mask,全部可见

总结

Cross Attention 是 Transformer 中连接编码器和解码器的桥梁。它的核心作用是让解码器在每一步生成时,都能动态地关注源端最相关的信息。这种灵活的信息融合机制,使 Transformer 在翻译、图像生成、多模态理解等任务中都取得了突破性进展。

以 AI 之力,筑未来之境

现在注册,立即免费获赠 200 次大模型调用权益

免费注册 →