深入理解机器学习——过拟合(Overfitting)与欠拟合(Underfitting)

news2024/9/20 20:45:58

分类目录:《深入理解深度学习》总目录


机器学习的主要挑战是我们的算法必须能够在先前未观测的新输入上表现良好,而不只是在训练集上表现良好。在先前未观测到的输入上表现良好的能力被称为泛化(Generalization)。通常情况下,当我们训练机器学习模型时,我们可以使用某个训练集,在训练集上计算一些被称为 训练误差(Training Rrror)的度量误差,目标是降低训练误差。机器学习和优化不同的地方在于,我们也希望 泛化误差(Generalization Error)/测试误差(Test Rrror)很低。泛化误差被定义为新输入的误差期望。这里,期望的计算基于不同的可能输入,这些输入采自于系统在现实中遇到的分布。

通常,我们度量模型在训练集中分出来的测试集(Test Set)样本上的性能,来评估机器学习模型的泛化误差。如果训练集和测试集的数据是任意收集的,那么我们能够做的确实很有限。如果我们可以对训练集和测试集数据的收集方式有些假设,那么我们能够对算法做些改进。

训练集和测试集数据通过数据集上被称为数据生成过程(Data Generating Process)的概率分布生成。通常,我们会做一系列被统称为独立同分布假设的假设。该假设是说,每个数据集中的样本都是彼此相互独立的(Independent),并且训练集和测试集是同分布的(Identically Distributed),采样自相同的分布。这个假设使我们能够在单个样本的概率分布描述数据生成过程。然后相同的分布可以用来生成每一个训练样本和每一个测试样本。我们将这个共享的潜在分布称为数据生成分布(Data Generating Distribution),记作 p data p_\text{data} pdata。这个概率框架和独立同分布假设允许我们从数学上研究训练误差和测试误差之间的关系。

我们能观察到训练误差和测试误差之间的直接联系是,随机模型训练误差的期望和该模型测试误差的期望是一样的。假设我们有概率分布 p ( x , y ) p(x, y) p(x,y),从中重复采样生成训练集和测试集。对于某个固定的 w w w,训练集误差的期望恰好和测试集误差的期望一样,这是因为这两个期望的计算都使用了相同的数据集生成过程。这两种情况的唯一区别是数据集的名字不同。

当然,当我们使用机器学习算法时,我们不会提前固定参数,然后采样得到两个数据集。我们采样得到训练集,然后挑选参数去降低训练集误差,然后采样得到测试集。在这个过程中,测试误差期望会大于或等于训练误差期望。以下是决定机器学习算法效果是否好的因素:

  • 降低训练误差。
  • 缩小训练误差和测试误差的差距。

这两个因素对应机器学习的两个主要挑战: 欠拟合(Underfitting)和 过拟合(Overfitting)。欠拟合是指模型不能在训练集上获得足够低的误差。而过拟合是指训练误差和和测试误差之间的差距太大。通过调整模型的容量(Capacity),我们可以控制模型是否偏向于过拟合或者欠拟合。通俗地,模型的容量是指其拟合各种函数的能力。容量低的模型可能很难拟合训练集。容量高的模型可能会过拟合,因为记住了不适用于测试集的训练集性质。

一种控制训练算法容量的方法是选择假设空间(Hypothesis Space),即学习算法可以选择为解决方案的函数集。例如,线性回归算法将关于其输入的所有线性函数作为假设空间。广义线性回归的假设空间包括多项式函数,而非仅有线性函数。这样做就增加了模型的容量。一次多项式提供了我们已经熟悉的线性回归模型,其预测如下:
y ^ = b + w x \hat{y} = b + wx y^=b+wx

通过引入 x 2 x^2 x2作为线性回归模型的另一个特征,我们能够学习关于 x x x的二次函数模型:
y ^ = b + w 1 x + w 2 x 2 \hat{y} = b + w_1x + w_2x^2 y^=b+w1x+w2x2

尽管该模型是输入的二次函数,但输出仍是参数的线性函数。因此我们仍然可以用正规方程得到模型的闭解。我们可以继续添加 x x x的更高幂作为额外特征。

当机器学习算法的容量适合于所执行任务的复杂度和所提供训练数据的数量时,算法效果通常会最佳。容量不足的模型不能解决复杂任务。容量高的模型能够解决复杂的任务,但是当其容量高于任务所需时,有可能会过拟合。

过拟合与欠拟合
目前为止,我们探讨了通过改变输入特征的数目和加入这些特征对应的参数,改变模型的容量。事实上,还有很多方法可以改变模型的容量。容量不仅取决于模型的选择。模型规定了调整参数降低训练目标时,学习算法可以从哪些函数族中选择函数。这被称为模型的表示容量(Representational Capacity)。在很多情况下,从这些函数中挑选出最优函数是非常困难的优化问题。实际中,学习算法不会真的找到最优函数,而仅是找到一个可以大大降低训练误差的函数。额外的限制因素,比如
优化算法的不完美,意味着学习算法的有效容量(Effective Capacity)可能小于模型族的表示容量。

提高机器学习模型泛化的现代思想可以追溯到早在托勒密时期的哲学家的思想。许多早期的学者提出一个简约原则,现在广泛被称为 奥卡姆剃刀(Occam’s Razor)。该原则指出,在同样能够解释已知观测现象的假设中,我们应该挑选 ‘‘最简单’’ 的那一个。这个想法是在20世纪,由统计学习理论形式化并精确化的 。统计学习理论提供了量化模型容量的不同方法。在这些中,最有名的是 Vapnik Chervonenkis 维度(Vapnik-Chervonenkis dimension, VC)。VC维度量二元分类器的容量。VC维定义为该分类器能够分类的训练样本的最大数目。假设存在 m m m个不同 x x x点的训练集,分类器可以任意地标记该 m m m个不同的 x x x点,VC维被定义为 m m m的最大可能值。

量化模型的容量使得统计学习理论可以进行量化预测。统计学习理论中最重要的结论阐述了训练误差和泛化误差之间差异的上界随着模型容量增长而增长,但随着训练样本增多而下降。这些边界为机器学习算法可以有效解决问题提供了理论验证,但是它们很少应用于实际中的深度学习算法。一部分原因是边界太松,另一部分原因是很难确定深度学习算法的容量。由于有效容量受限于优化算法的能力,确定深度学习模型容量的问题特别困难。而且对于深度学习中的一般非凸优化问题,我们只有很少的理论分析。

我们必须记住虽然更简单的函数更可能泛化(训练误差和测试误差的差距小),但我们仍然需要选择一个充分复杂的假设以达到低的训练误差。通常,当模型容量上升时,训练误差会下降,直到其渐近最小可能误差(假设误差度量有最小值)。通常,泛化误差是一个关于模型容量的U形曲线函数。为考虑容量任意高的极端情况,我们介绍非参数(Non-parametric)模型的概念。至此,我们只探讨过参数模型,例如线性回归。参数模型学习的函数在观测到新数据前,参数向量的分量个数是有限且固定的。非参数模型没有这些限制。

泛化误差是一个关于模型容量的U形曲线函数
有时,非参数模型仅是一些不能实际实现的理论抽象(比如搜索所有可能概率分布的算法)。然而,我们也可以设计一些实用的非参数模型,使它们的复杂度和训练集大小有关。这种算法的一个示例是 k近邻(kNN,k-Nearest Neighbor)算法。

不像线性回归有固定长度的向量作为权重,最近邻回归模型存储了训练集中所有的 X X X y y y。当需要为测试点 x x x分类时,模型会查询训练集中离该点最近的点,并返回相关的回归目标。我们也可以将参数学习算法嵌入另一个增加参数数目的算法来创建非参数学习算法。例如,我们可以想象这样一个算法,外层循环调整多项式的次数,内层循环通过线性回归学习模型。理想模型假设我们能够预先知道生成数据的真实概率分布。然而这样的模型仍然会在很多问题上发生一些错误,因为分布中仍然会有一些噪声。在监督学习中,从 x x x y y y的映射可能内在是随机的,或者 y y y可能是其他变量(包括 x x x在内)的确定性函数。从预先知道的真实分布 p ( x , y ) p(x, y) p(x,y)预测而出现的误差被称为贝叶斯误(Bayes
Error)。

训练误差和泛化误差会随训练集的大小发生变化。泛化误差的期望从不会因训练样本数目的增加而增加。对于非参数模型而言,更多的数据会得到更好的泛化能力,直到达到最佳可能的泛化误差。任何模型容量小于最优容量的固定参数模型会渐近到大于贝叶斯误差的误差值。值得注意的是,具有最优容量的模型仍然有可能在训练误差和泛化误差之间存在很大的差距。在这种情况下,我们可以通过收集更多的训练样本来缩小差距。

没有免费午餐定理

学习理论表明机器学习算法能够在有限个训练集样本中很好地泛化。这似乎违背一些基本的逻辑原则。归纳推理,或是从一组有限的样本中推断一般的规则,在逻辑上不是很有效。为了逻辑地推断一个规则去描述集合中的元素,我们必须具有集合中每个元素的信息。在一定程度上,机器学习仅通过概率法则就可以避免这个问题,而无需使用纯逻辑推理整个确定性法则。机器学习保证找到一个在所关注的大多数样本上可能正确的规则。

可惜,即使这样也不能解决整个问题。机器学习的没有免费午餐定理(No Free Lunch Theorem)表明,在所有可能的数据生成分布上平均之后,每一个分类算法在未事先观测的点上都有相同的错误率。换言之,在某种意义上,没有一个机器学习算法总是比其他的要好。我们能够设想的最先进的算法和简单地将所有点归为同一类的简单算法有着相同的平均性能(在所有可能的任务上)。

幸运的是,这些结论仅在我们考虑所有可能的数据生成分布时才成立。在真实世界应用中,如果我们对遇到的概率分布进行假设的话,那么我们可以设计在这些分布上效果良好的学习算法。这意味着机器学习研究的目标不是找一个通用学习算法或是绝对最好的学习算法。反之,我们的目标是理解什么样的分布与人工智能获取经验的 ‘‘真实世界’’ 相关,什么样的学习算法在我们关注的数据生成分布上效果最好。

参考文献:
[1] Lecun Y, Bengio Y, Hinton G. Deep learning[J]. Nature, 2015

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

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

相关文章

测试需求平台6-数据持久化与PyMySQL使用

✍此系列为整理分享已完结入门搭建《TPM提测平台》系列的迭代版,拥抱Vue3.0将前端框架替换成字节最新开源的arco.design,其中约60%重构和20%新增内容,定位为从 0-1手把手实现简单的测试平台开发教程,内容将囊括基础、扩展和实战&a…

信息安全技术 健康医疗数据安全指南 付下载地址

声明 本文是学习GB-T 39725-2020 信息安全技术 健康医疗数据安全指南. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 数据使用管理办法示例 第一章 总则 第一条 为规范数据使用流程,根据国家相关法律法规及相关规定,特制定本…

imgaug Augment Polygons 对标注图片和polygons的数据增强

对于本地化进行图像的增强,大家都是非常好操作的。但是,对于标注信息一起增强,还是稍微有一些难度的,麻烦很多。 我是遇到一个数据集非常少的任务,只有40张图。就直接标记了去训练,发现几乎不拟合&#xf…

这一篇搞定Spring

文章目录 一、引言1.1 原生web开发中存在哪些问题? 二、Spring框架2.1 概念2.2 访问与下载 三、Spring架构组成四、山寨版的Spring容器4.1准备工作4.2 山寨IOC容器4.3 配置文件告诉容器 管理哪些bean4.4 相关类4.5 测试 容器 五、构建Maven项目5.1 新建项目5.2 选择…

深度强化学习——AlphaGo实例讲解(5)

现在我们来分析AlphaGo这个实例,看看深度强化学习是怎么样用来玩围棋游戏的 AlphaGo的主要设计思路: 首先是训练,要分3步来做: 1、behavior cloning:这是一种模仿学习,alphaGo模仿人类玩家,从…

STM32平衡小车 pid简单学习

自动控制系统 自动控制系统可分为开环控制系统和闭环控制系统。 1、开环控制系统开环控制系统(open-loop control system)指被控对象的输出(被控制量)对控制器(controller)的输出没有影响。在这种控制系统中,不依赖将被控量反送回来以形成任何闭环回路。 2、闭环控…

c++入门(下)

C入门(下) 对于C的基础语法的讲解,由想要实现多次重复的函数,引出宏函数和inline的内联函数的对比,对于inline的讲解和运用,在后,C语言中的NULL和C中独特的nullptr的相比两者的比较&#xff0c…

kong(4):限流配置

Kong 提供了 Rate Limiting 插件,实现对请求的限流功能,避免过大的请求量过大,将后端服务打挂。 Rate Limiting 支持秒/分/小时/日/月/年多种时间维度的限流,并且可以组合使用。例如说:限制每秒最 多 100 次请求&…

Windows Server 2012R2 安装mysql 丢失VCRUNTIME140_1.dll------亲测

无去启动此程序,因为计算机中丢失VCRUNTIME140_1.dll。尝试重新安装该程序以解决此问题。 1.解决思路 说到底还是缺少底层的依赖,先下载依赖然后安装,最后安装vc。要不然vc是安装不成功。 下载安装--一下的插件 安装过程中需要重启一次电脑。 注意:必…

Android LoaderManager AsyncTaskLoader加载全部图片RecyclerView BigImageView呈现,Java(1)

Android LoaderManager AsyncTaskLoader加载全部图片RecyclerView BigImageView呈现&#xff0c;Java&#xff08;1&#xff09; 权限&#xff1a; <uses-permission android:name"android.permission.READ_EXTERNAL_STORAGE" /><uses-permission android:n…

VUE3子组件-业务代码优化

Vue3子组件 1.简介 Vue 3组件的主要优势之一就是它们可以帮助你将你的应用程序分解成可维护和可重用的部分。当你在应用程序中多次使用相同的代码时&#xff0c;你可以将它们抽象成一个组件&#xff0c;然后在应用程序中的多个地方使用该组件&#xff0c;而不必每次都编写相同…

5年了,终于入职阿里测试岗位,直接涨薪30K...

前言 本科毕业后就一直从事软件测试的工作&#xff0c;和多数人一样&#xff0c;最开始从事功能测试的工作&#xff0c;看着自己的同学一步一步往上走&#xff0c;自己还是在原地踏步&#xff0c;说实话这不是自己想要的状态。 一年半后开始沪漂生活&#xff0c;又摸爬滚打了…

阿里巴巴软件测试面试过了,起薪20k

普通二本计算机专业毕业&#xff0c;从毕业后&#xff0c;第一份接触测试的工作是在一家通讯小公司&#xff0c;大部分接触的工作是以功能测试为主&#xff0c;一直都是几千块钱工资&#xff0c;还一度被派出差&#xff0c;以及兼职各种产品、运维、运营的活&#xff0c;感觉自…

Cleer ARC II 音弧

戴上Cleer ARC II 音弧解放双耳&#xff0c;享受更自由的音符 用惯了各种入耳式耳机&#xff0c;换上开放式耳机&#xff0c;戴着确实更加舒服&#xff0c;特别是我现在用的这款Cleer ARC II 音弧&#xff0c;戴上还不容易掉&#xff0c;很适合运动使用。这款耳机采用一种耳挂佩…

JavaEE1(4/23)

目录 1.计算机CPU 2.CPU和GPU的区别 3.线程 4.内存是如何分配的 5.进程的调度 6.线程和进程的区别和联系&#xff1f; 1.计算机CPU 主频 &#xff1a;运算速度 3.73Ghz 表示每秒计算37.3亿次 基准速度&#xff1a;最小计算速度 睿频&#xff1a;最大运行速度 超频&…

【头歌C语言程序设计】结构体解答

写在前面 这道题总体来说还是偏难的&#xff0c;如果只看代码比较难以理解&#xff0c;当结构体的文章发出后&#xff0c;就有许多小伙伴问我这个问题&#xff0c;我开始意识到&#xff0c;可能我对这道题所作的解答还不够&#xff08;不装了&#x1f601;&#xff0c;根本没有…

Python进阶篇(三)-- TCP套接字与UDP套接字编程

1 Python3 网络编程 1.1 介绍 本文将首先利用 Python 实现面向TCP连接的套接字编程基础知识&#xff1a;如何创建套接字&#xff0c;将其绑定到特定的地址和端口&#xff0c;以及发送和接收数据包。其次还将学习 HTTP 协议格式的相关知识。在此基础上&#xff0c;本篇将用 Pyt…

Spring boot项目编译后未能加载静态资源文件

起因: 因甲方爸爸加了一个紧急的需求: 需要搞一个文件上传和下载功能. 我心中想:这不简单,搞个资源服务器,将上传文件放上去,然后访问资源链接就行了. 但接下来甲方爸爸说 不需要这莫麻烦,直接将文件放服务器里,用的时候下载到资源文件夹下就行. 我心里想: 我擦嘞 还能这样!! 然…

【C++】—— STL简介(了解)

前言&#xff1a; 在上节&#xff0c;我们简单的认识了模板的基本概念。今天我简单的给大家介绍一下关于 STL 。 目录 &#xff08;一&#xff09; 什么是STL &#xff08;二&#xff09; STL的版本 &#xff08;三&#xff09; STL的六大组件 &#xff08;四&#xff09;…

Tomcat概述以及部署与优化

一、Tomcat概述 1、Tomcat的概念 Tomcat是Java语言开发的&#xff0c;服务器是一个免费的开放源代码的Web应用服务器&#xff0c;属于轻量级应用服务器&#xff0c;在中小型系统和并发访问用户不是很多的场合下被普遍使用&#xff0c;是开发和调试JSP程序的首选。一般来说&am…