之前这篇文章,我分析了一下深度学习中,模型过拟合的主要原因以及解决办法:

过拟合的原因以及解决办法(深度学习)_大黄的博客-CSDN博客

这篇文章中写一下深度学习中,模型欠拟合的原因以及一些常见的解决办法。

也就是为什么我们设计的神经网络它不收敛?

这里还是搬这张图出来,

所谓欠拟合(也就是神经网络不收敛),它的表现就是训练集上的性能表现很辣鸡,测试集的表现同样很辣鸡。

一个良好的模型,它应该是训练集上表现很好,测试集上表现也很好的。

下面我列举几种常见的原因以及解决办法:

一.数据未做归一化处理

不同于传统的机器学习模型(比如随机森林,梯度提升回归树等树模型),在神经网络的训练中,对你的数据进行归一化是非常重要且不能省略的步骤。

初学者可能会忽略这个步骤,从而忘记对数据进行归一化。这里我最开始入门的时候也犯了这一错误,导致怎么调模型,它都不收敛,而且性能表现贼差。后来归一化之后,就直接解决了此问题。数据归一化跟不归一化的区别可谓是天壤之别。我们几乎不可能在不进行归一化的前提下可以训练得到一个很好的网络模型这个步骤非常重要,而且在深度学习社区也很有名,所以很少人会提到它,但是对于初学者则是可能会犯下的一个错误。

我们需要对数据进行归一化操作的原因,主要是我们一般假设输入和输出数据都是服从均值为 0,标准差为 1 的正态分布。这种假设在深度学习理论中非常常见,从权重初始化,到激活函数,再到对训练网络的优化算法。

我们常用的归一化方法是线性函数归一化(Min-Max Scaling)。它对原始数据进行线性变换,使得结果映射到[0,1]的范围,实现对原始数据的等比缩放,公式如下:

其中 X 是原始数据,Xmax以及Xmin分别表示数据最大值和最小值,Xnorm为归一化后的数值。

二.没有使用任何正则化方法

正则化是现在训练神经网络一个非常重要的方法,通常是以 dropout、噪音或者其他某种随机过程的形式来加入到网络中。即便数据维度比参数更多,或者是在某种情况下不需要在意过拟合或者不可能出现过拟合,加入 dropout 或者某些形式的噪音仍然是很有帮助的。

正则化方法不仅仅是用于控制过拟合,通过在训练过程中引入一些随机过程,在某种程度上是"平滑"了成本格局。这可以加快训练收敛的速度,帮助处理数据中的噪声或异常值,并防止网络的极端权值配置。

最常用的正则化方法就是在卷积层或者全连接层之前采用 dropout 。一般会采用一个较高的概率,比如 0.75 或者 0.9,然后基于网络可能过拟合的概率来调整这个概率值,比如觉得不太可能出现过拟合,那么就把保留神经元的概率设置得非常高,比如 0.99。

数据增强或其他类型的噪音也可以像dropout一样实现正则化,有时候使用了足够的数据增强就可以不用 dropout。通常 dropout 被认为是将许多随机子网络的预测相结合的技术,但也可以将它视为一种数据增强的形式,在训练期间产生许多相似的输入数据变化。正如我们所知,避免过度拟合的最好方法是拥有足够多的数据,使得神经网络永远不会看到同样的数据两次!

最后,像训练神经网络其他方面一样,你需要小心你使用的正则化。请记住,在预测期间将其关闭,并注意,一旦它被关闭,您通常会得到略有不同的结果。在你需要极其精确的数字预测的情况下,某些形式的正则化有时会使这一切变得困难。

三.使用了一个太大的batch size

使用一个太大的batch size会因为降低了梯度下降的随机性,导致降低了网络的准确度。

解决办法:使用较小的batch大小,因为较小的batch大小会产生波动更小,更随机的权重值更新,这有两个好处。

  1. 首先,在训练的时候它可以有助于“跳出”以前可能会陷入的局部最优值。
  2. 其次,它可以将训练进入到极小值中,这表示其有更好的泛化能力。

在训练的时候,可以找到一个可以容忍的最小的batch大小。让GPU并行使用最优的batch大小未必得到最好的准确度,因为更大的batch可能需要训练更多时间才能达到相同的准确率。所以建议从一个很小的batch大小开始训练,比如16,8,4甚至是1。

总体而言,重要的是考虑每次迭代中最终梯度更新的平均值,并确保您平衡其不利影响与尽可能多地使用 GPU 潜在并行性的必要性。

四.使用了一个错误的学习率

学习率对训练网络的容易程度以及准确度有很大的影响。而学习率的设置往往比较困难,幸运的是,常见的深度学习框架中已经提供好了学习率的默认选项。

许多深度学习框架在默认情况下启用梯度裁剪。这个操作是通过在训练中的每一步中改变一个最大数量的权值来防止出现梯度爆炸的情况。这可能很有用——特别是当你的数据包含许多异常值,这会产生很大的误差,从而产生很大的梯度和权重更新,但默认设置也会使手工找到最佳学习率变得非常困难。我发现大多数刚接触深度学习的人都将学习速率设置得过高,并通过梯度裁剪来解释这一点,使整体训练速度变慢,并且改变学习率的效果不可预测。

解决办法:不采用梯度裁剪。找出在训练过程中不会导致误差爆炸的最大学习率。将学习率设置为比这个低一个数量级,这可能是非常接近最佳学习率。如果你已经正确地清理了你的数据,删除了大部分的异常值,并正确地设置了学习速率,那么你真的不应该需要梯度剪裁。如果没有它,你会发现你的训练误差偶尔变得非常大,那么请使用梯度裁剪,但是请记住,看到你的训练错误爆发几乎总是表明你的一些数据有其他错误,梯度裁剪只是一个临时措施。

五.在最后一层使用错误的激活函数

在最后一层使用激活函数有时候会导致网络不能生成要求数值的完整范围,比如最常见的错误就是在最后一层采用 ReLU ,它会导致网络只能输出正数。

想想你模型的输出值是什么,最有可能的情况是,你的输出值是无限的正数或负数(回归任务),在这种情况下,不应该在最后一层使用激活功能。

如果输出值可能只在某个范围内有意义,例如它由范围 0-1 中的概率组成,则很可能在最后一层(如 sigmoid 激活功能)上应使用特定的激活功能(分类任务)。

一般来说,对于回归任务,在最后一层不应该使用任何激活功能。

六.  使用了一个太深的神经网络

网络是越深越好吗?实际上并总是这样的,越深越好一般是在做基准实验或者是希望在某些任务上尝试增加 1%甚至更多的准确率。但是如果 3,4,5 层的网络都学不到任何东西,那么使用 100+的网络层也会同样失败, 甚至更加糟糕。

虽然看起来是这样,但神经网络并不是在某人决定堆叠数百层的时候就突然开始获得突破性的结果的。过去十年里对神经网络所做的所有改进都是微小的、根本性的改变,这些改变既适用于深度网络,也适用于小型网络。如果你的网络不工作,更有可能是其他问题,而不是网络的深度问题。

解决办法:从一个2到8层的神经网络开始。只有当训练的网络有不错的性能,并开始研究如何提高准确性时,才开始尝试更深层次的网络。

从小处开始也意味着训练你的网络会更快,推理会更快,迭代不同的设计和设置会更快。最初,所有这些东西对网络的准确性的影响要比简单地堆叠更多的网络层大得多。

七. 隐藏层神经元的数量设置不正确

在某些情况下,使用过多或过少的隐藏神经元会让网络难以训练。

  • 神经元数量过少,它可能无法表达所需的任务,模型需要迭代的次数会更多;
  • 而神经元数量过多,它可能变得缓慢而笨拙,每次训练所花费的时间变长,难以去除残余噪声进行训练。

在决定要使用的隐藏神经元的数量时,关键是要大致考虑你认为表达你希望通过网络传递的信息所需的实际值的最少数量。然后你应该把这个数字放大一点。这将允许 dropout,以便网络使用更冗余的表示,并在你的估计中有一点余地。

如果你在做分类,你可能会使用类数量的5到10倍作为一个好的初始猜测,而如果你在做回归,你可能会使用输入或输出变量数量的 2 到 3 倍。当然,所有这些都高度依赖于环境,并且不存在简单的自动解决方案,良好的直觉仍然是决定隐藏层神经元数量的最重要因素。

从256到1024个隐藏神经元数量开始。然后,看看其他研究人员在相似应用上使用的数字,并以此为灵感。如果其他研究人员使用的数字与上面给出的数字有很大不同,那么可能有一些具体的原因,这可能对你来说很重要。

在现实中,与其他因素相比,隐藏神经元的数量往往对神经网络的性能有相当小的影响,在很多情况下,高估所需的隐藏神经元的数量只会使训练变慢,而没有什么负面影响。一旦网络开始工作,如果你仍然担心,就尝试一大堆不同的数字,并测量其准确性,直到找到最有效的一个。

欠拟合的原因以及解决办法(深度学习)相关推荐

  1. 过拟合、欠拟合的原因和解决办法

    目录 偏差和方差 过拟合 原因 解决办法 欠拟合 原因 解决办法 偏差和方差 偏差用来描述模型输出结果的期望和样本真实结果的差距. 方差用来描述模型对于给定值的输出稳定性. 具体的可以看下图: 过拟合 ...

  2. 【深度学习】模型过拟合的原因以及解决办法

    [深度学习]模型过拟合的原因以及解决办法 1.背景 2.模型拟合 3.简述原因 4.欠拟合解决办法 5.过拟合解决办法 1.背景 所谓模型过拟合现象: 在训练网络模型的时候,会发现模型在训练集上表现很 ...

  3. 过拟合的原因以及解决办法(深度学习)

    过拟合:模型在训练集上表现的非常好,但在测试集的数据下表现很差. 具体观察loss函数就是,train loss一直降低,而test loss先降低,而后随着epoach的增加,而不断增加. 这张图可 ...

  4. 过拟合的原因以及解决办法

    1.什么是过拟合  欠拟合是指模型没有能够很好的表现数据的结构,而出现的拟合度不高的情况.  过拟合是指模型过分的拟合训练样本,但对测试样本预测准确率不高的情况,也就是说模型泛化能力很差.如下图所示: ...

  5. 欠拟合、过拟合现象,及解决办法

    @创建于:2022.05.27 @修改于:2022.05.27 文章目录 1.过拟合与欠拟合 2.欠拟合 2.1 出现的原因 2.2 解决的办法 3.过拟合 3.1 出现的原因 3.2 解决的办法 4 ...

  6. 过拟合原因及解决办法

    过拟合原因及解决办法 知乎 过拟合出现的原因以及解决方案 过拟合 欠拟合过拟合出现的原因及解决办法

  7. 模型过拟合原因及解决办法

    模型过拟合原因及解决办法 过拟合现象 导致过拟合原因 解决办法 过拟合现象 对于样本量有限.但需要使用强大模型的复杂任务,模型很容易出现过拟合的表现,即在训练集上的损失小,在验证集或测试集上的损失较大 ...

  8. 线下auc涨,线上ctr/cpm跌的原因和解决办法

    " 这两年深度模型大火之后,各个团队都卯足了劲把网络规模做大做深,花了很大力气好不容易离线auc涨了不少,上线一看效果ctr和cpm反而下降.本文例举几种可能的原因和解决办法." ...

  9. sketch颜色和html颜色不一致,photoshop和sketch中图片色彩不一致的原因和解决办法...

    静电说:之前有用户提过类似的问题,他发现在photoshop中图片的色彩和sketch中图片的色彩不一致.下面看看静电翻译的一篇 bohemiancoding团队发表的博文,详细阐述了这种现象产生的原 ...

最新文章

  1. Linux 内核 4.20 圣诞发布!新增硬件支持,性能有所改进
  2. asp.net mvc 4 AntiForgery 提供的防伪标记适用于用户“”,但当前用户为“XX” 问题处理记录...
  3. 一个假设:如果两个量互为分类对象和分类载体则他们不可对易
  4. linux内核能否扩展,Linux内核用到的GCC扩展
  5. Github开源!适合初学者的机器学习和深度学习的资料合集
  6. ExtJs 中的 Ext.QuickTips.init()
  7. 功能与命令式编程。 Java 8中的斐波那契,素数和阶乘
  8. 【渝粤教育】国家开放大学2018年秋季 0233-21T学前儿童语言教育 参考试题
  9. sed和awk的常用实例 .
  10. 【英语学习】【WOTD】substantive 释义/词源/示例
  11. UVa 1605 (构造) Building for UN
  12. HDU 1281 棋盘游戏 【二分图最大匹配】
  13. 常见视频高速接口分析MIPI,LVDS,RGB,HDMI
  14. dhdas信号测试分析系统软件,基于DHDAS动态信号采集分析系统的折叠舵面模态试验探究...
  15. windows10未安装画图工具解决办法
  16. 2020 小米刷机相关总结
  17. Grounded theory相关知识
  18. 凡事预则立,不预则废。做事提前5分钟,更多主动权。
  19. 安装transformers库出现pyyaml卸不掉问题解决方法
  20. word2013表格文字上下居中

热门文章

  1. UCI计算机工程必修专业课,加州大学欧文分校(UCI)工程专业系将会在2012年首次录取中国高中毕业生。...
  2. FastQC结果解读
  3. BiB:王秀杰/裴小兵合作开发单细胞组学细胞标记基因鉴定算法COSG
  4. 中国农科院微生物生态和进化方向博士后招聘(有高通量数据分析经验者优先)...
  5. 环境微生物期刊—Applied and Environmental Microbiology
  6. Android酷欧天气实训报告书,萌新求助,第一行代码酷欧天气开发,遇到coolweather keeps s...
  7. Error in apply(df$var1, 2, mean) : dim(X) must have a positive length
  8. R语言对数正态分布分布函数Log Normal Distribution(dlnorm, plnorm, qlnorm rlnorm)实战
  9. 高斯混合模型聚类实战(Gaussian Mixtures)
  10. OCR引擎Tesseract以及pytesseract详解及实例