Transformer中self-attention layer中一个optional的mask操作,只在decoder中起作用,翻来翻去也没有找到中文的博文详细提到这个。所以还是在medium上面找个文章抄一下。
Note: 建议先看李宏毅讲的transformer: B站链接:https://www.bilibili.com/video/BV1JE411g7XF/?p=23
原文链接:https://medium.com/analytics-vidhya/masking-in-transformers-self-attention-mechanism-bad3c9ec235c
图1是没有mask的self-attention layer, 图2是有mask的
mask在图2中是一个a,b,c,d组成的2x2矩阵,之所以是2x2是因为假设了输入和输出序列长度就是2。这里A=K1 * Q1, B=K1*Q2,也就是说B其实就是第二个序列对于第一个序列的attention,然而在decode的时候,想要遵循“no peeking ahead”的原则,B就必须为0,所以mask矩阵B的位置置为-inf,这样后面的值就对前面的值没有影响。就这样。。。