一、定义
Cross - attention(交叉注意力)是一种在深度学习,特别是在Transformer架构及其衍生架构中广泛使用的注意力机制。它涉及到两个不同的输入序列之间的交互,用于计算一个序列中的元素对另一个序列中元素的注意力权重。
二、在Transformer架构中的位置和作用
- 架构回顾
- 在Transformer架构中,主要由多头注意力(Multi - Head Attention)模块等构成。多头注意力模块包含了自注意力(Self - Attention)和交叉注意力两种类型。
- 自注意力主要用于处理单个序列自身内部元素之间的关系,而交叉注意力用于在两个不同序列之间传递信息。
- 具体作用
-
例如在Transformer的编码器 - 解码器(Encoder - Decoder)架构中,解码器中的交叉注意力机制可以让解码器在生成输出序列的过程中,关注到编码器输出的所有位置的信息。它可以将编码器中提取的丰富语义信息融入到解码器的生成过程中。
-
假设我们有一个机器翻译任务,编码器对源语言句子进行编码,得到一系列的语义表示。解码器在生成目标语言句子时,通过交叉注意力,能够根据当前要生成的目标语言单词,有选择地从编码器的输出中获取最相关的信息,从而更好地生成高质量的翻译结果。
三、计算过程
- 输入表示
- 设我们有两个序列,一个是编码器输出序列$X = {x_1,x_2,\cdots,x_n}$,另一个是解码器当前的输入序列(或者中间状态序列)$Y={y_1,y_2,\cdots,y_m}$。
- 计算相似度得分(Query - Key步骤)
- 对于交叉注意力,首先要计算$Y$中的每个元素(查询向量,Query)与$X$中的每个元素(键向量,Key)之间的相似度得分。通常使用点积(Dot - Product)来计算,即对于$y_i\in Y$和$x_j\in X$,相似度得分$e_{ij}=y_i^T W_q^T W_k x_j$,其中$W_q$和$W_k$是可学习的权重矩阵,用于将$y_i$和$x_j$转换到合适的向量空间进行相似度计算。
- 计算注意力权重(Softmax步骤)
- 对相似度得分进行归一化处理,得到注意力权重。通过$a_{ij}=\frac{\exp(e_{ij})}{\sum_{k = 1}^{n}\exp(e_{ik})}$,这里$a_{ij}$表示$y_i$对$x_j$的注意力权重。
- 加权求和(Value步骤)
- 根据注意力权重,对$X$中的值向量(Value)进行加权求和,得到$y_i$经过交叉注意力后的输出$z_i=\sum_{j = 1}^{n}a_{ij}W_v x_j$,其中$W_v$是另一个可学习的权重矩阵,用于将$x_j$转换到合适的值向量空间。
四、应用场景
- 自然语言处理
- 除了前面提到的机器翻译,在文本生成任务如摘要生成中也有应用。解码器可以通过交叉注意力从编码器处理后的原文内容中获取关键信息,用于生成高质量的摘要。
- 在问答系统中,问题部分作为一个序列,文档内容作为另一个序列,交叉注意力可以帮助找到文档中与问题最相关的部分来生成准确的答案。
- 计算机视觉
- 在一些视觉 - 语言跨模态任务中,如图像字幕(Image Captioning)。图像经过卷积神经网络等提取特征得到一个特征序列(类似于编码器输出),文本描述部分作为另一个序列(类似于解码器输入),交叉注意力可以让文本生成过程更好地关注图像中的相关特征,从而生成更准确的图像字幕。