深度学习的过拟合与欠拟合问题的介绍与解决方案


过拟合与欠拟合


提示:以下是本篇文章正文内容,下面案例可供参考

一、神经网络模型的表现能力

神经网络的表现能力与所选取的公式有很大关系,例如之前一直用来论述的线性模型Y=W*X+b。先将公式用多项式的方式列举,函数越复杂,模型的表达能力就越强,如图1:在这里插入图片描述
图1
如果不加激活函数,degree=0或1时的神经网络模型,只能处理线性问题。

二、欠拟合

当模型的表现能力弱于事件的真实表现时,会出现欠拟合现象,如图蓝色的线是模型合适的解,如果用线性模型(红线)去训练非线性问题,自然难以得到合适的解。
在这里插入图片描述
欠拟合现象在训练中的表现为:训练集的loss较大,acc(准确率)较低,测试集的准确率也较低。
由于硬件设备的快速更新和理论知识是逐渐完善,欠拟合现象一般不容易出现,即使出现也可以通过增加模型难道或者神经网络层数来解决问题。相比较与欠拟合,过拟合是深度学习中比较容易出现且较难解决的问题。


三,过拟合

当模型的表现能力强于事件的真实表现时,会出现过拟合现象,过拟合现象是指模型为了追求训练集的准确率,过多的学习一些非普遍的特征,导致模型的泛化能力下降,虽然能很好的拟合训练集,但是在测试集上表现不佳。如图,蓝色曲线是合适的模型,黄色曲线的过拟合的模型。
在这里插入图片描述

过拟合现象在训练中的表现为:训练集loss较小,acc(准确率)较高,测试集的准确率却较低。

四,过拟合的解决方法

针对数据集的处理:

增大数据集:增加数据集是减少过拟合的直接方法,也是代价最大的方法;而且一般情况下数据集的一定量的,难以增加。
数据集的划分:数据集的合理划分可用于解决过拟合问题,常见的划分方式有两种。
方式一:训练集和测试集。训练集用于训练和更新模型,以得到不同的参数;测试集用于根据不同的标准评价模型的好坏,如acc(准确率)。
方式二:可用于早停法,早停法是减少过拟合现象的一个简单技巧。不同于方式一的数据集划分,方式二将数据集划分为训练集,验证集和测试集。训练集作用不变;验证集用于比较训练集每次更新的模型参数是否最佳,若以经达到最佳,比如训练集的loss较小,acc较大,验证集的acc也较大,且继续拟合验证集的acc开始减少,此时即跳出训练,防止继续训练下去出现验证集acc下降的情况,即过拟合现象。而测试集是用来测试最终模型准确度的,一般用于模型的验收。不把验证集和测试集合二为一的理由是保证测试集的数据未经模型训练,已保证模型泛化能力的真实性。
交叉验证:交叉验证是针对于训练集和验证集的划分与处理。首先将两个集合合二为一,在划分方式上一般随机划分K-1/K作为训练集,1/K作为验证集;这种方式保证了神经网络每进行一次循环所用的训练集和验证集都不相同。
交叉验证又叫K折交叉验证,其好处有两点:其一防止神经网络的记忆能力太强,而记住一些不必要的特征。如一组照片数据排列为(鼠,牛,虎,兔…)
如果不打乱训练集顺序,再网络多次训练之后,当要判断第二张图片是什么的时候,神经网络甚至不用分辨图片,仅仅依靠记忆的顺序来判断是牛。而‘顺序’这个特征显然是我们不希望网络进行记忆的。其二是保证了训练集和验证集数据的充分利用。这在数据较少时,是很有意义的。

针对降低模型的复杂度的处理:

可以通过人为的降低模型复杂度防止过拟合现象。针对不同的数据集选取不同复杂度的模型。除了人为选取,这里介绍一种常用的方式——regularization。
也称权重衰减(weight decay),常见的两种方式是L1正则化和L2正则化。

另一种常见的方法——Dropout

其原理是通过减少连接层间权值的链接来降低模型的复杂度,如图:
在这里插入图片描述
换句话说,在前向传播的过程中,让某个神经元的激活值以一定概率p停止工作,这样可以使模型泛化能力更强,因为它不会太依赖某些局部的特征。

针对动量的处理:

Loss函数可以通过添加动量的方式,让梯度更新变得更圆滑。动量从物理上解释为:物体所受合力的冲量等于物体的动量变化。打个通俗的比方,动量从某种意义上可以理解为人在滑雪时的惯性,所以当某一时刻人想向正右方向拐弯时,由于前一时刻存在的能量,使得人不能向正右放拐弯,而是向斜右方向拐弯,也可以理解为惯性的影响。转移到梯度更新曲线是可以解释为:当某一时刻曲线按梯度反方向更新时,由于考虑前一时刻的梯度影响,使得梯度更新不是向正反方向,所以曲线变的更圆滑,从而防止过拟合现象。除此之外,添加动量还可能使loss更新跳出局部最小值。图1是没有添加动量的模型更新曲线;如图2是添加动量后的模型曲线。
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_39297053/article/details/109234521
今日推荐