过拟合与欠拟合

过拟合和欠拟合

过拟合是指模型对于训练数据拟合过当的情况。反应到评估指标上就是模型在训练数据上表现的很好,但在测试集和新数据上表现较差。
欠拟合指的是在训练集和测试集上表现的都不好的情况,这种情况的发生有很多原因:如果模型不够强大,过于正则化,或者仅仅是训练时间不够长。

降低过拟合与欠拟合的方法

降低“过拟合”的方法

  • 增加训练数据。

 

        使用更多的训练数据是解决过拟合的最有效的手段,因为更多的数据能让模型学习到更多的有效特征,减小噪声的影响。当然,直接增加实验数据一般是困难的,但是可以通过一定的规则来扩充训练数据。比如,在图像分类的问题上,可以通过图像的平移、旋转、缩放等方法扩充数据;更进一步的,可以使用生成式对抗网络(GAN)来合成大量的新数据。

  • 降低模型复杂度。

        在数据较少时,模型过于复杂是产生过拟合的主要因素,适当降低模型复杂度可以避免模型拟合过多的采样噪声。例如,在神经网络模型中减少网络层数、神经元个数等;在决策树模型中降低树的深度、进行剪枝等。

  • 正则化的方法。

        给模型的参数加上一定的正则约束。比如将权值的大小加入到损失函数中。

  • 集成学习方法。

        集成学习方法是把多个模型集成在一起投票,来降低单一模型的过拟合风险,如bagging等。

  • 加权正则化

        缓解过度拟合的一种常见方法是通过强制网络权值取小值来限制网络的复杂性,这使得权值的分布更加“规则”。这称为“权重正则化”,它是通过在网络的损失函数中加入与具有较大权重相关联的成本来实现的。

  • Dropout

        另一种方法是只对原始损失运行优化器,然后在应用计算步骤时优化器也应用一些权重衰减。在优化器optimizers.FTRL和optimizers.AdamW中可以看到这种“解耦的权重衰减”。
        Dropout是最有效和最常用的神经网络正则化技术之一。对于Dropout的直观解释是,由于网络中的各个节点不能依赖其他节点的输出,因此每个节点必须输出自己有用的特征。
        应用于层的Dropout包括在训练期间随机“Dropout”(即设置为零)层的许多输出特征。假设一个给定的层通常会在训练期间为给定的输入样本返回一个向量[0.2,0.5,1.3,0.8,1.1];应用Dropout后,这个向量将有几个随机分布的零项,例如[0,0.5,1.3,0,1.1]。
        “Dropout rate”是被归零的特征的数,它通常设置在0.2到0.5之间。在测试时,没有单元被Dropout,相反,层的输出值被一个等于Dropout rate的因子缩小,以便平衡比训练时更多的单元处于活动状态的事实。

降低“欠拟合”的方法

  1. 添加新特征。当特征不足或者现有特征与样本特征标签的相关性不强时,模型容易出现欠拟合。通过挖掘“上下文特征”、“ID类特征”、“组合特征”等新的特征,往往能够取得更好的效果。在深度学习中,有很多的模型可以帮助完成特征工程,如因子分解机、梯度提升决策树、deep-crossing等都可以成为丰富特征的方法。
  2. 增加模型复杂度。简单的模型学习能力较差,通过增加模型的复杂度可以使模型拥有更强的拟合能力。例如在线性模型中添加高次项,在网络模型中增加网络层数或神经元个数。
  3. 减小正则化系数。正则化是用来防止过拟合的,但当模型出现欠拟合现象时,则需要针对性的减小正则化系数。

总结

避免神经网络过度拟合的最常用方法:

获取更多训练数据。
减少网络大小。
增加权重正则化。
增加dropout。

另外的两个重要方法是:

数据扩充(data-augmentation)
批量标准化(batch normalization)

参考资料

https://blog.csdn.net/weixin_42104932/article/details/106115564

上一篇:Tensorflow目录


下一篇:Pytorch学习笔记 Task5 实现L1,L2正则化以及Dropout