weight_decay一般设置为多少_头条 | 炼丹师/训模师必须知道的一般规则

点击上方蓝字,关注本公众号,获得更多资源 e3770a598b95667541642ea953df8e0d.gif

训练得到一个好的模型,一般分为数据、baseline、过拟合、正则化、微调5个大的步骤,下面一一介绍一下每个步骤应该完成的工作。

数据

训练神经网络的第一步是完全不接触任何神经网络代码,而是从彻底检查数据开始。这一步至关重要。需要花大量的时间(以小时为单位)浏览成千上万的样本,了解它们的分布,寻找样本模式。如果看的够仔细的话,你会发现:在数据库中可能存在重复的图片;也会发现噪声的图像与label;也会发现数据不平衡,有些样本出现的少。 对数据的观察,是要对数据的分布做个了解,我们需要知道我们要解决的问题是什么?用什么样的样本预处理手段对模型优化有帮助,如:如何调整样本分布?用什么方法对样本进行增强?label是否也需要做同样的增强处理?细节与全局信息哪个对我们要解决的问题更关键?是否需要全局/局部上下文信息? 神经网络进行参数更新的过程,和人观察样本的过程是一样的。通过观察,人可以对数据有个定性的分析,当训练好的网络出现与人的定性分析相悖的预测结果时,肯定是网络出了问题,需要根据定性分析结果对网络相应的可能出问题的环节进行排查。

获得baseline结果

建立训练+验证的训练流程,获得baseline结果:

  1. 尽量简洁:一开始不要使用任何样本增强的手段,保证整个训练框架的正确性,以及问题的可复现性。毕竟当样本增强代码写错的时候,网络也会正常训练,但是结果会有一些固定的错误模式。尽量单任务,不要直接做多任务模型。

  2. 关于loss:一方面,实时画出train和validation的loss曲线是必须的,对网络参数正常更新有帮助;另一方便要确定loss的初值是正确的,对于不同的loss,如交叉熵loss、l2 loss,可以计算一下loss的范围,也可以根据初始化的参数,计算一下loss的初值,来判断网络loss是否正确。

  3. 可视化模型预测结果:在不同epoch得到的模型上,使用固定的测试集进行模型验证,可视化模型预测结果,观察模型预测结果的动态变化,一方面确认模型沿着正确方向优化,另一方面查看结果波动是否过大。根据可视化结果,及时调整参数。

  4. 梯度:模型初始化正常的前提下,通过检查梯度是否正常判断某些模型算子使用是否正确。如果出现异常值,如0或者inf,查看调用的op(算子)接口是否正确。

过拟合

以上确保已经对数据库有了完全的了解,并建立了end-to-end训练+验证的流程,并得到了baseline结果。接下来就是如何得到一个好的模型,大体上分为两步:过拟合、正则化,如果在过拟合这一步,training loss不能下降到足够小,那么最好再检查一下以上两步:数据和模型训练。

  1. 在开源的网络结构中,选择一个大的网络,让模型在训练集上过拟合,即training loss下降到比较小的值,这个阶段不要自己修改网络结构。

  2. 推荐使用Adam作为一开始的优化器,这样可以保证对learning rate不敏感,模型可以正常优化。

  3. 让模型逐步变得复杂:无论你有多少任务要在同一个模型上实现,最好每次仅增加一个任务,保证任务正确预测,且loss下降正常的前提下再增加新的任务。

  4. 学习率的变化:现在有很多学习率衰减的方式,如step by step、线性下降、cos曲线方式等,但是一开始最好使用固定的学习率,根据观察loss曲线,人工设置下一阶段的学习率,且学习率衰减不一定要缩小10倍,也可以缩小任意其他倍数,需要多进行试验。

正则化

到目前为止,我们已经得到一个过拟合的模型,下面需要提升模型在验证集的效果。
  1. 更多的数据:数据量对模型效果提升很关键,不要在一个小的数据集上使用各种方法调整模型参数,有时候很多问题是数据量少带来。因此,在模型优化前期,需要能看到当增加真实数据时,模型效果的提升,如果没有提升,也要检查以上几步是否做好了

  2. 样本增强:有时候不容易、或者没有那么快的获取大量的真实数据,因此,样本增强在模型优化前期发挥了很大的作用,但是要仔细检查样本增强是否对目标任务有效,并且要保证相应样本的label也要做同样的处理,保证模型输出正确的结果。也可以适当的使用样本生成的方式(如GAN)来扩充样本,但是要及时更新样本生成的模型,以提高样本的真实性

  3. 预训练:现在开源数据多种多样,而且量也不小,充分利用不同的开源数据,也可以提高模型的泛化能力,并使模型在自己的数据集上快速收敛。

  4. 推荐监督学习:现在有很多为了利用更多的数据,使用一些弱标签或没标签的数据进行模型优化,但在实际中,对目标任务的作用不是很大,因此,在一开始,推荐使用监督学习方式,获得更准确靠谱的结果。

  5. 更多的正则化策略:合适的batchsize(一般8,16,24,32)、增大weight decay、合理使用batch normalization、earling stop等

  6. 最后模型结构的探索:一开始我们选择了一个大的模型对目标任务进行过拟合,这时候,我们可以尝试不同的网络,也可以自己修改网络结构,提高模型在验证集上的效果。

  7. 超参调整:learning rate、weight decay、momentum、loss weight以及各个layer的不同参数等。在这一步需要根据loss曲线以及evaluate结果,做相应的调整,在这里一般需要大量的实验。

微调

以上已经得到一个还不错的模型,但是需要看看模型的极限,还有以下方法可以尝试
  1. 自动调参数:现在很多公司都开源了了automl的方法,如果你不相信人工调参的方式,而且GPU也很多,那不防尝试一下automl的方法

  2. nas:网络结构对特征的表达至关重要,必要的时候,可以尝试一下网络结构搜索的方式获得一个更好的模型结构。最好使用人工+自动搜索的方式交替进行,这样比较容易得到可用的模型结构。

  3. 如果你已经获得了一套比较好的超参以及模型结构,不妨试试让模型迭代更长的时间,有时候经过很长时间训练后,你会发现模型效果又有了提升。

END -

9bb8b96adafffdb23bd523634002d0ba.png

关注本公众号,获得更多的“自动驾驶”算法原创干货,帮你快速入行 关注本公众号,点击“入群”,加入深度学习技术群,热心大佬帮你答疑解惑

自动驾驶历史文章阅读

资料下载:

2019自动驾驶资料大放送

7天,搞定机器学习基础知识

人工智能相关资料

头条 | 高定位精度的交通标志识别----开源了

头条 | COVID-19 CT数据库下载

激光雷达(Lidar)相关: 主要涉及lidar的目标检测方法分析、融合感知方法分析、如何从点云做end-to-end目标轨迹预测、模型加速与工程化 头条 | 自动驾驶多传感器融合技术浅析 一文览尽“基于激光雷达点云(lidar)的目标检测方法” 头条 | 自动驾驶环境感知技术要点浅析 头条 | 深度学习模型inference优化之编译优化 头条 | Fast and Furious,速度与激情? 图像相关: 涉及了目标检测与分割、网络结构设计与模型加速。从基础的知识点出发,帮你一步一步理解方法,加深印象。 轻量(高效)目标检测网络结构设计 mask rcnn 与 PointRend 一文读懂RPN和ROI Align CNN中的感受野 目标检测中的Anchor分析 行业信息: 梳理行业大事件,帮你了解行业的发展状况。 主要车企和造车新势力自动驾驶传感器配置方案 福特开源1.8TB自动驾驶数据,到底开源数据哪家强?

这个冬天不太冷:小马5亿美元,驭势获博士领投,waymo22.5亿美元

以上相关方法,后续会对照代码再次回忆,关注公众号,敬请留意。

880ca82b1c19ce3bc2c040e4e4b8f720.png

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值