大多数机器学习算法都有超参数,可以设置来控制算法的行为。超参数的值不是通过学习算法本身学习出来的(尽管我们可以设计一个嵌套的学习过程,一个学习算法为另一个学习算法学出最优超参数)。
有时一个选项被设为学习算法的超参数,是因为它太难优化了。更多的情况是,该选项必须是超参数,因为它不适合在训练集上学系。这适用于控制模型容量的所有超参数,如果在训练接上学习超参数,这些超参数总是趋向于最大可能的模型容量,导致过拟合。例如,相比低次多项式和正的权重衰减设定,更高次的多项式和权重衰减参数设定总能在训练集上更好地拟合。
为了解决这个问题,我们需要一个训练算法观测不到的验证集样本。早先我们讨论过和训练数据相同分布的样本组成的测试集,它可以用来估计学习过程完成之后的学习器的泛化误差。其重点在于测试样本不能以任何形式参与到模型选择中,包括设定超参数。基于这个原因,测试集中的样本不能用于验证集。因此,我们总是从训练数据中构建验证集。特别地,我们将训练数据分成两个不相交的子集。其中一个用于学习参数。另一个作为验证集,用于估计训练中或训练后的泛化误差,更新超参数。用于学习参数的数据参数的数据子集被称为验证集。通常,80%的训练数据用于训练,20%用于验证。由于验证集是用来“训练”超参数的,尽管验证集的误差通常会比训练集误差小,验证集会低估泛化误差。所有超参数优化完成后,泛化误差可能会通过测试集来估计。
在实际中,当相同的测试集已在很多年中重复地用于评估不同算法的性能,并且考虑学术界在该测试集上的各种尝试,我们最后可能会对测试集有乐观的估计。基准会因之变得陈旧,而不能反映系统的真实性能。值得庆幸的是,学术界往往会移到新的基准数据集上。