在 Transformer 的 Decoder 结构中,掩码多头自注意力机制(Masked Multi-Head Attention)中的掩码(Mask)主要用于防止模型在生成当前词时“偷看”未来的词,确保生成过程的因果性。以下是掩码的具体含义和作用:
1. 掩码的作用
-
防止未来信息泄露:在解码器中,掩码确保模型在生成每个词时,只能关注到当前词及之前的词,而不能看到未来的词。这通过将未来位置的注意力权重设置为负无穷大来实现,使得这些位置在经过 softmax 操作后权重接近于 0,从而被忽略。
-
处理变长序列:掩码还可以用于屏蔽填充(padding)部分,确保模型只关注真实的词元,而不是填充的无意义部分。
2. 技术实现
-
掩码矩阵:掩码通常是一个下三角矩阵,对角线及左下部分为 1,其余部分为 0。例如,一个 4 维的下三角矩阵如下:
复制
tensor([[1, 0, 0, 0], [1, 1, 0, 0], [1, 1, 1, 0], [1, 1, 1, 1]])
-
应用掩码:在计算注意力分数时,将掩码矩阵与注意力分数矩阵相乘。掩码为 0 的位置会被加上一个非常大的负数(如负无穷),这样在经过 softmax 操作后,这些位置的值将接近 0,从而屏蔽未来的信息。
3. 示例
假设有一个 4 维的注意力分数矩阵:
复制
tensor([[[ 0.5530, 0.6123, 0.3896, -0.0834],
[ 0.0271, 0.2272, 0.1394, -0.1029],
[ 0.4198, 0.2406, 0.1581, 0.0425],
[ 0.4801, 0.2925, 0.1978, 0.0919]],
[[-0.4385, -0.1696, -0.2063, -0.5110],
[-0.3161, -0.0823, -0.0555, -0.2165],
[-0.1579, 0.0111, 0.0187, -0.1701],
[ 0.0276, 0.0543, 0.0457, -0.0404]]])
应用掩码后的注意力分数矩阵为:
复制
tensor([[[ 0.5530, -inf, -inf, -inf],
[ 0.0271, 0.2272, -inf, -inf],
[ 0.4198, 0.2406, 0.1581, -inf],
[ 0.4801, 0.2925, 0.1978, 0.0919]],
[[-0.4385, -inf, -inf, -inf],
[-0.3161, -0.0823, -inf, -inf],
[-0.1579, 0.0111, 0.0187, -inf],
[ 0.0276, 0.0543, 0.0457, -0.0404]]])
经过 softmax 归一化后的掩码注意力分数矩阵为:
复制
tensor([[[1.0000, 0.0000, 0.0000, 0.0000],
[0.4501, 0.5499, 0.0000, 0.0000],
[0.3838, 0.3208, 0.2954, 0.0000],
[0.3066, 0.2542, 0.2312, 0.2080]],
[[1.0000, 0.0000, 0.0000, 0.0000],
[0.4418, 0.5582, 0.0000, 0.0000],
[0.2961, 0.3506, 0.3533, 0.0000],
[0.2513, 0.2581, 0.2559, 0.2348]]])
可以看到,未来位置的注意力权重被成功屏蔽。
4. 总结
掩码多头自注意力机制中的掩码主要用于防止模型在生成当前词时看到未来的词,确保生成过程的因果性。通过将未来位置的注意力权重设置为负无穷大,掩码确保模型只关注当前词及之前的词。此外,掩码还可以用于处理变长序列,屏蔽填充部分。