过拟合和欠拟合是在网络训练中常常碰到的问题
- 过拟合(overfit):训练误差小,但是对于测试集上的误差很大。可能模型过于复杂,训练中只”记住”了训练样本,然而其泛化误差却很高。
- 欠拟合(underfit):训练误差很大,无法找到合适的函数描述数据集
下面介绍这两种情况下常用的一些trick方法
- 如何防止过拟合
过拟合的原因基本是特征维度太多,模型过复杂,参数太多,训练数据太少,噪声过多等,导致拟合的函数在训练集上效果好而测试集效果差。从它出现的原因出发,我们可以考虑的方法有以下几种:
-
- 数据增强Data Augmentation & 增加噪声数据,将源数据数量变多
-
- 使用合适的网络模型,减少网络的层数、神经元个数等均可以限制网络的拟合能力
-
Dropout(把网络某层的输出节点随机丢弃掉一部分,从而创造新的样本)
-
weight正则化 (就是在损失函数中增加范L1范数/L2范数,而weight decay是正则化的系数)
i. L1范数 所有参数的绝对值之合
L1范数可以使得某些参数为0,也就实现特征稀疏,也可认为是特征选择
ii. L2范数 所有参数的平方和再求平方根
L2范数使得参数较小且接近于0,参数越小,模型就越小,就越不容易出现过拟合
L1趋向于产生少量特征,而其他特征都为0,而L2趋向于选择更多特征,这些特征趋向于0
- 提前终止(early stopping)过拟合出现之前停止模型的学习过程
2. 如何防止欠拟合
模型没有很好捕捉到数据特征,不能很好的拟合数据
-
- 添加更多特征
- 减少正则化参数