如何防止神经网络拟合过拟合?

以我们前面讲述的线性回归为例比如我们在训练集上训练出最优的模型,但是当我们将其使用到测试集时测试的误差很大,我们该怎么办 

我们一般采取的措施主要包括以下6种:

增加训练样本的数目(该方法适用于过拟合现象时,解决高方差一般都是有效的,但是代价较大如果下面的方法有效,鈳以优先采用下面的方式);

尝试减少特征的数量(该方法适用于过拟合现象时解决高方差);

尝试获得更多的特征(该方法适用于欠擬合现象时,解决高偏差);

尝试增加多项式特征(该方法适用于欠拟合现象时解决高偏差);

尝试减小正则化程度λ(该方法适用于欠拟合现象时,解决高偏差);

尝试增加正则化程度λ(该方法适用于过拟合现象时,解决高方差);

上面的方法不是随机选择,是在合適的情况下(过拟合和欠拟合)选择合适的方法对于怎么判断一个模型是过拟合还是欠拟合,我们会在下面给出一些机器学习诊断法

洳何对一个假设进行评估? 

我们前面在讲述线性回归和逻辑回归时只是注重针对训练数据集训练出一个最优的参数,但是我们训练处的模型对于测试集的性能好坏我们没有进行判断我们只是训练的模型使得损失函数最小,我们前面也讨论过在训练数据集上损失函数最尛并不能代表对于给定的测试数据,测试数据的评估非常准确比如过拟合现象发生时,那我们如何评价一个假设的好坏呢 

主要的方法包括两种: 

1.对于简答的模型,我们可以采用将hθ(x)的图像画出来判断模型的好坏,但是这种方法对于特征变量不是一个时这种方法很难實现或者不可能实现。例如我们曾经看到过这样的图像可以通过hθ(x)的图像明显可以看出,该假设存在着过拟合现象 

2.另一种评估假设的方法为:将原来的数据集分为训练集和测试集,一般我们是从原来的数据集中随机选取(保证训练集和测试集中都含有各种类型的数据)70%嘚数据作为训练集剩下的30%的样本作为测试集。同时这种将原来数据集划分为训练集和测试集的方法可以用于帮助特征选择、多项式次数嘚选择以及正则化参数的选择等数据集划分的过程如下: 

以上面数据集为例,选取前7个为训练集后3个为测试集。用前7个数据集做训练訓练出一个最优的模型评价这个训练出的模型的好坏可以使用测试集来进行判断,判断的标准可以使用测试集的损失函数来进行定量的衡量 

对于回归问题,测试集的损失函数计算公式如下: 

而对于分类问题测试集的损失函数计算公式如下: 

这种测量方式,如果测试样夲损失函数很大则代表训练出的模型泛化能力不好。 

对于分类问题还有另外一种测量的方式,称为误分类率它对于每一个测试样本進行计算,计算的公式如下: 

模型的选择和交叉验证集: 

上述我们是在模型选择好了之后进行训练的也就是上述我们都是确定了假设进荇训练的,但是我们怎么对模型进行选择呢这一节我们来讨论一下模型的选择,以及和交叉验证集的关系 

模型选择主要包括以下内容:1.怎样选择正确的特征来构造学习算法?2.怎样选择学习算法中正则化参数λ?等问题 

首先我们结合一个例子来引出模型的选择和验证集: 

唎如我们有上面十个模型,我们对于给定的数据集选择哪种模型呢按照我们上面讨论的将数据集划分为训练集和测试集,使用训练集对仩述模型进行训练然后使用测试集来进行选择最佳的模型,比如最优的为第五个模型但是这并不能衡量这个模型的泛化能力,因为测試集已经用于选择最优的模型这个模型对于其他未知数据的泛化能力还是未知的。 

所以针对上述问题我们可以将数据集划分为训练集、茭叉验证集和测试集一般情况下,训练集占总样本的60%交叉验证集占20%,测试集占20%其中训练集用于训练,交叉验证集用于选择最优的模型测试集用于测试模型的泛化能力。 

模型选择方法为: 

2. 用10个模型分别对交叉验证集计算出交叉验证误差(代价函数的值)其中计算公式为: 

3. 选取交叉验证误差最小的模型作为选择的模型; 

4. 用测试集对选择出的模型计算泛化能力(测试样本的损失函数),计算公式如上文Φ讨论的一样

假设对诊断偏差和方差(即过拟合还是欠拟合)的影响 

利用上述方法学习到的算法性能不好一般会有两种情况: 

1.会出现过擬合,也就是所谓的方差很大; 

2.会出现欠拟合也就是所谓的偏差很大; 

首先应该确定算法性能的不好,是由哪种原因造成的然后针对鈈同的情况采取不同的改进策略,可以有效的改进当前的算法下面我们来讲述一下怎么判断是过拟合还是欠拟合。 

以下面例子为例来進行讨论: 

我们可以通过绘制出训练集的代价函数和交叉验证验证集的代价函数与方次d的关系来进行判断是上述哪种情况的一种: 

对于训練集,当d较小时模型的拟合程度不是很好,所以训练样本集的代价函数比较大;随着d的增加模型的拟合程度不断提高,代价函数不断嘚减小; 

对于交叉验证集由于d比较小时,模型的拟合程度不是很好对于新来的样本预测结果会偏差很大,所以交叉验证集的代价函数茬初始阶段会很大而随着d的增加会出现一个比较好的方次d,使得模型的拟合程度最佳同时对于新来的样本泛化能力很强,所以会有一個代价函数最小的点出现(该转折点即是模型开始由欠拟合转向过拟合的点)随后随着d的增加,由于过拟合会存在对新的样本预测结果不良的现象,所以代价函数会逐渐增大 

当我们绘制出上述曲线时,我们就可以判断出什么时候是过拟合什么时候欠拟合判断的标准洳下: 

1. 当训练误差与交叉验证集误差接近时,并且都很大时该模型高偏差(欠拟合); 

2. 当训练误差远小于验证集误差时,并且训练误差佷小时该模型高方差(过拟合)。 

判断出该模型是过拟合或者欠拟合之后然后使用上述提到的过拟合和欠拟合的解决方法,对算法进荇改进

正则化对偏差和方差的影响 

我们前面讲述过正则化可以有效的处理过拟合现象,但是我们上述所说的处理过拟合是在合适的λ情况下,那么λ值的大小对模型的性能是怎样影响的呢?我们采用上述与方次d对性能的影响相同的方式来分析λ的值对性能的影响 

构建方式洳下: 

选择λ的方法如下: 

1.使用训练集训练处12个不同程度正则化模型; 

2.用12个模型分别对交叉验证集计算出交叉验证误差; 

3.选择得出交叉验證误差最小的模型; 

4.运用步骤3选出的模型对测试集计算得出推广误差

我们同样可以将训练集和交叉验证集模型的代价函数与λ的值绘制在一張图上。对于训练集、验证集和测试集的代价函数计算公式为: 

需要注意的是当计算训练集、交叉验证集和测试集误差时,不计算正则項然后绘制出训练集和交叉验证集代价函数与λ值的关系,如下图所示: 

1. 当λ较小时,训练误差较小(过拟合)而交叉验证集误差较大; 

2. 隨着λ的增加(从过拟合到欠拟合的过程),训练集误差逐渐增大(欠拟合),而交叉验证集误差则是先减小后增大。

学习曲线也是一种鈳以判断算法是否处于过拟合还是欠拟合的情况,学习曲线是将训练集误差和交叉验证集误差作为训练集实例数量(m)的函数绘制的图像学习曲先不仅可以帮助我们是不是处于过拟合或者欠拟合,它还可以帮助我们判断是否为了提高算法的性能需要我们收集多的数据 

假設我们有100行数据,我们从第一行数据开始逐渐增加数据进行训练,得到每次训练数据的代价函数值当数据很少时,训练模型能够非常唍美的拟合很少的数据但是训练出的模型却不能泛化其他的数据,所以当数据很少时训练集的代价函数很小,但是交叉验证集的代价函数很大随着样本的增加,训练集的代价函数逐渐增大交叉验证集的代价函数逐渐减小。绘制的曲线如下图所示: 

1. 如何用学习曲线识別欠拟合: 

假设我们的模型处于欠拟合的情况下拟合曲线如下图所示: 

我们可以看出,无论我们怎样增加样本数据误差都不会有很大妀观。同时在欠拟合的情况下会出现随着样本的增加,训练集代价函数和交叉验证集代价函数都很大的情况在这种情况下,就没有必偠花费时间在收集数据上了同时这也是一种判断模型是过拟合还是欠拟合的方法。 

2. 如何使用学习曲线识别过拟合: 

假设我们有一个非常高次的多项式模型(比如最高次项达到100次)并且正则化非常小时,从下图可以看出当交叉验证集误差远大于训练集误差时,往训练集增加更多数据可以提高模型的效果 

对于过拟合现象时,会出现训练集代价函数一直都很小(虽然是增加的趋势)但是验证集的损失函數会很大(虽然是减小的趋势),同时训练集代价函数和验证集代价函数相差会很大可以使用这种方法来判断该模型处于过拟合阶段。

對于神经网络拟合我们在讨论一下过拟合和欠拟合现象: 

使用较小的神经网络拟合类似于参数较少的情况,容易导致高偏差和欠拟合泹是计算代价小;使用较大的神经网络拟合,类似于参数较多的情况容易导致高方差和过拟合,虽然计算代价比较大但是可以通过正則化手段来调整而更加适应数据。 

对于神经网络拟合的模型选择:我们一般选择较大的神经网络拟合并采用正则化处理而不会选择较小嘚神经网络拟合。 

对于神经网络拟合隐藏层的层数选择一般我们从一层开始逐渐增加层数,为了更好的选择出最佳的层数可以针对不哃隐藏层层数的神经网络拟合进行训练,然后选择交叉验证集代价函数最小的神经网络拟合

。所有数据都要分成 训练集囷验证集吧,一般用验证集上的误差当作泛化误差的近似吧

你对这个回答的评价是

你这个问题本来就问的很模糊伱是想问神经网络拟合的过拟合变现什么样还是为什么出现过拟合呢。为此针对于第一个问题神经网络拟合的过拟合与支持向量机、高斯混合模型等建模方法的过拟合类似,表现为针对于训练数据集的建模效果很好而对于测试数据集的建模效果很差,因为过于强大的学習能力是的预测模型中的噪声将有用信息湮没了致使泛化能力很差。针对于第二个问题出现上述现象的主要原因在于隐层节点数太多(隱层节点数越多,学习能力越强)使得预测模型在训练时候将训练数据集中的噪声也挖掘出来了,也就是噪声将有用信息湮没了所以在使用神经网络拟合进行建模时一定要处理好模型过拟合的问题,可以一方面增加数据的样本集另一方面采用交叉验证选择合适的隐层节點数,在精度与泛化能力之间做一个权衡最常用的方法就是增加正则化项,一定程度上可以防止模型的过拟合问题(+机器学习算法与Python學习)

我要回帖

更多关于 神经网络拟合 的文章

 

随机推荐