【问题标题】:How is the GPT's masked-self-attention is utilized on fine-tuning/inferenceGPT 的 masked-self-attention 如何用于微调/推理
【发布时间】:2021-02-24 04:54:40
【问题描述】:

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

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

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

【问题讨论】:

    标签: nlp transformer gpt


    【解决方案1】:

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

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

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

    这意味着在生成第一个令牌时,你不能关注任何事情,在生成第二个令牌时,你可以关注第一个令牌的状态。在第三场,你可以参加第一场和第二场。

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

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

    【讨论】:

    • 你有高效实现推理的例子吗?在我看来,这更类似于带有注意力的 seq2seq(与“Attention Is All You Need”中描述的注意力版本相比?
    • 经过进一步研究,确实只有自回归模型需要缓存。这是由hugging face 完成的,也在this blog post 中描述
    猜你喜欢
    • 2020-01-27
    • 2020-10-30
    • 2023-02-25
    • 2020-01-03
    • 2021-04-03
    • 2020-02-09
    • 1970-01-01
    • 1970-01-01
    • 2021-08-16
    相关资源
    最近更新 更多