卷积神经网络需要多少数据?

机器算法验证 机器学习 神经网络 深度学习 卷积神经网络
2022-01-25 11:47:52

如果我有一个卷积神经网络 (CNN),它有大约 1,000,000 个参数,需要多少训练数据(假设我正在做随机梯度下降)?有什么经验法则吗?

附加说明:当我执行随机梯度下降时(例如,64 个补丁进行 1 次迭代),在 ~10000 次迭代后,分类器的准确度可以达到一个粗略的稳定值)。这是否意味着不需要太多数据?像 100k-1000k 数据。

4个回答

为了确定更多数据是否有帮助,您应该将算法在训练数据(即用于训练神经网络的数据)上的性能与其在测试数据(即神经网络所做的数据)上的性能进行比较不是在训练中“看到”)。

要检查的一件好事是每个集合的误差(或准确性)作为迭代次数的函数。这个结果有两种可能:

1) 训练误差收敛到一个明显低于测试误差的值。如果是这种情况,您的算法的性能几乎肯定会随着数据的增加而提高。

2)训练误差和测试误差收敛到大约相同的值(训练误差仍然可能略低于测试误差)。在这种情况下,额外的数据本身不会帮助您的算法。如果您需要比现在更好的性能,您应该尝试向隐藏层添加更多神经元,或者添加更多隐藏层。如果添加了足够多的隐藏单元,你会发现你的测试误差会明显高于训练误差,此时更多的数据会有所帮助。

对于如何做出这些决定的更全面和有用的介绍,我强烈推荐 Andrew Ng 的Coursera 课程,尤其是“评估学习算法”和“偏差与方差”课程。

天真的答案是总是需要更多的数据。迭代相同的数据集说更多的时期可以帮助您“优化”结果,但您不会像拥有更多数据那样改善结果。

例如,我正在训练一个 convnet 来进行句子建模并测试我是否需要更多数据,我尝试将我的训练数据集拆分为较小的子集并尝试对其进行测试。

使用整个数据集并训练 10 次迭代,我在基准测试中获得了 93% 的准确率,并且它不断改进。相反,当我对 10% 的数据集进行 100 次迭代时,我得到了 85%。

所以总是尝试拥有更多的数据,但如果你不能,做更多的 epoch 可能是一个很好的权衡,但如果你总是向网络提供新数据,你的模型最终会更好地收敛。

我想最重要的是你的数据中的样本分布得很好,因为不管你有多少数据,更多的数据总是更好。毕竟,如果你试图学会区分猫和狗的图片,如果你只喂它猫的图片,你不能指望你的模型表现得很好。

正如Kevin L 的回答所建议的那样,考虑训练误差和测试误差之间的差异是有意义的。如果您的测试数据独立于您的训练数据,这表明您的模型对不可用数据的泛化程度如何。我想补充一点的是,训练和测试误差之间的巨大差异只会告诉你你的模型没有很好地泛化,即你对训练数据过度拟合。更多的数据可能会有所帮助,因为现在网络还需要对额外的数据点进行建模,因此不能再过度拟合。但是,更改模型以使其具有更好的泛化性可能更值得。这一章出自一本好书解释了存在哪些类型的正则化以及如何将它们应用于网络以获得更好的泛化。

如果您正在寻找更量化的衡量标准,我最近在 quora 上发现了这个问题. 它是关于自动编码器的,但我想它也应该适用于您的示例。我不知道这是否正确(请告诉我),但我会推断,例如对于 MNIST,有人可能会争辩说您尝试减少最大为 28 * 28 * 8 * 10 000 = 62 720 000 的图像10 * 10 * 10 000 = 1 000 000 位熵的 one-hot 编码中的 10 个类别的位熵。因为我们只对输出的 1 000 000 位熵感兴趣,所以我们可以说,对于 1 000 000 个参数,每个参数代表一个位,即每个样本 1e-4 位。这意味着您将需要更多数据。或者您有太多参数,因为例如有 100 个参数,每个参数有 10 000 位,因此每个样本有 1 位。然而,

另一种通常用于确定您的网络是否已学习到足够特征的方法是可视化初始过滤器。如果网络训练有素,它应该显示一个平滑的过滤器。嘈杂的过滤器通常表明网络没有得到足够的训练或者它已经过拟合。欲了解更多信息,请阅读此页面