TransFormer--解码器:多头注意力层
下图展示了Transformer模型中的编码器和解码器。我们可以看到,每 个解码器中的多头注意力层都有两个输入:一个来自带掩码的多头注意力层,另一个是编码器输出的特征值。
让我们用R来表示编码器输出的特征值,用M来表示由带掩码的多头注意力层输出的注意力矩阵。由于涉及编码器与解码器的交互,因此这一层也被称为编码器−解码器注意力层。
让我们详细了解该层究竟是如何工作的。多头注意力机制的第1步是创建查询矩阵、键矩阵和值矩阵。我们已知可以通过将输入矩阵乘以权重矩阵来创建查询矩阵、键矩阵和值矩阵。但在这一层,我们有两个输入矩阵:一个是R(编码器输出的特征值),另一个是M(前一个子层的注意力矩阵)。
我们使用从上一个子层获得的注意力矩阵M创建查询矩阵Q,使用编码器输出的特征值R创建键矩阵和值矩阵。由于采用多头注意力机制,因此对于头i,需做如下处理。
查询矩阵 Q i Q_i Qi通过将注意力矩阵M乘以权重矩阵 W i Q W_i^Q WiQ来创建。
键矩阵和值矩阵通过将编码器输出的特征值R分别与权重矩阵 W i K 、 W i V W_i^K、W_i^V WiK、WiV相乘来创建,如下图所示。
为什么要用M计算查询矩阵,而用R计算键矩阵和值矩阵呢?因为查询矩阵是从M求得的,所以本质上包含了目标句的特征。键矩阵和值矩阵则含有原句的特征,因为它们是用R计算的。为了进一步理解,让我们来逐步计算。
第1步是计算查询矩阵与键矩阵的点积。查询矩阵和键矩阵如下图所示。需要注意的是,这里使用的数值是随机的,只是为了方便理解。
下图显示了查询矩阵与键矩阵的点积结果。
通过观察上图中的矩阵 Q i ∗ K i T Q_i * K_i^T Qi∗KiT,我们可以得出以下几点。
- 从矩阵的第1行可以看出,其正在计算查询向量 q 1 q_1 q1()与所有键向量 k 1 k_1 k1(I)、 k 2 k_2 k2(am)和 k 3 k_3 k3(good)的点积。因此,第1行表示目标词与原句中所有的词(I、am和good)的相似度。
- 同理,从矩阵的第2行可以看出,其正在计算查询向量 q 2 q_2 q2(Je)与所有键向量 k 1 k_1 k1(I)、 k 2 k_2 k2(am)和 k 3 k_3 k3(good)的点积。因此,第2行表示目标词Je与原句中所有的词(I、am和good)的相似度。
- 同样的道理也适用于其他所有行。通过计算 Q i ∗ K i T Q_i * K_i^T Qi∗KiT,可以得出查询矩阵(目标句特征)与键矩阵(原句特征)的相似度。
计算多头注意力矩阵的下一步是将 Q i ∗ K i K Q_i * K_i^K Qi∗KiK除以 d k \sqrt{d_k} dk ,然后应用softmax函数,得到分数矩阵 s o f t m a x ( Q i ∗ K i T d k ) ∗ V i softmax(\frac{Q_i * K_i^T}{\sqrt{d_k}}) * V_i softmax(dk Qi∗KiT)∗Vi。
接下来,我们将分数矩阵乘以值矩阵 V i V_i Vi,得到,即注意力矩阵 Z i Z_i Zi,如下图所示。
假设计算结果如下图所示。
目标句的注意力矩阵 Z i Z_i Zi是通过分数加权的值向量之和计算的。为了进一步理解,让我们看看Je这个词的自注意力值 Z 2 Z_2 Z2是如何计算的,如下图所示。
Je的自注意力值 Z 2 Z_2 Z2是通过分数加权的值向量之和求得的。因此, Z 2 Z_2 Z2的值将包含98%的值向量 v 1 v_1 v1(I)和2%的值向量 v 2 v_2 v2(am)。这个结果可以帮助模型理解目标词Je指代的是原词I。
同样,我们可以计算出h个注意力矩阵,将它们串联起来。然后,将结果乘以一个新的权重矩阵 W 0 W_0 W0,得出最终的注意力矩阵,如下所示。
M u l t i − h e a d a t t e n t i o n = C o n c a t e n a t e ( Z 1 , Z 2 , . . . , Z i , . . . , Z h ) W 0 Multi - head attention = Concatenate(Z_1,Z_2,...,Z_i,...,Z_h)W_0 Multi−headattention=Concatenate(Z1,Z2,...,Zi,...,Zh)W0
将最终的注意力矩阵送入解码器的下一个子层,即前馈网络层。
标签:TransFormer,--,矩阵,编码器,查询,解码器,注意力,向量 From: https://blog.csdn.net/weixin_44144773/article/details/143906527