过拟合和欠拟合的一些问题

    技术2022-07-13  62

    过拟合和欠拟合

    一、什么是过拟合和欠拟合?二、过拟合和欠拟合问题1、欠拟合:2、过拟合:2.1 减少过拟合总结: 三、产生过拟合原因四、解决过拟合方法1. 正则化2. 剪枝处理3. 提前终止迭代4. 权值共享5. 增加噪声6. Batch Normalization7. Bagging和Boosting8. Dropout

    一、什么是过拟合和欠拟合?

    图一:欠拟合——模型拟合程度不高,数据距离拟合曲线较远,或指模型没有很好地捕捉到数据特征,不能够很好地拟合数据。 图二:正常拟合; 图三:过拟合——模型拟合度好过头了。

    二、过拟合和欠拟合问题

    1、欠拟合:

    a. 根本原因: 特征维度过少,模型过于简单,导致拟合的函数无法满足训练集,误差较大; b. 解决方法: 增加特征维度,增加训练数据;

    2、过拟合:

    a.根本原因: 特征维度过多,模型假设过于复杂,参数过多,训练数据过少,噪声过多,导致拟合的函数完美的预测训练集,但对新数据的测试集预测结果差。 过度的拟合了训练数据,而没有考虑到泛化能力。 b.解决方法: 1)减少特征维度;2)正则化,降低参数值。

    2.1 减少过拟合总结:

    过拟合主要是有两个原因造成的: 数据太少+模型太复杂

    1. 获取更多数据: 从数据源头获取更多数据;数据增强(Data Augmentation) ; 2. 使用合适的模型: 减少网络的层数、神经元个数等均可以限制网络的拟合能力; 3. dropout; 4. 正则化, 在训练的时候限制权值变大; 5. 限制训练时间; 通过评估测试; 6. 增加噪声 Noise: 输入时+权重上(高斯初始化); 7. 数据清洗(data ckeaning/Pruning): 将错误的label 纠正或者删除错误的数据; 8. 结合多种模型: Bagging用不同的模型拟合不同部分的训练集;Boosting只使用简单的神经网络。

    三、产生过拟合原因

    1、观察值与真实值存在误差 2、数据太少,无法描述问题真是分布 **3、

    四、解决过拟合方法

    1. 正则化

    正则化是机器学习中最常见的过拟合解决方法,在损失函数中加入正则项来惩罚模型的参数,以此来降低模型的复杂度,常见的添加正则项的正则化技术有L1,L2正则化。

    1)L1正则化: L1正则化是基于L1范数的,且得出的参数是稀疏的。 J = J 0 + α ∑ w ∣ w ∣ J=J_0+\alpha\sum_{w}|w| J=J0+αww 上述公式,J是我们的损失函数,在损失函数优化时,我们要使得损失函数无限小,要满足这个结果,表达式中的第二项也必须无限小。

    2)L2正则化: 原理和L1正则中差不多,但是L2正则化不会获得稀疏解,只会将对模型贡献不大的特征所对应的参数置于无限小的值,以此来忽略该特征对模型的影响。 J = J 0 + α ∑ w w 2 J=J_0+\alpha\sum_{w}w^2 J=J0+αww2

    正则化都是在通过控制模型参数的大小来降低模型的复杂度。

    2. 剪枝处理

    是决策树中一种控制过拟合的方法。 它有 预剪枝和后剪枝 这两种,常见的是两种方法一起使用。 1)预剪枝: 通过在训练过程中控制树深、叶子节点数、叶子节点中样本的个数等来控制树的复杂度; 2)后剪枝: 在训练好树模型之后,采用交叉验证的方式进行剪枝以找到最优的树模型。

    3. 提前终止迭代

    它主要是用在神经网络中的,在神经网络的训练过程中我们会初始化一组较小的权值参数,此时模型的拟合能力较弱,通过迭代训练来提高模型的拟合能力,随着迭代次数的增大,部分的权值也会不断的增大。 如果我们提前终止迭代可以有效的控制权值参数的大小,从而降低模型的复杂度。

    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的效果并不会太好。 因此只会在大型网络上使用。

    Processed: 0.024, SQL: 9