目录
1、欠拟合
在训练数据和未知数据上表现都很差,高偏差, 训练误差很大,无法找到合适的函数描述数据集
首先欠拟合就是模型没有很好地捕捉到数据特征,不能够很好地拟合数据,例如下面的例子:



左图表示size与prize关系的数据,中间的图就是出现欠拟合的模型,不能够很好地拟合数据,如果在中间的图的模型后面再加一个二次项,就可以很好地拟合图中的数据了,如右面的图所示。
解决方法:
1)添加更多特征项,有时候我们模型出现欠拟合的时候是因为特征项不够导致的,可以添加其他特征项来很好地解决。例如,“组合”、“泛化”、“相关性”三类特征是特征添加的重要手段,无论在什么场景,都可以照葫芦画瓢,总会得到意想不到的效果。除上面的特征之外,“上下文特征”、“平台特征”等等,都可以作为特征添加的首选项。
2)添加多项式特征,这个在机器学习算法里面用的很普遍,例如将线性模型通过添加二次项或者三次项使模型泛化能力更强。例如上面的图片的例子。
3)减少正则化参数,正则化的目的是用来防止过拟合的,但是现在模型出现了欠拟合,则需要减少正则化参数。
2、过拟合
在训练数据上表现良好,在未知数据上表现差。高方差。训练误差小,但是对于测试集上的误差很大。可能模型过于复杂,训练中只”记住”了训练样本,然而其泛化误差却很高。
通俗一点地来说过拟合就是模型把数据学习的太彻底,以至于把噪声数据的特征也学习到了,这样就会导致在后期测试的时候不能够很好地识别数据,即不能正确的分类,模型泛化能力太差。例如下面的例子。


上面左图表示size和prize的关系,我们学习到的模型曲线如右图所示,虽然在训练的时候模型可以很好地匹配数据,但是很显然过度扭曲了曲线,不是真实的size与prize曲线。
过拟合的原因基本是特征维度太多,模型过复杂,参数太多,训练数据太少,噪声过多等,导致拟合的函数在训练集上效果好而测试集效果差。从它出现的原因出发,我们可以考虑的方法有以下几种:
解决方法:
1)重新清洗数据,导致过拟合的一个原因也有可能是数据不纯导致的,如果出现了过拟合就需要我们重新清洗数据。
2)增加训练数据:通过数据增强Data Augmentation,增加数据量, 增加噪声数据,将源数据数量变多
3)使用合适的网络模型,适当减少网络的层数、神经元个数等降低网络参数量,均可以限制网络的拟合能力
4)采用dropout方法。这个方法在神经网络里面很常用。通俗一点讲就是dropout方法在训练的时候让神经元以一定的概率不工作
5)提前终止(early stopping)过拟合出现之前停止模型的学习过程。Early Stopping的做法就是运行优化方法直到若干次在验证集上的验证误差没有提升时候停止。
一般做法是,在训练的过程中,记录到目前为止最好的验证正确率(validation accuracy),当连续10次Epoch,validation accuracy没有达到最佳Accuracy,则认为accuracy不再有所提升,此时就可以停止迭代了。
在训练时将训练集和验证集损失分别输出,当训练集损失持续下降,而验证集损失不再下降时,网络就开始出现过拟合现象,此时就可以停止训练了;
6)采用正则化方法。weight正则化 (就是在损失函数中增加范L1范数/L2范数,而weight decay是正则化的系数)
L1范数 所有参数的绝对值之合, 是指向量中非0的元素的个数
L1范数可以使得某些参数为0,也就实现特征稀疏,也可认为是特征选择
L2范数 所有参数的平方和再求平方根,也叫“稀疏规则算子”(Lasso regularization)
L2范数使得参数较小且接近于0,参数越小,模型就越小,就越不容易出现过拟合
L1趋向于产生少量特征,而其他特征都为0,而L2趋向于选择更多特征,这些特征趋向于0
L1和L2正则化防止过拟合的原因
首先我们先明白稀疏参数和更小参数的好处。
稀疏参数(L1):参数的稀疏,在一定程度实现了特征的选择。稀疏矩阵指有很多元素为0,少数参数为非零值。一般而言,只有少部分特征对模型有贡献,大部分特征对模型没有贡献或者贡献很小,稀疏参数的引入,使得一些特征对应的参数是0,所以就可以剔除可以将那些没有用的特征,从而实现特征选择。
更小参数(L2):越复杂的模型,越是尝试对所有样本进行拟合,那么就会造成在较小的区间中产生较大的波动,这个较大的波动反映出在这个区间内的导数就越大。只有越大的参数才可能产生较大的导数。试想一下,参数大的模型,数据只要偏移一点点,就会对结果造成很大的影响,但是如果参数比较小,数据的偏移对结果的影响力就不会有什么影响,那么模型也就能够适应不同的数据集,也就是泛化能力强,所以一定程度上避免过拟合
7)在网络中使用BN层(Batch Normalization)也可以一定程度上防止过拟合
3、BN 防止过拟合的原因
在训练中,BN的使用使得一个mini-batch中的所有样本都被关联在了一起,因此网络不会从某一个训练样本中生成确定的结果。
这句话什么意思呢?意思就是同样一个样本的输出不再仅仅取决于样本本身,也取决于跟这个样本属于同一个mini-batch的其它样本。同一个样本跟不同的样本组成一个mini-batch,它们的输出是不同的(仅限于训练阶段,在inference阶段是没有这种情况的)。我把这个理解成一种数据增强:同样一个样本在超平面上被拉扯,每次拉扯的方向的大小均有不同。不同于数据增强的是,这种拉扯是贯穿数据流过神经网络的整个过程的,意味着神经网络每一层的输入都被数据增强处理了。
本文深入探讨了机器学习中的欠拟合与过拟合现象,分析了产生的原因及解决方案,包括增加特征、使用正则化、BN层等方法,帮助读者掌握模型调整技巧。
1643

被折叠的 条评论
为什么被折叠?



