注意力机制

什么是交叉注意力机制

在交叉注意力机制中,模型会使用一个输入序列作为查询(Query),然后根据另一个输入序列计算其相关的注意力权重。这种机制运行模型动态地关注不同的输入,决定哪些部分最重要。

交叉注意力的主要功能是捕捉两个输入之间的依赖关系。例如,在问答系统中,交叉注意力机制可以让模型根据问题动态选择文本段落中最相关的部分,从而生成准确的答案。

交叉注意力机制的计算原理

交叉注意力机制基于查询(Query)、键(key)和值(value)的计算,它的计算流程类似于自注意力机制,但有一个关键区别:自注意力机制中的查询、键和值都来自同一个输入序列,而交叉注意力机制的查询和键/值来自不同的输入序列。

输入:

  • 查询Q来自一个输入序列(如问题)
  • 键K和值V来自另一个输入序列(如段落或上下文)

步骤:

  1. 计算查询和键之间的相似度:首先,将查询Q和键K进行点积,得到两个输入之间的相关性得分。具体公式如下:

Attention(Q,K,V)=softmax(QKTdk)

其中, QKT是查询和键的点积,表示两个序列在不同位置的相似度;dk 是键的维度,它作为一个缩放因子,以避免数值过大。

  1. 计算注意力权重:通过softmax函数将这些相似度转换为概率分布,表示查询对每个键的注意力权重。

3.加权求和:将这些注意力权重应用到值V上,最终得到输出向量。这相当于将关注的信息从值序列中提取出来,输入到下一个网络层。

自注意力和交叉注意力的区别

  • 自注意力:在同一个序列中进行注意力计算,模型在计算当前位置的表示时会根据该序列中的其他位置来生成上下文相关的表示,例如,在处理一个句子时,自注意力可以让每个词根据句子中的其他词来调整自己的表示。
  • 交叉注意力:涉及到两个序列之间的计算。例如在翻译任务中,源语言的句子与目标语言的句子之间的相关性就是通过交叉注意力来捕捉的。

交叉注意力机制的优势

  • 捕捉两个输入之间的依赖关系:交叉注意力可以让模型灵活地选择哪些部分的信息对于当前任务最为重要。例如,在问答任务中,可以让模型动态地根据问题,重点关注答案段落中的不同部分。
  • 增强上下文信息融合:通过引入交叉注意力机制,模型能够更加全面地融合多个来源的上下文信息,从而提高任务的准确性和泛化能力。

交叉注意力计算步骤:

  1. 对两个输入序列分别生成查询(来自第一个序列)和键值对(来自第二个序列)。
  2. 计算查询与第二个序列中所有键的点积,得到注意力得分。
  3. 应用softmax函数,将得分归一化为权重。
  4. 使用权重对第二个序列中的值进行加权求和,输出结果。

多头交叉注意力(Multi-Head Cross-Attention)

在实际应用中,多头注意力机制(Multi-Head Attention)常被用于交叉注意力中。多头注意力机制通过并行计算多个不同的注意力分布,能够在不同的子空间中捕捉不同的相关性。这可以使模型在不同层次上关注输入序列的不同特征,提高对复杂数据的建模能力。

  • 多头交叉注意力的计算:和普通交叉注意力一样,只是将查询、键、值分割成多个“头”,每个头在自己的子空间中进行注意力计算,最后将结果拼接起来。
  • 这使得模型可以从多个角度分析输入序列之间的相关性,从而提升性能。

线性注意力

自注意力

参考博客:
https://blog.csdn.net/weixin_43221845/article/details/142693864

posted @   小舟渡河  阅读(27)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示