这里写目录标题

  • 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函数,当权重较小时,激活函数工作在线性区,此时神经元的拟合能力较弱。

综上所述,我们得出结论:

  1. 模型权重数量不宜太多
  2. 权重的取值范围应尽量一致
  3. 权重越小拟合能力越差

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

[深度学习-优化]欠拟合与过拟合以及解决方法相关推荐

  1. 深度学习部署:Windows安装pycocotools报错解决方法

    深度学习部署:Windows安装pycocotools报错解决方法 1.pycocotools库的简介 2.pycocotools安装的坑 3.解决办法 更多Ai资讯:公主号AiCharm 本系列是作 ...

  2. 深度学习:梯度消失和梯度爆炸的解决方法

    转载:梯度爆炸.消失原因及解决方法 深度学习:梯度消失与爆炸里面提到了梯度爆炸.消失的原因. 如何确定是否出现梯度爆炸?如: 模型无法从训练数据中获得更新(如低损失). 模型不稳定,导致更新过程中的损 ...

  3. 《动手学深度学习》手动导入数据集产生错误的解决方法

    动手学深度学习 书本网页版 https://zh.gluon.ai/chapter_preface/preface.html b站视频讲解 https://space.bilibili.com/209 ...

  4. 深度学习 --- 优化入门六(正则化、参数范数惩罚L0、L1、L2、Dropout)

    前面几节分别从不同的角度对梯度的优化进行梳理,本节将进行正则化的梳理,所谓正则化,简单来说就是惩罚函数,在机器学习中的SVM中引入拉格朗日乘子法即引入惩罚项解决了约束问题,在稀疏自编码器中我们引入了惩 ...

  5. Adam 那么棒,为什么还对 SGD 念念不忘?一个框架看懂深度学习优化算法

    作者|Juliuszh 链接 | https://zhuanlan.zhihu.com/juliuszh 本文仅作学术分享,若侵权,请联系后台删文处理 机器学习界有一群炼丹师,他们每天的日常是: 拿来 ...

  6. 基于语言模型的少样本学习 / 深度学习优化器基准测试 | 本周值得读

    在碎片化阅读充斥眼球的时代,越来越少的人会去关注每篇论文背后的探索和思考.在这个栏目里,你会快速 get 每篇精选论文的亮点和痛点,时刻紧跟 AI 前沿成果.如果你也希望让自己的科研成果被更多人看到, ...

  7. 深度学习:优化方法——momentum、Nesterov Momentum、AdaGrad、Adadelta、RMSprop、Adam

    深度学习:优化方法 1. 指数加权平均(Exponentially weighted average) 2. 带偏差修正的指数加权平均(bias correction in exponentially ...

  8. 10倍!微软开源深度学习优化库DeepSpeed,可训练1000亿参数模型

    点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 编辑:Sophia 计算机视觉联盟  报道  | 公众号 CVLianMeng 转载于 :微软 AI博士笔记系列推荐 ...

  9. 微软开源深度学习优化库 DeepSpeed,可训练 1000 亿参数的模型

    人工智能的最新趋势是,更大的自然语言模型可以提供更好的准确性,但是由于成本.时间和代码集成的障碍,较大的模型难以训练.微软日前开源了一个深度学习优化库 DeepSpeed,通过提高规模.速度.可用性并 ...

最新文章

  1. 【简报】超棒的拖放式文件上传javascript类库:FileDrop
  2. 电信、联通、移动、其它路由表 2011-06-19更新
  3. perl中用warn进行调试
  4. LeetCode 1300. 转变数组后最接近目标值的数组和(二分查找)
  5. 磁盘文件的正常读写与异步读写
  6. web-java-Java Concurrency Utilities
  7. java keytool工具详解
  8. 分享一个Xshell注册码
  9. python怎么判断质数和合数_用java如何写代码去判断质数和合数
  10. 华为微认证华为云计算服务实践稳过 笔记资料
  11. origin画图对图片进行缩放时,如何不让文字一同缩放?
  12. 玫瑰花怎么画?花朵怎么画?鲜花怎么画?
  13. 华硕天选3和联想拯救者r9000p哪个好
  14. 怎么在MAC系统下查看系统详细信息?新手快来看!
  15. 超微服务器芯片,北京超微GPU服务器
  16. c++语言运算符,c++运算符
  17. hdfs datanode 清除回收站的命令
  18. Solidworks安装失败,出现内部错误:该产品组件的windows installer没按预期运
  19. 前端入门Python
  20. 有道购物助手脚本版,支持chrome,解决bug【Update 0.03】!

热门文章

  1. 坑爹BUG,没有详细的看还真看不出问题
  2. 【原创】CLEVO P157SM外接鼠标键盘失灵解决:更换硅脂(附带最新跑分数据)
  3. 指针的理解 -- java程序员学C语言日记二
  4. 关于 V C++ 中 Error 6 fatal error C1075的解决办法
  5. TypeScript 简介与优势
  6. Javascript前端加载等待圆型圈提示实现效果
  7. DataX离线数据同步工具/平台
  8. Oracle IMPDP导入数据案例之注意事项(undo/temp)
  9. SpringBoot约定大于配置的特性解读 SpringBoot快速入门
  10. 数据可视化组件Grafana详细解读--在Docker上安装Grafana管理平台