[深度学习-优化]欠拟合与过拟合以及解决方法
这里写目录标题
- 0. 什么是欠拟合
- 1. 什么是过拟合?
- 2. 什么原因导致了过拟合?
- 数据问题
- 模型问题
- 算法问题
- 3.防止过拟合的方法
- 3.1. Dropout
- 3.2. Regularization:
- 3.3. BatchNormalization
- 3.4 Early Stopping(提前停止训练)
- 3.5 数据增强 (Data Augmentation)
- 3.6 交叉验证
- 参考资料
0. 什么是欠拟合
若我们采用的模型过于简单表达能力不强,那么就会出现欠拟合的情况。例如:我们在构建网络对cifar 100数据集进行训练时,使用了一个线性模型 y = wx +b, 由于该数据集十分的复杂,我们会发现训练的准确率会很低,loss值会很高,并且随着训练次数的增加,其值不会有太大的改变。但是,当我们把模型换成非线性模型时,准确率会上升,loss值会下降。所以,当发现欠拟合时,我们只需要把模型变得复杂就好。
1. 什么是过拟合?
上图来自于吴恩达老师机器学习课程,第一张图是“欠拟合”(underfit),第三图是过拟合(overfit),第二张图是正好的状态。
有图可以看出来,过拟合就是训练的模型与数据集匹配的太完美,以至于“过了”。
过拟合的危害是:模型不够“通用”,也就是说如果将模型应用在新的数据上,得到的效果不好。
举例说明,如果一个模型在训练集上的准确率达到99.9%,而将模型应用在测试集时,准确率只有80%,很明显这是一个过拟合的状态。
2. 什么原因导致了过拟合?
数据问题
数据太少了,模型没有足够多的意外数据用来使模型更加通用。
模型问题
神经网络模型的复杂度太高了!
以至于模型的复杂程度高于问题的复杂程度!
或者说,复杂模型的拟合能力太强拥有了拟合噪声的能力。
算法问题
模型权重太多
模型的权重分配差异太大
权重的取值太大
权重太多,导致,模型的复杂度太大。
而模型的权重分配差异约大,模型越不够平滑。
想像一个例子,模型a的所有参数都是1,模型b的参数是[1,9999]范围内随机取值,暂不考虑准确度问题,前一个模型一定比后一个平滑的多。
关于权重取值大小的问题,先看下图
无论是图中的sigmoid函数还是Relu函数,当权重较小时,激活函数工作在线性区,此时神经元的拟合能力较弱。
综上所述,我们得出结论:
- 模型权重数量不宜太多
- 权重的取值范围应尽量一致
- 权重越小拟合能力越差
3.防止过拟合的方法
3.1. Dropout
请看我的这篇文章[深度学习-调优]dropout防止过拟合的理解
3.2. Regularization:
请看我的这篇文章[机器学习]正则化项L1和L2的学习与理解
3.3. BatchNormalization
请看我的这篇文章[深度学习] 简单理解Batch Normalization批标准化
3.4 Early Stopping(提前停止训练)
训练网络时,测试准确率和训练准确率都在上升,直到某个点开始,测试准确率开始下降,这个时候就有可能开始出现过拟合,当然,后续训练也可能出现测试准确率上升的情况,若经验告诉我们此时的测试准确率已经不再上升了,那么我们需要在测试准确率下降的点马上停止训练。
3.5 数据增强 (Data Augmentation)
1.翻转(Flip)
2.旋转(Rotation)
3.缩放比例(Scale)
4.裁剪(Crop)
5.移位(Translation)
6.高斯噪声(Gaussian Noise)
7.颜色增强
详细请看这篇数据增强 (Data Augmentation)
3.6 交叉验证
通常情况下,我们把数据集分成训练集和测试集,前者用来训练网络并求取网络参数,后者用于测试训练结果。但是,我们在判断当前模型是否已经达到预期时,使用的是测试集的数据,换句话讲,我们一直在利用测试数据集挑选最好的模型,所以,最后测试的准确率很高,这种方法其实也是一种过拟合的表现,为了防止过拟合的发生,我们会选择把整体数据集分割成三部分:训练数据,validation集,测试数据。其中,训练数据用于训练模型,validation集用于挑选模型表现最好的时刻,测试数据集用于测试当前模型的准确率。并且,测试数据集是和其他两种数据集完全分开的。
当数据集被分成三部分后,用于训练的数据就会变少,但额外增加训练数据集的成本太高了,所以,在每次进行训练完一个批次后,我们都会重新划分训练集和validation集,这样就可以保证,除了测试集的数据外,其他数据都会用于训练。
参考资料
[1] https://zhuanlan.zhihu.com/p/29592806
[2] https://blog.csdn.net/qq1440643730/article/details/103981920
[深度学习-优化]欠拟合与过拟合以及解决方法相关推荐
- 深度学习部署:Windows安装pycocotools报错解决方法
深度学习部署:Windows安装pycocotools报错解决方法 1.pycocotools库的简介 2.pycocotools安装的坑 3.解决办法 更多Ai资讯:公主号AiCharm 本系列是作 ...
- 深度学习:梯度消失和梯度爆炸的解决方法
转载:梯度爆炸.消失原因及解决方法 深度学习:梯度消失与爆炸里面提到了梯度爆炸.消失的原因. 如何确定是否出现梯度爆炸?如: 模型无法从训练数据中获得更新(如低损失). 模型不稳定,导致更新过程中的损 ...
- 《动手学深度学习》手动导入数据集产生错误的解决方法
动手学深度学习 书本网页版 https://zh.gluon.ai/chapter_preface/preface.html b站视频讲解 https://space.bilibili.com/209 ...
- 深度学习 --- 优化入门六(正则化、参数范数惩罚L0、L1、L2、Dropout)
前面几节分别从不同的角度对梯度的优化进行梳理,本节将进行正则化的梳理,所谓正则化,简单来说就是惩罚函数,在机器学习中的SVM中引入拉格朗日乘子法即引入惩罚项解决了约束问题,在稀疏自编码器中我们引入了惩 ...
- Adam 那么棒,为什么还对 SGD 念念不忘?一个框架看懂深度学习优化算法
作者|Juliuszh 链接 | https://zhuanlan.zhihu.com/juliuszh 本文仅作学术分享,若侵权,请联系后台删文处理 机器学习界有一群炼丹师,他们每天的日常是: 拿来 ...
- 基于语言模型的少样本学习 / 深度学习优化器基准测试 | 本周值得读
在碎片化阅读充斥眼球的时代,越来越少的人会去关注每篇论文背后的探索和思考.在这个栏目里,你会快速 get 每篇精选论文的亮点和痛点,时刻紧跟 AI 前沿成果.如果你也希望让自己的科研成果被更多人看到, ...
- 深度学习:优化方法——momentum、Nesterov Momentum、AdaGrad、Adadelta、RMSprop、Adam
深度学习:优化方法 1. 指数加权平均(Exponentially weighted average) 2. 带偏差修正的指数加权平均(bias correction in exponentially ...
- 10倍!微软开源深度学习优化库DeepSpeed,可训练1000亿参数模型
点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 编辑:Sophia 计算机视觉联盟 报道 | 公众号 CVLianMeng 转载于 :微软 AI博士笔记系列推荐 ...
- 微软开源深度学习优化库 DeepSpeed,可训练 1000 亿参数的模型
人工智能的最新趋势是,更大的自然语言模型可以提供更好的准确性,但是由于成本.时间和代码集成的障碍,较大的模型难以训练.微软日前开源了一个深度学习优化库 DeepSpeed,通过提高规模.速度.可用性并 ...
最新文章
- 【简报】超棒的拖放式文件上传javascript类库:FileDrop
- 电信、联通、移动、其它路由表 2011-06-19更新
- perl中用warn进行调试
- LeetCode 1300. 转变数组后最接近目标值的数组和(二分查找)
- 磁盘文件的正常读写与异步读写
- web-java-Java Concurrency Utilities
- java keytool工具详解
- 分享一个Xshell注册码
- python怎么判断质数和合数_用java如何写代码去判断质数和合数
- 华为微认证华为云计算服务实践稳过 笔记资料
- origin画图对图片进行缩放时,如何不让文字一同缩放?
- 玫瑰花怎么画?花朵怎么画?鲜花怎么画?
- 华硕天选3和联想拯救者r9000p哪个好
- 怎么在MAC系统下查看系统详细信息?新手快来看!
- 超微服务器芯片,北京超微GPU服务器
- c++语言运算符,c++运算符
- hdfs datanode 清除回收站的命令
- Solidworks安装失败,出现内部错误:该产品组件的windows installer没按预期运
- 前端入门Python
- 有道购物助手脚本版,支持chrome,解决bug【Update 0.03】!
热门文章
- 坑爹BUG,没有详细的看还真看不出问题
- 【原创】CLEVO P157SM外接鼠标键盘失灵解决:更换硅脂(附带最新跑分数据)
- 指针的理解 -- java程序员学C语言日记二
- 关于 V C++ 中 Error 6 fatal error C1075的解决办法
- TypeScript 简介与优势
- Javascript前端加载等待圆型圈提示实现效果
- DataX离线数据同步工具/平台
- Oracle IMPDP导入数据案例之注意事项(undo/temp)
- SpringBoot约定大于配置的特性解读 SpringBoot快速入门
- 数据可视化组件Grafana详细解读--在Docker上安装Grafana管理平台