Masked Self Attention(掩码自注意力机制)
首先先回顾一下Self-Attention:http://yongruizhang.cn/posts/3605324711.html
Self-Attention的模型架构为:
这里就推出Masked Self-Attention的模型结构为:
可以发现不同点就是在Scale和SoftMax中间多出了一个Mask结构,其实在注意力机制那篇文章中也已经提到过这个结构了,这篇文章就来详细讲解。
Mask的作用
添加Mask结构一定是想要对Self-Attention进行改进的,那么就来分析一下它的作用
在前面讲Self-Attention的时候提到,Mask一般就是在生成文本的时候使用。生成文本的情况就要求在生成了第一个单词时计算一次注意力,生成了两个单词时有计算一次注意力。总结来说就是不给模型看未来的信息。
如上图,这是在上一篇文章中引出的,表示计算出注意力之后的结果,粉色部分表示两两单词之间的注意力权重,这个句子为“I have a dream”,第一行的I与后面的have、a、dream都计算了注意力,因此这和想要的结果不同,因此需要掩码自注意力机制。
掩码自注意力机制的核心就是沿着对角线把灰色的区域用0覆盖掉,从而达到不给模型看到未来的信息的要求。
这样得到的结果就是:
计算注意力之后可能的结果为(经过了SoftMax):
这样每一行就表示生成一个单词时的情况,每一行的概率和为1。
详细来说:
- 第一步:生成”I”,此时计算注意力,只能和自己有
- 第二步:生成”have”,此时有两个单词”I”和”have”,就分别计算”have”和两个单词的注意力,得到两个值
- 第三步:生成”a”,此时有三个单词”I”,”hvae”和”a”,分别计算”a”和这三个单词的注意力,得到三个值
- 第四步:生成”dream”,此时有四个单词”I”,”have”,”a”和”dream”,分别计算”dream”和这四个单词的注意力,得到四个值
具体为什么要 mask,未来在讲解 Transformer 的时候再详细解释。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 秋白's Blog!
评论