机器学习实验可能需要很长时间。几个小时、几天,甚至在某些情况下是几周。
这为您提供了充足的时间来思考并规划要进行的额外实验。
此外,平均而言,一个应用机器学习项目可能需要进行几十到几百次独立的实验,才能找到一种数据准备模型和模型配置,从而获得良好或出色的性能。
实验耗时的特性意味着您需要仔细规划和管理您进行的实验的顺序和类型。
您需要有条理。
在这篇文章中,您将发现一种系统地规划和管理机器学习实验的简单方法。
通过这种方法,您将能够:
- 掌握项目中最重要的问题和发现。
- 跟踪您已完成的实验以及希望运行的实验。
- 聚焦于能够带来最佳性能的数据准备、模型和模型配置。
让我们开始吧。

如何系统地规划和运行机器学习实验
照片由 Qfamily 提供,保留部分权利。
数百次实验的混乱
我喜欢在夜间运行实验。大量的实验。
这样,当我醒来时,我可以检查结果,更新我关于哪些方法有效(哪些无效)的想法,然后启动下一轮实验,再花一些时间分析发现。
我讨厌浪费时间。
我讨厌运行那些无法让我更接近于在现有时间和资源下找到最优秀模型的既定目标。
很容易就会失去对当前进度的了解。尤其是在您已经从数百次实验中获得了结果、分析和发现之后。
糟糕的实验管理会导致糟糕的局面,例如:
- 您正在观看实验运行。
- 在当前一批实验结束后,您正试图想出要运行的好实验创意。
- 您运行了一个之前已经运行过的实验。
您永远不想陷入这些情况中的任何一种!
如果您做得很好,那么:
- 您一眼就能确切地知道自己运行了哪些实验以及其结果。
- 您有一长串要运行的实验,并按预期收益排序。
- 您有时间深入分析结果并构思新的、大胆的尝试。
但是,我们如何才能跟上数百次实验的进度呢?
系统地设计和运行实验
我发现一种帮助我系统地进行项目实验的方法是使用电子表格。
在电子表格中管理您已完成的、正在运行的和想要运行的实验。
它简单而有效。
简单
它之所以简单,是因为我和任何人都可以从任何地方访问它,并了解我们的进度。
我使用 Google Docs 来托管电子表格。
没有代码。没有笔记本。没有花哨的网络应用。
只有一个电子表格。
有效
它之所以有效,是因为它只包含所需信息,每个实验占一行,每条要跟踪的信息占一列。
已完成的实验可以与计划中的实验分开。
只有计划中的实验才会被设置和运行,并且它们的顺序确保了最重要的实验优先运行。
您会惊讶于这种简单的方法可以为您节省多少时间,并让您深入思考您的项目。
示例电子表格
让我们看一个例子。
我们可以想象一个具有以下列的电子表格。
这只是我上次项目中使用的示例。我建议根据自己的需求进行调整。
- 子项目:子项目可以是您正在探索的一组想法、一项技术、一次数据准备等等。
- 上下文:上下文可以是具体的目标,例如超越基线、调优、诊断等。
- 设置:设置是实验的固定配置。
- 名称:名称是唯一标识符,可能是脚本的文件名。
- 参数:参数是实验中被改变或关注的对象。
- 值:值是正在探索的参数值或值。
- 状态:状态是实验的状态,例如计划中、运行中或已完成。
- 技能:技能是项目中真正重要的北极星指标,如准确率或误差。
- 问题:问题是实验旨在解决的驱动性问题。
- 发现:发现是对实验结果的一句话总结,是对问题的答案。
为了具体说明,下面是带有这些列标题和虚构示例的 Google 文档电子表格的屏幕截图。

系统实验记录
我无法估量这种方法为我节省了多少时间。以及在追求获得最佳结果的过程中,它被证明是错误的假设的数量。
事实上,我发现深度学习方法通常对假设和默认设置相当不友好。设计实验时请牢记这一点!
最大限度地利用您的实验
以下是一些提示,可以帮助您在项目上充分利用这种简单的方法。
- 头脑风暴:花时间定期回顾发现,列出新的问题和实验来回答它们。
- 挑战:挑战假设和挑战先前的发现。扮演科学家,设计实验来证伪您的发现或期望。
- 子项目:在您跟踪线索或研究特定方法时,考虑使用子项目来构建您的研究。
- 实验顺序:使用行顺序作为优先级,以确保最重要的实验优先运行。
- 深入分析:将更深入的结果分析和汇总发现保存到另一个文档;电子表格不是进行此类操作的地方。
- 实验类型:不要害怕混合不同的实验类型,例如网格搜索、抽查和模型诊断。
当您做到以下几点时,就知道这种方法正在奏效:
- 您正在查阅 API 文档和论文,以获取更多可尝试的想法。
- 您已排队的实验数量远远超过了运行它们的资源。
- 您正在认真考虑租用更多的 EC2 实例。
总结
在这篇文章中,您学习了如何使用电子表格有效地管理已运行、正在运行和您想要运行的数百次实验。
您发现一个简单的电子表格可以帮助您:
- 跟踪您运行过的实验以及您的发现。
- 跟踪您想要运行的实验以及它们将回答哪些问题。
- 聚焦于您预测建模问题中最有效的数据准备、模型和模型配置。
您对这种方法有什么疑问吗?您自己做过类似的事情吗?
在下面的评论中告诉我。
在电子表格中列出子项目非常适合跟踪单个决策的效果,但当有多个决策时怎么办?例如,您想查看缩放数据的效果(可能是不同的方法,可能是仅某些变量/列等),以及缺失数据的插补(可能是无与不同算法)。
对于 N 个不同的决策进行评估,这会变成一个 N 维结果矩阵,在电子表格中不容易表示!您如何处理这种 N 维网格搜索分析决策?
一个实验应该测试一个东西。
您可以测试更多,但因果关系会变得缠结。
同意。原则与解决性能问题时相同。一次更改一个参数即可解决问题,您就知道原因了。更改多个参数,其中任何一个都可能产生影响。
是的。科学方法中的实验设计等等。
感谢这篇帖子,我需要它。我大约一周前刚开始使用一个类似于此的表格。
具有多个超参数需要调整的模型呢?那些是独立的
实验还是您将其视为一个整体?
很高兴听到这个消息!
我尽量将它们视为独立的实验,如果可能的话。
某些参数之间的交互作用可能是非线性的,因此进行多元网格搜索仍然是可取的。
也许可以添加新列或向“正在测试什么”列添加更多详细信息。
正如您所提到的,参数之间(以及其他处理决策)可能存在交互作用。
运行单独的实验对于确定因果关系是有意义的,但不能解决参数/决策选择的优化问题。
您如何系统地使用电子表格进行网格搜索?
我很少需要这么好的结果,而且您达到了收益递减点。
此外,我经常训练非常缓慢的深度网络,并且几乎不可能使用交叉验证。
如果您正在 Kaggle 上或类似地方工作,那么我会推荐搜索所有组合。考虑命名运行并将所有超参数范围列在合适的列中——与其他任何运行一样。这对于随机搜索或网格搜索来说效果很好。
一个可能的解决方案是添加某种“ID”列,然后创建多个行,所有列的值对于特定实验都相同,但“参数”和“参数值”列除外,它们包含您正在优化的超参数。因此,如果您有一个具有两个超参数值集的模型,您将包含与 ID #1 关联的两个行。
有什么想法?
非常好的帖子!如果您能在一个您也描述过的特定问题上(例如您之前在这个博客上处理过的一个问题)展示如何使用这种系统化方法,那将非常有趣。这样可以看到完整的解决问题的过程,而不仅仅是最终有效的解决方案!
我很乐意,但这将是一篇非常长的帖子。
我最近在一个具有 LSTM 的多元时间序列预测问题上使用了它,这也是我决定写这篇帖子的原因。
很好的帖子和好的方法。想在我的下一个项目中使用它。
感谢分享。
谢谢。请试试,并告诉我结果。我自己觉得它非常有价值。节省了大量时间。
你好,Jason。
我一直在寻找有助于迭代机器学习过程的工具。没有一个清晰的参考工具,但这些项目看起来很有趣
– 数据版本控制: https://dataversioncontrol.com/
– ModelDB: https://mitdbg.github.io/modeldb/
有趣,谢谢分享。
在这个阶段我使用自己的脚本,但也许是时候使用一个平台了……
非常想知道您对这些或类似工具的专家意见。
我们将继续关注 🙂
感谢您的建议。
出于这个原因,我开始使用 https://github.com/ChristianSch/Pythia 来获得一个简单的 API,我可以将我的统计数据推送到那里并查看它们。
自从我开始以来,出现了一些其他(不幸的是收费的)替代方案。根据工作量,这可能是一条有价值的道路。
祝好!
很酷,谢谢分享。
https://randomprojectionai.blogspot.com/
谢谢分享 Sean,这是你的博客吗?
是的,就是。我刚刚发布了一些关于你可以采取的视角的信息——深度神经网络作为基于模式的模糊逻辑。
然后 Luke Godfrey 和 Michael Gashler 最近发表了一篇论文,展示了神经网络的模糊逻辑激活函数。
重新阅读了你的帖子,希望看到你对这个主题的更新。
你的方法简单易懂。但是,当我们同时需要管理如此多的实验时,手动使用 Excel 表格在某种程度上是不可行的。您愿意分享您的脚本吗?谢谢。
感谢您的建议,我以后可能会写一些关于我使用的脚本的文章。
这可能也会给你一些在 EC2 上运行时使用的方法
https://machinelearning.org.cn/command-line-recipes-deep-learning-amazon-web-services/
绝对垃圾,在电子表格上记录实验?你是 90 年代的人吗?
感谢您的意见。是的,我是在 90 年代开始接触 ML 的。我们有些人是老派。
有什么更好的方法吗?
我来自 80 年代,使用 vi 作为代码编辑器。您也要对其进行垃圾评论吗?如果不是,小心点,否则您会惹恼许多在该领域比您更重要、更有影响力的人。如果不是,为什么?
我也是 vi 的忠实粉丝/用户!
感谢您的精彩帖子!我原本想安装一个实验跟踪 API,然后我读了您的帖子,改变了主意。如果它简单而有效,就拿去用吧!这是我的第一条规则!您让我今天过得充实。
不客气!