深度学习调参技巧

1. 前言

咱们在学习人工智能的时候,不论是机器学习仍是深度学习都须要经历一个调参的过程,参数的好坏直接影响这模型效果的好坏。今天咱们介绍下在深度学习中,调参的技巧主要分为哪些。数组

2. 深度学习中的主要参数

  • 学习率(learning rate):学习率的取值通常是一、0.一、0.0一、0.001等,个人建议是学习率从大到小,由于大的学习率运算的快,验证错误的速度快。而且咱们的学习的过程通常经过Adam进行动态调整,基本问题不大。
  • 网络层数:先从1层开始。
  • 每层结点数:16,32,128,超过1000的状况比较少见。
  • batch size: 128左右开始。batch取太大会陷入局部最小值,batch取过小会抖动厉害,所以要选择一个合适的batch size。
  • 梯度裁剪: 限制最大梯度,若是梯度超过了阈值就进行截断。
  • dropout:在训练的时候能够设置必定的dropout,提高网络的健壮性,也能提高网络的计算速度。
  • 词向量embedding大小:embedding的大小通常是128和256。
  • 正负样本比例: 这个是很是忽视,可是在不少分类问题上,又很是重要的参数。不少人每每习惯使用训练数据中默认的正负类别比例,当训练数据很是不平衡的时候,模型颇有可能会偏向数目较大的类别,从而影响最终训练结果。除了尝试训练数据默认的正负类别比例以外,建议对数目较小的样本作过采样,例如进行复制。提升他们的比例,看看效果如何,这个对多分类问题一样适用。在使用mini-batch方法进行训练的时候,尽可能让一个batch内,各种别的比例平衡,这个在图像识别等多分类任务上很是重要。
  • 每层作BN操做,提升结果准确率
  • 尽可能对数据作shuffle

3. 自动调参

人工一直盯着实验,毕竟太累。自动调参当前也有很多研究。下面介绍几种比较实用的办法:网络

这个是最多见的。具体说,就是每种参数肯定好几个要尝试的值,而后像一个网格同样,把全部参数值的组合遍历一下。优势是实现简单暴力,若是能所有遍历的话,结果比较可靠。缺点是太费时间了,特别像神经网络,通常尝试不了太多的参数组合。dom

Bengio在Random Search for Hyper-Parameter Optimization中指出,Random Search比Gird Search更有效。实际操做的时候,通常也是先用Gird Search的方法,获得全部候选参数,而后每次从中随机选择进行训练。机器学习

3.3 Bayesian Optimization

贝叶斯优化,考虑到了不一样参数对应的实验结果值,所以更节省时间。和网络搜索相比简直就是老牛和跑车的区别。具体原理能够参考这个论文: Practical Bayesian Optimization of Machine Learning Algorithms ,这里同时推荐两个实现了贝叶斯调参的Python库,能够上手即用:函数

  1. jaberg/hyperopt, 比较简单。
  2. fmfn/BayesianOptimization, 比较复杂,支持并行调参。

4. 深度学习效果很差

  1. 选择合适的损失函数:平方损失,交叉熵损失
  2. 选择合适的Mini-batch size
  3. 选择合适的激活函数
  4. 选择合适的自适应学习率学习

    4.1 过拟合处理办法

  5. earyly stoping
  6. dropout
  7. 正则化
  8. BN
  9. bagging
  10. 数据加强优化

5. 画图

画图是一个很好的习惯,通常是训练数据遍历一轮之后,就输出一下训练集和验证集准确率。同时画到一张图上。这样训练一段时间之后,若是模型一直没有收敛,那么就能够中止训练,尝试其余参数了,以节省时间。人工智能

相关文章
相关标签/搜索