热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

机器学习-11:MachineLN之过拟合

你要的答案或许都在这里:小鹏的博客目录我想说:其实很多时候大家都想自己做一些事情,但是很多也都是想想而已,其实有了想法自己感觉可行,就可以去行动起来,去尝试,即使最后败了,也无怨无悔,有

你要的答案或许都在这里小鹏的博客目录

我想说:

其实很多时候大家都想自己做一些事情,但是很多也都是想想而已,其实有了想法自己感觉可行,就可以去行动起来,去尝试,即使最后败了,也无怨无悔,有句话说的很好:成功收获成果,失败收获智慧,投入收获快乐!反而有时候顾及的太多,本应该做的事情错过了,怪谁呢?我跟大家不同的是无论什么事情,先做了再说吧! 

说起过拟合,那么我的问题是:

(1)什么是过拟合?

(2)为什么要解决过拟合问题?

(3)解决过拟合有哪些方法?


1. 什么是过拟合?

不同的人提到过拟合时会有不同的含义:

(1) 看最终的loss,训练集的loss比验证集的loss小的多;

(2)训练的loss还在降,而验证集的loss已经开始升了;

(3)另外要提一下本人更注重loss,你过你看的是准确率,那么也OK,适合自己的才是最好的,正所谓学习再多tricks,不如踩一遍坑;

  • 在第一种(1)中验证集的loss还在降,是不用太在意的。(2)中的overfitting如下图,在任何情况下都是不行滴!

  • 和过拟合相对应的是欠拟合,如下图刚开始的时候;可以参考MachineLN之模型评估。


2. 为什么要解决过拟合问题?

过拟合对我们最终模型影响是很大的,有时候训练时间越长过拟合越严重,导致模型表现的效果很差,甚至崩溃;由上图我们也能看出来解决过拟合问题的必要性。


3. 解决过拟合有哪些方法?

(1)正则化

正则化的思想十分简单明了。由于模型过拟合极有可能是因为我们的模型过于复杂。因此,我们需要让我们的模型在训练的时候,在对损失函数进行最小化的同时,也需要让对参数添加限制,这个限制也就是正则化惩罚项。 

假设我们的损失函数是平方损失函数:

加入正则化后损失函数将变为:

  • L1范数:

  • L2范数:

加入L1范数与L2范数其实就是不要使损失函数一味着去减小,你还得考虑到模型的复杂性,通过限制参数的大小,来限制其产生较为简单的模型,这样就可以降低产生过拟合的风险。 

那么L1和L2的区别在哪里呢?L1更容易得到稀疏解:直接看下面的图吧:(假设我们模型只有 w1,w2 两个参数,下图中左图中黑色的正方形是L1正则项的等值线,而彩色的圆圈是模型损失的等值线;右图中黑色圆圈是L2正则项的等值线,彩色圆圈是同样模型损失的等值线。因为我们引入正则项之后,我们要在模型损失和正则化损失之间折中,因此我们取的点是正则项损失的等值线和模型损失的等值线相交处。通过上图我们可以观察到,使用L1正则项时,两者相交点常在坐标轴上,也就是 w1,w2 中常会出现0;而L2正则项与等值线常相交于象限内,也即为 w1,w2 非0。因此L1正则项时更容易得到稀疏解的。 



而使用L1正则项的另一个好处是:由于L1正则项求解参数时更容易得到稀疏解,也就意味着求出的参数中含有0较多。因此它自动帮你选择了模型所需要的特征。L1正则化的学习方式是一种嵌入式特征学习方式,它选取特征和模型训练时一起进行的。

(2)Dropout

先看下图:Dropout就是使部分神经元失活,这样就阻断了部分神经元之间的协同作用,从而强制要求一个神经元和随机挑选出的神经元共同进行工作,减轻了部分神经元之间的联合适应性。也可以这么理解:Dropout将一个复杂的网络拆分成简单的组合在一起,这样仿佛是bagging的采样过程,因此可以看做是bagging的廉价的实现(但是它们训练不太一样,因为bagging,所有的模型都是独立的,而dropout下所有模型的参数是共享的。)



Dropout的具体流程如下:

  • 对l层第 j 个神经元产生一个随机数 :

  • 将 l 层第 j 个神经元的输入乘上产生的随机数作为这个神经元新的输入:

  • 此时第 l 层第 j 个神经元的输出为: 

  • 注意:当我们采用了Dropout训练结束之后,应当将网络的权重乘上概率p得到测试网络的权重。

(3)提前终止

由第一副图可以看出,模型在验证集上的误差在一开始是随着训练集的误差的下降而下降的。当超过一定训练步数后,模型在训练集上的误差虽然还在下降,但是在验证集上的误差却不在下降了。此时我们的模型就过拟合了。因此我们可以观察我们训练模型在验证集上的误差,一旦当验证集的误差不再下降时,我们就可以提前终止我们训练的模型。

(4)bagging 和其他集成方法

其实bagging的方法是可以起到正则化的作用,因为正则化就是要减少泛化误差,而bagging的方法可以组合多个模型起到减少泛化误差的作用;在深度学习中同样可以使用此方法,但是其会增加计算和存储的成本。

(5)深度学习中的BN

深度学习中BN也是解决过拟合的有效方法:可以参考之前的文章:DeepLN之BN。

(6)增加样本量 (MachineLN之样本不均衡中介绍的数据增强的方法)

在实际的项目中,你会发现,上面讲述的那些技巧虽然都可以减轻过拟合,但是却都比不上增加样本量来的更实在。为什么增加样本可以减轻过拟合的风险呢?这个要从过拟合是啥来说。过拟合可以理解为我们的模型对样本量学习的太好了,把一些样本的特殊的特征当做是所有样本都具有的特征。举个简单的例子,当我们模型去训练如何判断一个东西是不是叶子时,我们样本中叶子如果都是锯齿状的话,如果模型产生过拟合了,会认为叶子都是锯齿状的,而不是锯齿状的就不是叶子了。如果此时我们把不是锯齿状的叶子数据增加进来,此时我们的模型就不会再过拟合了。(这个在最近的项目里常用)因此其实上述的那些技巧虽然有用,但是在实际项目中,你会发现,其实大多数情况都比不上增加样本数据来的实在。


展望:深度学习系列再更新几篇后要暂时告一段落,开始总结传统机器学习的内容:KNN;决策树;贝叶斯;Logistic回归;SVM;AdaBoost;K-means等的理论和实践;中间穿插数据结构和算法(排序;散列表;搜索树;动态规划;贪心;图;字符串匹配等);再之后我们重回Deep learning;


推荐阅读:

1. 机器学习-1:MachineLN之三要素

2. 机器学习-2:MachineLN之模型评估

3. 机器学习-3:MachineLN之dl

4. 机器学习-4:DeepLN之CNN解析

5. 机器学习-5:DeepLN之CNN权重更新(笔记)

6. 机器学习-6:DeepLN之CNN源码

7. 机器学习-7:MachineLN之激活函数

8. 机器学习-8:DeepLN之BN

9. 机器学习-9:MachineLN之数据归一化

10. 机器学习-10:MachineLN之样本不均衡

11. 机器学习-11:MachineLN之过拟合

12. 机器学习-12:MachineLN之优化算法

13. 机器学习-13:MachineLN之kNN

14. 机器学习-14:MachineLN之kNN源码

15. 机器学习-15:MachineLN之感知机

16. 机器学习-16:MachineLN之感知机源码

17. 机器学习-17:MachineLN之逻辑回归

18. 机器学习-18:MachineLN之逻辑回归源码




推荐阅读
  • 机器学习中的相似度度量与模型优化
    本文探讨了机器学习中常见的相似度度量方法,包括余弦相似度、欧氏距离和马氏距离,并详细介绍了如何通过选择合适的模型复杂度和正则化来提高模型的泛化能力。此外,文章还涵盖了模型评估的各种方法和指标,以及不同分类器的工作原理和应用场景。 ... [详细]
  • 机器学习核心概念与技术
    本文系统梳理了机器学习的关键知识点,涵盖模型评估、正则化、线性模型、支持向量机、决策树及集成学习等内容,并深入探讨了各算法的原理和应用场景。 ... [详细]
  • 资源推荐 | TensorFlow官方中文教程助力英语非母语者学习
    来源:机器之心。本文详细介绍了TensorFlow官方提供的中文版教程和指南,帮助开发者更好地理解和应用这一强大的开源机器学习平台。 ... [详细]
  • 毕业设计:基于机器学习与深度学习的垃圾邮件(短信)分类算法实现
    本文详细介绍了如何使用机器学习和深度学习技术对垃圾邮件和短信进行分类。内容涵盖从数据集介绍、预处理、特征提取到模型训练与评估的完整流程,并提供了具体的代码示例和实验结果。 ... [详细]
  • 尽管深度学习带来了广泛的应用前景,其训练通常需要强大的计算资源。然而,并非所有开发者都能负担得起高性能服务器或专用硬件。本文探讨了如何在有限的硬件条件下(如ARM CPU)高效运行深度神经网络,特别是通过选择合适的工具和框架来加速模型推理。 ... [详细]
  • 本文深入探讨了基于Pairwise和Listwise方法的排序学习,结合PaddlePaddle平台提供的丰富运算组件,详细介绍了如何通过这些方法构建高效、精准的排序模型。文章不仅涵盖了基础理论,还提供了实际应用场景和技术实现细节。 ... [详细]
  • Coursera ML 机器学习
    2019独角兽企业重金招聘Python工程师标准线性回归算法计算过程CostFunction梯度下降算法多变量回归![选择特征](https:static.oschina.n ... [详细]
  • 解决PyCharm中安装PyTorch深度学习d2l包的问题
    本文详细介绍了如何在PyCharm中成功安装用于PyTorch深度学习的d2l包,包括环境配置、安装步骤及常见问题的解决方案。 ... [详细]
  • 机器学习公开课备忘录(三)机器学习算法的应用与大数据集
    机器学习公开课备忘录(三)机器学习算法的应用与大数据集对应机器学习公开课第六周和第10周机器学习算法模型的选择与评价1、对于一个data,可以将data划分为trainingset、t ... [详细]
  • 2017年人工智能领域的十大里程碑事件回顾
    随着2018年的临近,我们一同回顾过去一年中人工智能领域的重要进展。这一年,无论是政策层面的支持,还是技术上的突破,都显示了人工智能发展的迅猛势头。以下是精选的2017年人工智能领域最具影响力的事件。 ... [详细]
  • 本文精选了几所优秀的PHP实训和培训学校,为希望深入学习PHP编程的学员提供参考。 ... [详细]
  • 卷积神经网络(CNN)基础理论与架构解析
    本文介绍了卷积神经网络(CNN)的基本概念、常见结构及其各层的功能。重点讨论了LeNet-5、AlexNet、ZFNet、VGGNet和ResNet等经典模型,并详细解释了输入层、卷积层、激活层、池化层和全连接层的工作原理及优化方法。 ... [详细]
  • 随着生活节奏的加快和压力的增加,越来越多的人感到不快乐。本文探讨了现代社会中导致人们幸福感下降的各种因素,并提供了一些改善建议。 ... [详细]
  • 一个登陆界面
    预览截图html部分123456789101112用户登入1314邮箱名称邮箱为空15密码密码为空16登 ... [详细]
  • java文本编辑器,java文本编辑器设计思路
    java文本编辑器,java文本编辑器设计思路 ... [详细]
author-avatar
housyou晶
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有