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

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

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

二、过拟合和欠拟合问题

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值