我应该使用什么损失函数来对 seq2seq RNN 模型进行评分?

机器算法验证 深度学习 损失函数 循环神经网络
2022-03-05 10:44:13

我正在研究Cho 2014 年的论文,该论文介绍了用于 seq2seq 建模的编码器-解码器架构。

在论文中,他们似乎使用给定输入的输出概率(或负对数似然)作为输入的损失函数x长度M和输出y长度N

P(y1,,yN|x1,,xM)=P(y1|x1,,xm)P(y2|y1,x1,,xm)P(yN|y1,,yN1,x1,,xm)

但是,我认为将其用作损失函数有几个问题:

  1. 似乎在训练期间假设教师强制(即,它不使用解码器对位置的猜测作为下一次迭代的输入,而是使用已知标记。
  2. 它不会惩罚长序列。由于概率来自1N的输出,如果解码器在第一个之后生成更长的序列N不会计入损失。
  3. 如果模型预测一个早期的 End-of-String 标记,损失函数仍然需要N步骤——这意味着我们正在基于未经训练的模型“流形”生成输出。这似乎很草率。

这些担忧中的任何一个都有效吗?如果是这样,在更高级的损失函数方面是否有任何进展?

1个回答

似乎在训练期间假设教师强制(即,它不使用解码器对位置的猜测作为下一次迭代的输入,而是使用已知标记。

“teacher forcing”这个词让我有点困扰,因为它有点忽略了这个想法:将下一个已知标记提供给 RNN 模型并没有错或奇怪——它实际上是计算的唯一方法logP(y1,,yN). 如果您将序列上的分布自回归定义为P(y)=iP(yi|y<i)正如通常所做的那样,每个条件项都使用 RNN 建模,然后“教师强迫”是正确最大化对数似然度的一个真实过程。(我省略了编写条件序列x上面,因为它不会改变任何东西。)

鉴于 MLE 的普遍性和缺乏好的替代方案,我不认为假设“教师强迫”是令人反感的。

尽管如此,它确实存在一些问题 - 即,模型为所有数据点分配了高可能性,但来自模型的样本不一定可能在真实的数据分布中(这导致“低质量”样本)。您可能对“Professor Forcing”(Lamb 等人)感兴趣,它通过对抗性训练程序缓解这种情况,而不会放弃 MLE。

它不会惩罚长序列。由于输出的概率是从 1 到 N,如果解码器生成更长的序列,则第一个 N 之后的所有内容都不会影响损失。

如果模型预测一个早期的字符串结束标记,损失函数仍然需要 N 步——这意味着我们正在基于模型的未经训练的“流形”生成输出。这似乎很草率。

这些都不是训练时出现的问题。与其将自回归序列模型视为输出预测的过程,不如将其视为一种计算给定序列概率的方法。该模型从不预测任何东西——你可以从分布中采样一个序列或一个标记,或者你可以问它最有可能的下一个标记是什么——但这些与预测有很大的不同(而且你不会在训练期间采样任何一个)。

如果是这样,在更高级的损失函数方面是否有任何进展?

很可能有针对不同建模任务具体设计的目标。然而,我想说 MLE 仍然占主导地位——最近的 GPT2 模型在广泛的自然语言建模和理解任务上取得了最先进的性能,它是用它训练的。