深度学习-2.8模型拟合概念和欠拟合模型、过拟合调整策略

news2024/12/28 20:45:07

模型拟合概念和欠拟合模型、过拟合调整策略

文章目录

  • 模型拟合概念和欠拟合模型、过拟合调整策略
    • 一、模型拟合度概念介绍
      • 1.测试集的“不可知悖论”
      • 2.模型拟合度概念与实验
    • 二、过拟合、欠拟合问题解决方案
      • 1. 欠拟合解决方案
      • 2.过拟合解决方案
    • 三、神经网络结果选择策略
      • 1. 参数和超参数
      • 2. 神经网络模型结构选择策略
      • 3. 激活函数使用的单一性
  • 参考

一、模型拟合度概念介绍

1.测试集的“不可知悖论”

​ 通过此前介绍,已经知道深度学习模型主要是通过模型在测试集上的运行效果来判断模型好坏。测试集相当于是“高考”,而此前的模型训练都相当于是在练习,但怎么样的练习才能有效的提高高考成绩,这里就存在一个“悖论”,那就是练习是为了高考,而在高考前我们永远不知道练习是否有效,那高考对于练习的核心指导意义何在?在机器学习领域,严格意义上的测试集是不能参与建模的,此处不能参与建模,不仅是指在训练模型时不能带入测试集进行训练,更是指当模型训练完成之后、观察模型在测试集上的运行结果后,也不能据此再进行模型修改(比如增加神经网络层数),把数据带入模型训练是影响模型参数,而根据模型运行结果再进行模型结构调整,实际上是修改了模型超参数,不管是修改参数还是超参数,都是影响了模型建模过程,都相当于是带入进行了建模。是的,如果通过观察测试集结果再调整模型结构,也相当于是带入测试集数据进行训练,而严格意义上的测试集,是不能带入模型训练的。(这是一个有点绕的“悖论”…)

​ 而泛化能力指的是在模型未知数据集(没带入进行训练的数据集)上的表现,虽然测试集只能测一次,但我们还是希望有机会能把模型带入未知数据集进行测试,此时我们就需要一类新的数据集——验证集。验证集在模型训练阶段不会带入模型进行训练,但当模型训练结束之后,会把模型带入验证集进行计算,通过观测验证集上模型运行结果,判断模型是否要进行调整,验证集也会模型训练,只不过验证集训练的不是模型参数,而是模型超参数,关于模型参数和超参数的概念后面还会再详细讨论,当然,也可以把验证集看成是应对高考的“模拟考试”,通过“模拟考试”的考试结果来调整复习策略,从而更好的应对“高考”。总的来说,测试集是严格不能带入训练的数据集,在实际建模过程中可以先把测试集切分出来,然后“假装这个数据集不存在”,在剩余的数据集中划分训练集和验证集,把训练集带入模型进行运算,再把验证集放在训练好的模型中进行运行,观测运行结果,再进行模型调整。

​ 总的来说,在模型训练和观测模型运行结果的过程总共涉及三类数据集,分别是训练集、验证集和测试集。不过由于测试集定位特殊,在一些不需要太严谨的场景下,有时也会混用验证集和测试集的概念。在不区分验证集和测试集的情况下,当数据集切分完成后,对于一个模型来说,我们能够获得两套模型运行结果,一个是训练集上模型效果,一个是测试集上模型效果,而这组结果,就将是整个模型优化的基础数据。

2.模型拟合度概念与实验

  在所有的模型优化问题中,最基础的也是最核心的问题,就是关于模型拟合程度的探讨与优化。根据此前的讨论,模型如果能很好的捕捉总体规律,就能够有较好的未知数据的预测效果。但限制模型捕捉总体规律的原因主要有两点:

  • 其一,样本数据能否很好的反应总体规律

  如果样本数据本身无法很好的反应总体规律,那建模的过程就算捕捉到了规律可能也无法适用于未知数据。

  • 其二,样本数据能反应总体规律,但模型没有捕捉到

  如果说要解决第一种情况需要在数据获取端多下功夫,那么如果数据能反应总体规律而模型效果不佳,则核心原因就在模型本身了。

​ 此前介绍过,机器学习模型评估主要依据模型在测试集上的表现,如果测试集效果不好,则我们认为模型还有待提升,但导致模型在测试集上效果不好的原因其实也主要有两点,其一是模型没捕捉到训练集上数据的规律,其二则是模型过分捕捉训练集上的数据规律,导致模型捕获了大量训练集独有的、无法适用于总体的规律(局部规律),而测试集也是从总体中来,这些规律也不适用于测试集。前一种情况我们称模型为欠拟合,后一种情况我们称模型为过拟合。

在这里插入图片描述

​ 根据最终的输出结果能够清楚的看到,1阶多项式拟合的时候蓝色拟合曲线即无法捕捉数据集的分布规律,离数据集背后客观规律也很远,而三阶多项式在这两方面表现良好,十阶多项式则在数据集分布规律捕捉上表现良好,单同样偏离红色曲线较远。此时一阶多项式实际上就是欠拟合,而十阶多项式则过分捕捉噪声数据的分布规律,而噪声之所以被称作噪声,是因为其分布本身毫无规律可言,或者其分布规律毫无价值(如此处噪声分布为均匀分布),因此就算十阶多项式在当前训练数据集上拟合度很高,但其捕捉到的无用规律无法推广到新的数据集上,因此该模型在测试数据集上执行过程将会有很大误差。即模型训练误差很小,但泛化误差很大。

不难发现,过拟合产生的根本原因,还是样本之间有“误差”,或者不同批次的数据规律不完全一致。

​ 因此,我们有基本结论如下:

  • 模型欠拟合:训练集上误差较大

  • 模型过拟合:训练集上误差较小,但测试集上误差较大

  而模型是否出现欠拟合或者过拟合,其实和模型复杂度有很大关系。我们通过上述模型不难看出,模型越复杂,越有能力捕捉训练集上的规律,因此如果模型欠拟合,我们可以通过提高模型复杂度来进一步捕捉规律,但同时也会面临模型过于复杂而导致过拟合的风险。

​ 对于深度学习来说,模型复杂度和模型结构直接相关,隐藏层越多、每一层神经元越多、模型就越复杂,当然模型复杂度还和激活函数有关。模型拟合度优化是模型优化的核心,深度学习模型的一系列优化方法也基本是根据拟合度优化这一核心目标衍生出来的,接下来,我们就来看下如何通过调整模型结构来进行拟合度优化。

二、过拟合、欠拟合问题解决方案

1. 欠拟合解决方案

  • 增加模型复杂度,通过增加模型参数来增加模型学习能力:
    • 对于原本的算法,可以通过增加模型深度的方法增大模型的复杂度;
    • 选择更加复杂的算法模型;
  • 增加特征数量:增加更多强表达能力的特征;
  • 调整模型参数或者超参
    • 修改学习率、隐藏层数量等模型参数、优化算法中的训练参数,等超参增强训练过程中模型的学习能力;
  • 降低正则化
    • 若之前有增加正则化,则需要考虑是否存在正则化过大导致的学习能力下降

2.过拟合解决方案

  • 增加训练数据
  • 采用更强的正则化约束
  • 减少特征数量
  • 降低模型复杂度
  • 使用Dropout层
  • 使用早停提前结束训练

三、神经网络结果选择策略

1. 参数和超参数

  在实际建模过程中,神经网络的模型结构是影响建模结果至关重要的因素。但对于一个数据集,构建几层神经网络、每一层设置多少个神经元,却不是一个存在唯一最优解的参数,虽然我们希望能够有个数学过程帮我们直接确定模型结构,但由于影响因素较多,很多时候模型在确定模型结构上,还是一个首先根据经验设置模型结构、然后再根据实际建模效果不断调整的过程。

关于参数和超参数的说明:

  在机器学习中,参数其实分为两类,其一是参数,其二则是超参数,一个影响模型的变量是参数还是超参数,核心区别就在于这个变量的取值能否通过一个严谨的数学过程求出,如果可以,我们就称其为参数,如果不行,我们就称其为超参数。典型的,如简单线性回归中的自变量的权重,我们通过最小二乘法或者梯度下降算法,能够求得一组全域最优解,因此自变量的权重就是参数,类似的,复杂神经网络中的神经元连接权重也是参数。但除此以外,还有一类影响模型效果的变量却无法通过构建数学方程、然后采用优化算法算得最优解,典型的如训练集和测试集划分比例、神经网络的层数、每一层神经元个数等等,这些变量同样也会影响模型效果,但由于无法通过数学过程求得最优解,很多时候我们都是凭借经验设置数值,然后根据建模结果再进行手动调节,这类变量我们称其为超参数。

  不难发现,在实际机器学习建模过程中超参数出现的场景并不比参数出现的场景少,甚至很多时候,超参数的边界也和我们如何看待一个模型息息相关,例如,如果我们把“选什么模型”也看成是一个最终影响建模效果的变量,那这个变量也是一个超参数。也就是说,超参数也就是由“人来决策”的部分场合,而这部分也就是体现算法工程师核心竞争力的环节。

  当然,就像此前介绍的那样,参数通过优化算法计算出结果,而机器学习发展至今,也出现了很多辅助超参数调节的工具,比如网格搜索(grid search)、AutoML等,但哪怕是利用工具调整超参数,无数前辈在长期实践积累下来的建模经验仍然是弥足珍贵的,也是我们需要不断学习、不断理解,当然,更重要的是,所有技术人经验的积累是一个整体,因此也是需要我们参与分享的。

2. 神经网络模型结构选择策略

而一般来说在模型结构选择方面,根据经验,有如下基本结论:

  • 层数选择方面
    • 三层以内:模型效果会随着层数增加而增加;
    • 三层至六层:随着层数的增加,模型的稳定性迭代的稳定性会受到影响,并且这种影响是随着层数增加“指数级”增加的,此时我们就需要采用一些优化方法对输入数据、激活函数、损失函数和迭代过程进行优化,一般来说在六层以内的神经网络在通用的优化算法配合下,是能够收敛至一个较好的结果的;
    • 六层以上:在模型超过六层之后,优化方法在一定程度上仍然能够辅助模型训练,但此时保障模型正常训练的更为核心的影响因素,就变成了数据量本身和算力。神经网络模型要迭代收敛至一个稳定的结果,所需的epoch是随着神经网络层数增加而增加的,也就是说神经网络模型越复杂,收敛所需迭代的轮数就越多,此时所需的算力也就越多。而另一方面,伴随着模型复杂度增加,训练所需的数据量也会增加,如果是复杂模型应用于小量样本数据,则极有可能会出现“过拟合”的问题从而影响模型的泛化能力。当然,伴随着模型复杂度提升、所需训练数据增加,对模型优化所采用的优化算法也会更加复杂。也就是说,六层以内神经网络应对六层以上的神经网络模型,我们需要更多的算力支持、更多的数据量、以及更加复杂的优化手段支持。
  • 每一层神经元个数选择方面:当然输入层的神经元个数就是特征个数,而输出层神经元个数,如果是回归类问题或者是逻辑回归解决二分类问题,输出层就只有一个神经元,而如果是多分类问题,输出层神经元个数就是类别总数。而隐藏层神经元个数,可以按照最多不超过输入特征的2-4倍进行设置,当然默认连接方式是全连接,每一个隐藏层可以设置相同数量的神经元。其实对于神经元个数设置来说,后期是有调整空间的,哪怕模型创建过程神经元数量有些“饱和”,我们后期我们可以通过丢弃法(优化方法的一种)对隐藏层神经元个数和连接方式进行修改。对于某些非结构化数据来说,隐藏层神经元个数也会根据数据情况来进行设置,如神经元数量和图像关键点数量匹配等。

3. 激活函数使用的单一性

  同时,对于激活函数的交叉使用,需要知道,通常来说,是不会出现多种激活函数应用于一个神经网络中的情况的。主要原因并不是因为模型效果就一定会变差,而是如果几种激活函数效果类似,那么交叉使用几种激活函数其实效果和使用一种激活函数区别不大,而如果几种激活函数效果差异非常明显,那么这几种激活函数的堆加就会使得模型变得非常不可控。此前的实验让我们深刻体会优化算法的必要性,但目前工业界所掌握的、针对激活函数的优化算法都是针对某一种激活函数来使用的,激活函数的交叉使用会令这些优化算法失效。因此,尽管机器学习模型是“效果为王”,但在基础理论没有进一步突破之前,不推荐在一个神经网路中使用多种激活函数。

参考

菜菜子的深度学习

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1535780.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

mybatis plus 修改sql

原始需求 在SQL语句前面加上一个request-id 问题描述 今天收到业务同学反馈,说接入某个SDK后,request-id本地debug发现sql已经修改了,但打印的sql中却没有request-id信息 看了下代码,发现用户的代码其实就是下方 方案一代码&am…

【机器学习】机器学习实验方法与原则(评价指标全面解析)

评价指标 在 不同任务 下衡量模型的性能,有 不同的评价指标 ,例如: • 回归任务 • 平均绝对误差( MAE )、均方误差( MSE )、均方根误差( RMSE )等 • 分类任务 •…

QT学习之设置QLineEdit背景透明且无边框

设置styleSheet:background:transparent;border-width:0;border-style:outset;

挑战迎刃而解!化工行业CRM案例揭示企业扩张成功之道!

化工行业一直面临着激烈的行业竞争,新时代化工企业如何面对扩张挑战,是许多企业管理者深思的问题,Zoho CRM客户管理系统为化工行业的用户提供了优秀的解决方案。一起来看看Zoho CRM的实力如何吧~ 一、客户背景 Zoho CRM的这家化工行业客户&a…

绝地求生:哪把枪的机瞄让你觉得最舒服或者最“抽象”呢?

大,好,我,闲游盒! 这题我会,我先来! 今天本来在训练场玩呢,突然想到了Famas这把枪的机瞄我真的是驾驭不来.... 我灵机一动,想问问大家平时如果落地没捡到镜又碰到敌人的情况下&…

【创建进程】fork函数与写时拷贝

文章目录 fork函数fork如何返回两个值&#xff08;fork的工作原理&#xff09;如何解释父子进程相互输出printf 写时拷贝 fork函数 #include <unistd.h> pid_t fork(void); 返回值&#xff1a;自进程中返回0&#xff0c;父进程返回子进程id&#xff0c;出错返回-1 fork函…

网络编程:学生管理系统

一、实现功能 1.添加学生信息 2.删除学生信息 3.修改学生信息 4.查找学生信息 二、添加 int do_add(sqlite3 *ppDb) {// 准备sql语句int add_num 0;char add_name[20] "";double add_score 0;// 提示并输入数据printf("请输入学号:");scanf("%d&q…

芯片公司SAP管理架构:科技与管理的完美融合

在当今日新月异的科技时代&#xff0c;芯片公司作为信息技术领域的核心力量&#xff0c;其运营管理的复杂性日益凸显。SAP管理架构作为一种高效的企业资源规划系统&#xff0c;为芯片公司提供了强大的管理支持。本文将为您科普芯片公司SAP管理架构的相关知识。 SAP管理架构是一…

使用倒模耳机壳UV树脂胶液制作舞台监听耳返入耳式耳机壳有哪些优点?

使用倒模耳机壳UV树脂胶液制作舞台监听耳返入耳式耳机壳有很多优点&#xff0c;具体如下&#xff1a; 高音质表现&#xff1a;通过倒模工艺制作的耳机壳能够更好地贴合耳朵&#xff0c;减少声音散射和反射&#xff0c;提高声音的清晰度和质感。这对于舞台监听来说非常重要&…

USB调试工具大全-USB中文网

USB中文网在此之前开发了很多的应用层USB设备调试工具&#xff0c;再加上收集的一些其它相关工具&#xff0c;并将这些调试工具分享给各位USB开发者爱好者&#xff0c;帮助大家更快的学习和了解USB相关的知识。 不过酒香也怕巷子深&#xff0c;今天我们就将这些调试工具的导航…

带你学会深度学习之卷积神经网络[CNN] - 5

前言 本文不讲述如泛化&#xff0c;前向后向传播&#xff0c;过拟合等基础概念。 本文图片来源于网络&#xff0c;图片所有者可以随时联系笔者删除。 本文提供代码不代表该神经网络的全部实现&#xff0c;只是为了方便展示此模型的关键结构。 CNN&#xff0c;常用于计算机视…

Leetcode 200. 岛屿数量

心路历程&#xff1a; 在没有看图论这一章之前看这道题没什么直接的思路&#xff0c;在看完图论之后&#xff0c;学着使用DFS和BFS去套用解决。第一次自己做的时候还是遇到了很多小问题。整体思路很流畅&#xff0c;但是需要处理的细节第一次没怎么处理好&#xff0c;花了很多…

如何使用Android平板公网访问本地Linux code-server

文章目录 1.ubuntu本地安装code-server2. 安装cpolar内网穿透3. 创建隧道映射本地端口4. 安卓平板测试访问5.固定域名公网地址6.结语 1.ubuntu本地安装code-server 准备一台虚拟机,Ubuntu或者centos都可以&#xff0c;这里以VMwhere ubuntu系统为例 下载code server服务,浏览器…

OR-806A固态继电器光耦

固态继电器 VL60V输出端击穿电压光耦 高隔离电压 60 至 600V 输出耐受电压 工业温度范围&#xff1a;-40 to 85℃ 高灵敏度和高速响应、 特征 输入和输出之间的高隔离电压 &#xff08;Viso&#xff1a;5000 V rms&#xff09;。 控制低电平模拟信号 高灵敏度和高速响应…

含“AI”量上涨,智能模组SC208系列助力智慧零售全场景高质发展

AI正重塑智慧零售产业&#xff0c;加速零售在采购、生产、供应链、销售、服务等方面改善运营效率和用户体验。零售行业经历了从线下到线上再到全渠道融合发展过程&#xff0c;“提质、降本、增效、高体验”是亘古不变的商业化与智能化方向。含“AI”量逐渐上涨的智慧零售正经历…

Linux:Gitlab:16.9.2 (rpm包) 部署及基础操作(1)

1.基础环境 我只准备了一台gitlab服务器&#xff0c;访问就用真机进行访问&#xff0c;接下来介绍一下详细配置 centos7 内网ip:192.168.6.7 外网ip:172.20.10.4 运行内存&#xff1a;4G CPU:4核 先去配置基础环境 关闭防火墙以及selinux 再去下载基础的运行…

差分逻辑电平 --- SSTL、HSTL、HSUL结构

SSTL/HSTL/HSUL 属于DDR存储器接口逻辑电平&#xff0c;虽然是单端&#xff0c;本质上是差分对&#xff0c;因实现机制是将信号与参考电平Vref组成差分对进行比较。 SSTL SSTL&#xff1a;Stub Series Termination Logic&#xff0c;短截线串联端接逻辑。 我们所熟知的DDR 采…

记录西门子200:PUT和GET通讯测试

GET/PUT&#xff1a;S7-200SMART之间专有通讯协议。 准备两台Smart-PLC&#xff0c;这里使用的ST60和CR40。外加一个交换机。 CR40的地址设置是&#xff1a;192.168.2.1 用来读 ST60的地址设置是&#xff1a;192.168.2.2 用来写 打开软件&#xff0c;选择CPU-CR4配…

LeetCode_Java_递归系列(题目+思路+代码)

206.反转链表 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1]以此类推&#xff0c;直到反转结束返回头结点 class Solution {public ListNode rever…

统计-R(相关系数)与R^2(决定系数)

1.相关系数&#xff08;R&#xff09; 定义&#xff1a;考察两个事物&#xff08;在数据里我们称之为变量&#xff09;之间的相关程度。 假设有两个变量X&#xff0c;Y&#xff0c;那么两个变量间的皮尔逊相关系数可通过以下公式计算&#xff1a; 公式一&#xff1a; 其中…