【问题标题】:Loss function negative log likelihood giving loss despite perfect accuracy损失函数负对数似然给出损失尽管完美的准确性
【发布时间】:2020-11-03 06:52:08
【问题描述】:

我正在调试一个序列到序列的模型,并故意尝试完美地过拟合约 200 个样本的小型数据集(长度在 5-50 之间的句子对)。我在 pytorch 中使用负对数似然损失。我得到低损失(~1e^-5),但在同一数据集上的准确率只有 33%。

我也在 3 个样本上训练了模型,并获得了 100% 的准确率,但在训练期间我有损失。我的印象是,如果预测标签和目标标签之间不匹配,负对数似然只会产生损失(损失在 ~1e^-5 的同一区域内)?

我的代码中可能有错误吗?

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 谢谢,我明白了。 200 个样本的训练运行中的低损失/低准确率情况如何?这不是很不寻常吗?
    • @headache666 你在 200 个数据集中有多少个标签?标签是如何分布的?
    • 我正在尝试将自然语言话语解析为类似于 lambda 演算的含义表示。输入词汇有大约 130 个单词,输出词汇有大约 70 个标记。我在这里详细介绍了我的问题:datascience.stackexchange.com/questions/77689/… 我正在使用这个数据集:github.com/jkkummerfeld/text2sql-data/blob/master/data/… 我猜括号和标识符在目标数据集中的比例过高。
    • 同样的目标意义表示与数据集中的多个输入句子配对。
    猜你喜欢
    • 2017-11-23
    • 1970-01-01
    • 1970-01-01
    • 2020-08-08
    • 1970-01-01
    • 2014-06-27
    • 2022-01-14
    • 2020-12-05
    • 2020-08-19
    相关资源
    最近更新 更多