过拟合:模型在训练集上表现的非常好,但在测试集的数据下表现很差。

具体观察loss函数就是,train loss一直降低,而test loss先降低,而后随着epoach的增加,而不断增加。

这张图可以清楚地帮你了解你的模型是否过拟合。

过拟合的原因:

1.训练数据太少(比如只有几百组)

2.模型的复杂度太高(比如隐藏层层数设置的过多,神经元的数量设置的过大),举个简单的例子,你的模型是高射炮,结果你的数据是蚊子,这不就很扯淡了吗。

过拟合的解决方案:

解决过拟合问题有两个方向:

降低参数空间的维度或者降低每个维度上的有效规模(effective size)。

  1. 降低参数数量的方法包括greedy constructive learning、剪枝和权重共享等。
  2. 降低每个参数维度的有效规模的方法主要是正则化,如权重衰变(weight decay)和早停法(early stopping)等。

1.降低模型的复杂度

这也是最重要的一步,为了降低模型的复杂度,我们可以减少神经元的个数,减少隐藏层的层数(网络深度),尝试将复杂的网络结构一步步更换为较简单的网络结构。

或者尝试使用传统的机器学习模型(比如随机森林,高斯过程回归,梯度提升回归树之类的模型)。

2.训练集增加更多的数据

深度学习适应的场景往往就是大数据集,对于小样本,过拟合现象的产生往往是不可避免的。通过增加数据只能缓解过拟合,并不能避免。

3.数据增强

使用数据增强可以生成多幅相似图像。这可以帮助我们增加数据集规模从而减少过拟合。因为随着数据量的增加,模型无法过拟合所有样本,因此不得不进行泛化。

计算机视觉领域通常的做法有:翻转、平移、旋转、缩放、改变亮度、添加噪声等等

音频数据增强方法有:增加噪音、增加混响、时移、改变音调和时间拉伸。

4.L1与L2正则化

在Loss Function(损失函数)中加入一个正则化项(其实就是penalty)。常见的有L1正则化与L2正则化。

L1正则化的目的是使权重的绝对值最小化,公式如下:

L2正则化的目的是使得权重的平方最小化,公式如下:

pytorch的官方库仅支持L2正则化,即通过设置weight_decay(权重衰减系数)的值,若过拟合现象比较严重,可以设置该值为100或者1000或者更大的值。

opt_adam = torch.optim.Adam(model.parameters(), lr=LR,weight_decay=100.0)

L1正则化与L2正则化的对比如下表所示:

L1正则化 L2正则化
L1惩罚权重绝对值的总和 L2惩罚权重平方和的总和
L1适合简单,可解释的模型 L2比较适合学习复杂的数据模式
L1受数据极端值的影响比较小 L2受极端值的影响比较大

如果数据过于复杂以至于无法准确地建模,那么L2是更好的选择,因为它能够学习数据中呈现的内在模式。

而当数据足够简单,可以精确建模的话,L1更合适。对于大多数CV问题,L2正则化几乎总是可以给出更好的结果。

然而L1不容易受到离群值的影响。所以正确的正则化选项取决于我们想要解决问题的场景。

5.Drop out

Dropout 是一种避免神经网络过拟合的正则化技术。不同于像L1和L2这样的正则化技术通过修改代价函数来减少过拟合。它使用丢弃法修改神经网络本身,在训练的每一次迭代过程中随机地丢弃神经网络中的某些神经元。

当我们丢弃不同神经元集合的时候,就等同于训练不同的神经网络。不同的神经网络会以不同的方式发生过拟合,所以丢弃的净效应将会减少过拟合的发生。

如上图所示,丢弃法被用于在训练神经网络的过程中随机丢弃神经网络中的神经元。这种技术被证明可以减少很多问题的过拟合,这些问题包括图像分类、图像切割、词嵌入、语义匹配等问题。

6.early stopping

当我们训练深度学习神经网络的时候,通常希望能获得最好的泛化性能(generalization performance,即可以很好地拟合数据)。

但是所有的标准深度学习神经网络结构如全连接多层感知机(MLP)都很容易过拟合:当网络在训练集上表现越来越好,错误率越来越低的时候,实际上在某一刻,它在测试集的表现已经开始变差。如下图所示:

早停法(early stopping)是一种被广泛使用的方法。在很多案例上都比正则化的方法要好。图1是我们经常看到论文中出现的图,也是使用早停法出现的一个结果。

其基本含义是在训练中计算模型在测试集上的表现,当模型在测试集的表现开始下降的时候,停止训练,这样就能避免继续训练导致过拟合的问题。其主要步骤如下:

  1. 将原始的训练数据集划分成训练集和验证集
  2. 只在训练集上进行训练,并每个一个周期计算模型在验证集上的误差,例如,每15次epoch(mini batch训练中的一个周期)
  3. 当模型在验证集上的误差比上一次训练结果差的时候停止训练
  4. 使用上一次迭代结果中的参数作为模型的最终参数

然而,在现实中,模型在验证集上的误差不会像上图那样平滑,而是可能像下图一样:

也就是说,模型很有可能在验证集上的表现可能咱短暂的变差之后有可能继续变好。

但是,并不是所有的误差曲线都像上图一样,有可能在出现第一次最低点之后,后面再也没有比当前最低点更低的情况了。所以我们看到,早停法主要是训练时间和泛化错误之间的权衡。尽管如此,也有某些停止标准也可以帮助我们寻找更好的权衡。

停止标准的选择规则:

一般情况下,“较慢”的标准会相对而言在平均水平上表现略好,可以提高泛化能力。然而,这些标准需要较长的训练时间。其实,总体而言,这些标准在系统性的区别很小。主要选择规则包括:

  1. 除非较小的提升也有很大价值,负责选择较快的停止标准
  2. 为了最大可能找到一个好的方案,使用GL标准
  3. 为了最大化平均解决方案的质量,如果网络只是过拟合了一点点,可以使用PQ标准,否则使用UP标准

7.数据清洗

其中包括把数据异常值去除掉。

8.使用集成学习方法

把多个模型集成在一起,降低单个模型的过拟合风险。

9.批量正则化(Batch Normalization)

就是将卷积神经网络的每层之间,加上将神经元的权重调成标准正态分布的正则化层,这样可以让每一层的训练都从相似的起点出发。

而对权重进行拉伸,等价于对特征进行拉伸,在输入层等价于数据增强。注意正则化层是不需要训练的。

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

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

    之前这篇文章,我分析了一下深度学习中,模型过拟合的主要原因以及解决办法: 过拟合的原因以及解决办法(深度学习)_大黄的博客-CSDN博客 这篇文章中写一下深度学习中,模型欠拟合的原因以及一些常见的解决 ...

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

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

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

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

  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. JEECMS的新浪图集在IE9、10不能显示大图片BUG的解决方法
  2. 【星球知识卡片】模型压缩重要方向-动态模型,如何对其长期深入学习
  3. 07_js走路小游戏
  4. 阿里巴巴DevOps实践指南 | 数字化转型下,DevOps的根本目标是什么?
  5. d3.js 简介和安装
  6. Python的主要8大应用领域,你还不会吗?
  7. Unix——《Unix网络编程》配置unp.h头文件
  8. 使用XStream对Java对象进行序列化和反序列化
  9. android定时器课程设计,定时器课程设计.doc
  10. php去除img,PHP如何去除IMG标签?_后端开发
  11. python 文件操作新姿势 pathlib模块的详细使用
  12. 基于组件技术的电子海图显示系统开发方法
  13. jq实现图片拖动滑块验证码
  14. ubuntu20.04设置静态IP地址
  15. python编程最大值_python求最大值最小值方法总结
  16. OpenCore 黑苹果安装教程
  17. 使用 window.open 打开新窗口
  18. 技術的變與不變之間...Silverlight 3.0的驚鴻一撇
  19. aic值检验 p值_模型选择方法:AIC和BIC
  20. STM32 定时器主从模式,上电立即输出脉冲,输出有尖刺,解决方法

热门文章

  1. 计算机组装安全常识,计算机组装与维护宝典
  2. 16S预测细菌表型-bugbase:革兰氏阴阳、生物膜、致病力、移动元件、氧气消耗等...
  3. PCE:南农沈其荣团队根系分泌物驱动土壤-微生物-养分之间的反馈作用以响应植物的生长...
  4. Nature:iHMP之“微生物组与前驱糖尿病”
  5. cap3拼接sanger序列:在线+本地分析方法实战
  6. 9月,最值得看的30篇肠道健康文献!
  7. R语言机器学习Caret包(Caret包是分类和回归训练的简称)、数据划分、数据预处理、模型构建、模型调优、模型评估、多模型对比、模型预测推理
  8. python使用matplotlib可视化线图(line plot)、并自定义设置可视化图像中没有网格线(remove grid line in matplotlib plot result)
  9. pandas使用select_dtypes函数移除dataframe中指定数据类型的数据列(exclude columns based on the data type in dataframe)
  10. R语言使用anova函数进行方差分析比较两个回归分析模型的差异、从而决定是否删除某些预测变量(Comparing nested models using the anova function)