
如何有效降低机器学习模型过拟合?
为什么会过拟合?
首先需要有一个基本概念,机器学习目前还是处于统计学习范畴,即在一堆数据集(训练集)中寻找规律,然后在新的数据(测试集)预测结果,如果在新数据那预测的效果不佳但训练集效果极好,这时候我们就大概率确认是过拟合的情况。
机器学习过拟合情况.png|550
如何缓解过拟合?
增加训练集
这是一个很直接但有效的解决方案,可以想象一下,我们假定模型的灵活性很高,它很好地拟合了我们的训练集,但我们的训练集(已有的数据)无法很好把数据的真实分布(全域数据)给展示出现来,所以我们在训练集的效果很好,但跑到测试集时,效果就会差。
那这时候,我们拿更多的数据,将实际的真实分布(全域数据)展现出来,这时候模型去拟合,就可以提升整体效果。
那如何做数据增强?我建议最好还是根据对业务问题的理解创造出新的数据。
例如,你要做的是图像识别,这时候数据增强有可能考虑随机裁剪、颜色变换、随机遮挡等,比较少会出现上下翻转或者镜像翻转这种,除非真实场景有这个需求,所以做数据增强的时候,都是根据你的真实场景去构造新的数据,来将你的训练集越变越大,尽量符合全域数据的情况(或者说你构造数据的时候,已经考虑了测试集出现的情况)。
对模型做限制
我们知道全连接网络是可以拟合无数分布的一种网络结构,正是因为模型太灵活了,所以在做梯度下降的时候,其实拟合的曲线只匹配了训练集那部分,还不能很好覆盖到测试集的情况。所以我们可以通过限制模型的可以拟合的分布情况,来快速提高模型泛化性能。
例如,假设我们知道这个数据集其实就是一个二元函数的数据集,那我们提供一个2次曲线,是不是就很容易拟合成功并且预测得很好?答案肯定是的。同理,我们在针对CV相关数据集,会一开始就考虑CNN(卷积神经网络),也是因为这个数据的先验分布我们清楚,所以用CNN这种针对图像特性处理的模型,初始效果就能比较不错。
当然也有其他方法,例如正则化、early stopping、dropout等,都可以一定程度缓解模型过拟合问题。
参考引用: [李宏毅-《机器学习》](https://speech.ee.ntu.edu.tw/~hylee/ml/2021-spring.php)
本文转载自沐白AI笔记,作者:杨沐白
