机器学习: 如何防止过拟合

1.什么是过拟合?

对于数据挖掘或者机器学习建立的模型model来说,该模型在训练集上的表现性能较好,而在测试集上效果很差,也就是说该模型的泛化能力差,我们就称之为过拟合(overfitting)。

2.问题延伸

2.1 什么是欠拟合(underfitting)?什么是合适拟合
我们建立的模型实质上就是复杂函数f(x)
x ----输入----> f(x) ----输出----> y_
拟合的函数和训练集误差较大,我们称这种情况为欠拟合
拟合的函数和训练集误差较小,我们称这种情况为合适拟合
同理,拟合的函数和训练集完美的匹配(训练集误差非常非常的小),我们称之为过拟合。

欠拟合
在这里插入图片描述
合适拟合
在这里插入图片描述
过拟合
在这里插入图片描述
2.2 如何解决欠拟合?
欠拟合问题,根本原因是特征维度过少,导致拟合的函数无法满足训练集,误差较大。
我们可以通过增加特征维度来解决

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

因为我们训练出来的模型一般是用来测试独立的数据集(不在训练集内的),预测未知的结果,过拟合虽然在训练集上效果好,但是在测试集上(实际应用上)效果差,这是我们不想遇到的。同时,在很多问题上,我们无法穷尽所有的状态,不可能将所有情况都包含在训练集上,所以我们要解决过拟合问题。

为什么机器学习中比较常见过拟合问题?
因为机器学习算法是为了满足尽可能复杂的任务,其模型的拟合能力一般远远高于问题的复杂度,也就是说,机器学习算法有拟合出正确规则前提下,进一步拟合噪声的能力
而传统的函数拟合问题(例如机器人系统辨识),一般是经过经验,物理和数学等推导出一个含参模型,模型的复杂度确定了,只需要调整个别参数就可以,这样的模型没有多余的能力拟合噪声。

4.过拟合产生的原因:

(1)训练数据量不足
(2)训练参数的增多
(3)模型学习能力过于强大(由学习算法和数据内涵共同决定)
(4)其他…

5.防止过拟合的方法

(1)数据扩增,这是解决过拟合最有效的方法,但是对于算法工程师来说,目前的数据是固定不变的,不应该从这里下手收集更多数据,而是找其他方法。

为什么说数据扩增越多越好?
因为有这样一个假设,训练的数据和将来测试的数据是独立同分布的(或者近似),因此当前训练的数据越多,模型对未来数据预测越准确。

数据扩增方法:

  • 从数据源头采集更多数据
  • 复制原有数据+随机噪声
  • 重采样
  • 根据当前数据集估计分布参数,使用该分布产生更多数据等
  • 数据增强
    数据增强,例如,在图像处理中:
    图像平移:学习平以不变的特征
    图像旋转:学习旋转不变的特征,图片目标中的姿态
    图像亮度变化、裁剪、缩放、图像模糊等
    还有mixup(https://www.jianshu.com/p/97aafe479fa1)
    还不是很了解,有待进一步学习。

(2)选择合适的模型其实过拟合最主要的2个原因是:数据太少+模型太复杂,前面提到数据很难再去收集了,但是我们可以选择合适复杂度的模型来防止过拟合问题。
对于神经网络来说,我们可以从以下几个方面来限制网络的拟合能力,从而防止过拟合:

  • 网络结构 Architecture(减少网络层、神经元个数):减少网络的层数、神经元数等可以限制网络的拟合能力,优化模型,从而防止过拟合
  • 训练时间 Early stopping(提前终止):对模型进行训练的过程即是对模型的参数进行学习更新的过程,这个参数学习的过程往往会用到一些迭代方法,如梯度下降(Gradient Descent)学习算法。Early stopping便是一种迭代次数截断的方法来防止过拟合的方法,即在模型对训练数据集迭代收敛之前停止迭代来防止过拟合。Early stopping方法的具体做法是,在每一个Epoch结束时(一个Epoch集为对所有的训练数据的一轮遍历)计算validation data的accuracy,当accuracy不再提高时,就停止训练。这种做法很符合直观感受,因为accurary都不再提高了,在继续训练也是无益的,只会提高训练的时间。那么该做法的一个重点便是怎样才认为validation accurary不再提高了呢?并不是说validation accuracy一降下来便认为不再提高了,因为可能经过这个Epoch后,accuracy降低了,但是随后的Epoch又让accuracy又上去了,所以不能根据一两次的连续降低就判断不再提高。一般的做法是,在训练的过程中,记录到目前为止最好的validation accuracy,当连续10次Epoch(或者更多次)没达到最佳accuracy时,则可以认为accuracy不再提高了。此时便可以停止迭代了(Early Stopping)。这种策略也称为“No-improvement-in-n”,n即Epoch的次数,可以根据实际情况取,如10、20、30……
  • 限制权值/权重衰减 weight-decay,也叫**正则化(regularization)**【我们放在后面的大类中讲述】
  • 增加噪声 Noise:
    例如,
    在输入中增加噪声,噪声会随着网络传播,按照权值的平方放大,并传播到输出层,对误差 Cost 产生影响
    (参考:https://www.cnblogs.com/anitinaj/p/10025034.html)
    在权值上增加噪声,在初始化网络的时候,用 0 均值的高斯分布作为初始化。
    对网络的响应加噪声,如在前向传播过程中,让默写神经元的输出变为 binary 或 random。显然,这种有点乱来的做法会打乱网络的训练过程,让训练更慢,但据 Hinton 说,在测试集上效果会有显著提升 (But it does significantly better on the test set!)。

(3)正则化方法(regularization)
正则化方法是指在进行目标函数或代价函数优化时,在目标函数或代价函数后面加上一个正则项,一般有L1正则与L2正则等。

  • L1正则
    在这里插入图片描述

  • L2正则
    在这里插入图片描述

  • 总结
    正则项是为了降低模型的复杂度,从而避免模型区过分拟合训练数据,包括噪声与异常点(outliers)。从另一个角度上来讲,正则化即是假设模型参数服从先验概率,即为模型参数添加先验,只是不同的正则化方式的先验分布是不一样的。这样就规定了参数的分布,使得模型的复杂度降低(试想一下,限定条件多了,是不是模型的复杂度降低了呢),这样模型对于噪声与异常点的抗干扰性的能力增强,从而提高模型的泛化能力。还有个解释便是,从贝叶斯学派来看:加了先验,在数据少的时候,先验知识可以防止过拟合;从频率学派来看:正则项限定了参数的取值,从而提高了模型的稳定性,而稳定性强的模型不会过拟合,即控制模型空间。
      另外一个角度,过拟合从直观上理解便是,在对训练数据进行拟合时,需要照顾到每个点,从而使得拟合函数波动性非常大,即方差大。在某些小区间里,函数值的变化性很剧烈,意味着函数在某些小区间里的导数值的绝对值非常大,由于自变量的值在给定的训练数据集中的一定的,因此只有系数足够大,才能保证导数的绝对值足够大。如下图(引用知乎):
    在这里插入图片描述
    另外一个解释,规则化项的引入,在训练(最小化cost)的过程中,当某一维的特征所对应的权重过大时,而此时模型的预测和真实数据之间距离很小,通过规则化项就可以使整体的cost取较大的值,从而,在训练的过程中避免了去选择那些某一维(或几维)特征的权重过大的情况,即过分依赖某一维(或几维)的特征(引用知乎)。
    (以上来自 :https://blog.csdn.net/heyongluoyao8/article/details/49429629

延伸:L1正则和L2正则的区别?(后面博文讲述)
L0范数?
svm中引进松弛变量?

3)Dropout
L1、L2正则是通过在代价函数后面加上正则项来防止模型过拟合的。而在神经网络中,有一种方法是通过修改神经网络本身结构来实现的,其名为Dropout。该方法是在对网络进行训练时用一种技巧(trick),对于如下所示的三层人工神经网络:
在这里插入图片描述
假设我们要训练上图这个网络,在训练开始时,我们随机地“删除”一些(1/2、1/3等)的隐层单元,视它们为不存在,同时保持输入层与输出层神经元的个数不变,得到如下的网络:

在这里插入图片描述
按照BP算法更新上图神经网络中的权值(虚线连接的单元不更新,因为它们被“临时删除”了)。
以上就是一次迭代的过程,在第二次迭代中,也用同样的方法,只不过这次删除的那一些隐层单元,跟上一次删除掉的肯定是不一样的,因为我们每一次迭代都是“随机”地去删掉一些。第三次、第四次……都是这样,直至训练结束。
以上就是Dropout。
它为什么有助于防止过拟合呢
可以简单地这样解释,运用了dropout的训练过程,相当于训练了很多个只有半数(删除一半,1/2情况)隐层单元的神经网络(后面简称为“半数网络”),每一个这样的半数网络,都可以给出一个分类结果,这些结果有的是正确的,有的是错误的。随着训练的进行,大部分半数网络都可以给出正确的分类结果,那么少数的错误分类结果就不会对最终结果造成大的影响。

注:还有其他的一些方法,例如,贝叶斯方法,我还在学习中,努力吧。

参考和引用:

吴恩达机器学习教学视频,以及一些优质的博文

https://www.jianshu.com/p/090dc626d00f

http://blog.sina.com.cn/s/blog_13eacc8800102yk05.html

https://www.jianshu.com/p/97aafe479fa1

https://blog.csdn.net/heyongluoyao8/article/details/49429629

https://www.jianshu.com/p/0a6ac483b950

https://www.cnblogs.com/anitinaj/p/10025034.html

https://www.zhihu.com/question/59201590/answer/167392763

仅用来个人学习和分享,如若侵权,留言立删。

尊重他人知识产权,不做拿来主义者!

喜欢的可以关注我哦QAQ,

你的关注就是我write博文的动力。

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

机器不学习我学习

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

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

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

打赏作者

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

抵扣说明:

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

余额充值