大模型中Attention的不同
本文对比了Cross-Attention与Self-Attention的区别及Cross-Attention中Q、K、V的含义。Self-Attention处理单个序列内部关系,Q/K/V来自同一序列,用于特征提取;Cross-Attention处理两个序列间关系,Q与K/V分属不同序列,用于信息对齐。
·
文章目录
Cross-Attention 与 Self-Attention 的区别
Self-Attention
Self-Attention(自注意力)是注意力机制的核心形式,用于处理单个序列内部的关系。它通过计算序列中每个元素与其他所有元素的相关性权重,动态聚合全局信息。
- 输入:单一序列(如文本中的词向量或图像中的像素块)。
- 计算方式:查询(Query)、键(Key)、值(Value)均来自同一序列。公式如下:
Attention ( Q , K , V ) = softmax ( Q K T d k ) V \text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V Attention(Q,K,V)=softmax(dkQKT)V - 应用场景:Transformer 编码器(如 BERT)、图像分类中的 Vision Transformer。
Cross-Attention
Cross-Attention(交叉注意力)用于处理两个不同序列之间的关系,常见于多模态任务或编解码结构。
- 输入:两个不同序列(如源语言和目标语言的词向量)。
- 计算方式:Query 来自一个序列,Key 和 Value 来自另一个序列。公式与 Self-Attention 相同,但输入来源不同。
- 应用场景:机器翻译(解码器关注编码器输出)、图像描述生成(文本关注图像特征)。
关键差异
- 输入来源:Self-Attention 的 Q/K/V 来自同一序列;Cross-Attention 的 Q 与 K/V 分属不同序列。
- 功能目标:Self-Attention 捕捉序列内部依赖;Cross-Attention 建立序列间关联。
- 典型应用:Self-Attention 用于特征提取;Cross-Attention 用于信息对齐(如翻译中的源-目标对齐)。
代码示例
# Self-Attention 示例
self_attn = nn.MultiheadAttention(embed_dim, num_heads)
output, _ = self_attn(query=x, key=x, value=x)
# Cross-Attention 示例
cross_attn = nn.MultiheadAttention(embed_dim, num_heads)
output, _ = cross_attn(query=seq1, key=seq2, value=seq2)
Cross-Attention中的Q、K、V含义
在跨注意力(Cross-Attention)机制中,Q(Query)、K(Key)、V(Value)是注意力计算的核心组成部分,其具体含义根据应用场景(如图文匹配或机器翻译)有所不同。
图文匹配中的Q、K、V
- Query (Q): 通常来自一个模态的信息(例如图像的特征向量),用于“查询”另一个模态中的相关信息。
- Key (K) 和 Value (V): 来自另一个模态的信息(例如文本的特征向量)。K用于计算与Q的相似度,V是实际被加权聚合的信息。
- 作用: 通过计算图像特征(Q)与文本特征(K)的相似度,从文本特征(V)中提取与图像最相关的部分。
机器翻译中的Q、K、V
- Query (Q): 目标语言(解码器)的当前状态,用于查询源语言(编码器)的相关信息。
- Key (K) 和 Value (V): 来自源语言(编码器)的特征表示。K与Q计算注意力权重,V是编码器的隐藏状态,用于生成目标语言的输出。
- 作用: 解码器通过Q与编码器的K匹配,从V中获取源语言中对当前翻译步骤最重要的信息。
核心区别
- 图文匹配: Q和K/V通常来自不同模态(如图像和文本),目的是实现跨模态对齐。
- 机器翻译: Q来自解码器,K/V来自编码器,目的是实现源语言到目标语言的动态信息检索。
更多推荐



所有评论(0)