3.11 模型选择、⽋拟合和过拟合

如果你改变过实验中的模型结构或者超参数,你也许发现了:当模型在训练数据集上更准确时,它在测试数据集上却不⼀定更准确。这是为什么呢?

3.11.1 训练误差和泛化误差
在解释上述现象之前,我们需要区分训练误差(training error)和泛化误差(generalization error)。
通俗来讲,前者指模型在训练数据集上表现出的误差,后者指模型在任意⼀个测试数据样本上表现出的误差的期望,并常常通过测试数据集上的误差来近似。计算训练误差和泛化误差可以使⽤之前介绍过的损失函数,例如线性回归⽤到的平⽅损失函数和softmax回归⽤到的交叉熵损失函数。

让我们以⾼考为例来直观地解释训练误差和泛化误差这两个概念。训练误差可以认为是做往年⾼考试题(训练题)时的错误率,泛化误差则可以通过真正参加⾼考(测试题)时的答题错误率来近似。假设训练题和测试题都随机采样于⼀个未知的依照相同考纲的巨⼤试题库。如果让⼀名未学习中学知识的小学⽣去答题,那么测试题和训练题的答题错误率可能很相近。但如果换成⼀名反复练习训练题的⾼三备考⽣答题,即使在训练题上做到了错误率为0,也不代表真实的⾼考成绩会如此。

在机器学习⾥,我们通常假设训练数据集(训练题)和测试数据集(测试题)⾥的每⼀个样本都是从同⼀个概率分布中相互独⽴地⽣成的。基于该独⽴同分布假设,给定任意⼀个机器学习模型(含参数),它的训练误差的期望和泛化误差都是⼀样的。例如,如果我们将模型参数设成随机值(小学⽣),那么训练误差和泛化误差会⾮常相近。但我们从前⾯⼏节中已经了解到,模型的参数
是通过在训练数据集上训练模型而学习出的,参数的选择依据了最小化训练误差(⾼三备考⽣)。所以,训练误差的期望小于或等于泛化误差。也就是说,⼀般情况下,由训练数据集学到的模型参数会使模型在训练数据集上的表现优于或等于在测试数据集上的表现。由于⽆法从训练误差估计泛化误差,⼀味地降低训练误差并不意味着泛化误差⼀定会降低。


机器学习模型应关注降低泛化误差。

3.11.2 模型选择
在机器学习中,通常需要评估若⼲候选模型的表现并从中选择模型。这⼀过程称为模型选择(model selection)。可供选择的候选模型可以是有着不同超参数的同类模型。以多层感知机为例,我们可以选择隐藏层的个数,以及每个隐藏层中隐藏单元个数和激活函数。为了得到有效的模型,我们通常要在模型选择上下⼀番功夫。下⾯,我们来描述模型选择中经常使⽤的验证数据集(validation data set)。

验证数据集

从严格意义上讲,测试集只能在所有超参数和模型参数选定后使⽤⼀次。不可以使⽤测试数据选择模型,如调参。由于⽆法从训练误差估计泛化误差,因此也不应只依赖训练数据选择模型。鉴于此,我们可以预留⼀部分在训练数据集和测试数据集以外的数据来进⾏模型选择。这部分数据被称为验证数据集,简称验证集(validation set)。例如,我们可以从给定的训练集中随机选取⼀小部分作为验证集,而将剩余部分作为真正的训练集。


然而在实际应⽤中,由于数据不容易获取,测试数据极少只使⽤⼀次就丢弃。因此,实践中验证数据集和测试数据集的界限可能⽐较模糊。从严格意义上讲,除⾮明确说明,否则本书中实验所使⽤的测试集应为验证集,实验报告的测试结果(如测试准确率)应为验证结果(如验证准确率)

k 折交叉验证
由于验证数据集不参与模型训练,当训练数据不够⽤时,预留⼤量的验证数据显得太奢侈。⼀种改善的⽅法是k折交叉验证(k-fold cross-validation)。在k折交叉验证中,我们把原始训练数据集分割成k个不重合的⼦数据集,然后我们做k次模型训练和验证。每⼀次,我们使⽤⼀个⼦数据集验证模型,并使⽤其他k -1个⼦数据集来训练模型。在这k次训练和验证中,每次⽤来验证模型的⼦数据集都不同。最后,我们对这k次训练误差和验证误差分别求平均。

3.11.3 ⽋拟合和过拟合

探究模型训练中经常出现的两类典型问题:⼀类是模型⽆法得到较低的训练误差,将这⼀现象称作⽋拟合(underfitting);另⼀类是模型的训练误差远小于它在测试数据集上的误差,称该现象为过拟合(overfitting)。在实践中,我们要尽可能同时应对⽋拟合和过拟合。虽然有很多因素可能导致这两种拟合问题,在这⾥重点讨论两个因素:模型复杂度和训练数据集⼤小。

模型复杂度

为了解释模型复杂度,我们以多项式函数拟合为例。给定⼀个由标量数据特征x和对应的标量标签y组成的训练数据集,多项式函数拟合的⽬标是找⼀个K阶多项式函数

来近似y。在上式中,wk是模型的权重参数,b是偏差参数。与线性回归相同,多项式函数拟合也使⽤平⽅损失函数。特别地,⼀阶多项式函数拟合⼜叫线性函数拟合。

因为⾼阶多项式函数模型参数更多,模型函数的选择空间更⼤,所以⾼阶多项式函数⽐低阶多项式函数的复杂度更⾼。因此,⾼阶多项式函数⽐低阶多项式函数更容易在相同的训练数据集上得到更低的训练误差

给定训练数据集,模型复杂度和误差之间的关系通常如图3.4所⽰。给定训练数据集,如果模型的复杂度过低,很容易出现⽋拟合;如果模型复杂度过⾼,很容易出现过拟合。应对⽋拟合和过拟合的⼀个办法是针对数据集选择合适复杂度的模型。

 

训练数据集⼤⼩

影响⽋拟合和过拟合的另⼀个重要因素是训练数据集的⼤小。⼀般来说,如果训练数据集中样本数过少,特别是⽐模型参数数量(按元素计)更少时,过拟合更容易发⽣。此外,泛化误差不会随训练数据集⾥样本数量增加而增⼤。因此,在计算资源允许的范围之内,我们通常希望训练数据集⼤⼀些,特别是在模型复杂度较⾼时,如层数较多的深度学习模型。

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值