当前位置:   article > 正文

算法概述---过拟合和几种解决方法_过拟合问题的原因以及解决方法

过拟合问题的原因以及解决方法

1 过拟合问题

什么是过拟合?
一种扭曲的曲线,不停上下波动;
另一种说法,算法具有高方差,然后模型太过庞大,变量太多
千方百计的拟合训练集,导致无法泛化到新的样本中。

泛化: 一个假设模型应用到新样本的能力

什么是欠拟合?
算法没有很好地拟合训练集;
另一种说法,算法具有高偏差,就好像算法有一个很强的偏见。

处于两者中间:刚好合适

线性回归举例(从左到右依次是欠拟合、刚好、过拟合):
从左到右依次是欠拟合、刚好、过拟合
过拟合产生原因:有过多的变量(特征变量),而只有非常少的训练数据

2 解决过拟合的方法

  1. 减少选取变量的数量
    1)人工检查变量清单,决定哪些更为重要,哪些应该保留,哪些应该舍弃
    2)模型选择算法,自动选择变量
    其中的缺点是舍弃了一部分变量,就相当于丢弃了关于问题的一些信息
  2. 正则化
    我们将保留所有的特征变量,但是减少量级或者参数 ==> 模型的参数就不会太大,而越小的参数说明模型越简单,就越不会产生过拟合现象。
  3. Dropout
  4. early stopping
  5. 扩增数据集 Data augmentation
  6. 去除异常值

2.1 为什么正则化能够减少过拟合

解释1:正则化的导向是网络的复杂度更低,从而表示对数据的拟合刚刚好;同时,过拟合的时候,拟合函数的系数往往非常大,如同第1节的三张图中的右图所示。

解释2:过拟合就是拟合函数需要顾忌到每一个训练样本点,最终形成的拟合函数波动很大。在某些很小的区间里,函数值的变化很剧烈。这就意味着函数在某些小区间里的导数值(绝对值)非常大,由于自变量值可大可小,所以只有系数足够大,才能保证导数值很大。而正则化是通过约束参数的范数使其不要太大,所以可以在一定程度上减少过拟合情况。这个解释是基于过拟合的图像而反推如何不要造成这种情况进行说明的。

2.2 为什么Dropout能够减少过拟合

Dropout:在每个batch中,通过忽略一部分的特征检测器,可以明显地减少过拟合现象。 这种方式可以减少特征检测器间的相互作用,检测器相互作用是指某些检测器依赖其他检测器才能发挥作用。

原理分析:可以看作一种模型平均,即把来自不同模型的估计或者预测通过一定的权重平均起来。 (1)Dropout是随机选择忽略隐层节点,在每个批次的训练过程,由于每次随机忽略的隐层节点都不同,这样就使每次训练的网络都是不一样的, 每次训练都可以单做一个“新”模型; (2)隐含节点都是以一定概率随机出现,因此不能保证每2隔隐含节点每次都同时出现,这样权值的更新不再依赖有固定关系隐含节点的共同作用,阻止了某些特征仅仅在其他特定特征下才有效果的情况。
总结:Dropout是一个非常有效的神经网络模型平均方法,通过训练大量的不同的网络,来平均预测概率。不同的模型在不同的训练集上训练(每个epoch的训练数据都是随机选择),最后在每个模型用相同的权重来“融合”,思想有点类似于boosting算法。
(参考:https://blog.csdn.net/u010402786/article/details/46812677)

优点
1)类似取平均值的作用
2)减少神经元之间复杂的共适应关系

2.3 Normalization和Batch Normalization的原理、区别和作用?

共识:独立同分布的数据可以简化常规机器学习模型的训练、提升ML模型的预测能力

Normalization:数据的标准化(normalization)主要包括数据同趋化处理和无量纲化处理两个方面。数据同趋化处理主要解决不同性质数据问题,对不同性质指标直接加不能正确反映不同作用力的综合结果, 须先考虑改变不同指标数据性质,使所有指标对测评方案的作用力 同趋化, 再加总才能得出正确结果。 数据无量纲化主要处理数据的可比性。 标准化的目的是:
1)把特征的各个维度标准化到特定的区间
2)把有量纲表达式变为无量纲表达式

白化:目的是去除输入数据的冗余信息。假设训练数据是图像,由于图像中相邻像素之间具有很强的相关性,所以训练时输入时冗余的;白化的目的就是降低输入的冗余性。比PCA稍微高级一点。
输入数据集X, 经过白化处理后,新的数据X’满足两个性质:
1)特征之间相关性较低 -> 独立
2)所有特征具有相同的均值,方差 -> 同分布

DL的内部协方差漂移(ICS): 深度神经网络涉及很多层的叠加,而每一层的参数更新会导致上层的输入数据分布发生变化,通过层层叠加,高层的输入分布变化会非常剧烈,这使得高层需要不断去重新适应底层的参数更新。
统计ML中一个经典假设是源空间和目标空间的数据分布是一致的。如果不一致,那么就会出现了新的机器学习问题,如transfer learning / domain adaptation等。 而协方差漂移就是分布不一致假设之下的一个分支问题,它是指源空间和目标空间的条件概率是一致的,但是其边缘概率不同。于是,对于NN的各层输出,由于它们经过了层内操作作用,其分布显然与各层对应的输入信号分布不同,而且差异会随着网络深度增大而增大,可是它们所能”指示“的样本标记(label)仍然是不变的,这便符合了协方差漂移的定义。

内部协方差漂移会导致什么问题呢
每个神经元的输入数据不再是”独立同分布“。会导致以下结果:
1)上层参数需要不断适应新的输入数据分布,降低了学习速度。
2)下层输入的变化可能趋向于变大或者变小,导致上层落入饱和区,使得学习过早停止。
3)每层的更新都会影响到其他层,因此每层的参数更新策略需要尽可能的谨慎。

Batch Normalization的基本思想与框架
由于ICS问题的存在,每一组神经元输入的向量 X 分布可能相差很大。要解决独立同分布的问题,”理论“正确的方法就是对每一层的数据都进行白化操作。这样做的代价太大。
退而求其次,进行了简化的白化操作。基本思想:在将X送给神经元之前,先对其做平移和伸缩变换,将X的分布规范化成在固定区间范围的标准分布。 最后得到的数据符合均值为b、 方差为 g^2 的分布。(这么做的目的是为了保证模型的表达能力不因为规范化而下降)
(这部分来自于 http://www.dataguru.cn/article-13031-1.html)

作用:就是在深度神经网络训练过程中使得每一层神经网络的输入保持相同分布。

如何更好的理解BN呢?
为什么深度神经网络(DNN)随着网络深度加深,训练起来越困难 ,收敛越来越慢?
解决这个问题的方法有:ReLU激活函数,Residual Network等等

BN的基本思想:因为DNN在做非线性变化前的激活输入值随着网络深度加深或者在训练过程中, 其分布逐渐发生偏移或者变动,之所以训练收敛慢,一般是整体分布逐渐往非线性函数的取值区间的上下限两端靠近(对于sigmoid函数来说,意味着激活输入值是大的负值或者正值),这就会导致反向传播时低层NN的梯度消失,这是训练DNN收敛越来越慢的本质原因,而BN就是通过一定的规范化手段,把每层神经网络任意神经元的输入值的分布强行拉回到均值为0、方差为1的标准正态分布。(其实就是把越来越偏的分布强制拉回比较标准的分布,这样使得激活输入值落在非线性函数对输入比较敏感的区域,这样输入的小变化就会导致损失函数较大的变化,继而让梯度变大, 避免梯度消失的问题产生,而且梯度变大意味着学习收敛速度快, 能大大加快训练速度)

总结:对于每个隐层神经元,把逐渐向非线性函数映射后向取值区间 极限饱和区靠拢的 输入分布 强制拉回到 均值为0、方差为1 的比较标准的正态分布, 使得非线性函数的输入值 落入到 对输入比较敏感的区域, 以此避免梯度消失的问题。
第二步, 为了不使得网络表达能力下降,每个神经元增加两个调节参数(scale和shift),这两个参数是通过训练来学习到的,用来对变换后的激活反变换,使得网络表达能力增强,即对变换后的激活进行如下的scale和shift操作。

优点
1)极大地提升了训练速度,收敛过程大大加快
2)增加分类效果,类似于Dropout的一种防止过拟合的正则表达方式
3)调参过程也简单多了:降低了初始化要求,而且可以使用比较大的学习率。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/766994
推荐阅读
相关标签
  

闽ICP备14008679号