过拟合问题及解决办法

原文 :https://blog.csdn.net/liubo187/article/details/77092729
1 什么是过拟合?

一般提及到过拟合就是说在训练集上模型表现很好,但是在测试集上效果很差,即模型的泛化能力不行。过拟合是模型训练过程中参数拟合的问题,由于训练数据本身有采样误差,拟合模型参数时这些采样误差都拟合进去就会带来所谓的过拟合问题。

2 机器学习中为什么会容易出现过拟合?

传统的函数拟合问题,一般是通过物理、数学等推导出的一个含参数的模型(数学建模),模型复杂度是确定的,没有多余的能力拟合噪声。而机器学习算法的复杂度更高,一般都远高于具体问题的复杂度。也就说数据量不足有支撑庞大的模型(也可以说是参数)。

3 怎么样解决过拟合?

3.1 获取更多的数据

一方面可以获取更多的源数据,另一方面也可以在现有数据的基础上进行数据增强(图像平移,旋转等)

3.2 使用合适的模型

这主要是解决数据量与模型参数之间的矛盾,即固定数据量只能支撑对应的参数量的模型的拟合(通俗的说,几十个几百个数据就不要使用深度网络了)。该方法主要可以从四个方面入手:

a.简化网络结构,如层数,单层神经元个数

b.early stopping,每个神经元激活函数在不同数值区间的性能是不同的,值较小时为线性区,适当增大后为非线性区,过度增大则为饱合区(梯度消失)。初始化时,神经元一般工作在线性区(拟合能力有限),训练时间增大时,部分值会增大进入非线性区(拟合能力提高),但是训练时间过大时,就会进入饱合区,神经元就“死掉”。所以应该在适当时间内就stopping训练。

c.限制权值,正则化

d.增加噪声:在输入中增加噪声(效果类似正则化);在权值中加入噪声(非零初始化);

3.3 集成多种模型

a.bagging,类似于分段函数的概念,不同部分的训练集使用不同模型拟合;

b.boosting,综合多个简单的模型的结果得到一个‘靠谱的结果’

c.dropout,实际效果其实是用不同的训练集训练了不同的网络模型,然后这些网络模型形成了一个整体的模型

3.4 贝叶斯方法

猜你喜欢

转载自blog.csdn.net/huiyinimen/article/details/83383806