我正在阅读一本关于Python深度学习的书。在读完第4章“对抗过拟合”之后,我有两个问题。
-
为什么增加训练轮次可能会导致过拟合?我知道增加训练轮次会涉及更多的梯度下降尝试,这会导致过拟合吗?
-
在对抗过拟合的过程中,准确率会降低吗?
回答:
我不确定你在读哪本书,所以在具体回答你的问题之前,先提供一些背景信息可能会有帮助。
首先,增加训练轮次不一定会导致过拟合,但确实可能发生。如果学习率和模型参数较小,可能需要很多轮次才能引起可测量的过拟合。尽管如此,通常更多的训练确实会导致过拟合。
为了保持问题的视角,重要的是要记住,我们最常使用神经网络来构建用于预测的模型(例如,预测图像是否包含特定对象或变量在下一个时间步的值会是什么)。
我们通过迭代调整权重和偏置来构建模型,使网络能够作为一个函数,在输入数据和预测输出之间进行转换。我们转向这些模型的原因有很多,通常是因为我们不知道函数是什么/应该是什么,或者函数过于复杂,无法通过分析方法开发。为了使网络能够模拟如此复杂的函数,它本身必须能够具有高度的复杂性。虽然这种复杂性很强大,但也存在危险!模型可能会变得如此复杂,以至于它可以非常精确地记住训练数据,但随后无法作为一个有效的、通用的函数,适用于训练集之外的数据。即,它可能会过拟合。
你可以把它想象成这样:一个人(模型)通过反复烘焙水果蛋糕(训练数据)来学习烘焙——很快他们就能在没有食谱(训练)的情况下烘焙出极好的水果蛋糕,但他们可能无法很好地烘焙海绵蛋糕(未见数据)。
回到神经网络!由于神经网络过拟合的风险很高,深度学习工程师可以使用许多工具和技巧来防止过拟合,例如使用dropout。这些工具和技巧统称为“正则化”。
这就是为什么我们使用涉及测试数据集的开发和训练策略——我们假装测试数据是未见的,并在训练过程中监控它。你可以在下面的图表中看到一个例子(图片来源)。在大约50个轮次之后,测试误差开始增加,因为模型已经开始“记忆训练集”,尽管训练误差保持在其最小值(通常训练误差会继续改善)。
所以,回答你的问题:
-
允许模型继续训练(即更多的轮次)增加了权重和偏置被调整到如此程度的风险,以至于模型在未见(或测试/验证)数据上的表现很差。现在模型只是在“记忆训练集”。
-
继续增加轮次很可能会提高训练准确率,但这并不一定意味着模型对新数据的预测会准确——通常情况反而会变得更糟。为了防止这种情况,我们使用测试数据集并在训练过程中监控测试准确率。这使我们能够更明智地决定模型是否对未见数据变得更准确。
我们可以使用一种称为提前停止的技术,即一旦测试准确率在少数几个轮次后停止改善,就停止训练模型。提前停止可以被认为是另一种正则化技术。