深度学习过拟合

1、什么是过拟合。
在深度学习中,模型对于所提供的数据进行一致性假设而使模型变得过度复杂称为过拟合。

2、过拟合的危害。
“一个过配的模型试图连误差(噪音)都去解释(而实际上噪音又不是需要解释的),导致泛化能力比较差,显然就过犹不及了。”具体表现在:深度学习的模型在提供的训练集上效果非常好,但在未经过训练集观察的测试集上,模型的效果很差,即输出的泛化能力很弱。

3、解决过拟合的方法
1)获取和使用更多的数据集
对于解决过拟合的办法就是给予足够多的数据集,让模型在更可能多的数据上尽心“观察”和拟合,从而不断修正自己。然而收集无限多的数据集似乎是不可能的,因此一个常用的办法就是调整已有的数据,添加大量的“噪音”,或者对图形进行锐化、旋转、明暗度调整等优化。
卷积神经网络在图像识别的过程中有强大的“不变性”规则,即待识别的物体在图像中的形状、姿势、位置、明暗度都不会影响分类结果。

2)采用合适的模型
目前来说,针对不同情况和分类要求,对使用的模型也是千差万别。过于简单或者过于复杂的模型都会带来过拟合问题。

3)使用Dropout
Dropout是一个非常有用和常用的方法。Dropout指的是在训练模型的过程中每次按50%的几率关闭或忽略某些层的节点。使得模型在使用同样的数据进行训练时相当于从不同的模型中随机选择一个进行训练。
Dropout起作用的原因,可以简单的理解成在训练过程中会产生不同的训练模型,不同的训练模型也会产生不同的计算结果,随着训练的不断进行,计算结果会在一个范围内波动,但是均值不会有很大变化,因此可以把最终的训练结果看作不同模型的平均输出。

4)权重衰减
权重衰减又被称为正则化,具体做法是将权值的大小加入到损失函数中。 L o s s = l o s s + r e g ( w i ) Loss=loss + reg(w_i) Loss=loss+reg(wi)
在实际中分为L1正则化和L2正则,即:
         L 1 = λ n ∑ 0 n ∣ w i ∣ L1=\frac{λ}{n}\displaystyle\sum_{0}^{n}|w_i| L1=nλ0nwi 所有权重w的绝对值求和,之后乘以 λ n \frac{λ}{n} nλ
         L 2 = λ 2 n ∑ 0 n w i 2 L2=\frac{λ}{2n}\displaystyle\sum_{0}^{n}w_i^2 L2=2nλ0nwi2 所有权重w的平方求和,之后乘以 λ 2 n \frac{λ}{2n} 2nλ
正则化可以防止过拟合的原因。神经网络的计算核心是误差的反向传播,即增大的误差项会对每个神经元的权重产生影响。利用公式可以说明,即:
         w = w − η ∂ c 0 ∂ w w=w-η\frac{∂c_0}{∂w} w=wηwc0 未使用正则化计算出权重
         w = ( 1 − η λ n ) w − η ∂ c 0 ∂ w w=(1-\frac{ηλ}{n})w-η\frac{∂c_0}{∂w} w=(1nηλ)wηwc0 使用L2正则后权重变化
可以看到,相对于不实用L2正则化时,w的值变为 ( 1 − η λ n ) (1-\frac{ηλ}{n}) (1nηλ),因为其中的参数均为正,可以知道括号内的值小于1,其效果就是减少w的值,这就是权重衰减名称的由来。
在过拟合产生的时候,模型因为要对所有特征进行拟合,因此在一个原本平滑的拟合曲线上会产生大量的急促变化的凸起或凹陷,从数学上表示就是某点的导数值非常大,如下图所示:
在这里插入图片描述
过大的导数值从拟合出的模型上来看,数学模型的系数会非常大,即权重值也会非常大,这也是模型设计人员所不希望产生的。而正则化的加入在一定程度上缓解了此问题,通过对权重值在一定范围内的修正,使其不要偏离一个均值太大从而减少过拟合的产生。

5)Early Stopping
Early Stopping是参数微调中的一种,即在每次循环结束一次以后(这里的循环可能是full data batch,也可能是mini batch size),计算模型的准确率。当准确率不在增加时,就停止训练。
准确率不再增加时就停止训练,防止模型对已有数据继续训练。问题在于准确率在每个循环之后的计算是变化的,没有任何人和任何模型能保证准确率不会变化。建议方法是人为地设定一个范围。例如当连续10次准确率在此范围内波动事就停止训练。

6)可变化的学习率
可变化的学习率是根据模型计算出的准确率进行调整。在认为设定的准确率范围内达到要求后,依次修改准确率,知道最终的准确率满足要求。
5)、6)起作用的原因,随着训练时间的延长,部分神经元已经达到拟合状态,对其继续训练的话,这部分预先达到饱和的神经元会继续增长从而带来模型的过拟合。

7)使用Batch_Normalization
数据在经过卷积层之后,真正进入激活函数之前需要对其进行一次Batch_Normalization,分批对输入的数据求取均值和方差之后重新对数据进行归一化计算。
这样做的好处是对数据进行一定程度上的预处理,使得无论是训练数据还是测试集都在一定范围内进行分布和波动,对数据点中包含的误差进行掩盖化粗粒,从而增大模型的泛化能力。

除了上面的方法,还有常用的交叉验证、PCA特征提取、增加各种噪音等。这样实际上还是属于增加了数据集,增加数据集是解决过拟合的根本性方法。除此之外对于模型,尽量选择较为简单的模型也是解决过拟合的一个常用方法。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值