Masked Self Attention
Masked Self Attention
Masked Self-Attention,即掩码自注意力,是一种在Transformer模型中使用的自注意力机制的变体。它的主要目的是在训练过程中防止模型看到未来的信息,这在处理序列数据时非常重要,尤其是在语言模型中,我们希望模型在预测下一个词时只能依赖于已经看到的词。
以下是掩码自注意力的一些关键点:
1. 掩码(Mask)的作用
在标准的自注意力机制中,每个输出元素的计算都会考虑输入序列中的所有元素。但是在某些任务中,比如语言模型,我们希望模型在预测某个位置的输出时只能看到该位置之前的输入。
掩码矩阵是一个布尔矩阵,它用于在计算注意力权重时忽略某些输入元素。在掩码自注意力中,掩码通常用于确保在计算当前位置的输出时,模型不会“看到”未来的信息。
2. 如何实现掩码
掩码矩阵通常是一个下三角矩阵,其中对角线及其以下的元素为0,对角线以上的元素为1。当掩码矩阵与注意力权重矩阵相乘时,未来的信息会被“屏蔽”掉。
在计算注意力分数时,将掩码矩阵与softmax之前的分数相加,使得未来的位置具有非常低的注意力分数,从而在softmax之后这些位置的权重接近于0。
3. 应用场景
语言模型:在训练语言模型时,掩码自注意力用于确保模型在预测某个词时不会考虑该词之后的信息。
Transformer-XL:在Transformer-XL模型中,掩码自注意力用于处理长序列,通过使用相对位置编码和段级重复机制来扩展模型处理长序列的能力。
BERT(Bidirectional Encoder Representations from Transformers):在BERT模型中,掩码自注意力用于实现掩码语言模型(Masked Language Model, MLM),其中随机选择一些词,并要求模型基于上下文预测这些被掩码的词。
假设在此之前我们已经通过 scale 之前的步骤得到了一个 attention map,而 mask 就是沿着对角线把灰色的区域用0覆盖掉,不给模型看到未来的信息,如下图所示:
详细来说:
"i" 作为第一个单词,只能有和 "i" 自己的 attention;
"have" 作为第二个单词,有和 "i、have" 前面两个单词的 attention;
"a" 作为第三个单词,有和 "i、have、a" 前面三个单词的 attention;
"dream" 作为最后一个单词,才有对整个句子 4 个单词的 attention。
并且在做完 softmax 之后,横轴结果合为 1。如下图所示: