参考资料
https://www.3blue1brown.com/
https://www.3blue1brown.com/lessons/attention
《Attention Is All You Need》
Cross Attention
编码器-解码器注意力:在“编码器-解码器注意力”层中,查询来自前一层解码器,而记忆键和值则来自编码器的输出。这使得解码器中的每个位置都能关注输入序列中的所有位置。这模仿了序列到序列模型中典型的编码器-解码器注意力机制。
(1)论文中对于编码器-解码器注意力的描述,让我们初步了解Encoder-Decoder Attention的Q来自前一层的解码器,K、V来自编码器的输出。
编码器-解码器注意力
(2)当我们想深入了解,回到Transformer的架构图时,估计又懵逼了,怎么又变成Muti-Head Attention?
Transformer架构图
神经网络算法 - 一文搞懂Self-Attention和Multi-Head Attention
(3)新手的疑问:架构图中明明是Multi-Head Attention,论文中的描述又变为Encoder-Decoder Attention,怎么又冒出一个新名词Cross Attention?
编码器-解码器的Cross Attention
神经网络算法 - 一文搞懂Transformer中的三种注意力机制
输入来源:
Self Attention:其输入来自同一序列,即查询(Q)、键(K)和值(V)都来自编码器。这种机制关注于序列内部元素之间的关联。
Cross Attention:其输入来自不同的序列。解码器序列作为查询(Q),而编码器序列作为键(K)和值(V)。这种机制关注于不同序列之间的元素关联。
Self Attention:在自然语言处理任务中尤为常见,如语言建模、文本分类等。由于它关注的是序列内部元素之间的关联,因此特别适用于处理单个序列,如句子或段落。
Cross Attention:在自然语言处理、计算机视觉等领域都有应用,如机器翻译、图像描述生成等。它允许模型关注不同序列之间的元素关联,从而能够处理多个序列之间的交互。
作用机制:
Self Attention:通过对序列中的每个元素(如词或图像patch)生成一个表示,并使用这个表示作为查询去关注序列中的其他元素,从而计算出一个新的表示。这个过程有助于捕捉序列内部的依赖关系。
Cross Attention:在两个序列之间建立关联,一个序列的元素作为查询去关注另一个序列中的所有元素。这种机制允许模型在翻译或生成任务中关注源序列和目标序列之间的对应关系。
准备输入数据:
通常有两个不同的输入序列,我们称之为源序列(Source Sequence)和目标序列(Target Sequence)。在机器翻译任务中,源序列可以是原文,而目标序列可以是译文的部分或全部。
生成查询(Query)、键(Key)和值(Value):
对于交叉注意力,查询(Q)通常来自目标序列的某个元素或元素的表示。
键(K)和值(V)则来自源序列的元素或元素的表示。
这些表示通常是通过嵌入层(Embedding Layer)或者经过某种形式的编码器(Encoder)得到的。
计算注意力得分:
对于每一个目标序列中的查询(Q),计算它与源序列中所有键(K)的相似度或相关性得分。这通常通过点积、加性注意力或缩放点积等方式实现。
归一化注意力得分:
使用Softmax函数将得分转换成概率分布,这样每个源序列中的键(K)都会有一个与之对应的权重。
计算加权和:
使用上一步得到的权重对源序列中的值(V)进行加权求和,得到一个加权表示(也称为上下文向量)。
输出上下文向量:
这个加权表示(上下文向量)捕捉了源序列中与目标序列查询最相关的信息,并将其作为交叉注意力的输出。
使用上下文向量:
这个上下文向量随后可以被用于目标序列的下一个处理步骤,例如在解码器(Decoder)中用于生成下一个词或预测下一个状态。
Transformer动画素材来源于3Blue1Brown,想了解更多查看参考资料网址。
3Blue1Brown 是一个由 Grant Sanderson 创建的YouTube 频道。这个频道从独特的视觉角度解说高等数学,内容包括线性代数、微积分、人工神经网络、黎曼猜想、傅里叶变换以及四元数等。
Grant Sanderson 毕业于斯坦福大学,并获得了数学学士学位。
参考资料
https://www.3blue1brown.com/
https://www.3blue1brown.com/lessons/attention
《Attention Is All You Need》