机器学习 – 为什么培训和测试损失都会随着我逐渐增加培训数据而减少?

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

My result

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

Andrew’s slide

最佳答案

as I learned in Andrew Ng’s ML class, if I have a powerful model like a DNN, the training loss is supposed to increase as I add more training data incrementally, and the testing loss is supposed to decrease.

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

卵形过度固定的解决方案是:

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

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

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

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

点赞