变压器模型中的适当掩蔽

数据挖掘 nlp 词嵌入 变压器
2021-10-05 18:34:19

关于 Transformer 模型,在矩阵与值张量相乘之前,使用掩码来屏蔽注意力分数(替换为 1e-9)。关于掩蔽,我有 3 个简短的问题,如果你能澄清这些问题,我将不胜感激:

  1. 注意力分数是唯一需要掩码的地方(除了损失)还是应该屏蔽输入?

我问是因为看到使用查询、键和值的线性层的实现bias=False

  1. 设置在层的输出中保留零的原因是bias=False还是有不同的解释?

  2. 在学习词嵌入时是否应该使用 padding_idx 以将填充的标记归零?

1个回答

我将作为参考fairseqTransformer 模型的实现。有了这个假设:

  1. 在变压器中,掩膜有两个用途:

    • 填充:在多头注意力中,填充标记通过屏蔽它们被显式忽略。这对应于参数key_padding_mask
    • 自注意力因果关系:在解码器中使用的多头注意力块中,此掩码用于强制预测仅关注先前位置的标记,以便在推理时可以自回归地使用模型。这对应于参数attn_mask

    权重掩码是填充和因果掩码的组合,用于知道要填充哪些位置 在计算softmax之前,它之后将为零。

  2. 您不需要在输出中保留任何零,因为注意力块会处理这一点(参见答案 (1))。在最初的 Transformer 文章中,注意力在没有偏差的情况下起作用,但偏差不会改变性能。实际上,在fairseq中,默认情况下使用了偏差。

  3. 是的,padding_idx当然用于将填充令牌归零。