过拟合表现原因及解决方法

过拟合的表现

模型过拟合, 就是对训练集进行死记硬背, 只拟合了数据的表面情况, 没有理解数据的规律, 即缺少泛化能力, 一般在训练过程中有以下表现:

  • 开发集和训练集上损失函数值差距较大, 开发集损失值更大

  • 开发集的损失函数值随着训练不再下降, 或下降的很慢, 与训练集损失的下降速度不同步; 评价指标上也没有持续的提升

为什么会过拟合

训练集样本单一, 与测试集分布差异较大

训练集的样本只覆盖了整个样本空间中的一小部分, 因此训练得到的模型在训练集覆盖的空间分布中效果可以, 在样本较少/没有样本的区域效果很差, 即没有泛化性.

如果验证集/测试集中的样本分布没有被包含在训练集中, 此时就会出现过拟合的现象.

训练数据中的噪声过大

训练集中过多的噪声干扰, 会导致拟合得到的模型, 记录了很多噪声特征, 忽略了真实输入和输出之间的关系.

模型过于复杂

相对于训练集, 使用模型结果过于复杂, 过多的参数足以使得模型死记硬背住训练集信息, 但对于没有见过的数据, 泛化能力就会很差.

如何防止过拟合

使用更多的数据

  • 获取更多的真实数据

  • 通过数据增强生成更多样本, 提升模型泛化能力

控制模型复杂度

  • 使用简单模型做baseline, 获得初版可用模型. 之后在此基础上迭代复杂模型

  • 使用BERT的复杂预训练模型, 使用剪枝, 蒸馏等策略, 降低模型参数量

  • 特征工程过程中, 降低特征的数量, 删除冗余特征

正则化

  • 使用L1/L2正则项, 对模型参数的大小进行惩罚. 模型参数较大与过拟合现象息息相关, 最后的输出可能只是由少量值很大的参数决定的

Dropout

  • 消除或者减弱了神经元节点间的固定联系, 降低了网络对单个神经元的依赖, 增强了泛化能力

Early stopping

  • 在模型对训练数据集迭代收敛之前停止迭代来防止过拟合

  • 模型训练的过程, 是参数从0附近逐步增大的过程. 提前停止训练, 使得模型参数不至于进一步扩大, 达到与L2正则化相近的效果

引入噪声

引入噪声不一定能够解决过拟合, 甚至会加重过拟合. 这是因为过拟合可能就是由于训练集中的噪音太大, 导致模型主要在拟合噪声, 进而泛化性非常差. 此时如果引入更多的噪声, 就会加重过拟合的现象.

参考资料

最后更新于