为什么深度学习对训练样本的数量要求较高?

2023-12-19 19:32

本文主要是介绍为什么深度学习对训练样本的数量要求较高?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

提问:最近在研究深度卷积神经网络,看到很多的深度学习训练都需要几百万的训练样本,我想请教各位为什么深度学习一定要这么多训练样本呢,假如样本只有几万或者几千,对性能会有影响吗?

回答:

作者:Sisyphus
链接:https://www.zhihu.com/question/29633459/answer/45138977
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
 

对于classification model,有这样一个结论:


上式中N是训练样本数量,η大于等于0小于等于1,h是classification model的VC dimension。具体见wiki:VC dimension。

 

 

其中的这项:


也叫model complexity penalty。

 

 

可以看到,test error小于training error加上model complexity penalty的概率是1-η。如果现在训练模型的算法能使得training error很小,而model complexity penalty又很小,就能保证test error也很小的概率是 1-η。所以要使得模型的generalization比较好,要保证training error和model complexity penalty都能比较小。

 

观察model complexity penalty项,可以看到,h越大,model complexity penalty就会越大。N越大,model complexity penalty则会越小。大致上讲,越复杂的模型有着越大的h(VC dimension),所以为了使得模型有着好的generalization,需要有较大的N来压低model complexity penalty。 这就是为什么深度学习的模型需要大量的数据来训练,否则模型的generalization会比较差,也就是过拟合。
 

左:欠拟合
中:过拟合
右:深度学习

作者:Penguin Whisper
链接:https://www.zhihu.com/question/29633459/answer/150303826
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
 

画个train and test error VS 训练数据量(training set size) 的learningcurve应该会更加直观了。

可以找个简单的数据集,比如说handwritten digits或者什么的,分别用神经网络和决策树或者knn做出这个learningcurve。

你会看到如果用一个决策树去解决这个问题,随着数据量增加,比如加到500,1000的样本,test error会不断降低,train error会不断增加。最后比如在数据量为2000的地方两个error就收敛了,在0.20的附近比如说。

但是如果你用神经网络去解决这个问题,你会看到当数据量很小的时候train error就是0.01了,然后数据量从0增到500或者1000,train error还是0.01,就像是一条直线一样。直到数据量增加到几万的时候,才看到train error有略微明显的增加(比如到了0.02)。 所以数据量从0到5w,train error只从0.01增加到0.02。而test error虽然在降低,但是一直都比较大,所以overfitting一直存在。

但是我们有个信念是,如同楼上其他人说的,只要数据量足够大,那么test和train会沿着收敛的方向不断前进,而当数据量足够大,两个曲线收敛的那一刻达到的时候,不仅两个曲线收敛了,同时我们的train和test error都是比较低的,远低于上面的knn或者其他简单点的模型。 如果是DL深层的神经网络,可能要几百万才能够达到收敛,那么这个时候的test error肯定也是非常低的

 

所以过拟合,欠拟合,是衡量模型拟合能力与数据量之间相对关系的东西。

如果拟合能力很强,数据量相比拟合能力太少了,就是过拟合。 (在图线上,过拟合就是两个曲线之间有gap,两个曲线没有达到收敛状态,还在向收敛的方向趋近)

如果拟合能力很弱,数据量大大超过拟合能力大大足够了,就是欠拟合。(在图线上,欠拟合就是两个曲线收敛了,但是这个收敛对应的error值太高了。 那么怎么判断这个值太高了呢?这个是人视情况来决定的。)

所以从图线的角度来说,对等划分应该有三种状态:

1) 如果两个图线未收敛状态:这就叫过拟合。。

2) 如果两图线收敛了,但是收敛处的error值过高,不符合预期,就叫欠拟合。

3) 如果两图线收敛了,而且收敛处的error值比较低,符合预期,那么就叫成功了。这正是我们想要的。

另外,其实具体情况,还是要根据问题本身的复杂程度,模型的复杂程度,数据量,这三者一起来看的。

 

机器学习里,模型越复杂、越具有强表达能力越容易牺牲对未来数据的解释能力,而专注于解释训练数据。这种现象会导致训练数据效果非常好,但遇到测试数据效果会大打折扣。这一现象叫过拟合(overfitting)

深层神经网络因为其结构,所以具有相较传统模型有很强的表达能力,从而也就需要更多的数据来避免过拟合的发生,以保证训练的模型在新的数据上也能有可以接受的表现。

作者:某翔
链接:https://www.zhihu.com/question/29633459/answer/150421577
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
 

首先是因为curse of dimensionality。深度学习往往用于高维空间的学习,但是随着维度的增高所需要的样本数呈指数性增长。比如说对于Lipschitz连续的函数,minimax error rate是O(n^(-2/2+d)),其中d代表数据的维度。由此可见,为了达到同样的error rate,高维度比低维度函数所需要的样本数多了太多。
其次在于深度学习并没有足够的利用好函数本身的信息。之所以深度学习这么流行,是因为他对于所学习的函数的限制非常少,几乎毫无任何假设(一个hidden layer的神经网络就可以估计所有的连续函数,而两个hidden layer则可以估计所有函数)。但是这也带来了一个缺憾,当函数足够smooth足够光滑的时候深度学习可能难以利用好这个信息。相反,local polynomial之类方法可以用更高次数的多项式来估计这个函数,利用好这个条件,达到相对较低的错误率。
最后一点就在于深度学习常采用的是梯度下降。梯度下降,加上并不那么高的learning rate,导致了在样本量有限的时候各个节点的参数变化有限。何况各个节点的参数已开始往往是随机的,如果运气不好+样本量有限,那么最后有不那么理想的错误率也是可想而知的。

目前本人在做的工作是降低深度学习的样本使用数量,即主动学习(Active Learning)。

从实验效果来看,(1)并不是说样本量越多越好,主动学习方法可以大大降低样本使用数量并且达到很好的实验效果,没有overfitting;(2)主动学习结合深度学习可以衍生出深度学习在少量样本数据上的应用,如遥感图像分类(样本比普通图像要少很多);(3)样本本身是有噪声的,每个样本的价值是不同的。举个例子来说,直接用支持向量来训练一个支持向量机跟用全部数据训练一个支持向量机是差不多的。同样,深度学习的样本中也存在这样的重要的样本和不重要的样本。关键是质量。

深度学习都是几w的特征 ,用vc维来看,特征越多模型越复杂,如果ein要跟eout差不多,那么样本量是需要很巨大的,也就是我们说的overfit的问题。一般来说数据量是要十倍的vc维

 

 

这篇关于为什么深度学习对训练样本的数量要求较高?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/513435

相关文章

深度解析Python中递归下降解析器的原理与实现

《深度解析Python中递归下降解析器的原理与实现》在编译器设计、配置文件处理和数据转换领域,递归下降解析器是最常用且最直观的解析技术,本文将详细介绍递归下降解析器的原理与实现,感兴趣的小伙伴可以跟随... 目录引言:解析器的核心价值一、递归下降解析器基础1.1 核心概念解析1.2 基本架构二、简单算术表达

深度解析Java @Serial 注解及常见错误案例

《深度解析Java@Serial注解及常见错误案例》Java14引入@Serial注解,用于编译时校验序列化成员,替代传统方式解决运行时错误,适用于Serializable类的方法/字段,需注意签... 目录Java @Serial 注解深度解析1. 注解本质2. 核心作用(1) 主要用途(2) 适用位置3

Java MCP 的鉴权深度解析

《JavaMCP的鉴权深度解析》文章介绍JavaMCP鉴权的实现方式,指出客户端可通过queryString、header或env传递鉴权信息,服务器端支持工具单独鉴权、过滤器集中鉴权及启动时鉴权... 目录一、MCP Client 侧(负责传递,比较简单)(1)常见的 mcpServers json 配置

Maven中生命周期深度解析与实战指南

《Maven中生命周期深度解析与实战指南》这篇文章主要为大家详细介绍了Maven生命周期实战指南,包含核心概念、阶段详解、SpringBoot特化场景及企业级实践建议,希望对大家有一定的帮助... 目录一、Maven 生命周期哲学二、default生命周期核心阶段详解(高频使用)三、clean生命周期核心阶

深度剖析SpringBoot日志性能提升的原因与解决

《深度剖析SpringBoot日志性能提升的原因与解决》日志记录本该是辅助工具,却为何成了性能瓶颈,SpringBoot如何用代码彻底破解日志导致的高延迟问题,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言第一章:日志性能陷阱的底层原理1.1 日志级别的“双刃剑”效应1.2 同步日志的“吞吐量杀手”

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

深度解析Python yfinance的核心功能和高级用法

《深度解析Pythonyfinance的核心功能和高级用法》yfinance是一个功能强大且易于使用的Python库,用于从YahooFinance获取金融数据,本教程将深入探讨yfinance的核... 目录yfinance 深度解析教程 (python)1. 简介与安装1.1 什么是 yfinance?

Python学习笔记之getattr和hasattr用法示例详解

《Python学习笔记之getattr和hasattr用法示例详解》在Python中,hasattr()、getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询,这篇文章... 目录1.getattr用法详解1.1 基本作用1.2 示例1.3 原理2.hasattr用法详解2.

深度解析Spring Security 中的 SecurityFilterChain核心功能

《深度解析SpringSecurity中的SecurityFilterChain核心功能》SecurityFilterChain通过组件化配置、类型安全路径匹配、多链协同三大特性,重构了Spri... 目录Spring Security 中的SecurityFilterChain深度解析一、Security

深度解析Nginx日志分析与499状态码问题解决

《深度解析Nginx日志分析与499状态码问题解决》在Web服务器运维和性能优化过程中,Nginx日志是排查问题的重要依据,本文将围绕Nginx日志分析、499状态码的成因、排查方法及解决方案展开讨论... 目录前言1. Nginx日志基础1.1 Nginx日志存放位置1.2 Nginx日志格式2. 499