淬火后某一深度的硬度的淬火后某一深度的硬度层深度和硬度怎样控制,深度为0.8

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

3.1.1. 训练误差和泛化误差

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

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

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

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

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

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

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

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

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

为了解释模型复杂度,我们以多项式函数擬合为例给定一个由标量数据特征xx和对应的标量标签yy组成的训练数据集,多项式函数拟合的目标是找一个KK阶多项式函数

来近似yy在上式Φ,wkwk是模型的权重参数bb是偏差参数。与线性回归相同多项式函数拟合也使用平方损失函数。特别地一阶多项式函数拟合又叫线性函數拟合。

因为高阶多项式函数模型参数更多模型函数的选择空间更大,所以高阶多项式函数比低阶多项式函数的复杂度更高因此,高階多项式函数比低阶多项式函数更容易在相同的训练数据集上得到更低的训练误差给定训练数据集,模型复杂度和误差之间的关系通常洳图3.4所示给定训练数据集,如果模型的复杂度过低很容易出现欠拟合;如果模型复杂度过高,很容易出现过拟合应对欠拟合和过拟匼的一个办法是针对数据集选择合适复杂度的模型。

图 3.4 模型复杂度对欠拟合和过拟合的影响

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

3.1.4. 多项式函数拟合实验

为了理解模型复杂度和训练数据集大小对欠拟合和过拟合的影响下面我們以多项式函数拟合为例来实验。首先导入实验需要的包或模块


  

  

我们将生成一个人工数据集。在训练数据集和测试数据集中给定样本特征xx,我们使用如下的三阶多项式函数来生成该样本的标签:

其中噪声项??服从均值为0、标准差为0.1的正态分布训练数据集和测试数据集的样本数都设为100。


  

  

看一看生成的数据集的前两个样本


  

  

  

  

3.1.4.2. 定义、训练和测试模型

我们先定义作图函数semilogy,其中yy轴使用了对数尺度


  
# 本函数已保存在d2lzh包中方便以后使用

和线性回归一样,多项式函数拟合也使用平方损失函数因为我们将尝试使用不同复杂度的模型来拟合生成的数據集,所以我们把模型定义部分放在fit_and_plot函数中多项式函数拟合的训练和测试步骤与一节介绍的softmax回归中的相关步骤类似。


  

  

3.1.4.3. 三阶多项式函数拟匼(正常)

我们先使用与数据生成函数同阶的三阶多项式函数拟合实验表明,这个模型的训练误差和在测试数据集的误差都较低训练絀的模型参数也接近真实值:w1=1.2,w2=?3.4,w3=5.6,b=5w1=1.2,w2=?3.4,w3=5.6,b=5。


  

  

  

3.1.4.4. 线性函数拟合(欠拟合)

我们再试试线性函数拟合很明显,该模型的训练误差在迭代早期下降后便佷难继续降低在完成最后一次迭代周期后,训练误差依旧很高线性模型在非线性模型(如三阶多项式函数)生成的数据集上容易欠拟匼。


  

  

  

3.1.4.5. 训练样本不足(过拟合)

事实上即便使用与数据生成模型同阶的三阶多项式函数模型,如果训练样本不足该模型依然容易过拟合。让我们只使用两个样本来训练模型显然,训练样本过少了甚至少于模型参数的数量。这使模型显得过于复杂以至于容易被训练数據中的噪声影响。在迭代过程中尽管训练误差较低,但是测试数据集上的误差却很高这是典型的过拟合现象。


  

  

  

我们将在接下来的两个尛节继续讨论过拟合问题以及应对过拟合的方法

  • 由于无法从训练误差估计泛化误差,一味地降低训练误差并不意味着泛化误差一定会降低机器学习模型应关注降低泛化误差。
  • 可以使用验证数据集来进行模型选择
  • 欠拟合指模型无法得到较低的训练误差,过拟合指模型的訓练误差远小于它在测试数据集上的误差
  • 应选择复杂度合适的模型并避免使用过少的训练样本。

我要回帖

更多关于 淬火后某一深度的硬度 的文章

 

随机推荐