趋近智
在我们考察解码器堆栈时,请回想它的主要作用:一次生成一个元素地输出序列。在机器翻译等任务中,这意味着逐词生成翻译后的句子。这种按序生成过程对解码器内部使用的自注意力 (self-attention)机制 (attention mechanism)提出了特定要求。与编码器可以同时处理整个输入序列不同,解码器必须仅根据已生成的令牌来预测下一个令牌。它不能预见当前正在构建的输出序列中的未来令牌。
这就是带掩码的多头自注意力发挥作用的地方。它是我们在第2章中讨论的多头自注意力机制的一种修改,专门设计用于在训练和推理 (inference)期间强制执行这种“不可预见”的约束。
考虑序列到序列模型的训练过程。我们通常使用“教师强制”机制,即解码器被输入正确的目标序列(向右移位,通常带有序列开始令牌)作为输入,以预测每个位置的下一个令牌。例如,为了预测目标翻译的第三个词,解码器会接收到前两个正确的词。
如果在此处使用标准自注意力 (self-attention),位置i的注意力机制 (attention mechanism)将能够整合目标序列中所有位置的信息,包括位置i+1、i+2等。这就像作弊;模型可以简单地从输入中复制下一个词,而不是学习根据前面的词和编码器的输出来预测它。模型需要学习条件概率分布。允许对未来令牌的注意力会破坏这种条件依赖性。
在推理 (inference)期间(生成新序列时),未来令牌本来就是未知的。因此,注意力机制在训练和推理之间必须保持一致,只关注先前生成的令牌。
带掩码的多头自注意力 (self-attention)通过修改每个注意力头内部的缩放点积注意力计算来实现这一约束。在对注意力分数应用softmax函数之前,会添加一个掩码。
回顾缩放点积注意力公式:
在带掩码的自注意力中,我们修改如下:
掩码通常是一个矩阵,其中模型不允许关注的位置的元素被设置为一个非常大的负数(实际上是负无穷大),而允许关注的位置的元素被设置为零。
对于长度为的目标序列,掩码将是一个矩阵。对于第个令牌(矩阵的第行),掩码确保它只关注令牌,其中(矩阵的第到列)。其中的元素被设置为,而的元素被设置为。
当一个大的负数被添加到未来位置的注意力分数时,随后的softmax函数会给这些位置分配一个非常接近零的概率。这有效阻止了任何信息从未来令牌流入当前令牌的表示中。
让我们可视化长度为4的序列的掩码:
关注目标 --> 位置 1 位置 2 位置 3 位置 4
查询自位置 1: [ 0 -inf -inf -inf ]
查询自位置 2: [ 0 0 -inf -inf ]
查询自位置 3: [ 0 0 0 -inf ]
查询自位置 4: [ 0 0 0 0 ]
这里,0代表一个允许的注意力连接(添加此掩码后,原始分数不变),-inf代表一个被掩码的连接(添加此掩码后,分数实际上变为负无穷大)。
下图说明了输出序列“The model predicts well”中位置3(“predicts”)的令牌允许的注意力连接,假设它是逐步生成的。
该图显示,来自位置3(“predicts”)的查询可以关注位置1、2和3的键/值,但对位置4(“well”)的注意力被掩盖掉了。
这种掩码过程在多头结构的每个注意力头内部独立应用。整体过程与标准多头注意力相同:
与编码器的自注意力 (self-attention)相比,唯一的区别是步骤3,即掩码的应用。
带掩码的多头自注意力 (self-attention)是标准自注意力机制 (attention mechanism)的一种修改,对于Transformer的解码器部分不可或缺。通过阻止位置关注输出序列中的后续位置,它确保了模型的预测是自回归 (autoregressive)的,这意味着当前步骤的预测仅依赖于先前生成的步骤和输入序列。这是通过在softmax计算之前,向注意力分数中添加一个掩码矩阵(包含零和负无穷大)来实现的,从而有效地将未来令牌的权重 (weight)归零。这种机制应用于解码器自注意力层中多头注意力 (multi-head attention)结构的每个头部。这与编码器的自注意力形成对比,编码器自注意力允许每个位置关注输入序列中的所有位置。
这部分内容有帮助吗?
© 2026 ApX Machine LearningAI伦理与透明度•