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

- 什么是过拟合?

- 过拟合的解决方法

  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特征提取、增加各种噪音等。这样实际上还是属于增加了数据集,增加数据集是解决过拟合的根本性方法。除此之外对于模型来说,尽量选择较为简单的模型也是解决过拟合的一个常用方法。

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

  1. 对讲机使用过程中的常见故障及排除故障的解决方法

    对讲机使用过程中的常见故障及排除故障的解决方法 问题一:对讲机打开开关后,对讲机不工作并无任何反应. 故障分析:电池组电量耗尽.电池组未正确安装.主板损坏. 解决办法:将电池取下,重新安装一次或将电池 ...

  2. keras训练过程中发生的一些报错及其解决办法

    ResourceExhaustedError (see above for traceback): OOM when allocating tensor with shape[32,x,x,x] sh ...

  3. 计算机维修直播,电脑直播过程中出现杂声怎么办?三种解决方法任你选

    现在,越来越多的人开始用电脑做直播.比如说利用直播来卖货或者分享个人的工作.生活状态.在电脑直播的时候,也会遇到各种各样的问题,其中,很多人就问到电脑直播有杂音滋滋响怎么办?电脑直播中发生杂音滋滋响, ...

  4. 【ROS】针对ROS安装过程中出现rosdep update超时问题的解决方法

    参考:https://blog.csdn.net/leida_wt/article/details/115120940 由于近期国内Github Raw的可用IP越来越少,通过修改hosts文件解决r ...

  5. python安装报错2503_关于windows安装python过程中出现error 2503 2502错误的解决方法

    [近日在一台新安装的Ubuntu 11.10上安装Ruby on Rails, 安装ruby的时候没什么问题,到了 sudo gem install rails的时候报下面的错误:`require': ...

  6. 在Caffe的训练过程中打印验证集的预测结果

    起因:Caffe里的GoogLeNet Inception V1只能输出对应于三个loss的accuracy,我想计算precision,recall和F1-measure.但是调用caffe的Pyt ...

  7. TensorFlow之tf.nn.dropout():防止模型训练过程中的过拟合问题

    一:适用范围: tf.nn.dropout是TensorFlow里面为了防止或减轻过拟合而使用的函数,它一般用在全连接层 二:原理: dropout就是在不同的训练过程中随机扔掉一部分神经元.也就是让 ...

  8. 神经网络测试集loss不变_神经网络训练过程中不收敛或者训练失败的原因

    在面对模型不收敛的时候,首先要保证训练的次数够多.在训练过程中,loss并不是一直在下降,准确率一直在提升的,会有一些震荡存在.只要总体趋势是在收敛就行.若训练次数够多(一般上千次,上万次,或者几十个 ...

  9. [机器学习] 训练过程中的train,val,test的区别

    转自:Caffe训练过程中的train,val,test的区别. 训练过程中的train,val,test的区别 val是validation的简称. training dataset和validat ...

最新文章

  1. MOSS publishing功能:创建页面到子文件夹
  2. alfs学习笔记-自动化构建lfs系统
  3. CentOS7通过yum安装MySQL5.7
  4. java成员变量的初始化
  5. Windows下安装并使用MySQL数据库
  6. 多通道_人机交互界面的多通道RGB LED驱动设计
  7. MYSQL函数应用----替换函数replace()用法
  8. python全网表情包_Python爬虫爬取最右公众号表情包资源
  9. PHP学习笔记十九【析构函数】
  10. bzoj 1237: [SCOI2008]配对(DP)
  11. 深度学习实现视频分类的6种方法
  12. esp8266烧录html方法,将ESP8266刷成可以使用网页配置的固件和步骤
  13. BaaS、FaaS、Serverless都是什么馅儿?
  14. 配置Atari Gym环境
  15. thinkadmin 单页面多个富文本初始化
  16. 一个IT猎头关于跳与不跳的回复
  17. 大一计算机导论手写笔记,川大学霸笔记来啦(多图)!
  18. opencv+python图像识别,麻将牌识别,实现自动打牌方案
  19. git pull origin master与git pull --rebase origin master的区别
  20. 截至2015年工作中接触集成过的硬件设备整理记录

热门文章

  1. ROS学习笔记(十三) TF介绍(一)
  2. 中学化学实验教室,化学实验室设备
  3. (八)可视化KITTI标注的TrackID
  4. win10自带虚拟机好用吗_这些 Win10 系统自带的实用工具你知道吗?!
  5. 防火墙并发连接数理解
  6. 怎么自学C语言 入门
  7. 安卓开发指南!Github标星25K+超火的Android实战项目,成功定级腾讯T3-2
  8. 2021计算机等级考试VB,2021年全国计算机等级考试VB知识点总结-20210417084046.doc-原创力文档...
  9. js+css+html制作下拉菜单
  10. DSP芯片方面的问题