自注意力机制、交叉注意力
时间: 2025-05-11 09:41:32 浏览: 22
### 自注意力机制 (Self-Attention Mechanism)
自注意力机制是一种允许模型不同部分之间相互关联的方法,特别适用于处理序列数据。该机制能够捕捉输入特征图中任意两个位置之间的空间依赖关系,获取长距离上下文依赖信息[^1]。具体来说,在自然语言处理领域,这意味着句子中的每一个词都可以与其他所有词建立联系;而在图像处理方面,则表示图片内各个像素点间存在潜在的相关性。
#### 工作原理
在一个典型的实现方式——Transformer架构里,给定一个长度为N的输入向量X={x_1,x_2,...,x_N},其中每个元素代表时间步上的隐藏状态或单词嵌入。为了计算某个特定位置i处的关注度得分q_i·k_j(即查询Query q与键Key k间的相似度),会先分别对该位置及其余各位置j应用线性变换W_Q和W_K得到对应的Q和K矩阵:
\[ Q=W_{Q}\cdot X \]
\[ K=W_{K}\cdot X^{T} \]
接着利用softmax函数对这些分数进行归一化处理,形成概率分布V作为最终输出Y的一部分:
\[ Y=\text{softmax}(Q\cdot K/\sqrt{d_k})\cdot V \]
这里\( d_k \)是指维度大小,用于缩放点积结果以稳定梯度传播过程。上述操作实际上是在构建一张描述节点间交互强度的关系网,并据此调整原信号流经路径的重要性权重。
```python
import torch.nn.functional as F
def scaled_dot_product_attention(query, key, value):
"""Compute 'Scaled Dot Product Attention'"""
matmul_qk = torch.matmul(query, key.transpose(-2,-1))
dk = query.size()[-1]
logits = matmul_qk / math.sqrt(dk)
weights = F.softmax(logits,dim=-1)
output = torch.matmul(weights,value).squeeze(1)
return output,weights
```
### 交叉注意力机制 (Cross-Attention Mechanism)
相比之下,交叉注意力则涉及到了至少两组不同的输入序列A和B。其核心思想在于让一组序列的信息指导另一组的理解方向,从而增强表征能力并促进跨模态融合。例如,在机器翻译任务中,源语言句子里的词语可以通过这种方式来影响目标语言生成过程中相应位置的选择倾向;同样地,当面对多感官感知问题时(如视频分类),视觉帧也可以借助音频片段提供的线索来进行更精准的时间定位或是动作识别。
在技术层面,假设现在有两个独立但又彼此相关的变量集合S={s_1,s_2,…,s_M} 和 T={t_1,t_2,…,t_L} ,那么就可以按照如下流程执行cross-attention运算:
1. 对于每一对组合(s_m , t_l),计算它们各自的query、key以及value;
2. 使用source侧的数据充当queries,target端的内容作为keys/values参与后续步骤;
3. 应用之前介绍过的scaled dot-product formula完成权值分配;
4. 将所得加权求和后的vector反馈回原本的目标域,辅助进一步加工。
这种设计使得模型能够在保持各自特性的同时建立起有效的沟通桥梁,进而提升整体表现力。
阅读全文
相关推荐


















