关于 Transformer 模型,在矩阵与值张量相乘之前,使用掩码来屏蔽注意力分数(替换为 1e-9)。关于掩蔽,我有 3 个简短的问题,如果你能澄清这些问题,我将不胜感激:
- 注意力分数是唯一需要掩码的地方(除了损失)还是应该屏蔽输入?
我问是因为看到使用查询、键和值的线性层的实现bias=False。
设置在层的输出中保留零的原因是
bias=False还是有不同的解释?在学习词嵌入时是否应该使用 padding_idx 以将填充的标记归零?
关于 Transformer 模型,在矩阵与值张量相乘之前,使用掩码来屏蔽注意力分数(替换为 1e-9)。关于掩蔽,我有 3 个简短的问题,如果你能澄清这些问题,我将不胜感激:
我问是因为看到使用查询、键和值的线性层的实现bias=False。
设置在层的输出中保留零的原因是bias=False还是有不同的解释?
在学习词嵌入时是否应该使用 padding_idx 以将填充的标记归零?
我将作为参考fairseq的Transformer 模型的实现。有了这个假设:
在变压器中,掩膜有两个用途:
key_padding_mask。attn_mask。权重掩码是填充和因果掩码的组合,用于知道要填充哪些位置 在计算softmax之前,它之后将为零。
您不需要在输出中保留任何零,因为注意力块会处理这一点(参见答案 (1))。在最初的 Transformer 文章中,注意力在没有偏差的情况下起作用,但偏差不会改变性能。实际上,在fairseq中,默认情况下使用了偏差。
是的,padding_idx当然用于将填充令牌归零。