self attention 与cross attention
时间: 2025-01-17 19:55:04 浏览: 97
### Self Attention 和 Cross Attention 的区别及其应用
#### 自注意力机制(Self-Attention)
自注意力机制允许模型中的每个位置关注输入序列中的其他位置,从而更好地捕捉上下文信息。这种机制特别适用于处理单个模态的数据,在同一序列的不同部分之间建立联系。
在实现上,自注意力计算查询(Query)、键(Key)和值(Value),这些向量都是来自同一个源序列:
```python
import torch.nn.functional as F
def self_attention(query, key, value):
scores = torch.matmul(query, key.transpose(-2, -1)) / math.sqrt(key.size(-1))
p_attn = F.softmax(scores, dim=-1)
return torch.matmul(p_attn, value), p_attn
```
这种方法能够有效地捕获长期依赖关系并增强对重要单词的理解[^1]。
#### 交叉注意力机制(Cross-Attention)
相比之下,交叉注意力则涉及两个不同但相关的序列之间的交互作用。通常情况下,一个序列表示为查询(Query),而另一个序列为键(Key)和值(Value)。这使得模型可以在理解一个问题的同时考虑外部知识库的信息,或者在一个翻译任务中让解码器既看到目标语言也看到源语言的内容。
具体来说,当应用于机器翻译时,编码器产生的隐藏状态作为键和值,而解码器生成的状态充当查询来获取相关信息:
```python
def cross_attention(decoder_state, encoder_outputs):
query = decoder_state
key, value = encoder_outputs, encoder_outputs
scores = torch.matmul(query, key.transpose(-2, -1)) / math.sqrt(key.size(-1))
p_attn = F.softmax(scores, dim=-1)
return torch.matmul(p_attn, value), p_attn
```
通过这种方式,可以更精确地定位到源句子中有助于当前预测的部分[^2]。
#### 应用场景对比
- **自然语言处理**:对于文本摘要、问答系统等任务,自注意力有助于深入挖掘文档内部结构;而在神经机器翻译领域,则更多采用双向的交叉注意力架构。
- **计算机视觉**:图像描述生成任务会利用跨模态间的交叉注意力建立图片区域与对应词句间的关系;而对于纯视觉任务如物体检测,则主要依靠自注意力提升局部特征表达能力[^3].
阅读全文
相关推荐


















