首先先回顾一下Self-Attention:http://yongruizhang.cn/posts/3605324711.html

Self-Attention的模型架构为:

img

这里就推出Masked Self-Attention的模型结构为:

img

可以发现不同点就是在Scale和SoftMax中间多出了一个Mask结构,其实在注意力机制那篇文章中也已经提到过这个结构了,这篇文章就来详细讲解。

Mask的作用

添加Mask结构一定是想要对Self-Attention进行改进的,那么就来分析一下它的作用

在前面讲Self-Attention的时候提到,Mask一般就是在生成文本的时候使用。生成文本的情况就要求在生成了第一个单词时计算一次注意力,生成了两个单词时有计算一次注意力。总结来说就是不给模型看未来的信息。

image-20240326185224174

如上图,这是在上一篇文章中引出的,表示计算出注意力之后的结果,粉色部分表示两两单词之间的注意力权重,这个句子为“I have a dream”,第一行的I与后面的have、a、dream都计算了注意力,因此这和想要的结果不同,因此需要掩码自注意力机制。

掩码自注意力机制的核心就是沿着对角线把灰色的区域用0覆盖掉,从而达到不给模型看到未来的信息的要求。

这样得到的结果就是:

img

计算注意力之后可能的结果为(经过了SoftMax):

img

这样每一行就表示生成一个单词时的情况,每一行的概率和为1。

详细来说:

  1. 第一步:生成”I”,此时计算注意力,只能和自己有
  2. 第二步:生成”have”,此时有两个单词”I”和”have”,就分别计算”have”和两个单词的注意力,得到两个值
  3. 第三步:生成”a”,此时有三个单词”I”,”hvae”和”a”,分别计算”a”和这三个单词的注意力,得到三个值
  4. 第四步:生成”dream”,此时有四个单词”I”,”have”,”a”和”dream”,分别计算”dream”和这四个单词的注意力,得到四个值

具体为什么要 mask,未来在讲解 Transformer 的时候再详细解释。