计算机系统应用教程网站

网站首页 > 技术文章 正文

机器爱学习12——欠拟合、过拟合之判断方法、原因及解决方法

btikc 2024-10-11 11:16:11 技术文章 4 ℃ 0 评论

我们知道,不管是发生欠拟合还是过拟合,对应的hypothesis function都不是我们想要的target function,那么给你一个hypothesis function,我们该如何判断是否存在欠拟合、过拟合?

欠拟合、过拟合的判断

很简单,我们可以将training set、test set分别作用在hypothesis function中,并观察对应的准确率(accuracy:预测正确的样本个数/样本总量)

  • 如果training set中,accuracy很低,则存在欠拟合;否则,不存在欠拟合
  • 不存在欠拟合的情况下,如果test set中accuracy很低,则存在过拟合

欠拟合比较好理解,而且比较容易解决,我们就先看下欠拟合的原因及解决方法。

欠拟合原因及解决方法

我们先思考一下:为什么会存在欠拟合?

对于欠拟合,很好理解,可能原因如下:

  • hypothesis function复杂度过低
  • 机器学习算法所用参数不合适,比如梯度下降算法中learning rate过大....
  • .......

那么该如何解决欠拟合呢?

其实我们的hypothesis function从一开始都是欠拟合,然后再一点点的改进,改进方法有:

  • 使用更复杂的hypothesis function
  • 调整算法中的参数
  • ....

过拟合的原因及解决方法

导致过拟合的原因就比较多了,具体如下:

  • training set中数据量太少
  • hypothesis function模型过于复杂
  • training set中存在噪声
  • ....

过拟合是无法完全避免的,我们只能尽量的减少过拟合,方法如下:

  • 数据增强(Data augmentation)
  • early stopping
  • dropout
  • 正则化 regularization
  • 数据增强 data augmentation

有人曾经说过:有时候,训练模型并不是由于算法好才赢的,而是由于拥有了海量的数据才赢的。

在机器学习领域,数据的重要性不言而喻,特别是在深度学习中,更多的训练数据,意味着能够用更深的网络,从而训练出更好的模型。

如果我们可以收集到大量的数据,那当然最好不过了,可有时候,收集更多的数据意味着要耗费更多的人力物力,这时候可以对已有数据做一些改动,从而增大数据集。

  • early stopping

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……

  • dropout

dropout是神经网络中的一种技巧,在讲到神经网络时,我们再讲解

  • 正则化 regularization

讲正则化之前,我们先看下什么样的hypothesis function容易导致过拟合。

下图是一个二分类的逻辑回归问题,现有两个hypothesis function,如果是你,你会选择哪一个作为target function?

我们先分析下上面两个hypothesis function(黑色曲线、绿色曲线):

  • 黑色的曲线,存在一定的bias,但该曲线更“简单”、更“光滑”
  • 绿色的曲线,不存在bias,但是该曲线更“复杂”

如果是你,你会选哪一条曲线? “简单”还是“复杂”?

奥卡姆选择了“简单”的曲线。

这就是著名的"奥卡姆剃刀原理”:如果你有两个原理,它们都能解释观测到的事实,那么你应该使用简单的那个,直到发现更多的证据。

奥卡姆剃刀原理告诉我们,相对于绿色曲线(没有bias、"复杂"),黑色曲线(low bias,"简单")的泛化能力会更强。

正则化的方法就是在cost function中加上一个正则化项,尽量减小每一个参数θ,从而使hypothesis function尽量"简单"。

根据正则化项的不同,正则化分为L1正则化、L2正则化

L1正则化

L1正则化项为:全部参数绝对值的和,再乘以λ/n。具体cost function如下(λ称为正则化系数):

我们以梯度下降算法为例,看下L1正则化项对参数更新的影响:

我们可以看到,与原始cost function相比,加了L1正则化项后

  • 当θ为正时,sgn(θ)>0,则更新后θ变小
  • 当θ为负时,sgn(θ)<0,则更新后θ变大

因此,加了L1正则化项后,参数θ尽可能为0,相当于减小了曲线的复杂度,防止过拟合。

L1正则化求得的参数会有更多的“0”(即容易获得”稀疏“的解),如果某一个参数为"0",那么该特征(feature)就对机器学习没有贡献,因此,L1正则化是一种嵌入式的特征选择方法

L2正则化

L2正则化对应的cost function如下(λ称为正则化系数):

我们以梯度下降算法为例,看下L2正则化项对参数θ更新的影响:

可以看到,L2正则化的效果也是减小参数θ。

L1和L2正则化的区别:

  • L1会趋向于产生少量的特征,而其他特征的参数都是0
  • L1会选择更多的特征,但这些特征的参数都接近于0

用的较多的正则化方法为L2正则化,大家有兴趣,可以使用L2正则化,将其应用在线性回归、逻辑回归中。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表