机器学习知识总结 —— 6. 什么是过拟合和欠拟合

article/2025/4/22 12:53:28

文章目录

  • 过拟合
  • 欠拟合
  • 泛化能力
  • 避免过拟合的一般方法
    • 从数据集上规避
    • 从训练模型上规避
    • 从训练过程上规避

作为从「统计学(Statistics)」跟「计算机科学(Computer Science)」交叉而诞生的新学科「机器学习(Machine Learning)」,从诞生的那一刻,基因里就带上了很多来自统计学的概念。

我们用于处理类似「分类(Classification)」、「回归(Regression)」、「聚类(Clustering)」、「降维(Dimensionality Reduction)」以及「强化学习(Reinforcement)」等问题而设计的「机器学习模型(Machine Learning Model)」不可避免会遇到以下三个问题:

  • 我们的模型是否合适(fitting)?
  • 我们的模型是否与样本过拟合(overfitting)?
  • 我们的模型是否与样本欠拟合(underfitting)?

在回答这些问题前,我们先从统计的角度解释什么是拟合、过拟合以及欠拟合。

过拟合

在统计学中,过拟合是指我们设计的模型过于紧密或精确的匹配了某特定数据,使得模型缺少泛化能力,而无法有效处理其他的、或未观测的数据的现象1

欠拟合

欠拟合的概念恰恰与过拟合相反;它是指相对于数据而言,我们的预测模型过于简单,无法有效反应数据的特征规律,因此也缺少了泛化能力。

在这里插入图片描述
为了更好的帮助你理解,我举个不太恰当的栗子

假设有一个厨师,需要给客人准备食物;客人提出的要求是「好吃,好看的食物,最好还是圆的」。

对于 「欠拟合」 的厨师来说,他可能会把味道、样子还凑合的食材当作食物给客人;结果客人吃到了带着鱼鳞的鱼肉,带着芽的土豆,发了霉的花生米,然后把酒店给投诉了。

对于 「过拟合」 的厨师,他可能是个超级强迫症,他不仅会拿着圆规度量土豆是不是足够圆,还要拿着放大镜挑干净肉的每一个毛囊;甚至为了追求豆腐的新鲜度,还要亲自种豆子……于是客人等了一个多小时,什么菜也没吃到,气冲冲的回家然又把酒店给投诉了。

所以对于欠拟合与过拟合来说,最大的问题就是「该做到的事没有做到」,反应在数据上都是 「泛化能力不足」,也就是没有正确地反应数据的特征。既然这里提到了「泛化能力」这个概念,那么接下来我们就来讨论什么是泛化能力。

泛化能力

机器学习的主要挑战是我们的算法必须能够在先前未观测到的新输入上表现良好,而不只是在训练集上表现良好。在未观测到的输入上也能表现良好的能力被称为 泛化(generalization)2

通常,我们为了评估模型在观测样本上的表现情况,会使用到 「误差」 这个评价指标。常用的一个评价指标,被称为「均方差」,其公式一般写为:

M S E = 1 n ∑ i = 1 n ( x i − μ ) 2 MSE = \frac{1}{n} \sum_{i=1}^{n} (x_i - \mu)^2 MSE=n1i=1n(xiμ)2

这里的 x i x_i xi 通常是指样本值, μ \mu μ 一般是期望。MSE(Mean Square Deviation Error 或 Mean Square Error)越大,表示样本与目标(期望)的离散程度也越大;反之,MSE越小,样本于目标的离散程度越小。

通常情况下,训练机器学习模型时,我们可以使用某个训练集,在训练集上计算一些被称为 训练误差(training error) 的度量误差,目标是降低训练误差。
到目前为止,我们讨论的是一个简单的优化问题。机器学习和优化不同的地方在于,我们也希望 泛化误差(generalization error) (也被称为测试误差(test error))很低2

简单来说:

  • 训练误差 —— 指的是训练集样本与结果的误差;
  • 泛化误差 —— 指的是模型预测情况与真实样本的误差;

对于我们来说,比起「训练误差」,我们更关心「泛化误差」,无论对于欠拟合还是过拟合也好,在「泛化误差」上表现都是一致的。如果我们单看这样一张表,就能理解它们之间在训练和真实环境下的表现差异了。

拟合类型训练误差泛化误差
欠拟合误差大误差大
拟合误差适中误差适中
过拟合误差小误差大

在实际训练过程中,随着训练过程的增加,往往会看到这样一组曲线,通常在「惊叹号」位置是我们比较理想的权重,在它左侧一般是「欠拟合」的情况,在它右侧是「过拟合」的情况。
在这里插入图片描述

监督学习(例如神经网络)中的过拟合/过训练。训练误差用蓝色表示,验证误差用红色表示。二者均为训练迭代次数的函数。若训练误差稳定下降,但验证误差上升,则说明可能出现过拟合。最佳模型应当是验证误差位于最低点时的模型3

「欠拟合」通常是训练不足或参数落入「局部最优解」导致的;解决方法也相对简单,比如增加训练量、增加样本数,或者给参数加入「冲量」,而关于「冲量」的内容我会在以后的章节里介绍。

而「过拟合」现象出现的原因相对比较复杂,而且不容易被发现。经验性的,我们通常认为以下三种情况容易出现过拟合现象的发生。

  • 训练集样本单一或样本不足;
  • 训练集样本的噪声干扰过大;
  • 训练模型过于复杂。

避免过拟合的一般方法

在机器学习以及统计学里,我们为了避免上述情况的出现,通常会从三个方面来着手。

  • 从数据集上规避;
  • 从训练模型上规避;
  • 从训练过程上规避。

从数据集上规避

从数据集上规避,首先需要评估数据集的整体情况;比如样本是否符合「简单随机分布」,样本特征是否存在某种「偏见」。如果条件许可,我们可以在处理数据前对数据作一些可视化处理,输出数据的「关联直方图」或者「散点图」,其中一个著名的案例就是「鸢尾花」的特征分布分析。

在这里插入图片描述

图片来自 https://www.cnblogs.com/cgmcoding/p/13274481.html

如果数据存在某种偏见,条件允许的情况下,可以尝试采集更多的数据样本以减少结果的某种「偏见」。如果不具备这样的条件,可以通过「交叉验证(Cross Validation)」、「正则化(Normalization)」等方法来处理数据。

从训练模型上规避

依据「一般方法论」的原则,能用简单的模型即可得到结果的就应该避免使用复杂的模型。此外,在确定了模型后,也应该依据「贝叶斯信息量准则」,减少不必要的参数使用。对模型和数据必要的「剪枝」也是十分的关键。使用「池化技术」或「Dropout」,减少传递的参数量有时也会十分重要。

从训练过程上规避

我们可以使用一些对付「欠拟合」时用到的方法,比如「冲量」。此外,还可以采用「提前停止」的概念,及时地结束不必要的训练过程;甚至你也可以设置类似于「模拟退火」或者「回滚」的策略,及时的保存训练过程中出现的「全局最优」。


  1. https://zh.wikipedia.org/wiki/%E9%81%8E%E9%81%A9 ↩︎

  2. Ian Goodfellow(伊恩·古德费洛),Aaron Courville(亚伦·库维尔),Yoshua Bengio(约书亚·本吉奥). 深度学习(异步图书) (Chinese Edition) (Kindle Locations 2127-2134). 人民邮电出版社. Kindle Edition. ↩︎ ↩︎

  3. https://zh.wikipedia.org/wiki/%E9%81%8E%E9%81%A9 ↩︎


http://chatgpt.dhexx.cn/article/9888WjH7.shtml

相关文章

VGG16网络结构要点

学习BCNN的过程时遇到,VGG16的网络结构如下图示意: 13个卷积层(Convolutional Layer),分别用conv3-XXX表示3个全连接层(Fully connected Layer),分别用FC-XXXX表示5个池化层(Pool …

VGG-16网络结构解析

VGG,也叫做VGG-16网络。这个网络结构很有意思,相必实现这个网络的作者是有点强迫症,不然整个网络为什么能够如此的协调一致。基本上每一次的内容都大同小异,2层或3层卷积层,激活一下,池化一下,就…

VGGNet网络结构

深度神经网络一般由卷积部分和全连接部分构成。卷积部分一般包含卷积(可以有多个不同尺寸的核级联组成)、池化、Dropout等,其中Dropout层必须放在池化之后。全连接部分一般最多包含2到3个全连接,最后通过Softmax得到分类结果&…

VggNet网络结构详解

VggNet网络结构详解 #图像识别网络结构详解 一、概述 VGG在2014年由牛津大学著名研究组VGG (Visual Geometry Group) 提出,斩获该年ImageNet竞赛中 Localization Task (定位任务) 第一名 和 Classification Task (分类任务) 第二名。 二、网络详解 VGG16相比Al…

VGG11、VGG13、VGG16、VGG19网络结构图

VGG11、VGG13、VGG16、VGG19网络结构图 前言 前言 VGG网络采用重复堆叠的小卷积核替代大卷积核,在保证具有相同感受野的条件下,提升了网络的深度,从而提升网络特征提取的能力。 可以把VGG网络看成是数个vgg_block的堆叠,每个vgg_…

VGG网络结构详解与模型的搭建

首先贴出三个链接: 1. VGG网络结构详解视频 2. 使用pytorch搭建VGG并训练 3. 使用tensorflow搭建VGG并训练 VGG网络是在2014年由牛津大学著名研究组VGG (Visual Geometry Group) 提出,斩获该年ImageNet竞赛中 Localization Task (定位任务) 第一名 和…

【深度学习】VGG16网络结构复现 | pytorch |

文章目录 前言一、VGG16介绍二、VGG16网络复现——pytorch 前言 这篇文章按道理来说应该是很简单的,但是因为一个很小的bug,让我难受了一晚上,直到现在我也没找出原因。后面我会提到这个bug。 今天这篇文章主要用来手动搭建vgg16这个网路&am…

经典卷积神经网络---VGG16网络

VGG16网络结构及代码 下图为VGG网络结构图,最常用的就是表中的D结构,16层结构(13层卷积3层全连接层),卷积的stride为1,padding为1,maxpool的大小为2,stride为2(池化只改…

VGG16网络结构复现(Pytorch版)

VGG有6种子模型,分别是A、A-LRN、B、C、D、E,我们常看到的基本是D、E这两种模型,即VGG16,VGG19 为了方便阅读,并没有加上激活函数层 from torch import nn import torch from torchsummary import summaryclass VGG…

手动搭建的VGG16网络结构训练数据和使用ResNet50微调(迁移学习)训练数据对比(图像预测+前端页面显示)

文章目录 1.VGG16训练结果:2.微调ResNet50之后的训练结果:3.结果分析:4.实验效果:(1)VGG16模型预测的结果:(2)在ResNet50微调之后预测的效果: 5.相关代码和知…

卷积神经网络——vgg16网络及其python实现

1、介绍 VGG-16网络包括13个卷积层和3个全连接层,网络结构较LeNet-5等网络变得十分复杂,但同时也有不错的效果。VGG16有强大的拟合能力在当时取得了非常的效果,但同时VGG也有部分不足:1、巨大参数量导致训练时间过长&#xf…

VGG16系列III: 网络模型结构

目录 Part I: CNN的基础构件 一张图片如何作为输入? 什么是卷积 什么是Padding 什么是池化(pooling) 什么是Flatten 什么是全连接层 什么是Dropout 什么是激活函数 VGG16的整体架构图 Part II: VGG 网络架构 典型VGG网络结构 VGG 网络参数数量计算: P…

VGG网络结构(一)

刚开始接触深度学习、卷积神经网络的时候非常懵逼,不知道从何入手,我觉得应该有一个进阶的过程,也就是说,理应有一些基本概念作为奠基石,让你有底气去完全理解一个庞大的卷积神经网络: 本文思路&#xff1a…

VGG 网络结构

从图中可以看出VGG结构由5层卷积层、3层全连接层、softmax输出层构成,层与层之间使用max-pooling(最大池化)分开,所有隐层的激活单元都采用ReLU函数。VGG最大的贡献就是证明了卷积神经网络的深度增加和小卷积核的使用对网络的最终…

PyTorch之VGG16网络结构详解以及源码解读

论文:Very Deep Convolutional Networks for Large-Scale Image Recognition 简单介绍 意义: 证明了增加小卷积核的个数以及网络深度可以提高分类结果的正确率。 预处理: 各通道减去RGB在训练集上的均值。 特点: 1)使用…

VGG-16网络结构

一、VGG-16网络框架介绍 VGGNet是牛津大学计算机视觉组(Visual Geometry Group)和Google DeepMind公司的研究员一起研发的深度卷积神经网络。 VGGNet探索了卷积神经网络的深度与其性能之间的关系,通过反复堆叠33的小型卷积核和22的最大池化层…

[VGG16]——网络结构介绍及搭建(PyTorch)

一、VGG16的结构层次 VGG16总共有16层,13个卷积层和3个全连接层,第一次经过64个卷积核的两次卷积后,采用一次pooling,第二次经过两次128个卷积核卷积后,采用pooling;再经过3次256个卷积核卷积后。采用pooli…

VGG预训练模型网络结构详解——以VGG16为例

VGG卷积神经网络是牛津大学在2014年提出来的模型。当这个模型被提出时,由于它的简洁性和实用性,马上成为了当时最流行的卷积神经网络模型。它在图像分类和目标检测任务中都表现出非常好的结果。在2014年的ILSVRC比赛中,VGG 在Top-5中取得了92…

卷积神经网络模型之——VGG-16网络结构与代码实现

文章目录 VGGNet简介VGG16网络结构使用pytorch搭建VGG16featuresclassifier完整代码 VGGNet简介 VGG原文:Very deep convolutional networks for large-scale image recognition:https://arxiv.org/pdf/1409.1556.pdf VGG在2014年由牛津大学Visual Geom…

关于VGGNet网络结构浅谈(主要是VGG16结构)

文章目录 1.首先看一下论文中一张表:2.VGG16网络结构解释:3.网络构成详解:4.VGG16使用的卷积核大小都是3x3的,使用比之前小的卷积核有什么作用:5.Tensorflow2.6.0实现VGG16网络结构: 1.首先看一下论文中一张…