过拟合解释
了解什么是过拟合,过拟合产生的主要原因,以及它与欠拟合的区别。
本章简介
过拟合问题在整个课程中一直带来困扰。在本章中,我们将最终解决网络中的过拟合问题。
回顾一下,一个出现过拟合的系统就像一个死记硬背的学生:他们可能擅长解决教科书中的熟悉问题,但在面对新问题时就会束手无策。同样地,一个过拟合的系统可能在分类训练数据时表现良好,但在处理未曾见过的新数据时却会失败。
应对过拟合的一种策略是将数据划分为训练集、验证集和测试集。我们应使用训练集来训练模型,用验证集调整性能,并用测试集进行最终评估。这样,我们可以在之前未见过的数据上测试系统,从而获得可靠且不受过拟合影响的评估结果。
这种测试策略有效,但只是短期手段。它并不能消除过拟合,而仅仅是防止过拟合污染我们的评估指标。遗憾的是,过拟合带来的后果远不止评估不准。就像前面提到的学生一样,过拟合系统擅长记忆却不善于泛化。当我们构建深度网络时就会遇到这类问题:该网络在训练集上达到完美准确率,但在验证集上的表现却不如浅层网络。
接下来,我们将深入探究过拟合的原因及其更深层次的影响。随后,我们会应用一些正则化技术来解决过拟合问题。借助这些方法,我们才能真正发挥出深度神经网络的强大能力。
在讨论如何减少过拟合之前,让我们先深入了解过拟合的概念。在本课中,我们将剖析过拟合产生的原因:一个发生过拟合的神经网络内部究竟发生了什么?为了全面理解过拟合,我们也需要了解其相反过程——欠拟合。本课也将一并讨论欠拟合现象。首先,我们从分析过拟合的原因开始。
过拟合的原因
到目前为止,我们一直用“学生死记硬背课本”这样的模糊比喻来解释过拟合。现在是时候结合监督学习,真正理解过拟合是如何发生的了。
假设我们要根据大量历史样本预测某个热狗摊的顾客数量。通常情况下,我们会将样本划分为训练集、验证集和测试集。例如,下图展示了1月前三周的训练数据片段,横轴表示日期,纵轴表示每小时平均顾客数:
现在考虑用这些数据训练一个神经网络会发生什么。我们知道,监督学习从一开始就试图用一个模型函数去逼近训练数据,如下图所示:
一旦网络找到这个模型,就可以用来预测未来的顾客数量。但这里有个问题:如果神经网络足够强大,它可能会找到一个与数据高度吻合的模型,如下图所示:
这个模型真的有效吗?它看起来过于精确了。它追踪了数据中的每一个微小波动,包括那些可能是**无关的随机变化(即统计噪声)**的部分。例如,数据显示1月的第二个星期一顾客略有增加。但我们并不期望每年这一天热狗摊都会迎来额外顾客。更可能的是,这次增长是由某些无关或未知因素导致的——比如那天天气特别好,街上更多人出来买热狗。
我们刚刚发现了过拟合的根本原因:字面意思就是“拟合得太好”。一个强大的神经网络可能过于热衷于拟合数据,以至于最终把其中的噪声也一并拟合了(比如“一年中第二个星期一人数上升”),而忽略了真正有意义的模式(比如“顾客数量通常从周日到周六逐渐增长”)。
两个模型损失值的比较
让我们来衡量两个模型的损失——非过拟合模型和过拟合模型。由于过拟合模型对训练数据的拟合更紧密,因此它的训练损失更低。然而,这种低损失是专门为训练数据定制的。当我们将这两个模型应用于验证数据时,情况就变了。下面是非过拟合模型的表现:
……而这是过拟合模型的表现:
显然,过拟合模型对验证数据的拟合效果比非过拟合模型更差。这正是过拟合最典型的表现:在训练数据上给出过于乐观的结果;最坏的情况下,严重损害模型在非训练数据上的性能。
需要注意的是,神经网络训练时间越长,过拟合模型对训练数据的拟合就越紧密,而对验证数据的拟合反而越差。结果可能导致一种反常现象:训练越多,模型反而越不准确。
高维数据的情况
我们刚才的例子基于一维数据和数值标签,但同样的现象也会出现在高维数据或带有类别标签的数据中。所有监督学习系统都在尝试用模型去拟合数据,因此都有可能记住噪声。例如,一个识别狗的图像识别系统,可能会关注训练数据中的无关细节(“看,有个黄色枕头!”),而忽略关键共性(“狗都有毛发”)。随着它越来越擅长捕捉训练图像中的噪声,它在新数据上的泛化能力就会越来越差。
我们现在知道,强大的神经网络更容易对其训练数据产生过拟合。这也是为什么我们直到本课程第三部分才详细讨论过拟合的原因。第二部分中的简单三层网络几乎无法对图像等复杂数据集产生明显过拟合。而我们现在构建的深层网络,即使面对复杂数据也容易发生过拟合。一旦进入深度学习领域,过拟合就从一个小麻烦升级为一个主要难题。
总结来说,过拟合会导致三个相关的问题:
- 它会误导我们的评估指标,因为在训练集上得到的高准确率并不能代表模型在新数据上的真实表现;
- 它会直接降低模型在新数据上的准确率;
- 经过一定轮次的训练后,继续训练反而适得其反:训练越多,模型表现越差。
过拟合与欠拟合
我们刚刚了解到,强大的模型更容易出现过拟合。那么,如果模型本身非常弱呢?举个例子,如果我们把热狗摊的数据输入一个线性回归程序,模型函数可能如下图所示:
这个模型对于当前数据来说过于简单,因此无法做出准确预测。我们称这种系统处于欠拟合状态。正如“过拟合”意味着“拟合得太好”,“欠拟合”则意味着“拟合得不够好”。
在大多数实际场景中,数据和模型都是多维的,无法像上面那样直观绘图展示。但我们仍可以通过观察损失和准确率等指标判断系统是否出现过拟合或欠拟合:过拟合系统的训练集准确率高,但测试集准确率低;而欠拟合系统在两者上都表现不佳。
总而言之,强大的监督学习系统容易过拟合,而简单的系统容易欠拟合。人们有时将这一权衡称为偏差-方差权衡,其中“偏差”和“方差”分别是“欠拟合”和“过拟合”的另一种说法。
需要指出的是,过拟合和欠拟合并非互斥,我们可能会遇到同时存在两种问题的神经网络。例如,某个系统既表现为欠拟合(因为训练集准确率低),又表现为过拟合(因为验证集准确率更低)。
在本课中,我们了解到监督学习的主要挑战之一就是在避免过度过拟合和过度欠拟合之间取得平衡。构建监督学习系统时,我们必须在这两种令人困扰的现象之间找到中间地带。
机器学习从业者经常使用“过拟合”和“欠拟合”这两个术语,而统计学家则有自己的一套表达方式。他们不说“模型对数据过拟合”,而是说系统具有高方差;不说“模型对数据欠拟合”,而是说它具有高偏差。
本课程中我们不会使用“方差”和“偏差”这些术语,但在其他地方可能会遇到。请记住:高方差对应过拟合,高偏差对应欠拟合。