总结一下在旷视实习两年来的炼丹经验,我主要做了一些 RL,图像质量,图像分类,GAN 相关的任务

『可复现性和一致性』
有的同学在打比赛的时候,从头到尾只维护若干份代码,每次载入前一次的训练参数,改一下代码再炼,俗称老丹。这样会有几个问题:某次引入一个 bug,过了很久才发现,然后不知道影响范围;得到一个好模型,但是不知道它是怎么来的;忘了自己的 baseline,不知道改动是正面还是负面。

要尽可能确保每一个模型有可复现性,实践上建议代码不应该在训练后再改动,训练新的模型时,把旧的代码复制一遍。得到的实验结果要开个文档记下来以便日后总结,避免遗忘。我经常通过阅读自己和别人的记录来得到灵感。

实验一致性上也要多做努力,理想状态是有合理的基准来测模型的性能,同一个代码不应该由于超参的微小改动而有显著结果差异。出现这种情况可能是数据太少或基准设置不当。

『资源利用』
对于新入行的同学,不要试图在玩具级别的数据集或任务上做靠谱的研究,比如 MNIST。

不是每一个实验都要出一个好模型,实验是为了验证结论的。如果每个实验都要 8 张卡跑两个星期,人力物力都耗不起。尽力把实验控制在单卡一天以内,理想状态是半天得一次结论。理论上来说,水多加面面多加水(加数据加计算量)的做法无限涨点。建议先设一个目标,比如说就是在一天的训练时间下做对比实验。

我的实践经验是,首先用小图小模型,比如 128 x 128 输入的 ResNet18;用 cProfile 来找性能瓶颈,比如我的某个模型,训练的时候有一大半时间耗费在等数据,数据处理中一大半时间在调用 numpy 的 round 函数,前期把精力集中在提高做实验的效率上。

『模型不 work』
先把锦上添花的东西去掉,如数据增广,玄学学习率和超参,魔幻损失函数,异形模型。如果世界上有一个非要加八个增广和 1.96e-4 学习率 42 batchsize,配上四种混合损失函数的模型,改动一点都不行,它应该存在于灵能文明。可以先造一些尽量玩具的模型,验证代码正确性。

『需要进一步改进』
先确认影响模型性能的组件。感性认识就是,数据是否需要增加或增广。模型是大了还是小了,再根据速度和精度期望开始寻找合适的模型。能用全卷积的任务,少用全连接层,参数量小。基本模型上 ResNet, Unet 结构还是主流。

当你的模型有 Batch Normalization,初始化通常不需要操心,激活函数默认 Relu 即可(某引用数万的大佬说的)。一般顺序是 Conv - BN - Relu。如果没有 BN(很多任务上,BN降低训练难度,但是可能影响最终性能 ),试着要做一些数据归一化。

虽然有至少十种激活函数,但初期用 Relu 或者和某个 paper 统一即可。优化器只推荐 Momentum 和 Adam。在这些方面做尝试意义不大,如果性能提升反倒可能说明模型不成熟。不推荐做人肉模型设计,比如把某层卷积改大一点,或者微调一下通道数。除非有特别 insight,不要自己乱设计玄学组件,以吸收别人经验为主。

超参上,learning rate 最重要,推荐了解 cosine learning rate,其次是 batchsize 和 weight decay。当你的模型还不错的时候,可以试着做数据增广和改损失函数锦上添花了。

祝读到这里的各位模型涨点!

参考文献

Bag of Tricks for Image Classification with Convolutional Neural Networks,trick 合集 1。

Must Know Tips/Tricks in Deep Neural Networks,trick 合集 2。

33条神经网络训练秘技,trick 合集 3。

26秒单GPU训练CIFAR10,工程实践。

Batch Normalization,虽然玄学,但是养活了很多炼丹师。

Searching for Activation Functions,swish 激活函数。

炼丹是玄学还是科学?我觉得炼丹是工程学。

你有哪些deep learning(rnn、cnn)调参的经验相关推荐

  1. 【深度学习】你有哪些深度学习(RNN、CNN)调参的经验?

    No.1 总结一下在旷视实习两年来的炼丹经验,我主要做了一些 RL,图像质量,图像分类,GAN 相关的任务,日常大概占用 5 - 10 张卡. 可复现性和一致性 有的同学在打比赛的时候,从头到尾只维护 ...

  2. 深度学习(deep learning)优化调参细节(trick)

    https://blog.csdn.net/h4565445654/article/details/70477979 转载于:https://www.cnblogs.com/zhibei/p/9815 ...

  3. 你有哪些 Deep learning(RNN、CNN)调参的经验?

    来自 | 知乎-hzwer,北京大学 https://www.zhihu.com/question/41631631/answer/859040970 编辑 | 机器学习算法与自然语言处理,Dataw ...

  4. 速看!deep learning(rnn、cnn)调参的经验

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自|视觉算法 话说三人行,必有我师焉.有哪些deep lea ...

  5. 这些deep learning(rnn、cnn)调参的经验值得分享

    由于机器学习(包括神经网络)调参的经验内容比较多,我的回答篇幅会较长些,我尽量浓缩每个知识点,欢迎各位讨论指点. 深度神经网络,尤其是卷积神经网络(CNN)允许由多个隐藏层组成的计算模型来学习具有多个 ...

  6. 你有哪些深度学习(rnn、cnn)调参的经验?

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 你有哪些deep learning(rnn.cnn)调参的经验? ...

  7. 《南溪的目标检测学习笔记》——夏侯南溪的CNN调参笔记,加油

    1 致谢 感谢赵老师的教导! 感谢张老师的指导! 2 调参目标 在COCO数据集上获得mAP>=10.0的模型,现在PaddleDetection上的Anchor-Free模型[TTFNet]的 ...

  8. 各路丹师 调参[炼丹]经验小结

    作者:hzwer 链接:https://www.zhihu.com/question/41631631/answer/859040970 来源:知乎 总结一下在旷视实习两年来的炼丹经验,我主要做了一些 ...

  9. 你有哪些deep learning(rnn、cnn)调参的经验?

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 No.1 总结一下在旷视实习两年来的炼丹经验,我主要做了一些 RL ...

最新文章

  1. 每周学算法/读英文/知识点心得分享 2.25 - 3.1
  2. mysql调用函数可以打断点吗_糖尿病人可以吃杂粮粥吗?不用纠结,注意2点即可...
  3. CNN-3: VGGNet 卷积神经网络模型
  4. 《人月神话》阅读笔记--02
  5. Linux 文件与目录基本操作
  6. Go 每日一库之 zap
  7. 哪三级分类java_技术汇总:第五章:使用angularjs做首页三级分类
  8. Leetcode2. Add Two Numbers
  9. 企业API接口设计之token、timestamp、sign具体实现
  10. 【整理】unity3d优化总结篇
  11. 2010中国存储创新年会
  12. 商场收银系统服务器安装在哪里,收银系统安装教程
  13. mysql 优化面试题
  14. 计算力学——有限元编程实现
  15. php 对账单系统,微信支付开发对账单
  16. bat批处理脚本获取window系统所有用户名并设置密码,禁用Guest账户
  17. GRE Over IPSec技术
  18. 炼数成金Tensorflow学习笔记之6.2_卷积神经网络
  19. 三国志战略版:今天你打铁了吗?货布商店大解析
  20. KSO-C#语言2021年落选,Python获年度编程语言

热门文章

  1. main函数与命令行参数
  2. 电路原理邱关源_看高手是如何学习电路原理的,有哪些捷径?
  3. python内置函数open_Python的内置函数open()的注意事项
  4. php execl 列的长度,php生成excel列名超过26列大于Z时的解决方法
  5. linux 程序定时重启tomcat,linux下实现tomcat定时自动重启
  6. 不显示调用super_让不懂编程的人爱上iPhone开发(2017秋iOS11+Swift4+Xcode9版)-第7篇
  7. 91. Leetcode 62. 不同路径 (动态规划-路径规划)
  8. 对比学习simSiam(一)--Exploring Simple Siamese Representation Learning总体理解
  9. MATLAB实战系列(二十一)-基于遗传算法的BP神经网络优化算法(附MATLAB代码)
  10. Linux从入门到精通系列之sed命令使用方法