模型选择、欠拟合和过拟合
训练误差和泛化误差
-
训练误差指模型在训练数据集上表现出的误差
-
泛化误差指模型在任意⼀个测试数据样本上表现出的误差的期望,并常常通过测试数据集上的误差来近似。
让我们以⾼考为例来直观地解释训练误差和泛化误差这两个概念。训练误差可以认为是做往年⾼ 考试题(训练题)时的错误率,泛化误差则可以通过真正参加⾼考(测试题)时的答题错误率来 近似。假设训练题和测试题都随机采样于⼀个未知的依照相同考纲的巨⼤试题库。如果让⼀名未 学习中学知识的小学⽣去答题,那么测试题和训练题的答题错误率可能很相近。但如果换成⼀名 反复练习训练题的⾼三备考⽣答题,即使在训练题上做到了错误率为0,也不代表真实的⾼考成 绩会如此。
-
在机器学习⾥,我们通常假设训练数据集(训练题)和测试数据集(测试题)⾥的每⼀个样本都 是从同⼀个概率分布中相互独⽴地⽣成的。基于该独⽴同分布假设,给定任意⼀个机器学习模型 (含参数),它的训练误差的期望和泛化误差都是⼀样的。
-
模型的参数是通过在训练数据集上训练模型而学习出的,参数的选择依据了最小化训练误差(⾼三备考⽣)。 所以,训练误差的期望小于或等于泛化误差。
-
由于⽆法从训练误差估 计泛化误差,⼀味地降低训练误差并不意味着泛化误差⼀定会降低。
模型选择
- 在机器学习中,通常需要评估若⼲候选模型的表现并从中选择模型。这⼀过程称为模型选择 (model selection)。
- 可供选择的候选模型可以是有着不同超参数的同类模型。
验证数据集
- 从严格意义上讲,测试集只能在所有超参数和模型参数选定后使⽤⼀次。不可以使⽤测试数据选 择模型,如调参。
- 由于⽆法从训练误差估计泛化误差,因此也不应只依赖训练数据选择模型。
- 鉴于此,我们可以预留⼀部分在训练数据集和测试数据集以外的数据来进⾏模型选择。这部分数据 被称为验证数据集,简称验证集(validationset)。
K折交叉验证
- 由于验证数据集不参与模型训练,当训练数据不够⽤时,预留⼤量的验证数据显得太奢侈。
- 在K折交叉验证中,我们把原始训练数据集分割成K个不重合的⼦数据集,然后我们做K次模型训练和验证。
每⼀次,我们使⽤⼀个⼦数据集验证模型,并使⽤其他K −1个⼦数据集来训练模型。在这K次训练和验证中,每次⽤来验证模型的⼦数据集都不同。最后,我们对这K次训练误差和验证误差分别求平均。
欠拟合和过拟合
- 模型⽆法得到较低的训练误差,我们将这⼀现象称作欠拟合(underfitting)
- 模型的训练误差远小于它在测试数据集上的误差,我们称该现象为过拟合(overfitting)。
模型复杂度
训练数据集大小
- 如果训练数据集中样本数过少,特别是⽐模型参数数量(按元素计)更少时,过拟合更容易发⽣。
- 此外,泛化误差不会随训练数据集里样本数量增加而增⼤。因此,在计算资源允许的范围之内,我们通常希望训练数据集⼤⼀些,特别是在模型复杂度较⾼时,例如层数较多的深度学习模型。