- 本文介绍了欠拟合、过拟合相关概念,分析造成它们的原因,总结了防止过拟合的一般策略。
1 损失函数
- 损失函数(loss function):是用来度量模型预测值f(x)与样本真实标签值y的不一致程度。
- 给定输入的样本数据x,模型函数输出一个f(x),这个输出的f(x)与样本的真实值标签值y可能是相同的,也可能是不同的,为了表示我们拟合的好坏,就用一个函数来度量拟合的程度。有平方差损失函数、交叉熵损失函数,对比损失函数,合页损失函数等。
- 损失函数是一个实值函数,它的值越小,表示模型在训练样本集上拟合地越好。是不是训练集损拟合的越好,模型的效果会更好呢? 答案是No。由于训练样本集和测试数据集是不一样的,在训练集上损失函数越小,并不代表测试集损失函数越小,我们希望模型在训练集上有高准确率的同时在测试集上也有高准确率。衡量这种能力的指标就是泛化能力,这时候不得不提过拟合和欠拟合的概念。
2 学习
- 学习:找到一组模型参数,使得在给定的训练数据样本和对应的目标值上的损失函数最小化。
3 过拟合与欠拟合
- 欠拟合(under-fitting):也称为欠学习,它的直观表现是算法训练得到的模型在训练集上表现差(测试集表现也差),没有学到数据的规律。
- 引起欠拟合的原因:
- 模型本身过于简单,例如数据本身是非线性的但使用了线性模型;
- 特征数太少无法正确的建立统计关系。
- 过拟合(over-fitting):也称为过学习,它的直观表现是算法在训练集上表现好,但在测试集上表现不好,泛化性能差。过拟合是在模型参数拟合过程中由于训练数据包含抽样误差,在训练时复杂的模型将抽样误差也进行了拟合导致的。所谓抽样误差,是指抽样得到的样本集和整体数据集之间的偏差。
- 引起过拟合的可能原因:
- 模型本身过于复杂,以至于拟合了训练样本集中的噪声。此时需要选用更简单的模型,或者对模型进行裁剪。
- 训练样本太少或者缺乏代表性。此时需要增加样本数,或者增加样本的多样性。
- 训练样本噪声的干扰,导致模型拟合了这些噪声,这时需要剔除噪声数据或者改用对噪声不敏感的模型。
4 方差与偏差
- 模型的泛化误差来自于两部分,分别称为偏差和方差。
- 偏差(bias)是模型本身导致的误差,即错误的模型假设所导致的误差,它是模型的预测值的数学期望和真实值之间的差距。
- 方差(variance)是由于对训练样本集的小波动敏感而导致的误差。它可以理解为模型预测值的变化范围,即模型预测值的波动程度。
- 偏差、方差、错误率与模型复杂度的关系如下图所示。通常随着模型的复杂度增加,偏差也会跟着逐渐增大。
5 如何避免过拟合
5.1 正则化
为了防止过拟合,可以为损失函数加上一个惩罚项对复杂的模型进行惩罚,即强制让模型的参数值尽可能小。加上正则化项的目标是让它的值尽可能小,即参数等于0或者接近于0。\(\lambda\)为惩罚项系数,是人工设定的大于0的参数。
5.2 剪枝
剪枝是决策树类算法防止过拟合的方法。如果决策树的结构过于复杂,可能会导致过拟合问题,此时需要对树进行剪枝,消掉某些节点让它变得更简单。剪枝的关键问题是确定减掉哪些树节点以及减掉它们之后如何进行节点合并。决策树的剪枝算法可以分为两类,分别称为预剪枝和后剪枝。前者在树的训练过程中通过停止分裂对树的规模进行限制;后者先构造出一棵完整的树,然后通过某种规则消除掉部分节点,用叶子节点替代。
5.3 数据增广
数据增广是解决过拟合中思想比较朴素的方法。训练集越多,过拟合的概率越小,数据增广是一个比较方便有效屡试不爽的方法,但各类领域的增广方法都不同。
- 1 在计算机视觉领域中,增广的方式是对图像旋转,缩放,剪切,添加噪声等。
- 2 在自然语言处理领域中,可以做同义词替换扩充数据集。
- 3 语音识别中可以对样本数据添加随机的噪声。
5.4 dropout
Dropout是神经网络中防止过拟合的方法。dropout的做法是在训练时随机的选择一部分神经元进行正向传播和反向传播,另外一些神经元的参数值保持不变,以减轻过拟合。dropout机制使得每个神经元在训练时只用了样本集中的部分样本,这相当于对样本集进行采样,即bagging的做法。最终得到的是多个神经网络的组合。
5.5 Early Stopping
提前停止的策略是在验证集误差出现增大之后,提前结束训练;而不是一直等待验证集 误差达到最小。提前停止策略十分简单,执行效率高,但需要额外的空间备份参数。
5.6 集成学习
集成学习算法也可以有效的减轻过拟合。Bagging通过平均多个模型的结果,来降低模型的方差。Boosting不仅能够减小偏差,还能减小方差。
6 参考文献
- [1] 雷明著.机器学习与应用[M].清华大学出版社,2019.