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

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


机器学习的主要挑战是我们的算法必须能够在先前未观测的新输入上表现良好,而不只是在训练集上表现良好。在先前未观测到的输入上表现良好的能力被称为泛化(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.mfbz.cn/a/13516.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

20、单元测试

文章目录 1、JUnit5 的变化2、JUnit5常用注解3、断言(assertions)1、简单断言2、数组断言3、组合断言4、异常断言5、超时断言6、快速失败 4、前置条件(assumptions)5、嵌套测试6、参数化测试7、迁移指南 【尚硅谷】SpringBoot2零基…

医院体检PEIS系统源码

一、医院体检系统概述 1. 医院体检系统概述 目前,大多数的体检还停留在手工操作上,如单位体检时手工书写体检人员信息、医生手工书写体检结果、检验报告打印后进行手工粘贴等,这样造成极大的工作量,效率低下,而且极易…

OpenCV 安卓编程示例:1~6 全

原文:OpenCV Android Programming By Example 协议:CC BY-NC-SA 4.0 译者:飞龙 本文来自【ApacheCN 计算机视觉 译文集】,采用译后编辑(MTPE)流程来尽可能提升效率。 当别人说你没有底线的时候,…

npm和yarn的相同点和不同点

官网 npmhttps://www.npmjs.com Home | Yarn - Package ManagerFast, reliable, and secure dependency management.https://yarnpkg.com Fast, disk space efficient package manager | pnpmFast, disk space efficient package managerhttps://pnpm.io 使用场景 npm&#x…

发布会前准备新闻通稿的重要性,为什么媒体不会原稿发布报道?

传媒如春雨,润物细无声,大家好,我是51媒体 胡老师。 最近有宣传的小伙伴问胡老师,为什么我们精心准备的新闻通稿,媒体没有按照稿子发布呢?今天就与大家交流下这方面的经验。 一,发布会前准备新…

4月20日第壹简报,星期四,农历三月初一,谷雨

4月20日第壹简报,星期四,农历三月初一,谷雨坚持阅读,静待花开1. 已致29人死亡,26人为患者!北京长峰医院火灾事故因院内施工作业火花引发,院长王某玲等12人被刑拘。2. 海南发布旅游产品参考价格&…

教你轻松申请Azure OpenAI

Azure OpenAI 和 OpenAI 官方提供的服务基本是一致的,但是目前前者还是处于预览版的状态,一些功能还没有完全开放。 优点: 不受地域限制,国内可以直接调用。可以自己上传训练数据进行训练(据说很贵)。Azu…

低代码开发重要工具:jvs-logic(逻辑引擎)可视化设计要素

逻辑引擎可视化的交互 可视化的服务编排是逻辑引擎的核心功能,逻辑引擎的界面可视化设计是为了方便用户使用和操作逻辑引擎而设计的。一个好的界面设计能够提高用户的工作效率和使用体验,同时也能增加软件的可靠性和可维护性。 以下是逻辑引擎界面可视化…

【Linux初阶】进程的相关概念 | 进程管理 查看进程 获取进程标识符 fork进程创建

🌟hello,各位读者大大们你们好呀🌟 🍭🍭系列专栏:【Linux初阶】 ✒️✒️本篇内容:进程的概念,进程管理初识(描述、管理进程),查看进程的基础方法…

K_A33_001 基于STM32等单片机驱动RC522射频卡 读写IC卡 串口显示

K_A33_001 基于STM32等单片机驱动RC522射频卡 读写IC卡 串口显示 所有资源导航一、资源说明二、基本参数参数引脚说明 三、驱动说明时序:对应程序: 四、部分代码说明1、接线引脚定义1.1、STC89C52RCRC522射频模块1.2、STM32F103C8T6RC522射频模块 五、基础知识学习与相关资料下…

使用chatgpt实现微信聊天小程序(秒回复),github开源(附带链接)

文章目录 前言效果展示原理说明服务器端代码说明微信小程序代码说明代码链接总结 前言 我在前一段时间突发奇想,就使用java来调用chatgpt的接口,然后写了一个简单小程序,也上了热榜第一,java调用chatgpt接口,实现专属…

nodejs+vue 智能餐厅菜品厨位分配管理系统

系统功能主要介绍以下几点: 本智能餐厅管理系统主要包括三大功能模块,即用户功能模块和管理员功能模块、厨房功能模块。 (1)管理员模块:系统中的核心用户是管理员,管理员登录后,通过管理员功能来…

基于matlab使用 CSI-RS 的 NR 下行链路发射端波束细化

一、前言 此示例演示了使用 5G 工具箱中的信道状态信息参考信号 (CSI-RS) 的下行链路发射端波束细化过程。该示例展示了如何在散射环境中向不同方向传输多个CSI-RS资源,以及如何根据参考信号接收功率(RSRP)测量结果选择…

编写高质量代码:改善Java程序的151个建议(数组和集合)

集合中的元素必须做到compareTo和equals同步 实现了Comparable接口的元素就可以排序,compareTo方法是Comparable接口要求必须实现的,它与equals方法有关系吗?有关系,在compareTo的返回为0时,它表示的是 进行比较的两个元素时相等…

某医院网络安全分析案例

背景 我们已将NetInside流量分析系统部署到某市医院的机房内,使用流量分析系统提供实时和历史原始流量。本次分析重点针对网络流量安全进行分析,以供安全取证、网络质量监测以及深层网络分析。 分析时间 报告分析时间范围为:2023-04-12 16…

Cloud Kernel SIG月度动态:发布 Anolis 8.8 镜像、kABI 社区共建流程

Cloud Kernel SIG(Special Interest Group):支撑龙蜥内核版本的研发、发布和服务,提供生产可用的高性价比内核产品。 01 SIG 整体进展 Anolis 8.8 镜像发布,默认搭载 ANCK 5.10-013 版本。 Anolis 23 滚动内核更新至…

ai智能文章生成器-ai论文写作

在数字时代,营销推广策略已经向数字化方向发展。今天我们要介绍的是一款名为“智能ai写作免费”的软件,它可以让营销人员轻松地创作新的内容,并且其中不需要过多的技术知识或文学背景。这款软件可以为许多企业和机构带来创造性的帮助。 智能A…

@Async异步线程:Spring 自带的异步解决方案

前言 在项目应用中,使用MQ异步调用来实现系统性能优化,完成服务间数据同步是常用的技术手段。如果是在同一台服务器内部,不涉及到分布式系统,单纯的想实现部分业务的异步执行,这里介绍一个更简单的异步方法调用。 对于…

电脑端(PC)按键精灵——5.找色/找图命令

电脑端(PC)按键精灵——5.找色/找图命令 注:说了键盘、鼠标、其他、控制命令还有安装内容,现在说下颜色/图形命令,这一节相当重要 按键精灵小白入门详细教程: 电脑端(PC)按键精灵—小白入门 详细教程 命令介绍 1.GetPixelCol…

【C++类】

目录 前言一、类的定义二、类的访问限定符及封装2.1访问限定符2.2封装 三、类的大小3.1为什么需要内存对齐3.2为什么成员函数不占用类的内存?3.3为什么空类的大小是1个字节? 四、this指针4.1this指针的引入4.2this指针的特性 五、类的6个默认成员函数5.1…