过拟合及解决方案

author author     2023-03-23     524

关键词:

参考技术A

是什么

过拟合(overfitting)是指在模型参数拟合过程中的问题,由于训练数据包含 抽样误差 ,训练时,复杂的模型将抽样误差也考虑在内,将抽样误差也进行了很好的拟合。

具体表现就是最终模型在训练集上效果好;在测试集上效果差。模型泛化能力弱。

为什么

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

为什么在机器学习中比较常见?这是因为机器学习算法为了满足尽可能复杂的任务,其模型的拟合能力一般远远高于问题复杂度,也就是说,机器学习算法有「拟合出正确规则的前提下,进一步拟合噪声」的能力。

而传统的函数拟合问题(如机器人系统辨识),一般都是通过经验、物理、数学等推导出一个含参模型,模型复杂度确定了,只需要调整个别参数即可。模型「无多余能力」拟合噪声。

怎么样

如何防止过拟合:

主要是以下4点

1. 获取更多数据

这是解决过拟合最有效的方法,只要给足够多的数据,让模型「看见」尽可能多的「例外情况」,它就会不断修正自己,从而得到更好的结果:

如何获取更多数据,可以有以下几个方法:

2. 使用合适的模型

前面说了,过拟合主要是有两个原因造成的:数据太少 + 模型太复杂。所以,我们可以通过使用合适复杂度的模型来防止过拟合问题,让其足够拟合真正的规则,同时又不至于拟合太多抽样误差。

(PS:如果能通过物理、数学建模,确定模型复杂度,这是最好的方法,这也就是为什么深度学习这么火的现在,我还坚持说初学者要学掌握传统的建模方法。)

对于神经网络而言,我们可以从以下四个方面来 限制网络能力

2.1 网络结构 Architecture

这个很好理解,减少网络的层数、神经元个数等均可以限制网络的拟合能力;

2.2 训练时间 Early stopping

对于每个神经元而言,其激活函数在不同区间的性能是不同的:

当网络权值较小时,神经元的激活函数工作在线性区,此时神经元的拟合能力较弱(类似线性神经元)。

有了上述共识之后,我们就可以解释为什么限制训练时间(early stopping)有用:因为我们在初始化网络的时候一般都是初始为较小的权值。训练时间越长,部分网络权值可能越大。如果我们在合适时间停止训练,就可以将网络的能力限制在一定范围内。

2.3 限制权值 Weight-decay,也叫正则化(regularization)

原理同上,但是这类方法直接将权值的大小加入到 Cost 里,在训练的时候限制权值变大。以 L2 regularization 为例:

训练过程需要降低整体的 Cost,这时候,一方面能降低实际输出与样本之间的误差C 0 ,也能降低权值大小。

2.4 增加噪声 Noise

给网络加噪声也有很多方法:

2.4.1 在输入中加噪声:

噪声会随着网络传播,按照权值的平方放大,并传播到输出层,对误差 Cost 产生影响。推导直接看 Hinton 的 PPT 吧:

在输入中加高斯噪声,会在输出中生成 \\Sigma_i\\sigma^2_i\\cdot w^2_i 的干扰项。训练时,减小误差,同时也会对噪声产生的干扰项进行惩罚,达到减小权值的平方的目的,达到与 L2 regularization 类似的效果(对比公式)。

2.4.2 在权值上加噪声

在初始化网络的时候,用 0 均值的高斯分布作为初始化。Alex Graves 的手写识别 RNN 就是用了这个方法

2.4.3 对网络的响应加噪声

如在前向传播过程中,让默写神经元的输出变为 binary 或 random。显然,这种有点乱来的做法会打乱网络的训练过程,让训练更慢,但据 Hinton 说,在测试集上效果会有显著提升 (But it does significantly better on the test set!)。

3. 结合多种模型

简而言之,训练多个模型,以每个模型的平均输出作为结果。

从 N 个模型里随机选择一个作为输出的期望误差 <[t-y_i]^2> ,会比所有模型的平均输出的误差 <[t-\\bary]^2> 大 (我不知道公式里的圆括号为什么显示不了)

大概基于这个原理,就可以有很多方法了:

3.1 Bagging

简单理解,就是分段函数的概念:用不同的模型拟合不同部分的训练集。以随机森林(Rand Forests)为例,就是训练了一堆互不关联的决策树。但由于训练神经网络本身就需要耗费较多自由,所以一般不单独使用神经网络做 Bagging。

3.2 Boosting

既然训练复杂神经网络比较慢,那我们就可以只使用简单的神经网络(层数、神经元数限制等)。通过训练一系列简单的神经网络,加权平均其输出。

3.3 Dropout

这是一个很高效的方法。

在训练时, 每次 随机(如 50% 概率)忽略隐层的某些节点;这样,我们相当于随机从 2^H 个模型中采样选择模型;同时,由于每个网络只见过一个训练数据(每次都是随机的新网络),所以类似 bagging 的做法,这就是我为什么将它分类到「结合多种模型」中;

此外,而不同模型之间权值共享(共同使用这 H 个神经元的连接权值),相当于一种权值正则方法,实际效果比 L2 regularization 更好。

4. 贝叶斯方法

这部分我还没有想好怎么才能讲得清楚,为了不误导初学者,我就先空着,以后如果想清楚了再更新。当然,这也是防止过拟合的一类重要方法。

欠拟合,过拟合及正则化

...基本理论,及如何改进系统复杂度,使其能够使其在准确拟合现有训练样例的情况下,尽可能准确预测新数据。 Underfit(欠拟合)和Overfit(过拟合)首先要确定的两个概念是Underfit(欠拟合)和Overfit(过拟合),也被称作hig... 查看详情

[模型优化]模型欠拟合及过拟合判断优化方法

 [模型优化]模型欠拟合及过拟合判断、优化方法一、模型欠拟合及过拟合简介模型应用时发现效果不理想,有多种优化方法,包含: 添加新特征增加模型复杂度减小正则项权重获取更多训练样本减少特征数目增加正则项... 查看详情

机器学习基础---过拟合问题及正则化技术(代码片段)

...是当将它们应用到某些特定的机器学习应用时,会遇到过拟合(over-fitting)的问题,可能会导致它们效果很差。一:过度拟合问题(一)线性回归中的过拟合问题继续使用线性回归来预测房价的例子,我们通过建立以住房面积为自... 查看详情

过拟合是什么?如何解决过拟合?l1l2怎么解决过拟合

1.过拟合是什么? https://www.zhihu.com/question/264909622   那个英文回答就是说h1、h2属于同一个集合,实际情况是h2比h1错误率低,你用h1来训练,用h2来测试,但h1的准确率比h2却高  个人理解:网络过分学习了训练... 查看详情

欠拟合过拟合及其解决方法

...我们机器学习或者训练深度神经网络的时候经常会出现欠拟合和过拟合这两个问题,但是,一开始我们的模型往往是欠拟合的,也正是因为如此才有了优化的空间,我们需要不断的调整算法来使得模型的表达能拿更强。但是优化... 查看详情

欠拟合和过拟合的一般解决方法(代码片段)

简单来说,欠拟合是指模型在训练集、验证集和测试集上均表现不佳的情况;过拟合是指模型在训练集上表现很好,到了验证和测试阶段就大不如意了,即模型的泛化能力很差。欠拟合和过拟合一直是机器学习训练中的难题,在... 查看详情

过拟合及其解决方式

参考技术A过拟合经常发生:先看范例:运行结果:模型在训练集上的精度是98.5%,在测试集上的精度是90.0%,显然发生过拟合了。解决办法:加入Dropout层,模型修改为:运行结果:加入权重正则化,模型修改为运行结果:模型在... 查看详情

细品-过拟合与模型选择*

...练集上的表现非常好,但是对于测试集的预测效果很差。解决方案:  (1)导致过拟合的一个原因可能是由于数据不纯、包含大量的噪声数据,这时候我们需要重新清洗数据。  (2)增加训练数据的样本 查看详情

机器学习过拟合和欠拟合怎么判断,如何解决?(面试回答)

过拟合和欠拟合怎么判断,如何解决?(1)判断:训练集误差和验证集误差,从而判断算法达到什么效果训练误差大和验证误差都大,是欠拟合训练误差和验证误差差不多,都较低,是适度拟... 查看详情

tensorflow学习之路---解决过拟合

...数据集2、定义用来实现神经元功能的函数(包括解决过拟合)3、定义输入和输出的数据4、定义隐藏层(函数)和输出层(函数)5、分析误差和优化数据(改变权重)6、执行神经网络‘‘‘importtensorflowastffromsklearn.datasetsimportloa... 查看详情

python机器学习及实践——进阶篇3(模型正则化之欠拟合与过拟合)(代码片段)

...与L2范数正则化加强模型的泛化力,避免模型参数过拟合。 所谓拟合,是指机器学习模型在训练的过程中, 查看详情

正则化——解决过拟合问题

...性回归得到的曲线可能如下图这种情况下,曲线对数据的拟合程度不好。这种情况称为“Underfit”,这种情况属于“Highbias”(高偏差)。如果[h_ hetaleft(xight)= heta_0+ heta_1x+ heta_2x^2 查看详情

机器学习:过拟合欠拟合正则化之间的纸短情长~(代码片段)

机器学习:过拟合与欠拟合是如何被解决的?什么是过拟合与欠拟合过拟合欠拟合如何解决过拟合L2正则化(权重衰减)代码实现降维采用合适的模型数据增强如何解决欠拟合什么是过拟合与欠拟合机器学习的主... 查看详情

神经网络:欠拟合和过拟合

...要包括以下6种:增加训练样本的数目(该方法适用于过拟合现象时,解决高方差。一般都是有效的,但是代价较大,如果下面的方法有效,可以优先采用下面的方式);尝试减少特征的数量(该方法适用于过拟合现象时,解决... 查看详情

过拟合怎么办

...考技术B为了得到一致假设而使假设变得过度严格称为过拟合。避免过拟合是分类器设计中的一个核心任务。通常采用增大数据量和测试样本集的方法对分类器性能进行评价。 查看详情

机器学习线性回归——岭回归解决过拟合问题(理论+图解+公式推导)

查看详情

模型评估与选择<1>

...习过程中的分类(训练集、验证集、测试集)2.过拟合/欠拟合2.1经验误差与泛化误差2.2过拟合(定义、产生原因、解决办法)2.2.1过拟合的定义2.2.2过拟合的产生原因1.2.3过拟合的解决办法2.3欠拟合(定义、产... 查看详情

tensorflow学习之使用dropout解决overfitting(过拟合)问题(代码片段)

#使用dropout解决overfitting(过拟合)问题#如果有dropout,在feed_dict的参数中一定要加入dropout的值importtensorflowastffromsklearn.datasetsimportload_digitsfromsklearn.cross_validationimporttrain_test_splitfromsklearn.preprocessi 查看详情