关于网络训练过程中过拟合的一些问题及解决方法

下午华为面试,面试官问道在网络训练过程中如何避免过拟合的问题,自己虽然懵懵懂懂知道一些,但是并没有真正的总结记录,特地查阅了过拟合的一些列问题,总结在自己的博客当中。

- 什么是过拟合?

- 过拟合的解决方法

  1. 获取和使用更多的数据集
    对于解决过拟合的办法就是给与足够多的数据集,让模型在更可能多的数据上进行“观察”和拟合,从而不断修正自己。然而事实上,收集无限多的数据集几乎是不可能的,因此一个常用的办法就是调整已有的数据,添加大量的“噪音”,或者对图像进行锐化、旋转、明暗度调整等优化。

另外补充一句,CNN在图像识别的过程中有强大的“不变性”规则,即待辨识的物体在图像中的形状、姿势、位置、明暗度都不会影响分类结果。

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

对于模型的设计,目前公认的一个深度学习规律“deeper is better”。国内外各种大牛通过实验和竞赛发现,对于CNN来说,层数越多效果越好,但是也更容易产生过拟合,并且计算所耗费的时间也越长。因此对于模型的设计需要合理参考各种模型的取舍。

  1. 使用 Dropout
    Dropout 是一个非常有用和常用的方法。Dropout 指的是在训练过程中每次按一定的几率关闭或忽略某些层的节点。使得模型在使用同样的数据进行训练时相当于从不同的模型中随机选择一个进行训练。

至于 Dropout 起作用的原因,可以简单理解成在训练过程中会产生不同的训练模型,不同的训练模型也会产生不同的的计算结果,随着训练的不断进行,计算结果会在一个范围内波动,但是均值却不会有很大变化,因此可以把最终的训练结果看作是不同模型的平均输出。

  1. 正则化
    正则化又称为权重衰减,具体做法是将权值的大小加入到损失函数中,在实际使用中分为 L1 正则与 L2 正则。关于正则化能够防止过拟合的原因,笔者会在下一篇博客中专门花篇幅详细讲解。

  2. Early Stopping
    Early Stopping 是参数微调中的一种,即在每个循环结束一次以后(这里的循环可能是 full data batch,也可能是 mini batch size),计算模型的准确率(accuracy)。当准确率不再增加时就停止训练。

这是一种非常简单和自然的办法,准确率不再增加时就停止训练,防止模型对已有的数据继续训练。但是问题在于,准确率在每个循环之后的计算是变化的,没有任何人和任何模型能保证准确率不会变化,可能某次循环结束后,准确率很高,但是下一轮结束后准确率又降得很低。

这里笔者建议的一个办法是人为地设定一个范围。当连续10次准确率在此范围内波动时就停止循环。

  1. 可变化的学习率
    可变化的学习率也是根据模型计算出的准确率进行调整。一个简单的方法是在人为设定的准确率范围内,达到10次范围内的波动后,依次将学习率减半,直到最终的学习率降为原始的 1/1024 时停止模型的训练。

  2. 使用 Batch_Normalization
    还有一个数据处理的方法 Batch_Normalization,即数据在经过卷积层之后,真正进入激活函数之前需要对其进行一次 Batch_Normalization,分批对输入的数据求取均值和方差之后重新对数据进行归一化计算。

这样做的好处就是对数据进行一定程度的预处理,使得无论是训练集还是测试集都在一定范围内进行分布和波动,对数据点中包含的误差进行掩盖化处理,从而增大模型的泛化能力。

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

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值