深度学习-通用模型调试技巧

举报
山海之光 发表于 2019/08/08 21:26:02 2019/08/08
【摘要】 改善模型的步骤:1、最先应该分析的是,训练数据的预处理是否有不合理之处?2、判断模型是偏差高还是方差高?偏差高意味着模型欠拟合,换一个更好的梯度下降算法、降低学习率、减弱正则化、增加隐藏节点数、增加网络层数都可以降低偏差;3、方差高意味着过拟合了,可以増广训练数据、增强正则化;5、暴力一点可以超参搜索;6、傻瓜化一点,直接换一个更好的网络模型,也许就是质的飞跃。

改善模型的步骤:

1、根据人类表现估计贝叶斯最优错误率。

贝叶斯最优错误率是理论上可能达到的最优错误率,也就是说没有办法设计出一个xy的函数,让它能比这个最优错误率还低。比如一个猫狗识别训练集中有些图片确实很模糊,无论是人还是机器都无法判断某张图的类别,那么最优错误率就不可能是0。估计人类在某个数据集上的表现,是为了了解该数据的准确率上限是多少,以此判断模型的准确率还差多远。

2、训练时每隔一定步数记录一次训练集错误率和验证集错误率,一直训练,直到在训练集上的错误率不再下降,停止训练;

3、计算贝叶斯错误率与训练错误率之差,该差值称为模型偏差,计算训练错误率与验证错误率之差,该差值称为模型方差,将训练时记录的训练集错误率和验证集错误率绘制成曲线,分析下一步应该调小模型的偏差还是方差,假设偏差是10%、方差是3%,那么应该优先降低偏差,在偏差较小之后再去考虑降低方差。

4、减少偏差的方法有:(有可能是欠拟合了)

1)更好的优化算法,如mometumRMSpropAdam

2)更好的超参数,如降低学习率、减弱正则化;

3)改变激活函数;

4)增加隐藏节点数;

5)增加层数;

6)使用新的网络架构。

5、减少方差的方法有:(有可能是过拟合了)

1)使用更多的训练数据或数据增广;

2)使用正则化,如L1L2dropout

3)超参搜索;

4)使用新的网络架构。

减少偏差和方差的可调试项解释如下表所示:

序号

调整项

调整方法

1

训练数据

1)首先深入理解数据概况,有多少张图,图像质量如何,难易程度如何,图像的大小分布和图像的长宽比分布如何,可以的话,人眼逐一浏览每张图,做到心中有数,即使不能逐一浏览,也要抽一些看看;

2)训练时要做图像增广,增广后的图一定要与现实场景的图是相似的,避免过度增广引入非真实场景中的模式

3)统计不同类别的数量,考虑是否要做类别均衡,困难样本是否要给样本权重;

4)模型输入的尺寸不能太小,如果resize太小,图中的小目标可能就不见了,那当然就提取不到这个小目标的特征

5)如果训练数据的量小于一万,建议加载ImageNet上的预训练参数模型进行训练;

6)归一化输入,即减均值、除方差,可以加速训练

7)划分训练、验证、测试集时,一定要保证数据同分布,同分布的含义是三个数据集都是来自于相同的数据源;

2

batch_size

一般设为81632641282562的幂次值,batch_size越小,梯度下降方向变化越大,可能导致训练不收敛,batch_size越大,梯度下降方向越稳,但是有如下几个缺点:

(1)       所需的内存和显存都越大,有可能撑爆机器;

(2)       由于计算好大一批数据才进行一次梯度下降,会导致达到相同精度所需的训练时间变长;

batch_size一般不影响最终精度,主要影响训练速度,每次做不同的训练任务,应该去尝试、总结合适的batch_size值,最后跑该类任务时就固定使用该batch_size

3

优化器

指梯度下降的计算方法,常用的有三种:momentumRMSpropAdam,主要影响训练速度。最常用的是Adam,基本可以固定用该优化算法就行

4

学习率

一般手动调整,初始为1e-4,可以使训练快一点,一段时间loss不降后,学习率过大会可能会造成在最优值附近震荡,此时可以手动改成1e-5,逐步下降到最优点

5

正则化

如果发现在训练集上loss较低,但验证集上loss较高时,则可以表明模型的方差可能是偏大了,可以使用dropout

6

batch norm

归一化隐藏层的激活值,并不对所有网络都适用,但当适用时,可以使深层的网络学习更容易些。有些模型(比如resnet50)已经在网络结构定义中加入了BatchNormalization,不需要自己再去添加。另外batch norm还有一个作用是,它还有一点正则化的效果

7

增加隐藏节点数

增加模型复杂度

8

增加网络层数

增加模型复杂度

9

更换整个网络

有时候调了很多参数,偏差和方差总是降不下来,也许换一个更优秀的网络,直接就能得到更小的偏差和方差。注意,更换网络时,不能盲目地更换,一定要了解该网络模型是做什么的?解决了什么问题?擅长处理什么问题?如果这些问题并不是你的训练任务碰到的问题,则更换新网络可能对你的训练任务没有什么帮助,还会浪费大量的时间。如果是,则可以试试这个新网络。

6、如何训练集错误率可接受了,与验证集错误率相差也不大了,接下来可以分析在测试集上的错误率,最好是对每张预测出错的图进行分析,总结模型出错的原因,对错误类型进行分类归纳,再决定下一步调试模型的计划。


调参技巧持续更新中...spacer.gif


噔噔噔,插播小广告,提供祖传调参服务!价格优惠!小本生意,养家糊口啊!大兄弟,走过路过,来调个参呗!

caffe调参2.jpg

欢迎大家在评论区留言,分享自己的调参心得,共同学习

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。