GPT 的 masked-self-attention 如何在 fine-tuning/inference 上使用

How is the GPT's masked-self-attention is utilized on fine-tuning/inference

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

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

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

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

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

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

这意味着在生成第一个token时,你不能关注任何东西,在生成第二个token时,你可以关注第一个token的状态。在第三个,你可以参加第一个和第二个。

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

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