机器学习中常见的过拟合解决⽅法
  在机器学习中,我们将模型在训练集上的误差称之为训练误差,⼜称之为经验误差,在新的数据集(⽐如测试集)上的误差称之为泛化误差,泛化误差也可以说是模型在总体样本上的误差。对于⼀个好的模型应该是经验误差约等于泛化误差,也就是经验误差要收敛于泛化误差,根据霍夫丁不等式可知经验误差在⼀定条件下是可以收敛于泛化误差的。
  当机器学习模型对训练集学习的太好的时候(再学习数据集的通性的时候,也学习了数据集上的特性,这些特性是会影响模型在新的数据集上的表达能⼒的,也就是泛化能⼒),此时表现为经验误差很⼩,但往往此时的泛化误差会很⼤,这种情况我们称之为过拟合,⽽当模型在数据集上学习的不够好的时候,此时经验误差较⼤,这种情况我们称之为⽋拟合。具体表现如下图所⽰,第⼀幅图就是⽋拟合,第三幅图就是过拟合。
  再如下⾯这幅图所⽰,只要我们愿意,在训练集上的误差是可以⽆限⼩的,但是此时的泛化误差会增⼤。
  对于⽋拟合的问题⽐较好处理,只要增⼤模型的复杂度就⾏,⽽且⽋拟合会在训练过程中就表现出来(通过看训练集的损失来判断),更容易去控制。对于过拟合不会体现在训练集上,因此常见的⽅式是采⽤交叉验证来检测过拟合。解决过拟合的两条主线:⼀是增⼤数据集,⼆是降低模型的复杂度(根据VC维理论可知)。⼀般来说扩展数据集是⽐较难的,⽽且数据集⼤,模型复杂度⾼的时候即使能获得好的泛化结果,也会增⼤计算量。所以常见的⽅式都是以降低模型的复杂度为主,接下来看看有哪些常见的⽅法可以⾃适应地降低模型的复杂度。
1、正则化
  正则化是机器学习中最常见的过拟合解决⽅法,在损失函数中加⼊正则项来惩罚模型的参数,以此来降低模型的复杂度,常见的添加正则项的正则化技术有L1,L2正则化。
  L1正则化
  L1正则化是基于L1范数的,J是我们的损失函数,在损失函数优化时,我们要使得损失函数⽆限⼩,要满⾜这个结果,表达式中的第⼆项也必须⽆限⼩。关于L1正则化项的函数可以在⼆维平⾯图中表⽰出来,令
  图中的等值线(就是那些曲线)是J0的等值线,⿊⾊⽅形是正则项函数L的图形。在图中。当J0等值线和L图形⾸次相交的地⽅就是最优解(根据拉格朗⽇约束问题的最⼩值可知,L函数可以看作J0函数的约束,没有该约束,J0函数的最⼩值应该是最⾥⾯的等值线,加上约束之后,就是⾸次相交的点处),从图中可以看出在相交点这⾥有w1为0,这也是L1正则的特点。加⼊L1正则项之后,数据集中那些对模型贡献不⼤的特征所对应的参数w可以为0,因此L1正则项得出的参数是稀疏的。
  L2正则化
  同样可以画出在⼆维平⾯中的图形来描述
  原理和L1正则中差不多,但是L2正则化不会获得稀疏解,只会将对模型贡献不⼤的特征所对应的参数置于⽆限⼩的值,以此来忽略该特征对模型的影响。
  因此正则化都是在通过控制模型参数的⼤⼩来降低模型的复杂度。
2、剪枝处理
  剪枝是决策树中⼀种控制过拟合的⽅法,我们知道决策树是⼀种⾮常容易陷⼊过拟合的算法,剪枝处理主要有预剪枝和后剪枝这两种,常见的是两种⽅法⼀起使⽤。预剪枝通过在训练过程中控制树深、叶⼦节点数、叶⼦节点中样本的个数等来控制树的复杂度。后剪枝则是在训练好树模型之后,采⽤交叉验证的⽅式进⾏剪枝以到最优的树模型。
3、提前终⽌迭代(Early stopping)
  该⽅法主要是⽤在神经⽹络中的,在神经⽹络的训练过程中我们会初始化⼀组较⼩的权值参数,此时模型的拟合能⼒较弱,通过迭代训练来提⾼模型的拟合能⼒,随着迭代次数的增⼤,部分的权值也会不断的增⼤。如果我们提前终⽌迭代可以有效的控制权值参数的⼤⼩,从⽽降低模型的复杂度。
4、权值共享
  权值共享最常见的就是在卷积神经⽹络中,权值共享的⽬的旨在减⼩模型中的参数,同时还能较少计算量。在循环神经⽹络中也⽤到了权值共享。
正则化是解决过拟合问题吗5、增加噪声
  这也是深度学习中的⼀种避免过拟合的⽅法(没办法,深度学习模型太复杂,容易过拟合),添加噪声的途径有很多,可以在输⼊数据上添加,增⼤数据的多样性,可以在权值上添加噪声,这种⽅法类似于L2正则化。
6、Batch Normalization
  BM算法是⼀种⾮常有⽤的正则化⽅法,⽽且可以让⼤型的卷积神经⽹络快速收敛,同时还能提⾼分类的准确率,⽽且可以不需要使⽤局部响应归⼀化处理,也可以不需要加⼊Dropout。BM算法会将每⼀层的输⼊值做归⼀化处理,并且会重构归⼀化处理之后的数据,确保数据的分布不会发⽣变化。
  ⽽且有很多变种,⽐如Layer Normalization,在RNN或者Transformer中⽤的⽐较多。
  上⾯的⼏种⽅法都是操作在⼀个模型上,通过改变模型的复杂度来控制过拟合。另⼀种可⾏的⽅法是结合多种模型来控制过拟合。
7、Bagging和Boosting
  Bagging和Boosting是机器学习中的集成⽅法,多个模型的组合可以弱化每个模型中的异常点的影响,保留模型之间的通性,弱化单个模型的特性。
8、Dropout
  Dropout是深度学习中最常⽤的控制过拟合的⽅法,主要⽤在全连接层处。Dropout⽅法是在⼀定的概率上(通常设置为0.5,原因是此时随机⽣成的⽹络结构最多)隐式的去除⽹络中的神经元,具体如下图
  Dropout控制过拟合的思想和机器学习中的集成⽅法中的bagging类似,在每个batch更新的⽹络结构都有所不同,也就相当于在训练时有很多个不同的⼦⽹络,在每次迭代时dropout的神经元都不⼀样,因此对于整个模型参数⽽⾔,每次都会有⼀些参数不被训练到。Dropout 会导致⽹络的训练速度慢2、3倍,⽽且数据⼩的时候,Dropout的效果并不会太好。因此只会在⼤型⽹络上使⽤。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。