【防止过拟合的方法】

什么是过拟合/欠拟合?

无论在机器学习还是深度学习建模当中都可能会遇到两种最常见结果,一种叫过拟合(over-fitting )另外一种叫欠拟合(under-fitting)。

所谓过拟合(over-fitting)其实就是所建的机器学习模型或者是深度学习模型在训练样本中表现得过于优越,导致在验证数据集以及测试数据集中表现不佳。也就是模型在训练数据上损失函数较小,预测准确率较高;但是在测试数据上损失函数比较大,预测准确率较低。
过拟合的本质原因是模型学习的太过精密,导致连训练集中的样本噪声也一丝不差的训练进入了模型。

所谓欠拟合(under-fitting),与过拟合恰好相反,模型学习的太过粗糙,连训练集中的样本数据特征关系(数据分布)都没有学出来。
在这里插入图片描述

深度学习有哪些防止过拟合的方法?

1. 参数范数惩罚: L1、L2正则化

正则化:把额外的约束或者惩罚项加到已有模型(损失函数)上,以防止过拟合并提高泛化能力。
L1正则化为:
∣ ∣ w ∣ ∣ 1 = ∣ w 1 ∣ + ∣ w 2 ∣ + . . . ||w||_1 = |w1| + |w2| + ... w1=w1+w2+...
又被成为 Lasso ,即绝对值相加,其趋向于一些参数为0。可以起到特征选择的作用.
L2正则化为:
∣ ∣ w ∣ ∣ 2 = w 1 2 + w 2 2 + . . . ||w||_2 = \sqrt{w1^2 + w2^2 + ...} w2=w12+w22+...
又成为 ridge,其趋向于使权重很小,趋近于0,但不为0。

L1正则与L2正则怎么防止过拟合的? 用公式来规范神经网络的矩阵权重参数
  • L1正则化的思想是特征选择,L1允许参数为0,这代表在某些地方丢弃掉一些特征,最终选择最明显的特征,从数学上来说,L1正则化是所有参数的绝对值之和,这就要求所有参数的绝对值之和最小,对其进行求导,导数可能为1或-1,而绝对值的取值是大于等于0的,那么就有可能导致某些参数在更新的时候,值趋近于0。
  • L2正则化,数学公式上是所有参数平方和,我们让L2范数的规则项最小,可以使得W的每个元素都很小,都接近于0,但与L1范数不同,它不会等于0,而是接近于。L2的作用就是让所有的参数都接近于0.

在实际应用中更偏向于L1正则化,因为在防止过拟合的时候,有一定的特征选择功能。
更多L1、L2正则化相关知识见L1、L2正则化

2. 数据增强,增加样本数量

让模型泛化的能力更好的最好办法就是使用更多的训练数据进行训练,但是在实践中,我们拥有的数据是有限的,解决这一问题可以人为的创造一些假数据添加到训练集中。

在神经网络中输入噪声也可以看做是数据增强的一种方式。

在实际的项目中,你会发现,那些技巧虽然都可以减轻过拟合的风险,但是却都比不上增加样本量来的更实在。为什么增加样本可以减轻过拟合的风险呢?之所以过拟合,其实就是因为模型本身见到的数据太少了,比如对于猫这类动物,如果训练数据集中只有一个正拍且坐立的猫,那么当过拟合时,模型往往有可能只能识别出这类姿态的猫,像跳跃的猫、局部捕捉的猫、反转的猫等等可能都识别不出来了,因为让模型见更多的数据是有好处的,而且真的可以防止过拟合。

3.提前终止(early stopping)

提前终止是一种很常用的缓解过拟合的方法,如在决策树的先剪枝的算法,提前终止算法使得树的深度降低,防止其过拟合.

在对模型进行训练时,我们可以将我们的数据集分为三个部分,训练集、验证集、测试集。我们在训练的过程中,可以每隔一定量的step,使用验证集对训练的模型进行预测,一般来说,模型在训练集和验证集的损失变化如下图所示:
在这里插入图片描述
可以看出,模型在验证集上的误差在一开始是随着训练集的误差的下降而下降的。当超过一定训练步数后,模型在训练集上的误差虽然还在下降,但是在验证集上的误差却不在下降了。此时我们的模型就过拟合了。因此我们可以观察我们训练模型在验证集上的误差,一旦当验证集的误差不再下降时,我们就可以提前终止我们训练的模型。

4.dropout:防止参数过分依赖训练数据,增加参数对数据集的泛化能力。

dropout提供了一种廉价的bagging集成近似,能够训练和评估指数级数量的神经网络。dropout可以随机的让一部分神经元失活(如下图),这样仿佛是bagging的采样过程,因此可以看做是bagging的廉价的实现。

但是它们训练不太一样,因为bagging,所有的模型都是独立的,而dropout下所有模型的参数是共享的。
在这里插入图片描述

通常可以这样理解dropout,假设我们要判别一只猫,有一个神经元说看到有毛就是猫,但是如果我让这个神经元失活,它还能判断出来是猫的话,这样就比较具有泛化的能力了,减轻了过拟合的风险。

Dropout的具体流程如下:
在这里插入图片描述Dropout说的简单一点就是:我们在前向传播的时候,让某个神经元的激活值以一定的概率p停止工作,这样可以使模型泛化性更强,因为它不会太依赖某些局部的特征。

Dropout是在深度学习中降低过拟合风险的常见方法,它是由Hinton提出的。Hinton认为在神经网络产生过拟合主要是因为神经元之间的协同作用产生的 。因此Hinton在神经网络进行训练的时候,让部分神经元失活,这样就阻断了部分神经元之间的协同作用,从而强制要求一个神经元和随机挑选出的神经元共同进行工作,减轻了部分神经元之间的联合适应性。

5.BN(Batch Normalization)

在Google Inception V2中所采用,是一种非常有用的正则化方法,可以让大型的 卷积网络 训练速度加快很多倍,同时收敛后分类的准确率也可以大幅度的提高.。
在这里插入图片描述
BN在训练某层时,会对每一个mini batch数据进行标准化(normalization)处理,使输出规范到N(0,1)的正太分布,减少了internal convariate shift(内部神经元分布的改变),传统的深度神经网络的训练是,每一层的输入的分布都在改变,因此训练困难,只能选择用一个很小的学习速率,但是每一层用了BN后,可以有效的解决这个问题,学习速率可以增大很多倍。

BN算法如何防止过拟合的?BN算法如何进行网络训练加速的?

在训练中,BN的使用使得一个mini-batch中的所有样本都被关联在了一起,因此网络不会从某一个训练样本中生成确定的结果。其实这句话的意思是,BN的使用,使得网络在训练时不依靠于某一个样本进行更新或者输出,而是依赖于整个batch size的数据,这样参数不会太依赖于某一个数据,而是一个batch size内的数据,一定程度上防止了过拟合。

BN是通过将每次卷积后的数据分布拉到指定分布域内(比如标准高斯分布),这样在参数学习时,由于数据分布基本相同,学习起来速度会变得很快,特别是对于sigmoid类型函数来说,将数据分布拉到非梯度饱和区间,这样避免了梯度消失现象,加快了训练速度。对于非sigmoid函数来说,比如ReLU函数,其实也在一定程度上解决了Dead ReLU现象。

6.参数绑定与参数共享

在卷积神经网络CNN中(计算机视觉与卷积神经网络),卷积层就是其中权值共享的方式,一个卷积核通过在图像上滑动从而实现共享参数,大幅度减少参数的个数,用卷积的形式是合理的,因为对于一副猫的图片来说,右移一个像素同样还是猫,其具有局部的特征。这是一种很好的缓解过拟合现象的方法。

同样在RNN中用到的参数共享,在其整条时间链上可以进行参数的共享,这样才使得其能够被训练。

7.bagging和其他集成方法

其实bagging的方法是可以起到正则化的作用,因为正则化就是要减少泛化误差,而bagging的方法可以组合多个模型起到减少泛化误差的作用。

在深度学习中同样可以使用此方法,但是其会增加计算和存储的成本

8.辅助分类节点(auxiliary classifiers)

在google inception V1中,采用了辅助分类节点的策略,即将中间一层的输出用作分类,并按一个较小的权重加到最终的分类结果中,这样相当于做了模型的融合,同时给网络增加了反向传播的梯度信号,提供了额外的正则化的思想。

深度学习如何解决欠拟合?

过拟合是深度网络训练时,常出现的一种问题,然而有的时候欠拟合也经常出现,这个时候就要考虑如何解决欠拟合问题了,一般来说,欠拟合问题主要从以下几个部分解决:

  1. 可以增加模型的复杂程度。
  2. 添加其他特征项。组合、泛化、相关性、上下文特征、平台特征等特征是特征添加的重要手段,有时候特征项不够会导致模型欠拟合。
  3. 添加多项式特征。例如将线性模型添加二次项或三次项使模型泛化能力更强。例如,FM(Factorization Machine)模型、FFM(Field-aware Factorization Machine)模型,其实就是线性模型,增加了二阶多项式,保证了模型一定的拟合程度。
  4. 减小正则化系数。正则化的目的是用来防止过拟合的,但是现在模型出现了欠拟合,则需要减少正则化参数。
  • 3
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值