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.youkuaiyun.com/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.youkuaiyun.com/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博文的动力。