我正在使用 Keras 通过 model.train_on_batch(x_batch, y_batch) 开发在线学习应用程序。我尝试逐步添加训练数据,并绘制出测试和训练的损失。结果如下,
很高兴看到测试损失正在减少,但正如我在 Andrew Ng 的 ML 类(class)中了解到的那样,如果我有一个像 DNN 这样强大的模型,随着我逐渐添加更多训练数据,训练损失应该会增加,并且测试损失应该会减少。所以,我真的很困惑。下面是他的幻灯片的屏幕截图。
最佳答案
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。不同尺寸的套装。训练每个数据集,直到训练损失减少。在每个数据集的最终迭代结果中,您可以观察到带有发烧训练样本的模型会产生较低的训练误差和较高的测试误差,并且随着数据大小的增加,训练误差会增加,但测试误差会减少。
关于machine-learning - 为什么随着我逐渐添加更多训练数据,训练和测试损失都会减少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43123059/