【问题标题】:How is transformers loss calculated for blank token predictions?如何为空白令牌预测计算变压器损失?
【发布时间】:2021-06-05 15:48:40
【问题描述】:

我目前正在尝试实现一个变压器,但无法理解它的损耗计算。

我的编码器输入查找 batch_size=1 和 max_sentence_length=8,如:

[[Das, Wetter, ist, gut, <blank>, <blank>, <blank>, <blank>]]

我的解码器输入看起来像(德语到英语):

[[<start>, The, weather, is, good, <end>, <blank>, <blank>]]

假设我的转换器预测了这些类别概率(仅显示类别概率最高的类别的单词):

[[The, good, is, weather, <end>, <blank>, <blank>, <blank>]]

现在我使用以下方法计算损失:

loss = categorical_crossentropy(
   [[The, good, is, weather, <end>, <blank>, <blank>, <blank>]],
   [[The, weather, is, good, <end>, <blank>, <blank>, <blank>]]
)

这是计算损失的正确方法吗?我的转换器总是预测下一个单词的空白标记,我认为这是因为我的损失计算有误,在计算损失之前必须对空白标记做一些事情。

【问题讨论】:

    标签: machine-learning nlp transformer language-model


    【解决方案1】:

    您需要屏蔽填充。 (你叫&lt;blank&gt;更多时候叫&lt;pad&gt;。)

    • 创建一个掩码,说明有效令牌的位置(伪代码:mask = target != '&lt;pad&gt;')

    • 在计算分类交叉熵时,不要自动减少损失,保留值。

    • 将损失值与掩码相乘,即与&lt;blank&gt; 标记对应的位置为零,并将有效位置的损失相加。 (伪代码:loss_sum = (loss * mask).sum()

    • loss_sum除以有效位置数,即掩码之和(伪代码:loss = loss_sum / mask.sum()

    【讨论】:

      猜你喜欢
      • 2023-02-23
      • 2021-08-08
      • 2019-06-29
      • 2021-05-03
      • 2019-05-17
      • 2020-04-27
      • 2011-11-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多