过拟合、欠拟合以及对应措施

参考:https://blog.csdn.net/qq_18254385/article/details/78428887

在这里插入图片描述

1、过拟合

  就是所建的机器学习模型或者是深度学习模型在训练样本中表现得过于优越,导致在验证数据集以及测试数据集中表现不佳。打个比喻就是当我需要建立好一个模型之后,比如是识别一只狗狗的模型,我需要对这个模型进行训练。恰好,我训练样本中的所有训练图片都是二哈,那么经过多次迭代训练之后,模型训练好了,并且在训练集中表现得很好。基本上二哈身上的所有特点都涵括进去,那么问题来了!假如我的测试样本是一只金毛呢?将一只金毛的测试样本放进这个识别狗狗的模型中,很有可能模型最后输出的结果就是金毛不是一条狗(因为这个模型基本上是按照二哈的特征去打造的)。所以这样就造成了模型过拟合,虽然在训练集上表现得很好,但是在测试集中表现得恰好相反,在性能的角度上讲就是协方差过大(variance is large),同样在测试集上的损失函数(cost function)会表现得很大。

2、欠拟合

  还是拿刚才的模型来说,可能二哈被提取的特征比较少,导致训练出来的模型不能很好地匹配,表现得很差,甚至二哈都无法识别。

3、解决

3.1、过拟合

造成过拟合的原因可以归结为参数过多。故要减少参数,主要有两种方法:

  1. 回想下我们的模型,假如我们采用梯度下降算法将模型中的损失函数不断减少,那么最终我们会在一定范围内求出最优解,最后损失函数不断趋近0。那么我们可以在所定义的损失函数后面加入一项永不为0的部分,那么最后经过不断优化损失函数还是会存在。其实这就是所谓的“正则化”。
    下面是加入正则化后的损失函数,m是样本数目, λ \lambda 表示正则化系数。
    1 / m [ i = 1 m y ( i ) ( l o g h θ ( x ( i ) ) ) + ( 1 y ( i ) ) ( l o g ( 1 h θ ( x ( i ) ) ) ] + λ / 2 m j = 1 n θ j 2 1/m *[\sum^m_{i=1}y^{(i)}(-logh_\theta(x^{(i)}))+(1-y^{(i)})(-log(1-h_\theta(x^{(i)}))]+\lambda/2m *\sum^n_{j=1}\theta^2_j
    λ \lambda 过大时,则会导致后面部分权重比加大,那么最终损失函数过大,从而导致欠拟合
    λ \lambda 过小时,甚至为0,导致过拟合
  2. 对于神经网络,参数膨胀原因可能是因为随着网路深度的增加,同时参数也不断增加,并且增加速度、规模都很大。那么可以采取减少神经网络规模(深度)的方法。也可以用一种叫dropout的方法。dropout的思想是当一组参数经过某一层神经元的时候,去掉这一层上的一部分神经元,让参数只经过一部分神经元进行计算。注意这里的去掉并不是真正意义上的去除,只是让参数不经过一部分神经元计算而已。

  另外增大训练样本规模同样也可以防止过拟合。

3.2、欠拟合

  其实个人觉得欠拟合基本上都会发生在训练刚开始的时候,经过不断训练之后欠拟合应该不怎么考虑了。。但是如果真的还是存在的话,可以通过增加网络复杂度或者在模型中增加多点特征点,这些都是很好解决欠拟合的方法。

猜你喜欢

转载自blog.csdn.net/qq_18644873/article/details/84975412