过拟合、欠拟合以及解决方法
训练误差和泛化误差
在机器学习中,我们将数据分为训练数据、测试数据(或者训练数据、验证数据、测试数据,验证数据也是训练数据的一部分。)训练误差是模型在训练数据集上表现出来的误差,泛化误差(也可称为测试误差)是在测试数据集上表现出来的误差的期望。,例如线性回归用到的平方损失函数和softmax回归的交叉熵损失函数。
测试数据集只能在所有超参数和模型参数选定之后使用一次,不可以用来选择模型,如调参。
验证数据集是预留一部分在训练集和测试集以外的数据以外的数据进行模型的选择。但是由于数据集有限,一般采用K折交叉验证的方法。
训练集:用于模型的构建
验证数据集:可选,用于辅助模型构建,可以重复使用。
测试数据集:用于检测模型,评估模型的准确率。
模型训练过程中会出现两种问题:欠拟合和过拟合
欠拟合:模型无法得到较低的训练误差。
过拟合:模型的训练误差远小于它在测试数据集熵的误差。
导致这两种拟合问题的因素有很多,模型复杂度和训练数据集的大小是主要因素。
给定数据集,模型复杂度和误差之间的关系:
训练数据集过少时,比模型参数数量更少时会,更容易出现过拟合。
解决方法
欠拟合常见的解决方法:
1、增加新特征,可以加入特征组合、高次特征,来增大假设空间。
2、添加多项式特征。例如线性模型通过添加二次项或者三次项使模型泛化能力更强。
3、减少正则化参数,正则化的目的使用来防止过拟合,大那是模型出现欠拟合,则需要减少正则话参数。
4、使用非线性模型
5、集成学习方法。
过拟合的解决方法:
1、正则化(Regularization) (L1范式和L2范式)
2、数据扩增,即增加训练数据集
3、Dropout
4、Early stopping
L2范数正则化
L2范数等价于正则化。正则化通过模型损失函数添加惩罚项时使学习的模型参数值较小。
L2范数正则化是在原损失函数的基础之上添加L2范数惩罚项,从而得到训练所需要的最小化函数。L2范数惩罚项是模型权重参数每一个元素的平方和与与一个正的常数的乘积。
以线性回归 为例
\[
l(w_{1},w_{2},b)=\frac{1}{n}\sum_{i=1}^{n}\frac{1}{2}(x_{1}^{i}w_{1}+x_{2}^{i}w_{2}+b+y^{(t)})^{2}
\]
将权重参数使用向量\(\mathbf{w}=[w_{1},w_{2}]\)表示,带有L2范数的惩罚项的新损失函数为:
\[
l(w_{1},w_{2},b)+\frac{\lambda}{2n}|\mathbf{w}|^2
\]
超参数\(\lambda>0\)。当权重参数均为0时,惩罚项最小。当\(\lambda\)较大时,惩罚项在损失函数中的比重较大,通过使学到的权重参数的元素较接近于0.当\(\lambda\)设为0时,惩罚项完全不起作用。
增加L2范数惩罚项之后,小批量随机梯度下降中,权重的\(w_1,w_{2}\)的迭代方式为:
\[
w_{1} \leftarrow (1- \frac{\eta \lambda}{|B|})w_{1}- \frac{\eta}{|B|}\sum_{i \in B}x_{1}^{i}(x_{1}^{i}w_{1}+x_{2}^{i}w_{2}+b-y^{(i)})
\]
\[ w_{2} \leftarrow (1- \frac{\eta \lambda}{|B|})w_{2}- \frac{\eta}{|B|}\sum_{i \in B}x_{2}^{i}(x_{1}^{i}w_{1}+x_{2}^{i}w_{2}+v-y^{(i)}) \]
L2范式正则化令权重\(w_{1},w_{2}\)先自乘小于1的数,再减去不含惩罚项的梯度。权重衰减通过惩罚项绝对值较大的模型参数为需要学习的模型增加了限制,这可能对过拟合有效。
数据扩增
数据扩增时解决最有效的方法,只要给足够多的数据的,就可以不断的修正自己,从而得到更好的结果。
1、从数据源头获取更多数据
2、根据当前数据集估计数据分布参数,使用该分布产生更多的数据(一般不用)
3、通过一定规则扩充数据。例如图像的平移、翻转、缩放、切割等手段。
Dropout(丢弃法)
设丢弃概率为\(p\),那么有\(p\)的概率hi会被清零,有\(1-p\)的概率\(h_{i}\),会除以\(1-p\)拉伸。丢弃概率时丢弃方的超参数。设随机变量\(\theta _{i}\)为0和1的概率分别为\(p\)和\(1-p\)。
丢弃法随机(例如50%的概率)忽略隐层的某些节点,相当于从\(2^{n}\)(n个神经元的网络)个模型中采样选择模型。
Early stopping
early stopping是提前结束训练迭代过程的方法防止过拟合。在每一个Epoch结束计算validation data的accuracy,当accuracy不再提高,就提前停止训练。
总结
欠拟合现象:模型无法达到一个较低的误差
过拟合现象:训练误差较低但是泛化误差依然较高,二者相差较大。
来源:https://www.cnblogs.com/my-recode/p/12315249.html