机器学习-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之逻辑回归源码



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MachineLP

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值