Answers:
为了确定更多数据是否有帮助,您应该将算法在训练数据(即用于训练神经网络的数据)上的性能与其在测试数据(即神经网络所做的数据)上的性能进行比较。不是在训练中“看到”)。
要检查的一件好事是每个集合的误差(或准确性)与迭代次数的函数关系。结果有两种可能性:
1)训练误差收敛到明显低于测试误差的值。如果真是这样,那么随着数据的增加,算法的性能几乎肯定会提高。
2)训练误差和测试误差收敛到大约相同的值(训练误差可能仍略低于测试误差)。在这种情况下,其他数据本身将无法帮助您的算法。如果您需要比此时更好的性能,则应尝试将更多的神经元添加到隐藏层,或添加更多隐藏层。如果添加了足够多的隐藏单元,您会发现测试错误将明显高于训练错误,此时更多的数据将有所帮助。
有关如何做出这些决定的更全面和有用的介绍,我强烈推荐Andrew Ng的Coursera课程,尤其是“评估学习算法”和“ Bias vs. Variance”课程。
天真的答案是总是需要更多的数据。对相同的数据集进行迭代以获取更多的历元可以帮助您“优化”结果,但改善结果的程度却不如拥有更多数据。
例如,我正在训练一个卷积网络来进行句子建模并测试是否需要更多数据,我试图将训练数据集分成较小的子集并尝试对其进行测试。
使用整个数据集并进行了10次迭代训练后,我的基准测试获得了93%的准确度,并且还在不断提高。相反,当我对数据集的10%进行100次迭代时,我得到了85%。
因此,请始终尝试拥有更多数据,但如果不能这样做,则可以多做一些事情,但是最终,如果始终向网络提供新数据,则模型的收敛性会更好。
我猜最重要的是,数据中的样本分布良好,因为无论您拥有多少数据,更多数据总会更好。毕竟,如果您试图学习区分猫和狗的图片,那么仅提供猫的图片就不能期望模型表现良好。
正如Kevin L的答案所建议的,考虑训练误差和测试误差之间的差异是有意义的。如果您的测试数据独立于训练数据,则表明您的模型对不可用数据的概括程度如何。我要补充的一点是,训练和测试错误之间的巨大差异仅表明您的模型不能很好地泛化,即您过度拟合了训练数据。更多数据可能会有所帮助,因为现在网络还需要对额外的数据点进行建模,因此不能再过度拟合了。但是,更改模型以使其泛化效果更好可能更值得。本章摘自一本好书 解释了存在哪些类型的正则化以及如何将其应用到网络中以获得更好的概括。
如果您正在寻找一种更定量的方法,我最近在quora上发现了这个问题。它是关于自动编码器的,但是我想它也应该适用于您的示例。我不知道这是否正确(请让我知道),但是我会认为,例如对于MNIST,您可能会争辩说您尝试缩小最大为28 * 28 * 8 * 10,000 = 62 720 000的图像在10 * 10 * 10000 = 1000000熵的一热编码中,将10位的熵熵分类为十个类别。因为我们只对输出的1000万比特的熵感兴趣,所以可以说对于1 000 000个参数,每个参数代表一个比特,每个样本1e-4位。这意味着您将需要更多数据。或者您有太多的参数,因为例如有100个参数,则每个参数有10000位,因此每个样本有1位。然而,