工程能力大UP | 《炼丹大法》

站长亦新
站长亦新
站长亦新
81
文章
0
评论
2020年7月26日22:47:49 评论 120 2171字阅读7分14秒
  1. xavier、He和随机初始化都要尝试。使用一般的随机均值初始化CNN的参数,acc只能到70%,仅仅改成xavier,acc可以到98%。另外一次,使用xavier初始化效果不好,使用随机初始化效果好。此外,何凯明大神的He初始化也可以尝试一下。对于参数的初始化的尝试的优先级甚至大于调参。

  2. GoogLeNet Inception v2提出的用3 \times 3代替5\times 5,同样的视野域,还能降低参数量,提升速度,这个是大量推荐的

  3. 适当的使用1 \times N卷积。这个既可以降低计算量,还可以在某个方向强调感受野。更进一步,在2019年提出的ACNet的结构中,3\times 3的结构上加上1 \times 33 \times 1的旁路卷积核,可以在许多经典的CV任务中得到大概1个点的提升。

  4. 多用BN层,不过现在经典的网络中基本都会用BN层。有BN层就不用加上Dropout层了。

  5. 优先使用SGDM优化器,优化不动再试试Adam。

  6. 激活函数主要还是使用ReLU,提升精度可以尝试改成PReLU。

  7. batch_size:在不同类型的任务中,batch_size的影响也不同,大家可以看看这篇batch_size对模型性能影响的文章,来自公众号AI开发者。Batch_size是怎么影响模型性能的

  8. 残差结构和密集连接可以在工程中使用。使用的时候建议通道数减半。

  9. 在扩大特征图的尺寸的时候,一般使用两种方法:现在喜欢使用反卷积来进行,但是有人提出使用上采样+1 \times 1的卷积层也可以取到同样的结果。

  10. 在做比赛中,有一种集成方案,VGG16,VGG19,ResNet50,Xception是非常好用的几个特征提取模型。其中取出来的特征图的通道数进行concat,但是在concat的时候可以增加一个权重,这个权重表示不同网络提出出来的特征的重要性。然后把concat后的特征图放到后面的模型中。我们可以通过选取不同的权重值,来做一个voting或者soft-voting等集成处理。

  11. 选取不同的模型初始化的方法,也可以做成一种集成;不同的超参数(不同学习率,batch_size,优化器)训练出的模型也可以做集成。

  12. 刚开始训练的时候,先上小规模数据, 模型往大了放, 只要不爆显存, 能用256个filter你就别用128个. 直接奔着过拟合去. 没错, 就是训练过拟合网络, 连测试集验证集这些都可以不用.
    【为什么?】

- 你要验证自己的训练脚本的流程对不对. 这一步小数据量, 生成速度快, 但是所有的脚本都是和未来大规模训练一致的(除了少跑点循环)
- 如果小数据量下, 你这么粗暴的大网络奔着过拟合去都没效果. 那么, 你要开始反思自己了, 模型的输入输出是不是有问题? 要不要检查自己的代码(永远不要怀疑工具库, 除非你动过代码)? 模型解决的问题定义是不是有问题? 你对应用场景的理解是不是有错? 不要怀疑NN的能力, 不要怀疑NN的能力, 不要怀疑NN的能力. 就我们调参狗能遇到的问题, NN没法拟合的, 这概率是有多小?
- 你可以不这么做, 但是等你数据准备了两天, 结果发现有问题要重新生成的时候, 你这周时间就酱油了.

  1. 预处理: -mean/std zero-center就够了, PCA, 白化什么的都用不上. 我个人观点, 反正CNN能学习encoder, PCA用不用其实关系不大, 大不了网络里面自己学习出来一个.

  2. shuffle,shuffle,shuffle

  3. 多尺度的图片输入(或者网络内部利用多尺度下的结果)有很好的提升效果

  4. 第一层的filter, 数量不要太少. 否则根本学不出来(底层特征很重要).

  5. 新手刚上来调参的时候没什么经验,所以一定要低调!啥叫低调?低调就是一开始调的时候千万别考虑太远,在能承受的范围内,尽可能先把滤波器搞得多多的,把数据搞得少少的,直奔过拟合去!所谓小步试错,快速迭代,互联网公司都是这么干的。虽然过拟合也不好搞,但总归是有不少套路的,比起过拟合,欠拟合的问题远远可怕的多。毕竟结果都训练不出来还扯什么远方?

  6. 自动调参方法

- Grid Search:网格搜索,在所有候选的参数选择中,通过循环遍历,尝试每一种可能性,表现最好的参数就是最终的结果。其原理就像是在数组里找最大值。缺点是太费时间了,特别像神经网络,一般尝试不了太多的参数组合。

  • Random Search:经验上,Random Search比Gird Search更有效。实际操作的时候,一般也是先用Gird Search的方法,得到所有候选参数,然后每次从中随机选择进行训练。另外Random Search往往会和由粗到细的调参策略结合使用,即在效果比较好的参数附近进行更加精细的搜索。

  • Bayesian Optimization:贝叶斯优化,考虑到了不同参数对应的 实验结果值,因此更节省时间,贝叶斯调参比Grid Search迭代次数少, 速度快;而且其针对非凸问题依然稳健。
    未完待续:https://mp.weixin.qq.com/s/HeItBKVT3CxKBO0fYy5V1Q
    参考文章:

  1. https://www.zhihu.com/question/25097993/answer/153674495
  2. https://www.zhihu.com/question/25097993/answer/934100939
weinxin
我的微信
微信扫一扫
站长亦新
  • 本文由 发表于 2020年7月26日22:47:49
  • 转载请务必保留本文链接:http://helloworld2020.net/675/
公告
Week 1 | 1 介绍¶ 第 1 题¶一个计算机程序从经验E中学习任务T,并用P来衡量表现。并且,T的表现P随着经验E的增加而提高。 假设我们给一个学习算法输入了很多历史天气的数据,让它学会预测天...
凉经算法题反思 | 单调栈与DP二分法 公告

凉经算法题反思 | 单调栈与DP二分法

算法题1: 一个数组nums,大小为n,返回数组同等大小的数组,返回数组满意以下条件: - 对于数组nums中第i个元素,找到nums从i+1到第n个元素中第一个大于nums的元素,值为j,如果不存在...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: