10 月 23 - 25 日,QCon 上海站即将召开,现在购票,享9折优惠 了解详情
写点什么

深度学习网络调参技巧

  • 2019-11-24
  • 本文字数:2848 字

    阅读完需:约 9 分钟

深度学习网络调参技巧

介绍

之前曾经写过一篇文章,讲了一些深度学习训练的技巧,其中包含了部分调参心得:深度学习训练心得[1]。不过由于一般深度学习实验,相比普通机器学习任务,时间较长,因此调参技巧就显得尤为重要。同时个人实践中,又有一些新的调参心得,因此这里单独写一篇文章,谈一下自己对深度学习调参的理解,大家如果有其他技巧,也欢迎多多交流。

好的实验环境是成功的一半

由于深度学习实验超参众多,代码风格良好的实验环境,可以让你的人工或者自动调参更加省力,有以下几点可能需要注意:


  • 将各个参数的设置部分集中在一起。如果参数的设置分布在代码的各个地方,那么修改的过程想必会非常痛苦。

  • 可以输出模型的损失函数值以及训练集和验证集上的准确率。

  • 可以考虑设计一个子程序,可以根据给定的参数,启动训练并监控和周期性保存评估结果。再由一个主程序,分配参数以及并行启动一系列子程序

画图

画图是一个很好的习惯,一般是训练数据遍历一轮以后,就输出一下训练集和验证集准确率。同时画到一张图上。这样训练一段时间以后,如果模型一直没有收敛,那么就可以停止训练,尝试其他参数了,以节省时间。


如果训练到最后,训练集,测试集准确率都很低,那么说明模型有可能欠拟合。那么后续调节参数方向,就是增强模型的拟合能力。例如增加网络层数,增加节点数,减少 dropout 值,减少 L2 正则值等等。


如果训练集准确率较高,测试集准确率比较低,那么模型有可能过拟合,这个时候就需要向提高模型泛化能力的方向,调节参数。

从粗到细分阶段调参

实践中,一般先进行初步范围搜索,然后根据好结果出现的地方,再缩小范围进行更精细的搜索。


1. 建议先参考相关论文,以论文中给出的参数作为初始参数。至少论文中的参数,是个不差的结果。


2. 如果找不到参考,那么只能自己尝试了。可以先从比较重要,对实验结果影响比较大的参数开始,同时固定其他参数,得到一个差不多的结果以后,在这个结果的基础上,再调其他参数。例如学习率一般就比正则值,dropout 值重要的话,学习率设置的不合适,不仅结果可能变差,模型甚至会无法收敛。


3. 如果实在找不到一组参数,可以让模型收敛。那么就需要检查,是不是其他地方出了问题,例如模型实现,数据等等。可以参考我写的深度学习网络调试技巧[2]

提高速度

调参只是为了寻找合适的参数,而不是产出最终模型。一般在小数据集上合适的参数,在大数据集上效果也不会太差。因此可以尝试对数据进行精简,以提高速度,在有限的时间内可以尝试更多参数。


  • 对训练数据进行采样。例如原来 100W 条数据,先采样成 1W,进行实验看看。

  • 减少训练类别。例如手写数字识别任务,原来是 10 个类别,那么我们可以先在 2 个类别上训练,看看结果如何。

超参数范围

建议优先在对数尺度上进行超参数搜索。比较典型的是学习率和正则化项,我们可以从诸如 0.001 0.01 0.1 1 10,以 10 为阶数进行尝试。因为他们对训练的影响是相乘的效果。不过有些参数,还是建议在原始尺度上进行搜索,例如 dropout 值: 0.3 0.5 0.7)。

经验参数

这里给出一些参数的经验值,避免大家调参的时候,毫无头绪。


Learning rate: 1 0.1 0.01 0.001, 一般从 1 开始尝试。很少见 learning rate 大于 10 的。学习率一般要随着训练进行衰减。衰减系数一般是 0.5。衰减时机,可以是验证集准确率不再上升时,或固定训练多少个周期以后。


不过更建议使用自适应梯度的办法,例如 adam,adadelta,rmsprop 等,这些一般使用相关论文提供的默认值即可,可以避免再费劲调节学习率。对 RNN 来说,有个经验,如果 RNN 要处理的序列比较长,或者 RNN 层数比较多,那么 learning rate 一般小一些比较好,否则有可能出现结果不收敛,甚至 Nan 等问题。


网络层数:先从 1 层开始。


每层结点数:16 32 128,超过 1000 的情况比较少见。超过 1W 的从来没有见过。


batch size: 128 上下开始。batch size 值增加,的确能提高训练速度。但是有可能收敛结果变差。如果显存大小允许,可以考虑从一个比较大的值开始尝试。因为 batch size 太大,一般不会对结果有太大的影响,而 batch size 太小的话,结果有可能很差。


clip c(梯度裁剪): 限制最大梯度,其实是 value = sqrt(w1^2+w2^2….),如果 value 超过了阈值,就算一个衰减系系数,让 value 的值等于阈值: 5,10,15


dropout:0.5


L2 正则:1.0,超过 10 的很少见。


词向量 embedding 大小:128,256


正负样本比例:这个是非常忽视,但是在很多分类问题上,又非常重要的参数。很多人往往习惯使用训练数据中默认的正负类别比例,当训练数据非常不平衡的时候,模型很有可能会偏向数目较大的类别,从而影响最终训练结果。除了尝试训练数据默认的正负类别比例之外,建议对数目较小的样本做过采样,例如进行复制。提高他们的比例,看看效果如何,这个对多分类问题同样适用。


在使用 mini-batch 方法进行训练的时候,尽量让一个 batch 内,各类别的比例平衡,这个在图像识别等多分类任务上非常重要。

自动调参

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


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

  • Random Search。Bengio 在 Random Search for Hyper-Parameter Optimization 中指出,Random Search 比 Gird Search 更有效。实际操作的时候,一般也是先用 Gird Search 的方法,得到所有候选参数,然后每次从中随机选择进行训练。

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

  • jaberg/hyperopt, 比较简单。

  • fmfn/BayesianOptimization, 比较复杂,支持并行调参。

总结

1. 合理性检查,确定模型,数据和其他地方没有问题。


2. 训练时跟踪损失函数值,训练集和验证集准确率。


3. 使用 Random Search 来搜索最优超参数,分阶段从粗(较大超参数范围训练较少周期)到细(较小超参数范围训练较长周期)进行搜索。


参考资料:


  1. https://zhuanlan.zhihu.com/p/20767428

  2. https://zhuanlan.zhihu.com/p/20792837

  3. Practical recommendations for gradient-based training of deep architectures by Yoshua Bengio (2012)

  4. Efficient BackProp, by Yann LeCun, Léon Bottou, Genevieve Orr and Klaus-Robert Müller

  5. Neural Networks: Tricks of the Trade, edited by Grégoire Montavon, Geneviève Orr, and Klaus-Robert Müller.


原文链接:https://mp.weixin.qq.com/s?__biz=MzU2ODA0NTUyOQ==&mid=2247484029&idx=1&sn=8ca09b63f782d6761950d15356328ef3&chksm=fc92b8cbcbe531dd7c71d90c856ffb97750cb86cb6d3423bfbbc5be63718cf1f3d3912bdb6b4&scene=27#wechat_redirect


2019-11-24 10:003130

评论

发布
暂无评论
发现更多内容

CST干货:移动电子设备的射频干扰和接收灵敏度分析

思茂信息

cst CST软件 CST Studio Suite

VMware ESXi 8.0U3e macOS Unlocker & OEM BIOS Lenovo (联想) 定制版

sysin

esxi

Omnissa ThinApp 2503 - 应用虚拟化软件

sysin

horizon

Omnissa App Volumes 4, version 2503 - 实时应用程序交付系统

sysin

horizon

群贤毕至成果丰,共绘行业新未来,2025慕尼黑上海电子展圆满收官!

极客天地

APSEZ收购NQXT Australia

财见

与地球和鸣:华为音乐以空间音频为桥连接自然之声

最新动态

Omnissa Dynamic Environment Manager 2503 - 个性化动态 Windows 桌面环境管理

sysin

horizon

人工智能与预测性维护:AI如何帮助企业降低设备故障风险?

天津汇柏科技有限公司

人工智能 预测性维护

AI英语能力评估APP的核心功能

北京木奇移动技术有限公司

AI教育 软件外包公司 AI技术应用

Omnissa Horizon Windows OS Optimization Tool 2503 - Windows 系统映像优化工具

sysin

horizon

【未来已来,智启新篇】三星Galaxy S25系列:定义旗舰体验

新消费日报

得物增长兑换商城的构架演进

得物技术

#算法 游戏架构

不用写代码!2个小时,我自己搭了一套进销存系统,业务效率翻倍!

中烟创新

docker镜像仓库

不在线第一只蜗牛

Docker

AI 英语能力评估App的开发

北京木奇移动技术有限公司

AI技术 AI教育 软件外包公司

启动!张一元携手用友BIP企业AI全栈云,百年茶香数智焕新

用友BIP

哈佛最新研究:比特币挖矿造成环境污染,190万人受影响

PowerVerse

比特币 挖矿

AI 教育软件的开发

北京木奇移动技术有限公司

AI教育 软件外包公司 AI技术外包公司

SvelteKit 最新中文文档教程(23)—— CLI 使用指南

冴羽

前端 前端框架 React Svelte SvelteKit

贝尔金在范围一和范围二排放中实现碳中和

财见

热更新技术的范式重构:AI驱动下的智能生态基座构建

xuyinyin

如何高效的进行生产管理?

积木链小链

数字化转型 智能制造 生产管理 车间管理

Flutter跨端范式重构:小程序容器化驱动的高效App开发基座

xuyinyin

Apipost接口调试全解:从HTTP到gRPC,程序员必备的“协议生存指南

数据追梦人

一文读懂天猫商品详情 API 接口:功能、调用与实战攻略

tbapi

天猫商品详情接口 天猫API 天猫商品数据采集 天猫数据采集

电竞新时代:ToDesk/网易云/START三大云游戏平台深度横评,谁是真王者?

小喵子

云计算 云电脑 ToDesk 云电竞 网易云游戏电脑

五一前再带大家卷一波Go高质量面试题

王中阳Go

Go

AI狂飙时代,我们测试工程师会被"优化"吗?

测试人

人工智能

人工智能 (AI) 技术在英语教育中的应用

北京木奇移动技术有限公司

AI教育 软件外包公司 AI技术应用

Apipost协议全栈支持+国密算法,调试效率飙出星际!

数据追梦人

深度学习网络调参技巧_语言 & 开发_深度传送门_InfoQ精选文章