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

Neural network 过度拟合训练数据,但仍在改进测试数据,neural-network,spacy,bert-language-model,Neural Network,Spacy,Bert Language Model,我的机器学习模型大大超出了训练数据,但在测试数据上仍然表现得相当好。当使用神经网络方法时,每次迭代都会略微提高测试集的精度,但会大大提高训练集的精度(过拟合) 当将spacy与CNN体系结构结合使用时,这个问题得到了很好的证明,在这个体系结构中,我得到了以下结果 ITER LOSS P R F TF 0 29.305 0.733 0.342 0.466 0.525 1 10.410 0.811 0.

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

当将spacy与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集合上减少损失函数表明模型拟合良好。然而,不断增加的损耗表明过度拟合。(你可以在这一点上使用提前停车,但要有耐心。但可以始终使用检查点来保存最佳表现的权重)。收敛所需的历元数取决于学习率,因此极低的学习率可能需要大量历元才能使模型拟合。

绘制
train\u acc
vs
test\u acc
train\u loss
vs
test\u loss
的曲线图将非常有用。无论如何,如果
test\u loss
test\u acc
不断改进,我不认为这是一个严重的过度拟合问题。只是澄清一下,你在这里描述的肯定不是过度拟合。你能详细说明一下吗?另外,你会怎么称呼它?你认为在火车和开发车上观测精度的结果会与在开发车和开发车上比较损失函数的结果不同吗。我的意思是,我确实有一个dev set,我在其中计算f1,并观察到过度拟合,因为我在train set中的f1得分远高于dev set。train set中的f1得分高于dev set,这就是损失函数的目标。如果你概括得很好,你会认为这些分数是相同的,但我理解你的观点,在某种程度上,预计对火车来说,它会更好一些,因为这是损失函数正在优化的。是的,你会认为它是相同的,这就是为什么您会在验证丢失开始增加时使用提前停止。