模型训练中的过拟合和欠拟合

news2024/11/15 19:50:27

基本概念

  我们知道,所谓的神经网络其实就是一个复杂的非线性函数,网络越深,这个函数就越复杂,相应的表达能力也就越强,神经网络的训练则是一个拟合的过程。
  当模型的复杂度小于真实数据的复杂度,模型表达能力不够,不足以表达真实数据,这种情况就叫欠拟合,其典型表现是即使是在训练集上依然达不到一个很好的水平,准确度和loss都比较差。欠拟合可以通过增加模型复杂度来改善。
  但是,当模型过于复杂时,拟合能力过强,这就会导致模型拟合了训练集中的一些噪声点,在测试集上的性能反而不强,这就造成了过拟合现象,因为我们希望模型学习到的应该是普适的规律,而不是训练集中的一些特殊情况。其典型表现是在训练集上的性能逐渐变强(损失还在下降),但是在测试集上的损失开始稳定上升。下图中的三种曲线分别代表了欠拟合、好的拟合和过拟合三种情况:
在这里插入图片描述

如何应对?

应对过拟合

  解决过拟合最好的方法就是获取更多的训练数据。只要给足够多的数据,让模型学习尽可能多的情况,它就会不断修正自己,从而获得更强的性能。但是在实验的过程中,获取有效的数据往往是非常困难的,或者说我们需要使用固定的数据集。那么就需要在模型结构和训练方式上下点功夫。

Dropout正则化层的使用

  Dropout正则化是一种广泛使用的技术,用于减少神经网络中的过拟合问题。这是一种随机丢弃神经元的方法,在模型的某层映射后添加dropout层,网络在经过该层映射时,每个神经元都有一定的概率被丢弃,这意味着在每个训练批次中,不同的神经元会被丢弃,从而使得网络更加健壮和通用,增加网络的鲁棒性。这样,网络不会过度依赖任何一个特定的神经元,从而减少过拟合的风险。
在这里插入图片描述

  pytorch中的dropout层:

output = torch.nn.functional.dropout(input, p=0.5, training=True, inplace=False)

  其中p值表示该层零化元素的概率,即每一次使多少随机的神经元失活,默认为0.5。p值的设置比较重要,设置太大可能会造成信息丢失,设置太小可能效果不明显,0.5是一个比较常用的值。

正则化(权值衰减)

  权值衰减是一直以来经常被使用的一种抑制过拟合的方法。该方法通过在学习过程中对大的权重进行惩罚,来抑制过拟合。因为很多过拟合原本就是因为权重参数取值过大才发生的。
  神经网络的习目的是减小损失函数的值。这时,例如为损失函数加上权值的平方范数(L2范数)。这样就可以抑制权重变大。L2范数的计算方式为: L 2 r e g u l a r i z a t i o n t e r m = ∣ ∣ w ∣ ∣ 2 2 = w 1 2 + w 2 2 + . . . + w n 2 L_2 regularization term = ||w||_2^2=w_1^2+w_2^2+...+w_n^2 L2regularizationterm=∣∣w22=w12+w22+...+wn2  在这个公式中,接近于 0 的权重对模型复杂度几乎没有影响,而离群值权重则可能会产生巨大的影响。我们可以使用python计算L2范数的值:

def loss(self, predict,label):
	weight_decay = 0
    # 计算所有权重的L2范数
  	for idx in range(1, self.hidden_layer_num + 2):
         W = self.params['W' + str(idx)]
         weight_decay += 0.5 * self.weight_decay_lambda * np.sum(W ** 2)
    loss = loss_fun(predict,label) + weight_decay 

应对欠拟合

  欠拟合的主要表现是模型在训练集就无法得到一个很好的性能,也就是无法收敛,这代表模型没有能力捕获重要的特征,可以想象,这样的模型在测试集的变现更差。这种情况可以从数据集和模型两方面考虑,从数据集的角度来说,有可能是样本质量较低,数据本身就不包含足够的特征供网络学习,如果数据集本身是常用的,无法改变的。从模型的角度来说,可以尝试以下几种方法:

增加模型复杂度

  模型的复杂程度越高,就可以拟合出更复杂的函数,相应的学习能力也就越强,对于神经网络模型,可以增加隐藏层数或者每层的神经元个数,以增加模型的复杂度。

特征工程

  对数据特征进行处理,主要包括特征选择、特征提取、特征变换三种。特征选择是指选择对目标变量具有较大影响的特征,去除无关特征,减少噪声的干扰;特征提取是指从原始数据中提取更有用的特征,例如通过统计学方法、主成分分析等方法提取出更具代表性的特征;特征变换是指对原始特征进行变换,例如对数变换、归一化、标准化等,使得特征更符合模型的假设。

调整超参数

  bachsize、学习率等超参数也可能会带来一定影响,使用一个太大的batch size会因为降低了梯度下降的随机性,导致降低了网络的准确度。学习率对训练网络的容易程度以及准确度也会产生很大的影响。

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

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

相关文章

保存钉钉群直播回放下载:直播回放下载步骤详解

今天,我们就来拨开云雾,揭开保存钉钉群直播回放的神秘面纱。教会你们如何下载钉钉群直播回放 首先用到的工具我全部打包好了,有需要的自己下载一下 钉钉群直播回放工具下载:https://pan.baidu.com/s/1WVMNGoKcTwR_NDpvFP2O2A?p…

PyQt5新手教程(五万字)

文章目录 PyQt界面开发的两种方式:可视化UI 编程式UI一、PyQt 简介二、PyQt 与 Qt 的蒙娜丽莎三、PyQt 布局管理器3.1、简介3.2、项目实战3.2.0、添加伸缩项 layout.addStretch:控制布局中组件之间的间距。3.2.1、垂直布局管理器 QVBoxLayout&#xff1…

制作一个 rpm 软件包

首发日期 2024-04-30, 以下为原文内容: 本文以 ibrus (艾刷, 胖喵拼音 ibus 接口模块) 为例, 介绍 rpm 软件包的制作过程. 相关文章: 《发布 AUR 软件包 (ArchLinux)》 https://blog.csdn.net/secext2022/article/details/136803790《多种双拼方案的实现》 https://blog.csdn.…

C语言之详细讲解文件操作(抓住文件操作的奥秘)

什么是文件 与普通文件载体不同,文件是以硬盘为载体存储在计算机上的信息集合,文件可以是文本文档、图片、程序等等。文件通常具有点三个字母的文件扩展名,用于指示文件类型(例如,图片文件常常以KPEG格式保存并且文件…

区块链 | IPFS:Merkle DAG

🦊原文:IPFS: Merkle DAG 数据结构 - 知乎 🦊写在前面:本文属于搬运博客,自己留存学习。 1 Merkle DAG 的简介 Merkle DAG 是 IPFS 系统的核心概念之一。虽然 Merkle DAG 并不是由 IPFS 团队发明的,它来自…

Pyspark+关联规则 Kaggle购物篮分析案例

数据集地址:Market Basket Analysis | Kaggle 我的NoteBook地址:pyspark Market Basket Analysis | Kaggle 零售商期望能够利用过去的零售数据在自己的行业中进行探索,并为客户提供有关商品集的建议,这样就能提高客户参与度、改…

llama_index微调BGE模型

微调模型是为了让模型在特殊领域表现良好,帮助其学习到专业术语等。 本文采用llama_index框架微调BGE模型,跑通整个流程,并学习模型微调的方法。 一、环境准备 Linux环境,GPU L20 48G,Python3.8.10。 pip该库即可。 二、数据准备 该框架实现了读取各种类型的文件,给…

AI项目二十一:视频动态手势识别

若该文为原创文章,转载请注明原文出处。 一、简介 人工智能的发展日新月异,也深刻的影响到人机交互领域的发展。手势动作作为一种自然、快捷的交互方式,在智能驾驶、虚拟现实等领域有着广泛的应用。手势识别的任务是,当操作者做出…

html--剑雨

<!doctype html> <html> <head> <meta charset"utf-8"> <title>css3剑雨-jq22.com</title> <script src"http://www.jq22.com/jquery/jquery-1.10.2.js"></script> <style> .sword:before, .sword:…

Java_从入门到JavaEE_08

一、Eclipse开发工具的介绍 Eclipse工具简绍 Eclipse 是著名的跨平台的自由集成开发环境&#xff08;IDE&#xff09;。最初主要用来 Java 语言开发&#xff0c;但是目前亦有人通过插件使其作为其他计算机语言比如 C 和 Python 的开发工具。 下载与安装 下载&#xff1a; Ecli…

spring boot3多模块项目工程搭建-上(团队开发模板)

⛰️个人主页: 蒾酒 &#x1f525;系列专栏&#xff1a;《spring boot实战》 目录 写在前面 多模块结构优缺点 模块介绍 Common 模块&#xff1a; API 模块&#xff1a; Web 模块&#xff1a; Service 模块&#xff1a; DAO 模块&#xff1a; 搭建步骤 1.创建 父…

Java面试八股之强软弱虚引用的概念及区别

Java中强软弱虚引用的概念及区别 在Java中&#xff0c;强引用、软引用、弱引用和虚引用是四种不同类型的引用&#xff0c;它们在对象生命周期管理、垃圾收集&#xff08;Garbage Collection, GC&#xff09;以及内存管理方面有着不同的行为和用途。以下是它们的概念和主要区别…

脑筋急转弯在线问答

页面效果 点击“显示答案”按钮&#xff0c;显示参考答案。 页面代码 <% layout(/layouts/default.html, {title: 脑筋急转弯管理, libs: [dataGrid]}){ %> <div class"main-content"><div class"box box-main"><div class"bo…

3.自动驾驶-局部路径规划

1. 规划planning 2. 局部路径规划模块实现-模块外围&#xff1a;输入 3. 局部路径规划模块实现模块外围:输出 4. 控制control 5. 系统分类 6 系统分类

推开通用人工智能大门,多模态大模型是新一代人工智能技术范式

大家好&#xff0c;我是爱编程的喵喵。双985硕士毕业&#xff0c;现担任全栈工程师一职&#xff0c;热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。…

如何理解Go语言的逃逸分析(escape analysis)?

文章目录 什么是逃逸分析&#xff1f;逃逸的原因逃逸的影响 如何查看逃逸分析的结果&#xff1f;解决方案和示例代码减少逃逸的策略示例代码 在Go语言中&#xff0c;逃逸分析&#xff08;escape analysis&#xff09;是一个编译器优化过程&#xff0c;它决定了哪些变量会被分配…

38-3 Web应用防火墙 - 安装配置WAF

首先需要安装Centos 7 虚拟机:Centos7超详细安装教程_centos7安装教程-CSDN博客 安装配置WAF 在桌面环境中,右键点击打开终端,首先执行以下步骤: 1)安装必要的工具: 输入命令: sudo su yum install -y wget epel-release 2)第二步,安装依赖工具,输入以下命令: y…

使用Git把写好的项目放到github上

把之前的文章差缺补漏了一下&#xff0c;发现少一个TUserController文件&#xff0c;然后加上了。 以及发现前后端交互时的跨域问题需要处理。 在Controller文件里加入注释 CrossOrigin(origins "*")即可。 不然数据在Vue里显示不出来。 ** 壹 首先先把前端项目 de…

【深耕 Python】Data Science with Python 数据科学(17)Scikit-learn机器学习(二)

写在前面 关于数据科学环境的建立&#xff0c;可以参考我的博客&#xff1a; 【深耕 Python】Data Science with Python 数据科学&#xff08;1&#xff09;环境搭建 往期数据科学博文一览&#xff1a; 【深耕 Python】Data Science with Python 数据科学&#xff08;2&…

c#word文档:1.创建空白Word文档及保存/2.添加页内容...

---创建空白Word文档 --- &#xff08;1&#xff09;创建一个名为OfficeOperator的类库项目。引用操作Word的.NET类库 &#xff08;2&#xff09;定义用于操作Word的类WordOperator1。添加引用Microsoft.Office.Interop.Word命名空间。 &#xff08;3&#xff09;为WordOper…