运行个epochs真的是过拟合的直接原因吗?

Is running more epochs really a direct cause of overfitting?

我在网上看到一些评论 articles/tutorials 或 这表明增加 epoch 的数量会导致过度拟合。但我的直觉告诉我,轮数和过拟合之间应该没有直接关系。 所以我正在寻找可以解释我是对还是错(或介于两者之间的任何东西)的答案。

不过这是我的推理。为了过度拟合,您需要在模型中有足够的自由参数(我认为这在神经网络中称为 "capacity")以生成可以复制样本数据点的函数。如果你没有足够的自由参数,你永远不会过拟合。你可能只是欠拟合。

所以说真的,如果你没有太多的自由参数,你可以 运行 无限次并且永远不会过度拟合。如果你有太多的自由参数,那么是的,你拥有的时代越多,你就越有可能到达过度拟合的地方。但这只是因为 运行 更多的 epochs 揭示了根本原因:自由参数太多。真正的损失函数并不关心你运行多少个epochs。它在您定义模型结构的那一刻就存在,甚至在您尝试对其进行梯度下降之前。

事实上,我敢说:假设你有计算资源和时间,你应该始终以 运行 尽可能多的 epoch 为目标,因为这会告诉你你的模型容易过拟合。您最好的模型将是提供出色训练和验证准确性的模型,无论您 运行 多少轮。

编辑 在阅读更多内容时,我意识到我忘记考虑到您也可以任意改变样本量。给定固定模型,较小的样本量更容易过度拟合。然后那种让我怀疑我上面的直觉。不过还是很高兴得到答案!

如果可训练参数的数量相对于您的训练集的大小而言较小(并且您的训练集相当多样化),那么对同一数据多次 运行 将不会那么重要,因为您将学习有关问题的一些特征,而不仅仅是记住训练数据集。当参数的数量与您的训练数据集大小相当(或更大)时,就会出现问题,这与使用过多特征的任何机器学习技术基本上是相同的问题。如果您使用具有密集连接的大层,这很常见。为了解决这种过度拟合问题,有很多正则化技术(dropout、L1 正则化器、将某些连接限制为 0 或相等,例如在 CNN 中)。

问题是可能仍然有太多可训练的参数。进一步规范化的一种简单方法是采用较小的学习率(即不要从这个特定示例中学到太多,以免您记住它)并结合监控时期(如果 validation/training 之间存在较大差距)准确性,你开始过度拟合你的模型)。然后您可以使用间隙信息来停止训练。这是所谓的提前停止(在损失函数达到最小值之前停止)的一个版本。

我的直觉似乎完全正确。 但这里有一个警告。深度模型的全部目的是它们是 "deep"(duh!!)。因此,随着网络的发展,您的功能 space 会呈指数级增长。

这里有一个比较深度模型和简单模型的例子:

假设您有一个包含 10 个变量的数据集。通过大量的特征工程,你可以从中提取 50 个特征。然后,如果您 运行 一个传统模型(比方说逻辑回归),您将有 50 个参数(用您的话来说是容量,或自由度)来训练。

但是,如果您使用第 1 层:10 个单元、第 2 层:10 个单元、第 3 层:5 个单元、第 4 层:2 个单元的非常简单的深度模型,您最终会得到 (10*10 + 10*10 + 5*2 = 210) 个要训练的参数。

因此,通常当我们长时间训练神经网络时,我们会以记忆版本的数据集结束(如果我们的数据集很小且容易记忆,情况会更糟)。

但是正如您也提到的,没有内在原因可以解释为什么更多的 epoch 会导致过度拟合。 Early stopping 通常是避免这种情况的好方法。只需将耐心设置为 5-10 个时期。