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

2024-04-13 19:08

本文主要是介绍深度学习如炼丹,你有哪些迷信做法?网友:Random seed=42结果好,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

5db44ea22ae170396e8bd0326e6bd419.png

来源:机器之心本文约2200字,建议阅读9分钟
调参的苦与泪,还有哪些“迷信的做法”?

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

ae64d2cd32c87a5bb3c9484db858cd95.png

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

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

40b3bdac60c7690e1c4a047e3dcfcb7a.png

原贴地址: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% 的性能。

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

3bb563c8abb9924c38001e20de126aec.png

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

016c2c3011a58b9cd20d57510f87b83f.png

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

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

2ce7905e30f76a0cea8fa70e1c424861.png

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

518b56e76ba54f66f8cc3b17f50fad96.png

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

1f9a6453ba36d8195d840a2a327fa234.png

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

4bccda511a1182cdd69a78c506585bfa.png

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

玄学论文难复现

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

77543d55875461e81f77482aadd49d2e.png

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

bdf32b93a58a46b427a85b9f9a865842.png

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

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

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

8daded066dae1f146f2cbc76eca0123c.png

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

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

  • 寻找合适的学习率。作为一个非常重要的参数,学习率面对不同规模、不同batch-size、不同优化方式和不同数据集,它的最合适值都是不确定的。我们唯一可以做的,就是在训练中不断寻找最合适当前状态的学习率;

  • 权重初始化。相比于其他的 trick 来说使用并不是很频繁。只有那些没有预训练模型的领域会自己初始化权重,或者在模型中去初始化神经网络最后那几个全连接层的权重。常用权重初始化算法是「kaiming_normal」或「xavier_normal」;

  • 数据集处理,主要有数据筛选和数据增强;

  • 多模型融合,这是论文刷结果的终极核武器,深度学习中一般有几种方式,比如同样的参数,不同的初始化方式;不同的参数,通过交叉验证选取最好的几组;不同的模型,进行线性融合,例如 RNN 和传统模型;

  • 余弦退火和热重启的随机梯度下降。余弦退火就是学习率类似余弦函数慢慢下降,热重启就是在学习的过程中,学习率慢慢下降然后突然再回弹 (重启) 然后继续慢慢下降;

  • 尝试过拟合一个小数据集。关闭正则化 / 随机失活 / 数据扩充,使用训练集的一小部分,让神经网络训练几个周期。确保可以实现零损失,如果没有,那么很可能什么地方出错了。

  • ……

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

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

参考链接:

https://www.jiqizhixin.com/articles/2020-10-21-3

https://picture.iczhiku.com/weixin/message1609136710592.html

编辑:黄继彦

校对:龚力c826bd4ed153eaddeedd4e55696451fa.png

这篇关于深度学习如炼丹,你有哪些迷信做法?网友:Random seed=42结果好的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/900966

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

线性代数|机器学习-P36在图中找聚类

文章目录 1. 常见图结构2. 谱聚类 感觉后面几节课的内容跨越太大,需要补充太多的知识点,教授讲得内容跨越较大,一般一节课的内容是书本上的一章节内容,所以看视频比较吃力,需要先预习课本内容后才能够很好的理解教授讲解的知识点。 1. 常见图结构 假设我们有如下图结构: Adjacency Matrix:行和列表示的是节点的位置,A[i,j]表示的第 i 个节点和第 j 个

Node.js学习记录(二)

目录 一、express 1、初识express 2、安装express 3、创建并启动web服务器 4、监听 GET&POST 请求、响应内容给客户端 5、获取URL中携带的查询参数 6、获取URL中动态参数 7、静态资源托管 二、工具nodemon 三、express路由 1、express中路由 2、路由的匹配 3、路由模块化 4、路由模块添加前缀 四、中间件