损失函数为负对数似然率,尽管精确度很高,但仍会损失

时间:2020-07-14 01:18:18

标签: nlp pytorch loss log-likelihood sequence-to-sequence

我正在调试一个序列到序列的模型,并有意尝试完全适合约200个样本(长度在5至50之间的句子对)的小型数据集。我在pytorch中使用负对数似然损失。我的损失很低(〜1e ^ -5),但同一数据集的准确度仅为33%。

我也对3个样本进行了模型训练,并获得了100%的准确度,但是在训练过程中我却有所损失。我的印象是,如果预测标签和目标标签之间不匹配,则负对数可能性只会带来损失(损失在〜1e ^ -5的同一区域内)?

代码中是否可能存在错误?

1 个答案:

答案 0 :(得分:1)

您的代码中没有错误。
事物在深层网络中通常的工作方式是,网络预测 logits (即对数可能性)。然后使用soft-max(或S型函数)将这些logit转换为概率。最后根据预测的概率评估交叉熵。
这种方法的优点是数值稳定,易于训练。另一方面,由于soft-max,您永远无法拥有“完美”的0/1预测概率:也就是说,即使您的网络具有完美的准确性,也永远不会将概率1分配给正确的预测,而是“关闭”到一个”。结果,损失将始终是正的(尽管很小)。