过拟合、欠拟合

过拟合和欠拟合

训练误差和泛化误差

  • 训练误差,模型在训练集合上表现的误差。
  • 泛化误差 ,模型在任意一个数据集上表现出来的误差的期望。
  • 过拟合,模型训练误差远小于在测试集上的误差。
  • 欠拟合 ,模型无法在训练集上得到较低的训练误差。

如何判断过拟合和欠拟合

现在常用的判断方法是从训练集中随机选一部分作为一个验证集,采用K折交叉验证的方式。把原始训练数据集分割成K个不重合的子数据集,然后我们做K次模型训练和验证。每一次,我们使用一个子数据集验证模型,并使用其他K-1个子数据集来训练模型。在这K次训练和验证中,每次用来验证模型的子数据集都不同。最后,我们对这K次训练误差和验证误差分别求平均。

主要的因素

  • 模型复杂度
  • 训练数据集大小

过拟合、欠拟合
般来说,如果训练数据集中样本数过少,特别是比模型参数数量(按元素计)更少时,过拟合更容易发生。此外,泛化误差不会随训练数据集里样本数量增加而增大。因此,在计算资源允许的范围之内,我们通常希望训练数据集大一些,特别是在模型复杂度较高时。
解决的方法
过拟合:

  • 权重衰减

    在loss 函数上增加二范数,l2 norm,即权重衰减等价于 L2 范数正则化(regularization)。正则化通过为模型损失函数添加惩罚项使学出的模型参数值较小,是应对过拟合的常用手段。
    过拟合、欠拟合
    其中超参数 λ>0 。当权重参数均为0时,惩罚项最小。当 λ 较大时,惩罚项在损失函数中的比重较大,这通常会使学到的权重参数的元素较接近0。当 λ 设为0时,惩罚项完全不起作用。

  • dropout
    dropout的思想是当一组参数经过某一层神经元的时候,去掉这一层上的一部分神经元,让参数只经过一部分神经元进行计算。注意这里的去掉并不是真正意义上的去除,只是让参数不经过一部分神经元计算而已。

  • 提前终止训练
    减少训练的迭代次数。从上面的误差率曲线图可以看出,理论上能够找到一个训练程度,此时验证集误差率最低,视为拟合效果最好的点。

欠拟合
增加模型复杂度或者提高数据集大小。