zoukankan      html  css  js  c++  java
  • 动手学深度学习_模型选择、欠拟合和过拟合——2020.2.26

    一、训练误差和泛化误差

          对于一个模型,并不是在本训练集下的准确率越高越好,很可能会因为过拟合,导致在本模型的训练集测试效果好,但在其他数据集的效果差。由此,有两个误差概念:

    • 训练误差:
           指该模型在训练数据集上表现的误差。
    • 泛化误差:
           指该模型放到任一个数据集下表现的误差,取近似误差。泛化误差更具参考性。

    二、模型选择

         为了得到有效的模型,我们通常在选择隐藏层的个数、每个隐藏层中隐藏单元个数和激活函数等方面进行考虑。下面,描述模型选择中常用的验证数据集。

    ( 一 )验证数据集

         验证集是指除开训练集和测试数据集外预留的一部分数据。可以用来进行模型评估、选择。
         在实际过程中,因为数据难获取,也会将测试集使用为验证集。

    ( 二 )K折交叉验证

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

    ( 三 )欠拟合和过拟合

         模型训练中有两个经典问题:

    • 模型⽆法得到较低的训练误差,我们
      将这⼀现象称作⽋拟合(underfitting);
    • 模型的训练误差远⼩于它在测试数据集上的误差,我们称该现象为过拟合(overfitting)。

         在实践中,我们要尽可能同时应对⽋拟合和过拟合。有很多因素可能导致这两种拟合问题,下面将讨论两个因素:模型复杂度和训练数据集⼤⼩。

    1. 模型复杂度

         我们以多项式函数拟合为例。给定⼀个由标量数据特征 (x) 和对应的标量标签 (y) 组成的训练数据集,多项式函数拟合的⽬标是找⼀个 (K) 阶多项式函数来近似 (y) ,如下:

    [hat y = b + sum_{k=1}^{K}x^kw_k ]

         在上式中,(w_k) 是模型的权重参数, (b) 是偏差参数。与线性回归相同,多项式函数拟合也使⽤平⽅损失函数。特别地,⼀阶多项式函数拟合⼜叫线性函数拟合。
         因为⾼阶多项式函数模型参数更多,模型函数的选择空间更⼤,所以⾼阶多项式函数⽐低阶多项式函数的复杂度更⾼。因此,⾼阶多项式函数⽐低阶多项式函数更容易在相同的训练数据集上得到更低的训练误差。
         模型复杂度和误差之间的关系通常如下图3.4所示:

    2.训练数据集太小

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

  • 相关阅读:
    FCOS及其和Faster R-CNN的区别
    CornerNet: Detecting Objects as Paired Keypoints
    神经网络不收敛的原因
    交叉熵损失函数
    Placeholder_2:0 is both fed and fetched
    使用Lambda解决_inbound_nodes错误
    Python对Dict排序
    对Faster R-CNN的理解(3)
    Keras运行速度越来越慢的问题
    深度卷积网络(DCNN)和人类识别物体方法的不同
  • 原文地址:https://www.cnblogs.com/somedayLi/p/12369644.html
Copyright © 2011-2022 走看看