nlp - 损失函数负对数似然给出损失,尽管完美的准确性

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

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

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

我的代码中可能存在错误吗?

最佳答案

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

关于nlp - 损失函数负对数似然给出损失,尽管完美的准确性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62886651/

相关文章:

anaconda - 无法在 Jupyter Notebook 上安装 fastai

python - 属性错误 : 'Tensor' object has no attribute 'numpy' in custom loss function (Tensorflow 2. 1.0)

Keras:如何在优化具有多个输出层的网络期间评估损失?

java - 线程中出现异常 "Twitter4J Async Dispatcher[0]"java.lang.NoClassDefFoundError

python - 在 Azure ML 中保存 torch 模型

java - 根据一些预定义的类别标记单词

machine-learning - 图像分类-pytorch

Java 数据报套接字不接收数据包

python - NLTK 无法找到 java 文件!用于斯坦福 POS 标记器

machine-learning - 从自然语言文本中提取数据