为什么培训和测试损失都会随着我逐步增加培训数据而减少?

时间:2017-03-30 16:09:38

标签: machine-learning deep-learning

我正在使用Keras通过使用model.train_on_batch(x_batch,y_batch)开发在线学习应用程序。我试图逐步添加训练数据,并绘制测试和训练的损失。结果如下,

My result

很高兴看到测试损失正在减少,但正如我在Andrew Ng的ML课程中所学到的,如果我有一个像DNN这样强大的模型,那么随着我逐渐添加更多训练数据,训练损失应该会增加,并且测试损失应该减少。所以,我真的很困惑。在他的幻灯片的屏幕截图下面。

Andrew's slide

2 个答案:

答案 0 :(得分:2)

  正如我在Andrew Ng的ML课程中所学到的那样,如果我有一个像DNN这样强大的模型,那么随着我逐渐添加更多训练数据,训练损失应该会增加,并且测试损失应该会减少。

是的,这是真的。假设您使用非常小的训练数据并使用一些强大的模型进行训练,在这种情况下,您的模型能够记住每个训练样本,模型设置将非常特定于训练数据,模型知道每个训练样本及其输出标签,因此培训损失将非常小。但是相同的设置在测试数据上失败并产生不良结果,这就是我们所说的模型过度拟合。

卵形过度生长的解决方案是:

  • 增加培训数据:当您增加培训数据时,您的模型无法记住所有培训数据,但会尝试找到一些适用于大多数培训数据的常规设置,以减少损失训练。但是,相同的一般设置也可用于预测测试数据。因此,通过增加训练数据,训练损失增加但是测试损失减少,这是预测的预期。
  • 降低模型复杂性:当您降低模型复杂度时,此处同样适用,您的模型无法记住所有训练数据。因此,训练损失增加,测试损失减少。

现在来解决你的问题。为什么这不适用于您的情况?

我坚信你绘制的图表是在训练阶段。在神经网络设置中,模型初始权重是随机设置的,因此它在第一批时产生非常高的训练误差,并使用反向传播更新参数变量。现在谈到第二批模型已经了解了关于第一批培训数据的一些事情,因此第二批的预期误差将会很低。这将在每个后续批次中继续。您生成的图表是在模型培训期间,这是我们在培训中看到的行为。

如果你想测试Andrew Ng的假设,那么将训练数据分成1 / 4,1 / 2,... 1。不同尺寸的套装。训练每个数据集,直到您的训练损失减少。在每个数据集的最终迭代结果中,您可以观察到发热训练样本的模型产生较低的训练误差和较高的测试误差,并且随着数据量的增加,训练误差也在增加,但测试误差正在减少。

答案 1 :(得分:0)

我真的很困惑……我了解到并发现,如吴安德博士的ML课程所述,训练损失/错误会随着训练数据量的增加而增加。

enter image description here

我最近也遇到了同样的异常情况。训练损失和验证损失曲线在减小,而训练数据的大小则在增加。在所有培训完全完成之后,代码正在绘制。实际上,正如Nilesh Birari所建议的那样,我已经训练了10种不同的DNN模型,并增加了数据量。

enter image description here

我怀疑Ng博士的画作假设数据点的数量已经很大。该图未显示小型训练集的训练误差曲线。也许在该领域,对于高容量DNN,随着训练数据大小的增加,训练损失和验证损失都可以一起减少。

也就是说,对于两个实验,使用相同的代码但数据不同的小型经典机器学习模型,我得到了Ng博士的描述行为,我只需要替换该模型即可。 enter image description here