过度拟合训练数据,但仍在改进测试数据



我的机器学习模型大量过度拟合训练数据,但在测试数据上仍然表现良好。当使用神经网络方法时,每次迭代都会略微提高测试集的精度,但会大大提高训练集的精度(过拟合(。

当将spacy与CNN架构一起使用时,这个问题得到了很好的证明,在CNN架构中,我得到了以下结果

ITER    LOSS      P       R       F      TF  
0      29.305  0.733   0.342   0.466   0.525
1      10.410  0.811   0.443   0.573   0.650
2      4.361   0.722   0.548   0.623   0.757
3      2.265   0.764   0.563   0.648   0.811
4      1.449   0.748   0.613   0.674   0.877

TF是列车数据上的f1分数。

测试分数不断提高,而与列车集的差异仅增加到在第20次迭代中,模型在列车数据上表现几乎完美,而测试精度从未降低,以证明提前停车是合理的。

我尝试了很多规则化选项,包括不同的辍学率、体重衰减、L2,但似乎没有一个能避免记住部分训练数据,而且在测试集中表现都更差。

这个问题并不是spacy和我所遵循的方法独有的,scikit和参数较少的模型也会出现这种情况。

手头的数据集是一个不到2000个例子的小数据集,这是一个多标签文本分类任务。有些标签的例子不到100个,但当检查过度填充的地方时,所有标签似乎都会受到同样的影响。

我想我的主要问题是,我是否应该担心这样一个事实,即只要模型在测试数据上表现良好,它就会记住训练数据集,但也应该担心是否还有其他我没有考虑的事情来解决我所看到的记忆问题

为了澄清,损失函数总是在训练集上计算的,因此训练集上可能会发生过拟合。为了观察是否存在过拟合,请使用DEV集(它不应该是训练集的一部分。(。在每个历元结束时,分别计算训练集和DEV集的损失。开发集上的降损函数显示了模型的良好拟合性。而不断增加的损耗显示出过度拟合。(你可以耐心地在这一点上提前停车。但也可以随时使用检查点来节省最佳表现的重量(。收敛所需的历元数量取决于学习率,因此非常低的学习率可能需要大量的历元来拟合模型。

最新更新