过拟合的原因

1、数据量太小

    这个是很容易产生过拟合的一个原因。设想,我们有一组数据很好的吻合3次函数的规律,现在我们局部的拿出了很小一部分数据,用机器学习或者深度学习拟合出来的模型很大的可能性就是一个线性函数,在把这个线性函数用在测试集上,效果可想而知肯定很差了。

2、训练集和验证集分布不一致

训练集训练出一个适合训练集那样分布的数据集,当你把模型运用到一个不一样分布的数据集上,效果肯定大打折扣。这个是显而易见的。

3、模型复杂度太大

在选择模型算法的时候,首先就选定了一个复杂度很高的模型,然后数据的规律是很简单的,复杂的模型反而就不适用了。

4、数据质量很差

数据还有很多噪声,模型在学习的时候,肯定也会把噪声规律学习到,从而减小了具有一般性的规律。这个时候模型用来预测肯定效果也不好。

5、过度训练

这个是同第4个是相联系的,只要训练时间足够长,那么模型肯定就会吧一些噪声隐含的规律学习到,这个时候降低模型的性能是显而易见的。

过拟合的解决方法

针对过拟合的原因我们可以有针对性的来使用一些方法和技巧来减少过拟合。

1、模型层面
这里主要是减小模型的复杂度,主要是从模型包含的参数个数和参数值。

a、正则化

这里包含L1和L2范数,具体的区别去看相关的理论去了解,这里一般使用L1范数,使得模型拟合的参数大部分都为0,这样就可以说从参数值和参数个数的角度减少了模型的复杂度,从而降低了过拟合。

b、权值共享

这个方法常用于深度学习中,一般在网络中,某些层可能会使用同样的参数,那么这样就在参数个数上减小了——模型复杂度也随之降低

c、dropout

这个方法也很常见,在神经网络中以一定的概率使得神经元不工作。这种方法的本质上是没一个step中,使用的模型都是不一样的,并且模型参数在一定程度上也是减少了。

torch.nn.Dropout(0.5)
在pytorch中,这里的0.5的意思就是神经元不保留的概率,这个与tf框架不同。

d、Batch Normalization

这个批归一化处理层,是一个作用非常大的。我自己在写网络中也尝试在使用这个BN层,其作用是:使得每一层的数据分布不变,做归一化处理,加快了模型的收敛速度,避免梯度消失、提高准确率。反正就是优点很多!

e、权值衰减

权值衰减——weight_decay,简单的理解就是乘在正则项的前面的系数,目的是为了使得权值衰减到很小的值,接近如0。一般在深度学习好中,pytorch的提供的优化器都可以设置的:

optimizer = optim.SGD(model.parameters(), lr = 0.01, momentum=0.9,weight_decay=1e-5)
2、数据层面
a、保证数据集分布一致性

在切分数据集的时候要保证分布一致性。可以使用sklearn包中,model_selection相关train_text_split来实现数据集切割后分布的一致性。

b、增加数据集的规模

最好的是人工标注高质量的数据,但是成本非常高;可以采用一定的数据增强策略,来实现数据集的扩充。注意的是这里可能会引入一定的噪声,噪声也会影响模型的性能的,要注意利弊的取舍。另外CV和NLP的数据增强是不一样的,NLP数据增强更难。

3、训练层面
这个训练就要看经验了,模型需要到达什么样的一个基线标准。然后参考这个标准对模型实施early-stopping。神经网络的训练过程中我们会初始化一组较小的权值参数,随着模型的训练,这些权值也变得越来越大了。为了减小过拟合的影响,就有可能需要早停止了。我本人没有使用过early-stopping,一般都是设置10个epoch然后看效果来考虑时候增加epochs的次数。

4、其他
集成学习——也就是一个均值的思想,通过集成的思想来减弱过拟合的影响。

过拟合的原因和解决方法相关推荐

  1. 神经网络中的过拟合的原因及解决方法、泛化能力、L2正则化

    过拟合:训练好的神经网络对训练数据以及验证数据拟合的很好,accuracy很高,loss很低,但是在测试数据上效果很差,即出现了过拟合现象. 过拟合产生的原因: (1)数据集有噪声 (2)训练数据不足 ...

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

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

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

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

  4. 内存溢出和内存泄漏的定义,产生原因以及解决方法(面试经验总结)

    一.定义(概念与区别) 内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory:比如申请 了一个integer,但给它存了long才能存 ...

  5. dos系统不能安装python模块,无法使用pip命令安装python第三方库的原因及解决方法...

    再dos中无法使用pip,命令主要是没有发现这个命令.我们先找到这个命令的位置,一般是在python里面的scripts文件夹里面.我们可以把dos切换到对应的文件夹,再使用pip命令就可以了. 如果 ...

  6. xp路由器播放服务器无响应,xp系统连不上路由器的原因及解决方法

    路由器是互联网络的枢纽,"交通警察,在生活和办公中都随处可见了.在笔记本xp系统中遇到连不上路由器的问题,这样就没办法上网了,怎么回事呢?一是软件原因,二是硬件原因,遇到xp系统连不上路由器 ...

  7. “adb不是内部或外部命令,也不是可执行的应用程序”错误原因及解决方法

    用SQLite时,可能会出现这样的错误. 原因可能是环境变量PATH没有配置或配置不正确.应该把adb.exe 所在目录加入到PATH环境变量.例如:C:\Program Files\android- ...

  8. ASP.NET常见错误,原因及解决方法(2003版)_不断更新.....

    [标题]             ASP.NET常见错误,原因及解决方法[错误提示]    异常详细信息: System.Net.WebException: 请求因 HTTP 状态 401 失败:Un ...

  9. 虚拟机无法上网/连接失败原因及解决方法

    1.常见的普通原因解决方法 1.1 检查IP地址是否正确 命令:ip  a(空格a) 1.2 检查网卡是否配置正确 命令:cat /etc/sysconfig/network-scripts/ifcf ...

最新文章

  1. 北航算法作业一 约瑟夫环问题
  2. first level cache check - User parameter /UI2/CACHE_DISABLE
  3. Centos实现svn本地认证apache认证
  4. 这些棘手的Java面试题,答案你都知道吗?
  5. numpy 平方_NumPy入门指南
  6. java多线程入门1
  7. Webkit推出新的着色语言whlsl
  8. Ros_Topic通信方式
  9. linux安装gcc-4.9,centos7.2编译安装gcc-4.9.2
  10. 智工教育:公务员考试这些知识点你会背了吗?
  11. Java实现魔板拼图小游戏(完整版)
  12. fflush函数实例
  13. Java学习路线:day6 数组
  14. 中国天网系统有多牛叉?BBC 记者体验了一把
  15. android x86 5.1 微信,微信5.1终于来了!微信5.1安卓版正式发布
  16. 符合信创的政务部门的OA办公系统?用开源平台来搭建一个吧!
  17. 2857: 编程题AB-第二价格密封拍卖
  18. 微信小程序代码怎么用工具打开看
  19. 魅族16 android10,魅族16X 魔趣OS 安卓10 MagiskV20版 完美ROOT 纯净完美 原生极简 纯净推荐...
  20. 用sql server来进行设计

热门文章

  1. 威尔特拉斯定理_数学大师启示录维尔斯特拉斯.pdf
  2. mysql日期返回周一_MYSQL如何获得指定日期所在周周一的日期?
  3. 问题 E: 来淄博旅游
  4. sap hana连接
  5. 【Python】报错:ValueError: attempted relative import beyond top-level package问题解决
  6. 南梦宫 拼图笔记 1.流畅的拖拽操作
  7. Java:一般数据结构
  8. 使用集合转数组的方法,必须使用集合的 toArray(T[] array),传入的是类型完全一样的数组,大小就是 list.size()。
  9. 家乡,属于梦的记忆140
  10. 简历撰写:6大板块n个细节