什么是字符级 Transformer 模型中的辅助损失?

数据挖掘 深度学习 nlp 损失函数 变压器
2022-02-25 19:56:24

我正在阅读Rami Al-Rfou的 Character-Level Language Modeling with Deeper Self-Attention在第二页中,他们提到了辅助损失,它可以加速模型收敛并作为额外的正则化器。他们说他们有3种辅助损失:

  1. 中间序列位置的辅助损失
  2. 来自中间隐藏表示的辅助损失
  3. 目标位置的辅助损失多步。

但是,我找不到任何解释辅助损失的信息或参考资料。我想知道:

1个回答

辅助损失是添加到全局损失中的附加项,用于在模型的上游进一步诱导学习,可以看作是对抗梯度消失的一种方式。

早期的参考资料是Google 的 Inception 模型如何使用辅助分类器一般的想法是,您获取模型的中间输出并将其用作单独损失函数中的预测。因此,在训练期间,您的模型既充当全局模型(所有参数都受到最终全局损失的影响),又充当由具有特定术语的子模型组成的模型,这些子模型专门适用于您的辅助任务。

实际上,您可以按照此示例进行操作。如果链接失效,这是一个通用视图:

# let's say we have two auxiliary losses, and thus two auxiliary outputs
final_task_prediction, predictions = model.forward(x)

global_loss = loss(final_task_prediction, y)
intermediate_loss_1 = aux_loss_1(predictions[0], aux_y_1)
intermediate_loss_2 = aux_loss_2(predictions[1], aux_y_2)

# can weight auxiliary losses however we choose
total_loss = global_loss + .4*intermediate_loss_1 + .8*intermediate_loss_2
total_loss.backward()

例如,假设我们有一个输入序列ABCDEF快速通过 Al-Rfou 等人的辅助损失。

  • 多个位置作为“给定 A,预测 B,然后给定 B(以及我们的 A 的内部记忆),预测 C”(等)的辅助任务

  • 中间隐藏表示的工作方式与多个位置相同,只是中间层也有自己的损失项

  • 多重预测将目标预测序列分解为多个子序列,因此我们的辅助任务是“给定 A 预测 B,C ;给定 B,预测 C,D”(等等)

希望这可以帮助!