前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >深度学习如炼丹,你有哪些迷信做法?网友:Random seed=42结果好

深度学习如炼丹,你有哪些迷信做法?网友:Random seed=42结果好

作者头像
数据派THU
发布于 2022-03-04 03:06:21
发布于 2022-03-04 03:06:21
58700
代码可运行
举报
文章被收录于专栏:数据派THU数据派THU
运行总次数:0
代码可运行

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
来源:机器之心
本文约2200字,建议阅读9分钟调参的苦与泪,还有哪些“迷信的做法”?

每个机器学习领域的研究者都会面临调参过程的考验,当往往说来容易做来难。调参的背后往往是通宵达旦的论文研究与 GitHub 查阅,并需要做大量的实验,不仅耗时也耗费大量算力,更深深地伤害了广大工程师的头发。

有人不禁要问:调参是门玄学吗?为什么模型明明调教得很好了,可是效果离我的想象总有些偏差。

近日,reddit 上一则帖子引发了网友热议,「机器学习调参领域有哪些迷信的看法或做法呢?」

原贴地址:https://www.reddit.com/r/MachineLearning/comments/rkewa3/d_what_are_your_machine_learning_superstitions/?sort=confidence

关于调参的那些「秘诀」

在机器学习中,超参数调整是一项必备技能,通过观察在训练过程中的监测指标如损失 loss 和准确率来判断当前模型处于什么样的训练状态,及时调整超参数以更科学地训练模型能够提高资源利用率。

每个人都会根据自己的实际经验进行模型调参,最终,绝大多数研究者可能得出的经验就是:

  • Random seed = 0 得到坏的结果
  • Random seed = 42 得到好的结果
  • Even-valued k in k-Means = insightful segmentation

有人将这一经验总结奉为所谓的 ML「迷信做法」,但其实不然,几乎所有学者都这样做。

不过,也有网友对这一经验总结持怀疑态度:网友 @SlashSero 遗憾地表示,这种情况甚至会出现在非常有名的科学出版物上,尤其是在交叉验证不可行或者易受其他参数选择影响的机器学习应用中,因此超参数优化(HPO)不可行。不妨看看 NeurIPS 会议论文有多少拥有真正透明的代码库和易于复现的交叉验证研究,以证实他们的工作较去年提升了 0.5-1% 的性能。

另外,很多时候出于对研究者的信任,但其实会导致新的深度学习模型在实践中并没有表现出明显优于传统模型的性能。我们应该看到,社区存在这样一种现状:花费大量时间确保模型真正兑现它所表现出的性能,并且可复现和透明,这是一项吃力不讨好的工作。消耗计算资源不说,还有可能失去在一个发展极快的领域发表论文和获得表彰的机会。

为了实现模型最佳性能,各路网友也纷纷晒出自己的炼丹经验:有网友认为 Random seed 必须是 10 的倍数,最好是 1000(不过该回答遭到了别人的反驳)。

除了 Random seed 设置外,有研究者分享了自己的一些科研小技巧。

模型的训练过程,近乎黑盒,假如期间发生程序错误,很难察觉到,有网友建议随时随地进行「print」是一个很好的习惯,在程序第一次运行时,一定要打印所有可能的东西,「print」能让你知道程序进行到哪一步,有没有陷入死循环...... 其实,绝大多数程序员都会这样做。

除了「print」外,有人表示日志记录也非常有必要,在实验室做科研,有时为了跑一个程序,需要花费好几天的时间,但总有那么不顺心的地方,要么好久不断电的实验室突然断电,要么服务器崩了…… 所以随时随地保存日志也是每个程序员必备的,查看日志记录,你能发现程序运行到哪了,粗略估计模型性能,还能查看错误:

还有网友晒出了自己的 dropout 经验,认为超过 20% 的 dropout 将使该模式难以恢复。不过这只是这位网友自己的经验,也有人表示自己采用 90% 的 dropout,模型性能最好。

除此以外,有网友总结了批大小应该是 2 的幂次方

以上就是网友总结的一些 ML 炼丹小技巧。

玄学论文难复现

虽然调参有用,但网友 @ostrich-scalp 犀利地批驳道,「大多数论文的结果都是胡说八道,将我的职业生涯都用来实现这些工作并期望创建像模像样可用于生产的模型,这是一个极大的错误。」

上面那位老哥 @SlashSero 接茬说道,「令人难以置信的是,ACM、IEEE、IAAA 和 NeurIPS 上发表的论文有多少完全只是出于对作者的信任。到现在为止,你可能希望所有知名期刊和会议都要求论文作者开源和复现代码,但这种情况只是例外。」

显然,机器学习是一门技术。虽然神经网络黑箱的状态让可解释性受限,但我们可以在较高层面上通过经验解决面临的问题。我们需要加载数据,建立框架,让系统运行起来,设定度量标准,调整参数并分析误差,进行特征工程,结果可视化等等步骤。最终经过数次迭代直至推理的准确率不再提升。

那么为什么各种玄学现象仍然不断出现,拷问着我们的心灵?看来,我们对这门学科的了解还不够多。

不过请记住 NIPS 2017 大会上图灵奖得主 Judea Pearl 演讲的最后一页 Keynote:

数据科学仅当能促进对数据的合理解读时才能被称为科学。

不过也不用怕,深度学习调参总还是有技巧可循的,大致可以总结如下。这些算不得迷信做法,仅供参考。

  • 寻找合适的学习率。作为一个非常重要的参数,学习率面对不同规模、不同batch-size、不同优化方式和不同数据集,它的最合适值都是不确定的。我们唯一可以做的,就是在训练中不断寻找最合适当前状态的学习率;
  • 权重初始化。相比于其他的 trick 来说使用并不是很频繁。只有那些没有预训练模型的领域会自己初始化权重,或者在模型中去初始化神经网络最后那几个全连接层的权重。常用权重初始化算法是「kaiming_normal」或「xavier_normal」;
  • 数据集处理,主要有数据筛选和数据增强;
  • 多模型融合,这是论文刷结果的终极核武器,深度学习中一般有几种方式,比如同样的参数,不同的初始化方式;不同的参数,通过交叉验证选取最好的几组;不同的模型,进行线性融合,例如 RNN 和传统模型;
  • 余弦退火和热重启的随机梯度下降。余弦退火就是学习率类似余弦函数慢慢下降,热重启就是在学习的过程中,学习率慢慢下降然后突然再回弹 (重启) 然后继续慢慢下降;
  • 尝试过拟合一个小数据集。关闭正则化 / 随机失活 / 数据扩充,使用训练集的一小部分,让神经网络训练几个周期。确保可以实现零损失,如果没有,那么很可能什么地方出错了。
  • ……

调参路上各有各的「路数」,适合自己就好。

最后问一句,炼丹的你有哪些独门秘籍呢?

参考链接:https://www.jiqizhixin.com/articles/2020-10-21-3https://picture.iczhiku.com/weixin/message1609136710592.html

编辑:黄继彦校对:龚力

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-01-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据派THU 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
如何从零开始构建深度学习项目?这里有一份详细的教程
选自Medium 作者:Jonathan Hui 机器之心编译 在学习了有关深度学习的理论课程之后,很多人都会有兴趣尝试构建一个属于自己的项目。本文将会从第一步开始,告诉你如何解决项目开发中会遇到的各类问题。 本文由六大部分组成,涵盖深度学习 ( DL ) 项目的整个过程。我们将使用一个自动漫画着色项目来说明深度学习的设计、程序调试和参数调整过程。 本文主题为「如何启动一个深度学习项目?」,分为以下六个部分: 第一部分:启动一个深度学习项目 第二部分:创建一个深度学习数据集 第三部分:设计深度模型 第四部分
朱晓霞
2018/04/19
9230
如何从零开始构建深度学习项目?这里有一份详细的教程
手把手教你从零搭建深度学习项目(可下载PDF版)
第一部分:启动一个深度学习项目 1. 应该选择什么样的项目? 很多人工智能项目其实并没有那么严肃,做起来还很有趣。2017 年初,我着手启动了一个为日本漫画上色的项目,并作为我对生成对抗网络 ( GAN ) 研究的一部分。这个问题很难解决,但却很吸引人,尤其是对于我这种不会画画的人来说!在寻找项目时,不要局限于增量性改进,去做一款适销对路的产品,或者创建一种学习速度更快、质量更高的新模型。 2. 调试深度网络(DN)非常棘手 训练深度学习模型需要数百万次的迭代,因此查找 bug 的过
昱良
2018/06/25
1.1K0
谷歌大脑深度学习调参(炼丹)指南出炉,Hinton点赞,一天收获1500星
机器之心报道 机器之心编辑部 「大量的实践经验已被提炼成这份强大的深度学习模型调参指南。」——Geoffrey Hinton。 众所周知,AI 的超参数决定着模型学习效果和速度。相比普通机器学习任务,深度学习需要的训练时间较长,因此调参技巧就显得尤为重要。 但鉴于深度学习「炼丹」的特性,不同的模型需要不同的超参数,而每个超参的意义又不同,在不同实验中,参数和调整的方向又都不一样。调参这件事一直以来没有固定的套路,每个人都有自己的经验,因此经常会出现一些似是而非的理论,比如: Random seed = 0
机器之心
2023/03/29
6130
谷歌大脑深度学习调参(炼丹)指南出炉,Hinton点赞,一天收获1500星
【深度学习】参数优化和训练技巧
学习率是一个非常非常重要的超参数,这个参数呢,面对不同规模、不同batch-size、不同优化方式、不同数据集,其最合适的值都是不确定的,我们无法光凭经验来准确地确定lr的值,我们唯一可以做的,就是在训练中不断寻找最合适当前状态的学习率。
Twcat_tree
2023/11/23
4590
【深度学习】参数优化和训练技巧
称霸Kaggle的十大深度学习技巧
在各种Kaggle竞赛的排行榜上,都有不少刚刚进入深度学习领域的程序员,其中大部分有一个共同点:
量子位
2018/08/08
5980
称霸Kaggle的十大深度学习技巧
深度学习调参tricks总结!
学习率是一个非常非常重要的超参数,这个参数呢,面对不同规模、不同batch-size、不同优化方式、不同数据集,其最合适的值都是不确定的,我们无法光凭经验来准确地确定lr的值,我们唯一可以做的,就是在训练中不断寻找最合适当前状态的学习率。
Datawhale
2020/10/23
3.2K0
深度学习调参tricks总结!
称霸Kaggle的九大深度学习炼丹技巧
差分学习率(Differential Learning rates)意味着在训练时变换网络层比提高网络深度更重要。
炼丹笔记
2022/05/23
6650
称霸Kaggle的九大深度学习炼丹技巧
深度学习500问——Chapter03:深度学习基础(4)
逐层贪婪训练,无监督训练(unsupervised pre-training)即训练网络的第一个隐藏层,再训练第二个...最后用这些训练好的网络参数值作为整体网络参数的初始值。
JOYCE_Leo16
2024/03/24
1550
深度学习500问——Chapter03:深度学习基础(4)
你有哪些deep learning(rnn、cnn)调参的经验?
深度学习中调参其实是一个比较重要的技巧,但很多时候都需要多尝试多积累经验,因此算法工程师也被调侃为调参工程师。
kbsc13
2019/08/28
7030
你有哪些deep learning(rnn、cnn)调参的经验?
作者:hzwer https://www.zhihu.com/question/41631631/answer/859040970
小小詹同学
2019/10/24
9310
深度学习不再是炼丹术!谷歌给出首个神经网络训练理论证明
谷歌AI的研究人员日前在arxiv贴出一篇文章,给出了首个神经网络训练相关的理论证明。
abs_zero
2019/05/05
4990
深度学习不再是炼丹术!谷歌给出首个神经网络训练理论证明
深度 | 从修正Adam到理解泛化:概览2017年深度学习优化算法的最新研究进展
选自Ruder Blog 作者:Sebastian Ruder 机器之心编译 参与:刘晓坤、路雪、蒋思源 Sebastian Ruder 的这篇博客总结了 2017 年深度学习优化算法的最新进展,他主要从Adam算法的局限性与提升方法、学习率衰减方案、超参数搜索、怎样学习优化和理解泛化性能等角度向我们展示近来研究者对最优化方法的思考与探索。 深度学习终究是寻找一个使泛化性能足够好的(损失函数)极小值过程,它并不一定要求能搜索到非凸函数的最小值点,而需要模型的损失能得到显著性地降低,以收敛到一个可接受的极小值
机器之心
2018/05/09
1.3K0
深度 | 从修正Adam到理解泛化:概览2017年深度学习优化算法的最新研究进展
深度学习性能提升的诀窍
原文: How To Improve Deep Learning Performance 作者: Jason Brownlee 翻译: KK4SBB 责编:何永灿,关注人工智能,投稿请联系heyc@csdn.net或微信号289416419 克服过拟合和提高泛化能力的20条技巧和诀窍 你是如何提升深度学习模型的效果? 这是我经常被问到的一个问题。 有时候也会换一种问法: 我该如何提高模型的准确率呢? ……或者反过来问: 如果我的网络模型效果不好,我该怎么办? 通常我的回答是“具体原因我不清
用户1737318
2018/06/06
6360
关于训练神经网路的诸多技巧Tricks(完全总结版)
很多人都说训练神经网络和炼金术师炼药的过程相像,难以破解其中的黑盒子。其实不然,在训练的时候我们依然可以通过大量的技巧去最大化我们的训练效果,从而帮助我们的任务取得不错的精度,这些技巧是训练神经网络不可缺少的一环。
老潘
2023/10/19
1.4K0
关于训练神经网路的诸多技巧Tricks(完全总结版)
深度学习性能提升的诀窍
克服过拟合和提高泛化能力的20条技巧和诀窍 你是如何提升深度学习模型的效果? 这是我经常被问到的一个问题。 有时候也会换一种问法: 我该如何提高模型的准确率呢? ……或者反过来问: 如果我
CSDN技术头条
2018/02/12
1.2K0
深度学习性能提升的诀窍
用Keras进行深度学习模式的正则化方法:Dropout
Dropout是神经网络和深度学习模型的简单而有效的正则化技术。 在这篇文章中,你将发现Dropout正则化技术,以及如何使用Keras将其应用于Python中的模型。 看完这篇文章后,你会知道: D
AiTechYun
2018/03/02
1.3K0
用Keras进行深度学习模式的正则化方法:Dropout
重磅 | 2017年深度学习优化算法研究亮点最新综述火热出炉
翻译 | AI科技大本营(微信ID:rgznai100) 梯度下降算法是机器学习中使用非常广泛的优化算法,也是众多机器学习算法中最常用的优化方法。几乎当前每一个先进的(state-of-the-art)机器学习库或者深度学习库都会包括梯度下降算法的不同变种实现。但是,它们就像一个黑盒子一样,很难得到它们优缺点的实际解释。 近日,Sebastian Ruder针对2017年优化算法的一些新方法,整理出了一份2017深度学习优化研究亮点报告,值得关注。 近年来有很多不同的优化算法被提出来了,这些算法采用不同
AI科技大本营
2018/04/27
1.1K0
重磅 | 2017年深度学习优化算法研究亮点最新综述火热出炉
基于Keras/Python的深度学习模型Dropout正则项
dropout技术是神经网络和深度学习模型的一种简单而有效的正则化方式。 本文将向你介绍dropout正则化技术,并且教你如何在Keras中用Python将其应用于你的模型。 读完本文之后,你将了解: dropout正则化的原理 如何在输入层使用dropout 如何在隐藏层使用dropout 如何针对具体问题对dropout调优 神经网络的Dropout正则化 Dropout是Srivastava等人在2014年的一篇论文中提出的一种针对神经网络模型的正则化方法 Dropou
CSDN技术头条
2018/02/12
1K0
2017年深度学习优化算法最新进展:如何改进SGD和Adam方法?
原作 Sebastian Ruder 王小新 编译自 ruder.io 量子位 出品 | 公众号 QbitAI 深度学习的基本目标,就是寻找一个泛化能力强的最小值,模型的快速性和可靠性也是一个加分点。 随机梯度下降(SGD)方法是1951年由Robbins和Monro提出的[1],至今已有60年历史。在当前的深度学习研究中,这种方法至关重要,一般被用在反向传播过程中。 近年来,研究人员提出一些新的优化算法,使用了不同方程来更新模型参数。2015年Kingma和Ba提出的Adam方法[18],可看作是目前最
量子位
2018/03/23
9970
2017年深度学习优化算法最新进展:如何改进SGD和Adam方法?
【深度干货】2017年深度学习优化算法研究亮点最新综述(附slide下载)
【导读】梯度下降算法是机器学习中使用非常广泛的优化算法,也是众多机器学习算法中最常用的优化方法。几乎当前每一个先进的(state-of-the-art)机器学习库或者深度学习库都会包括梯度下降算法的不同变种实现。但是,它们就像一个黑盒优化器,很难得到它们优缺点的实际解释。Sebastian Ruder曾在去年发表博文 《梯度下降优化算法综述》(An overview of gradient descent optimization algorithms),详细对比了梯度下降算法中的不同变种,并帮助使用者根据
WZEARW
2018/04/11
1K0
【深度干货】2017年深度学习优化算法研究亮点最新综述(附slide下载)
推荐阅读
相关推荐
如何从零开始构建深度学习项目?这里有一份详细的教程
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验