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. 自动调参
人工一直盯着实验,毕竟太累。自动调参当前也有很多研究。下面介绍几种比较实用的办法:网络
3.1 Gird Search
这个是最多见的。具体说,就是每种参数肯定好几个要尝试的值,而后像一个网格同样,把全部参数值的组合遍历一下。优势是实现简单暴力,若是能所有遍历的话,结果比较可靠。缺点是太费时间了,特别像神经网络,通常尝试不了太多的参数组合。dom
3.2 Random Search
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库,能够上手即用:函数
- jaberg/hyperopt, 比较简单。
- fmfn/BayesianOptimization, 比较复杂,支持并行调参。
4. 深度学习效果很差
- 选择合适的损失函数:平方损失,交叉熵损失
- 选择合适的Mini-batch size
- 选择合适的激活函数
选择合适的自适应学习率学习
4.1 过拟合处理办法
- earyly stoping
- dropout
- 正则化
- BN
- bagging
数据加强优化
5. 画图
画图是一个很好的习惯,通常是训练数据遍历一轮之后,就输出一下训练集和验证集准确率。同时画到一张图上。这样训练一段时间之后,若是模型一直没有收敛,那么就能够中止训练,尝试其余参数了,以节省时间。人工智能