九、Attention Mask

在计算注意力得分时,注意力模块会执行掩码mask操作。掩码mask有两个目的:

  • 在编码器的自注意力层以及解码器中的交叉注意力层中,掩码mask的作用是将输入句子中存在填充的注意力输出置为零,以确保填充不会影响自注意力。(注:由于输入序列可以是不同长度的,因此会像大多数 NLP处理过程一样,用填充标记对其进行扩展,以便将固定长度的向量输入Transformer)。

大模型开发 | 掌握Transformer之学习各组件(三)Attention Mask、输出层、计算损失_LLM

大模型开发 | 掌握Transformer之学习各组件(三)Attention Mask、输出层、计算损失_transformer_02

  • 在解码器的自注意力层中,掩码mask的作用是防止解码器在预测下一个单词时 "偷看 "目标句子中的其余部分。

解码器处理源序列中的单词,并用它们来预测目标序列中的单词。在训练过程中,解码器通过Teacher Forcing来完成这一工作,将完整的目标序列作为解码器的输入。因此,在预测某个位置的单词时,解码器可以使用该单词之前的目标单词以及该单词之后的目标单词。这使得解码器可以通过使用未来中的目标词来 “作弊”。例如,在预测 "单词 3 "时,解码器只应参考目标词的前 3 个输入词,而不应参考第 4 个单词 “Ketan”。

大模型开发 | 掌握Transformer之学习各组件(三)Attention Mask、输出层、计算损失_LLM_03

因此,解码器会屏蔽掉序列中当前需要预测单词后面的输入单词。

大模型开发 | 掌握Transformer之学习各组件(三)Attention Mask、输出层、计算损失_transformer_04

在计算注意力分数时(请参阅前面显示计算过程的图片),会在 Softmax 之前对分子进行掩码mask。屏蔽掉的元素(白色方格)被设置为负无穷大,这样 Softmax 就会将这些值变为零。


十、输出层

解码器stack中的最后一个解码器将其输出传递给输出组件,由输出组件将其转换为最终输出句子。

全连接线性层将解码器输出向量投射到单词得分中,目标词汇中的每个单词在句子中的每个位置都有一个得分值。例如,如果我们的最终输出句子有 7 个单词,而目标西班牙语词汇有 10000 个单词,那么我们就会为这 7 个单词中的每个单词生成 10000个分值。这些分值表示词汇中的每个单词在句子该位置出现的可能性。

然后,Softmax 层会将这些分数转化为概率(和加起来为 1.0)。在每个位置上,我们会找到概率最高的单词的索引,然后将该索引映射到词汇表中的相应单词。这些词就构成了Transformer的输出序列。如下所示:

大模型开发 | 掌握Transformer之学习各组件(三)Attention Mask、输出层、计算损失_transformer_05


十一、计算损失

在训练过程中,我们使用损失函数(如交叉熵损失)将生成的输出概率分布与目标序列进行比较。概率分布给出了每个词在该位置出现的概率。

大模型开发 | 掌握Transformer之学习各组件(三)Attention Mask、输出层、计算损失_transformer_06

假设我们的目标词汇只包含四个单词。我们的目标是生成与预期目标序列 "De nada END "相匹配的概率分布。

这意味着,在第一个位置的概率分布中,"De "的概率应为 1,而词汇表中所有其他词的概率均为 0。同样,在第二个和第三个位置,"nada "和 "END "的概率应分别为 1。

像往常一样,损失被用来计算梯度,通过反向传播训练Transformer,更新其权重。

结论

希望这篇文章能让大家对训练期间Transformer内部的运行机制有所了解。