深度学习初学者指南
上QQ阅读APP看书,第一时间看更新

4.3 识别过拟合和泛化

当我们处于受控的机器学习环境中时,通常会得到一个用于训练的数据集和另外一个用于测试的不同的数据集。其理念在于,你只在训练数据上运行学习算法,但是当需要检查模型的预测效果时,可以向模型输入测试数据并观察输出结果。对于编程竞赛之类的活动,典型的做法是给出测试数据但保留与之相关的标签信息,因为需要基于对模型的测试数据来选择获胜者,而且你不想让这些模型通过作弊查看标签的方式调整测试数据。如果是这样的话,我们可以使用验证数据集,可以通过取出一部分训练数据来创建。

拥有独立的验证数据集或测试数据集的全部意义在于,在已知模型没有使用这些样本数据进行训练的情况下,使用它们测试模型的预测性能。对于模型不可见的验证数据或测试数据,如果该模型与训练样本数据具有同样的或者基本上同样的良好预测能力,则称该模型具有良好的泛化性能。

良好的泛化性能是大多数学习算法的最终目标,我们所有深度学习的专业人士和实践者都梦想所有的模型都具有伟大的泛化性能。同样,我们最大的噩梦是过拟合。

过拟合是泛化的对立面。当模型在训练数据上表现得非常好,但当遇到验证数据或测试数据时,性能会显著下降。这表明我们的模型几乎记住了训练数据的复杂之处,而忽略了样本空间的总体概括性质,这种概括性质正是建立良好模型的基础。

本章及以后的章节将遵循下列数据分割规则:

·如果我们得到测试数据(带有标签),将在训练集上进行训练,并根据测试集给出模型的性能

·如果我们没有得到测试数据(或者有无标签的测试数据),将分割训练集,创建一个验证集,然后使用交叉验证策略给出模型的性能

下面分别讨论这两种情形。