关于过拟合的问题

关于过拟合的问题

1、什么是过拟合?

过拟合(overfitting)是指学习时选择的模型所包含的参数过多(即模型容量很大),以至于出现这一模型对已知数据预测得很好,但对未知数据预测得很差的现象。

2、产生过拟合的原因

产生过拟合的主要原因可以有以下三点:

1) 数据有噪声

为什么数据有噪声,就可能导致模型出现过拟合现象呢?这是因为,当噪声数量在训练集中占有相当大的比例时,就会与正常数据一起影响训练集的分布,机器学习算法在学习过程中,把正常数据和噪声数据同时拟合,学习到了一个正常数据与噪声数据共同决定的模型,用此模型去预测从正常数据分布上取的未知数据,就很有可能得到不理想的泛化效果。

2) 训练数据不足,有限的训练数据

即使得到的训练数据没有噪声,当我们训练数据不足的时候,训练出来的模型也可能产生过拟合现象。这是因为训练数据有限,无法体现数据整体的分布。用给定的不充分的数据集上学习到的模型,去预测未知数据集上的数据,很大可能产生过拟合现象。如给定数据仅能够拟合出一个线性模型,而训练集和测试集总体服从非线性分布,用线性模型去预测非线性分布的数据,泛化能力显然不好。

3) 训练模型过度导致模型非常复杂

在有噪声的训练数据中,我们要是训练过度,会让模型学习到噪声的特征,无疑是会造成在没有噪声的真实测试集上准确率下降。

3、为什么要解决过拟合现象?

因为我们拟合的模型一般是用来预测未知数据(不在训练数据集内),过拟合虽然在训练集上效果很好,但是在实际使用时(测试集)效果很差,同时,在很多问题上,我们无法穷尽所有状态,不可能将所有情况都包含在训练集上。所有必须解决过拟合问题。

4、如何解决过拟合现象?

4.1 Early stop(提前停止)

提前停止就是在验证误差开始上升之前,就把网络的训练停止了具体做法是每次在给定的迭代次数K内,把出现比之前验证误差更小的参数(模型)记录下来。如果从上次记录最小值开始,迭代了K次仍然没有发现新的更小的验证误差,那就认为已经过拟合,把当前验证误差最小的模型当做最优模型。

4.2 Data expending(数据集扩增

过拟合是因为模型学习到了训练集的独有特性,那么如果我们的训练集能够涵盖所有样本空间,那么它就会学习到样本特征空间的普遍特性,而独特性将不复存在,因为测试集不会超出样本的特征空间,所以结果和训练集应该一致。

4.3 regularization(正则化)

正则化方法是指在进行目标函数或代价函数优化时,在目标函数或代价函数后面加上一个正则项,一般有L1正则与L2正则等

相关问题:

什么是L1L2正则?

l L1,L2服从什么分布?

l L1,L2的联系与区别。

4.4 Bagging(bootstrap aggregating引导聚集)

Bagging亦称为Ensemble(集成方法),这是一种通过结合几个模型降低泛化误差的技术。主要想法是通过对训练数据有放回的采样来训练多个模型,然后让所有模型表决(采用投票多数表决,取所有模型分类结果最多的分类作为结果)测试样例的输出。这种方法虽然在准确率和稳定性都会有提高,但是训练多个模型的计算成本也是非常高的。

参考:花书《深度学习》

4.5 DroupOut(随机失活)

假设我们选取一个隐层,在每一次梯度迭代中,让隐层的每一个单元以一定的概率失活,这相当于训练一个新的子网络。下一次迭代继续上述过程。Dropout的底层思想其实也是把多个模型的结果放到一起,只不过实现方式是在一个模型内部,而不是像Bagging一样,真正地去训练多个模型。定性地理解一下,dropout实现的相当于每次迭代都在一个随机挑选的特征子空间进行。在实现dropout的时候,因为训练时对单元按照一定概率p进行随机置零,所以训练结束后到了预测阶段需要对参数的值乘上一个1-p,才能保证结果的正确性。

更多的内容,可以查看吴恩达深度学习笔记中的session 1.6、1.7。

4.6 BatchNorm (批量标准化)

可参考博文:https://blog.csdn.net/qq_25737169/article/details/79048516 以及deeplearn深度学习笔记的3.5 3.63.7

4.7 其它方法

除了以上方法,可以参考花书的第七章。

 

 

原文地址:https://www.cnblogs.com/houjun/p/8956333.html