机器学习-过拟合和欠拟合以及正则化处理

 

       无论在机器学习还是深度学习建模中都可能会遇到两种最常见问题,一种叫过拟合,另外一种叫欠拟合

        

      上图展示了不同线性回归模型对训练集样本的拟合情况,可以发现,第一个模型是一条直线,不能很好的拟合训练集,这就是欠拟合(UnderFitting)或者说模型是高偏差的(HighBias)。第三个模型是一个高阶多项式,虽然对训练集拟合的很好,但它的特征过多,如果没有足够的数据约束,就不会有良好的泛化能力(泛化能力是指一个模型应用到新样本的能力,比如这里的新样本是指没有出现在训练集的样本),也就不能对新样本做出正确的预测,这就是过度拟合(OverFitting)或者说模型是高方差的(HighVarience)。第二个则是一个理想的模型。

       在机器学习中,我们用训练数据集去训练一个模型,通常的做法是定义一个误差函数,通过将这个误差的最小化过程,来提高模型的性能。然而我们学习一个模型的目的是为了解决训练数据集这个领域中的一般化问题,单纯地将训练数据集的损失最小化,并不能保证在解决更一般的问题时模型仍然是最优,甚至不能保证模型是可用的。这个训练数据集的损失与一般化的数据集的损失之间的差异就叫做泛化误差(Generalization Error)。

            Image Name

而泛化误差可以分解为偏差(Biase)方差(Variance)噪声(Noise),他们之间的关系如下图所示:

                      

       假设红色的靶心区域是学习算法完美的正确预测值,蓝色点为训练数据集所训练出的模型对样本的预测值,当我们从靶心逐渐往外移动时,预测效果逐渐变差。从上面的图片中很容易可以看到,左边一列的蓝色点比较集中,右边一列的蓝色点比较分散,它们描述的是方差的两种情况。比较集中的属于方差比较小,比较分散的属于方差比较大的情况。我们再从蓝色点与红色靶心区域的位置关系来看,靠近红色靶心的属于偏差较小的情况,远离靶心的属于偏差较大的情况。

 

假设我们正在做一个分类器,分别在训练集和验证集上测试,以下为四种可能的情况:

           https://img4.sycdn.imooc.com/5d53752b0001b66f07740205.jpg

可见①、④两种情况的训练集误差都很小,接近optimal error,这种就称为low bias。说明训练的很到位了。
相反②、③两者的训练集误差很大,这就称为high bias。因此我们知道,bias就是衡量训练集和我们的最小误差的差距。

再来看看variance是怎么判断。①情况下,验证集相比训练集误差上升了很多,这就是high variance。而②呢,虽然它的验证集误差更大,但是相比它的训练集误差,基本没太大变化,因此它不能叫low variance。所以,说白了,variance是指你的验证集和你训练集的效果的差别,而不是某个绝对的值。

       https://img4.sycdn.imooc.com/5d53753200016f3409010435.jpg

过拟合的根本原因:特征维度过多,模型假设过于复杂,参数过多,训练数据过少,噪声过多,导致拟合的函数完美的预测训练集,但对新数据的测试集预测结果差。 过度的拟合了训练数据,而没有考虑到泛化能力。因此需要减少特征维度,或者正则化降低参数值。

 

欠拟合的根本原因:特征维度过少,模型过于简单,导致拟合的函数无法满足训练集,误差较大; 因此需要增加特征维度,增加训练数据。

避免过拟合的方法:

  1. 交叉验证:即重复使用数据,把得到的样本数据进行切分,组合为不同的训练集和测试集,用训练集训练模型,用测试集来评估模型预测的好坏。由于在此基础上可以得到多组不同的训练集和测试集,某次训练集中的某样本在下次可能成为测试集中的样本,即所谓“交叉”。当数据量不是很充足的时候,会使用交叉验证。

    在训练过程中,我们通经常使用它来确定一些超參数(比方,依据validation data上的accuracy来确定early stopping的epoch大小、依据validation data确定learning rate等等。

  2. 正则化:(L1和L2)通过改动代价函数实现。

  3. 数据增强:增加训练数据样本。

  4. Dropout:通过改动神经网络本身来实现。例如,训练前,随机删除一部分隐层单元,保持输入输出层不变,依照BP算法更新上图神经网络中的权值。

  5. early stopping:即提前终止。Early stopping是一种以迭代次数截断的方法来防止过拟合。

  6. Bagging用不同的模型拟合不同部分的训练集;Boosting只使用简单的神经网络;

  7. 数据清洗:将错误的label纠正或者删除错误的数据。

欠拟合的解决方法:

  1. 添加其他特征项:添加特征的重要手段是“组合”,“泛化”,“相关性”;另外,特征添加的首选项是“上下文特征”,“平台特征”。

  2. 添加多项式特征:比较常用,例如,在线性模型中通过添加二次项或者三次项使模型的泛化能力更强。

  3. 减少正则化参数:特征化的目的是用来防止过拟合的。

目录

正则化法

1. L1/L2正则化

2. Dropout

3. EarlyStopping


正则化法

       过拟合产生的本质原因通常是因为参数比较大导致的,因为过拟合,就是拟合函数需要顾忌每一个点,当存在噪声的时候,原本平滑的拟合曲线会变得波动很大。在某些很小的区间里,函数值的变化很剧烈,这就意味着函数在某些小区间里的导数值(绝对值)非常大,由于自变量值可大可小,所以只有系数足够大,才能保证导数值很大。通过添加正则项,假设某个参数比较大,目标函数加上正则项后,也就会变大,因此该参数就不是最优解了。

我们使用正则化,为了防止过拟合, 进而增强泛化能力,正则化可按策略分为三类:

经验正则化:通过工程上的技巧来实现更低的泛化误差方法,比如:提前终止法、模型集成、Dropout等;

参数正则化:直接提供正则化约束,比如:L1/L2正则化法等;

隐式正则化:不直接提供约束,比如:数据有关的操作,包括归一化、数据增强、扰乱标签等;

 

1. L1/L2正则化

       首先介绍一下范数的定义,机器学习、深度学习等计算机领域内用的比较多的就是迭代过程中收敛性质的判断,一般迭代前后步骤的差值称为范数,用范数表示其大小。在数学上,范数包括向量范数和矩阵范数,向量范数表征向量空间中向量的大小,矩阵范数表征矩阵引起变化的大小。一种非严密的解释就是,对应向量范数,向量空间中的向量都是有大小的,这个大小如何度量,就是用范数来度量的,不同的范数都可以来度量这个大小。

L-P范数,与闵可夫斯基距离的定义一样,L-P范数不是一个范数,而是一组范数,其定义如下:

                           

其中 “ || ” 这个符号叫做范数,它事实上是由线性赋范空间到非负实数的映射,在线性赋范空间中,它可以表示空间中的点与原点间的距离,两点间的距离也是用两点之差的范数来表示的,范数所满足的条件有 ||x||>=0,且 ||x||=0当且仅当 x=0。

根据 P 的变化,范数也有着不同的变化,一个经典的有关P范数的变化图如下:

                  

上图表示了p从无穷到0变化时,三维空间中到原点的距离(范数)为1的点构成的图形的变化情况,以常见的L-2范数(p=2)为例,此时的范数也即欧氏距离,空间中到原点的欧氏距离为1的点构成了一个球面。

L-0范数,当P=0时,也就是L0范数,由上面可知,L0范数并不是一个真正的范数,它主要被用来度量向量中非零元素的个数。

L-1范数,表示向量中各个元素绝对值之和,L1范数有很多的名字,例如我们熟悉的曼哈顿距离、最小绝对误差,或者称为Lasso回归 :

                         

由于L1范数的天然性质,对L1优化的解是一个稀疏解,因此L1范数也被叫做稀疏规则算子。通过L1可以实现特征的稀疏,去掉一些没有信息的特征,例如在对用户的电影爱好做分类的时候,用户有100个特征,可能只有十几个特征是对分类有用的,大部分特征如身高体重等可能都是无用的,利用L1范数就可以过滤掉。

       稀疏矩阵指的是很多元素为0,只有少数元素是非零值的矩阵,即得到的线性回归模型的大部分系数都是0. 通常机器学习中特征数量很多,例如文本处理时,如果将一个词组(term)作为一个特征,那么特征数量会达到上万个(bigram)。在预测或分类时,那么多特征显然难以选择,但是如果代入这些特征得到的模型是一个稀疏模型,表示只有少数特征对这个模型有贡献,绝大部分特征是没有贡献的,或者贡献微小(因为它们前面的系数是0或者是很小的值,即使去掉对模型也没有什么影响),此时我们就可以只关注系数是非零值的特征。这就是稀疏模型与特征选择的关系。
 

L-2范数,即向量元素绝对值的平方和再开方,我们用的最多的度量距离欧氏距离就是一种L2范数,或者称为岭回归:

                         

假设我们需要优化的目标函数为 J(w,b) 函数,在目标函数后面添加一个系数的“惩罚项”是正则化的常用方式,为了防止系数过大从而让模型变得复杂。在加了正则化项之后的目标函数为:

                     
上面公式中,λ/2m是一个常数,m为样本个数,λ是一个超参数,用于控制正则化程度,L1正则化通过让原目标函数加上了所有特征系数绝对值的和来实现正则化,即在最后加上L1范数;而L2正则化通过让原目标函数加上了所有特征系数的平方和来实现正则化,即在最后加上L2范数。两者都是通过加上一个和项来限制参数大小,却有不同的效果:L1正则化更适用于特征选择,而L2正则化更适用于防止模型过拟合

       那为什么增加的一项,可以使θ的值减小呢?因为如果我们令  𝜆   的值很大的话,为了使Cost Function 尽可能的小,所有的θ 的值(不包括θ0)都会在一定程度上减小。 但若𝜆 的值太大了,那么θ 的值(不包括θ0)都会趋近于0,这样我们所得到的只能是一条平行于x轴的直线。 所以对于正则化,我们要取一个合理的  𝜆  的值,这样才能更好的应用正则化。 回顾一下代价函数,为了使用正则化,让我们把这些概念应用到到线性回归和逻辑回归中去,那么我们就可以让他们避免过度拟合了。

上面的回归问题中如果我们的模型是: 

                  

我们可以从之前的事例中看出,正是那些高次项导致了过拟合的产生,所以如果我们能让这些高次项的系数接近于0的话,我们就能很好的拟合了。所以我们要做的就是在一定程度上减小这些参数θ 的值,这就是正则化的基本方法。我们决定要减少θ3和θ4的大小,我们要做的便是修改代价函数,在其中θ3和θ4设置一点惩罚。这样做的话,我们在尝试最小化代价时也需要将这个惩罚纳入考虑中,并最终导致选择较小一些的θ3和θ4。 修改后的代价函数如下:

           

通过这样的代价函数选择出的θ3和θ4 对预测结果的影响就比之前要小许多。假如我们有非常多的特征,我们并不知道其中哪些特征我们要惩罚,我们将对所有的特征进行惩罚,并且让代价函数最优化的软件来选择这些惩罚的程度。这样的结果是得到了一个较为简单的能防止过拟合问题的假设:

                 

其中𝜆称为正则化参数(Regularization Parameter)。 注:根据惯例,我们不对𝜃0   进行惩罚。

让我们从梯度下降的角度入手,探究两者的区别,假设数据只有两个特征即W1,W2,考虑L1正则化的目标函数:

                    

在每次更新W1时:

                 

若W1为正数,则每次更新会减去一个常数;若W1为负数,则每次更新会加上一个常数,所以很容易产生特征的系数为 0 的情况,特征系数为 0 表示该特征不会对结果有任何影响,因此L1正则化会让特征变得稀疏,起到特征选择的作用。

现考虑L2正则化的目标函数:

                           

在每次更新W1时:

                         

从上式可以看出每次更新时,会对特征系数进行一个比例的缩放而不是像L1 正则化减去一个固定值,这会让系数趋向变小而不会变为 0,因此L2正则化会让模型变得更简单,防止过拟合,而不会起到特征选择的作用。
 

2. Dropout

Dropout 是一种计算方便但功能强大的正则化方法,适用于神经网络。他的基本步骤是在每一次的迭代中,随机删除一部分节点,只训练剩下的节点。每次迭代都会随机删除,每次迭代删除的节点也都不一样,相当于每次迭代训练的都是不一样的网络,通过这样的方式降低节点之间的关联性以及模型的复杂度,从而达到正则化的效果。这点上有点类似 bagging,但是远比 bagging 来的简单,直观理解:

说dropout简单是因为你只需要设置一个超参数 keep_prob,这个参数的意义是每层节点随机保留的比例,比如将 keep_prob 设置为 0.7,那么就会随机30%的节点消失,消失这个动作其实很简单,只是将这一层的参数矩阵与根据 keep_prob 生成的 {0, 1} 矩阵做 逐点乘积,当然前向传播与反向传播都需要做以上的操作。

dropout的缺点在于,需要将训练集分为不同子集输入每一次的迭代,这就需要较大的训练集,所以在训练集较小的情况下,dropout的效果可能并不好。我们上面也说过,增大数据集是最好的正则化方式,所以在增大数据集的情况下,使用 dropout 需要使用的计算代价可能会比他带来正则化效果更高,这需要我们在实际使用场景中做取舍。

 

3. EarlyStopping

Early stopping的使用可以通过在模型训练整个过程中截取保存结果最优的参数模型,防止过拟合。,提前终止可能是最简单的正则化方式,他适用于模型的表达能力很强的时候。这种情况下,一般训练误差会随着训练次数的增多逐渐下降,而测试误差则会先下降而后再次上升。我们需要做的就是在测试误差最低的点停止训练即可。从图中可以看出,训练集精度一直在提升,但是test set的精度在上升后下降。若是在early stopping的位置保存模型,则不必反复训练模型,即可找到最优解。

               在这里插入图片描述

 

 

参考链接:https://www.jianshu.com/p/569efedf6985
参考链接:https://www.jianshu.com/p/69b962945b2a
参考链接:https://www.jianshu.com/p/69b962945b2a
参考链接:https://blog.csdn.net/qq_42379006/article/details/81044885
参考链接:https://www.cnblogs.com/weststar/p/11662760.html

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值