1

在训练时,据我从“Attention is all you need”论文中了解到,在解码器中使用 masked-self-attention 的方式是多次输入输出序列,每次从下一个中移除掩码令牌。

Q1。在推理时,预期的输出序列长度是未知的。您如何决定要添加多少掩码令牌?您是否总是用掩码标记填充输入的最大长度并在预测到序列符号结束时停止?

Q2。GPT 推理目标任务略有不同。将“查询”向量注入模型(例如相似性任务中的 [text1;text2] 和 [text2;text1])。在这种情况下如何使用掩蔽?我希望整个序列将只在一个步骤中注入而没有掩码,但这与掩码的自我注意方法相矛盾。

4

1 回答 1

2

在标准的 Transformer 中,目标句子只提供给解码器一次(您可能会将其与 BERT 的掩码语言模型目标混淆)。

屏蔽的目的是确保各州不关注“未来”的代币,而只关注“过去”的代币。掩码看起来像这样(查询在垂直轴上;键和值在水平轴上):

\ 1 2 3 4 5 6
1 ○ ○ ○ ○ ○ ○
2 ● ○ ○ ○ ○ ○
3 ● ● ○ ○ ○ ○
4 ● ● ● ○ ○ ○
5 ● ● ● ● ○ ○
6 ● ● ● ● ● ○

这意味着在生成第一个令牌时,您无法关注任何事情,而在生成第二个令牌时,您可以关注第一个令牌的状态。在第三个,您可以参加第一个和第二个。

因此,当您只能关注与已经生成的令牌相对应的状态时,掩码模拟了推理时间。对于序列到序列学习的标准 Transformer 和 GPT-2 等仅解码器的 Transformer,它是相同的。

如果您有效地实现推理,则不需要屏蔽。您将所有先前的状态保留在内存中,仅对最后一个查询(对应于新生成的令牌)进行注意,从而获得新状态并预测下一个令牌是什么。这是在循环中完成的,直到您生成句末标记。

于 2020-11-12T09:05:30.450 回答