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

调参的苦与泪,还有那些「科学的做法」。

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

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

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

近日,reddit 上一则帖子引发了网友热议,「呆板进修调参领域有哪些科学的看法或做法呢?

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

原贴地址: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=42结果好

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

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

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

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

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

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

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

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

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

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

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

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

形而上学论文难复现

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

……

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

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

参考链接:

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

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

给TA打赏
共{{data.count}}人
人已打赏
AI

中科驭数宣布完成数亿元A+轮融资,第二代DPU芯片完成研发计划

2021-12-21 10:28:00

AI

最大数据集、多义务覆盖,阿里达摩院发布首个大规模华文多模态评测基准MUGE

2021-12-21 15:08:00

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
今日签到
搜索