【深度学习】模型选择、欠拟合和过拟合_01

模型选择、欠拟合和过拟合

        我们经常在数据集实验中,经常评价模型在训练数据集和测试数据集上的表现,我们可能会发现当模型在训练数据集上更准确时,它在测试集上却不一定准确,那么就让我们一起来探讨一下吧!

训练误差和泛化误差:

      训练误差是指在训练数据集上表现出的误差。

      泛化误差是指模型在任意一个测试数据样本上表现出的误差的期望,并常常通过测试数据集上的误差来近似。

      计算训练误差和泛化误差可以使用损失函数,例如线性回归用到的平方损失函数和softmax回归用到的交叉熵损失函数。

      模型的参数是通过在训练数据集上训练模型而学习出的,参数的选择依据了最小化训练误差,所以,训练误差的期望小于或等于泛化误差。也就是说,一般情况下,由训练数据集学到的模型参数会使模型在训练数据集上的表现优于或等于在测试数据集上的表现。

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

模型选择:

      在机器学习中,通常需要评估若干候选模型的表现并从中选择模型。这一过程称为模型选择(model selection)。

      可供选择的候选模型可以是有着不同超参数的同类模型。以多层感知机为例,我们可以选择隐藏层的个数,以及每个隐藏层中隐藏单元个数和激活函数。为了得到有效的模型,我们通常要在模型选择上下一番功夫。

      下面,我们来描述模型选择中经常使用的验证数据集(validation data set)。

验证数据集:

      从严格意义上讲,测试集只能在所有超参数和模型参数选定后使用一次。不可以使用测试数据选择模型,如调参。

      鉴于此,可以预留一部分在训练数据集和测试数据集以外的数据来进行模型选择。这部分数据被称为验证数据集,简称验证集(validation set)。

𝑘折交叉验证:

        由于验证数据集不参与模型训练,当训练数据不够用时,预留大量的验证数据显得太奢侈。一种改善的方法是𝑘折交叉验证(𝑘-fold cross-validation)。

        在𝑘折交叉验证中,把原始训练数据集分割成𝑘个不重合的子数据集,然后做𝑘次模型训练和验证。每一次,使用一个子数据集验证模型,并使用其他𝑘−1个子数据集来训练模型。在这𝑘次训练和验证中,每次用来验证模型的子数据集都不同。最后,对这𝑘次训练误差和验证误差分别求平均。

欠拟合和过拟合

       模型训练中经常出现的两类典型问题:一类是模型无法得到较低的训练误差,将这一现象称作欠拟合(underfitting);另一类是模型的训练误差远小于它在测试数据集上的误差,称该现象为过拟合(overfitting)。

      有很多因素可能导致这两种拟合问题,接下来讨论一下这两个因素:模型复杂度和训练数据集大小。

模型复杂度:

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

        给定训练数据集,模型复杂度和误差之间的关系通常如下图所示。

                                                               

       给定训练数据集,如果模型的复杂度过低,很容易出现欠拟合;如果模型复杂度过高,很容易出现过拟合。应对欠拟合和过拟合的一个办法是针对数据集选择合适复杂度的模型。

训练数据集大小:

       影响欠拟合和过拟合的另一个重要因素是训练数据集的大小。

       一般来说,如果训练数据集中样本数过少,特别是比模型参数数量(按元素计)更少时,过拟合更容易发生。

       此外,泛化误差不会随训练数据集里样本数量增加而增大。

       因此,在计算资源允许的范围之内,通常希望训练数据集大一些,特别是在模型复杂度较高时,如层数较多的深度学习模型。