介绍机器学习再现性量表
回到博客主页

介绍机器学习再现性量表

再现性 2021年11月16日

量化机器学习再现性,提出一个统一的项目再现性排名系统

机器学习项目的可重复性是一个反复出现的话题,在许多不同的环境中被提出无论是在学术界而且行业

有很多意见,主要集中在工具上,这很好,但可能导致专注于功能而不是解决具体问题机器学习问题.与此同时,似乎还没有大量的工作在提供一种方法来量化一个给定的项目的再现性,这意味着很多这些讨论仍然是抽象的,并且可能对寻求一种方法来衡量他们的工作并决定如何在再现性方面改进它的从业者没有太大的帮助。

很多时候,评估复制一个给定项目的容易程度是一个很大的挑战。这阻碍了人们在现有工作的基础上进行建设,导致了车轮的重新发明,并导致了不信任雷竞技技官网下载开源数据科学项目

但事情并不一定是这样的。在这篇文章中,我将尝试提供一个具体的五星排名系统,以及一个可以添加到机器学习项目中的报告,它可以帮助其他人理解复制他们感兴趣的项目应该是多么容易。

两种不同类型的机器学习再现性

一般来说,可重复性是一个来自科学领域的术语,它的定义是:

一项研究的结果是可重复的意思是,当研究被重复(重复)时,通过实验或观察性研究或对数据集的统计分析得到的结果应以高度的可靠性再次得到。

在我们的例子中,我们可以将其分成两种不同类型的再现性:

  • 技术再现性
  • 科学的再现性

这里的技术再现性意味着通过运行项目的内容,我们获得相同的输出,而科学再现性意味着实验的主张也通过运行的输出得到验证。

我们应该区分它们,因为在某些情况下,科学的可重复性可能更定性,例如GAN项目,很难对结果进行定量比较,许多论文依赖于“目测”输出质量。

另一方面,技术再现性纯粹是定量的。在GAN示例中,技术再现性意味着生成运行将生成具有相同权重的模型。这可以通过比较权重来确定。

这突出了另一个区别——技术再现性通常需要记录或硬编码随机种子来获得相同的结果。科学的可重复性在某种程度上是相反的——如果你不能用不同的随机种子得到相同的科学结果,那么它就不具有科学的可重复性。

这篇文章将只关注技术的可重复性。

五星级的系统

五星系统为ML项目的可重复性设置了明确的标准。它由以下组成部分组成:

  1. 代码
  2. 配置
  3. 数据(+构件)
  4. 环境
  5. 评价

我认为这个顺序也对应于实现每个阶段的难度,尽管很明显,这是开放的辩论。

让我们深入了解每一个阶段。

⭐️代码

意义:您的代码可以接收输入,端到端运行,并产生预期的输出。这里的输入通常是数据集,但有时也可能是其他东西,比如可解释性项目中的模型。输出通常是图表或度量形式的模型或一些“见解”。

具体标准:

  1. 当接收到正确的输入时,代码会正常运行
  2. 你有一个可以运行代码的示例输入-例如,如果你的项目是一个对象检测项目,你有一些数据集,保存或下载,模型将在其上运行没有错误。
  3. 对于上面的输入,多次运行代码将产生相同的输出。

有帮助的工具:

  1. Git

在实践中,许多(但不是所有)发布代码的项目都遵循这个阶段。他们有一个示例数据集和运行在该数据集上的代码,并返回一个带有指标的文件,该指标展示了模型已经了解了它应该拥有的内容。

⭐️⭐️配置

意义:您有一个明确定义的配置文件,它与您的代码一起提交,并为给定的运行定义了可配置参数。代码使用这个配置文件在运行中设置参数,它们不是以特殊的方式编写的。

具体标准:

  1. 您有一个或多个配置文件(这些文件可以是YAMLJSON,或其他东西)包含所有可配置实验参数。重要的澄清:这并不意味着,例如,所有的模型参数必须出现在这个文件中,但任何你特别配置的参数必须出现在这里,这样就可以很容易地看到哪些参数被实验过,并修改它们以建立在现有的项目上)。
  2. 该代码使用配置文件提取参数并将它们输入到各自的函数中。这意味着如果你有一个参数叫做时代值为5,它保存了训练模型的周期数。如果该值更改为6,那么模型现在应该为另一个纪元进行训练。这并不一定是Python代码,它可以通过创建一个Makefile来解决,该Makefile将配置参数作为命令行参数传递给代码。
  3. 使用相同配置的多次运行将产生相同的结果。这在第一阶段进行了扩展,因为这意味着项目对于任何一组配置参数都是可复制的,而不仅仅是发布版本中使用的选定的配置参数。

2.所有的非确定性函数都有一个在配置文件中设置的种子。随机种子必须出现在配置文件中)。

有帮助的工具:

  1. 九头蛇
  2. Git
  3. 实验跟踪工具(例如MLflow)

这个步骤并不总是作为典型项目的一部分。在许多情况下,配置是在项目发布位置之外跟踪的,这意味着很难直接将所使用的配置与连接起来,并且无法对未成功产生最终结果的配置进行评估,可能会永久隐藏。

⭐️⭐️⭐️数据(+工件)

意义:您所依赖的数据与您的代码一起管理。可以很容易地修改它,用其他数据集测试模型。如果您的项目有重要的资源需求,并且可以被分割成离散的步骤(例如,数据处理、培训等),那么每个阶段的工件也会被跟踪,以便分别测试每个阶段的可重复性。

具体标准:

  1. 数据集与代码一起管理。在某些情况下,这意味着它是预先下载的,或者它可能是流的,但它应该存在于项目的上下文中,以这样一种方式,您可以轻松地检索它来运行端到端实验。
  2. 数据集结构和需求都有文档记录。这意味着数据接口是清晰的,以这种方式构建运行实验的其他数据集应该是一个简单的过程。
  3. 数据很容易修改。这意味着您可以用符合标准2的其他数据集替换论文中使用的数据集。,并成功运行模型。
  4. 对于资源密集型项目——项目管道被分割,中间工件被跟踪并与代码一起管理。这意味着如果您有一个预处理步骤和一个训练步骤,那么合作者只能运行这两个步骤中的一个并接收可测试的输出。

对于只能追加的表格数据,但其中的历史数据从未更改,保存生成用于训练的数据子集的查询和时间过滤器可能就足够了。一个很好的例子就是中央日志记录或点击流数据。但在你写下这一步之前,记住,很多时候,看起来永远不会被修改的数据最终会被修改。

有帮助的工具:

  1. "
  2. LakeFS
  3. 无用的
  4. Dolt -仅用于表格数据
  5. TerminusDB -仅用于表格数据

⭐️⭐️⭐️⭐️环境

意义:您的环境将被跟踪和记录,这样就可以下载使用的特定软件版本,并设置特定的硬件,以实现与最初的实验运行时相同的设置。实验环境是指实验运行时使用的所有软件和硬件版本。这方面的例子包括PIP包、Python版本、使用的操作系统以及在哪个GPU上运行实验。

具体标准:

  1. 您有使用的所有包的列表。在Python的情况下,包可以用文件。
  2. 您有一个示例环境,在该环境中项目运行时没有出现错误。实现这一点最简单的方法是使用Docker映像,它还将保存特定的操作系统和Python版本常量。注意,在某些情况下,特别是在深度学习中,Docker可能不够,您需要描述所使用的特定硬件和驱动程序版本(例如在gpu的情况下),因为Docker不是一个真正的虚拟机
  3. 如果您的项目依赖于特定的硬件,则应该提供安装文档。这个很简单。

有帮助的工具:

  1. 码头工人
  2. 皮普冻结
  3. conda env出口
  4. Python-dotenv

⭐️⭐️⭐️⭐️⭐️评估

意义:您可以轻松地对运行结果进行实验。如果项目的输出是可操作的,即预测/生成输出的模型,则这一点尤其相关。这可以是一个简单的API,也可以是一个成熟的UI,但是它应该能够以一种能够在运行结果之间进行定性比较的方式处理重新生成的输出。

具体标准:

  1. 您可以很容易地使用项目输出模型从自定义用户输入中预测/生成结果。
  2. 您可以很容易地在不同的数据或配置设置上对来自不同项目运行的输出的性能进行定性比较。

有帮助的工具:

  1. Streamlit
  2. 压力梯度

ML重复性报告

ML可重复性报告是一个标记文件,可以添加到项目中(保存为REPRODUCIBILITY.md),就项目的可复制性状况提供简明的文件。你可以从这里复制,或者从这个链接下载

再现性报告,下载自在这里
#机器学习再现性报告该文档帮助提供了项目再现性排名的简明表述。# # 1。项目的可运行代码存在于以下项目中://www.kkolawyers.com/{user}/{project_name}/ *[]示例输入位于这个链接:{link_to_input}(这必须是一个适当的链接,理想情况下作为项目的一部分进行跟踪)。注意:在项目运行中使用此输入应能实现所述的结果而没有错误。# # 2。Configuration *[]以下文件包含项目的所有相关配置参数:- {params_1}. Configuration * []yml: {params_2}。yml -…注意:确保更改这些文件中的参数将修改项目的实际运行参数。# # 3。数据(+构件)*[]所有的项目数据和构件都可以在这里找到:{link_to_project_data}。*[]输入数据的结构/模式如下:{在这里添加数据结构/模式}。 * [ ] If running the project is resource intensive – the project consists of the following steps: 1. Data preprocessing: - Code: {link to code for data processing step} - Outputs: {link to output 1}, {link to output 2} 2. Model training: - Code: ... - Outputs: ... 3. ... ## 4. Environment * [ ] Software package documentation: {link to `reuiqrements.txt` or equivalent file} * [ ] Example environment: {link to docker hub or other container registry with the environment docker image} * [ ] If the project uses specific hardware – the hardware needed to run the project properly: - 2 V100 GPUs - At least 32GB RAM - ... ## 5. Evaluation * [ ] To evaluate the model go to: {link to hosted Streamlit app or Google Colab notebook that enables users to perform predictions on arbitrary inputs} * [ ] Evaluation app code: - {link to file with Streamlit app code} - In order to run this locally: {link to instructions on running the streamlit app}

总结

这篇文章试图提供具体的、可操作的步骤,任何项目所有者都可以采取这些步骤来显著提高项目的可重复性。我们提供的报告使其他人能够快速验证项目的可重复性状态,以便根据项目的可重复性评分筛选项目。想听听你对结构的反馈,以及对过程本身的想法吗

标签

院长Pleban

DAGsHub联合创始人兼首席执行官。构建数据科学协作之家。对机器学习、物理和哲学感兴趣。加入https://DAGsHub.com

太棒了!您已经成功订阅。
太棒了!接下来,完成签出以获得完全访问权限。
欢迎回来!您已经成功登录。
成功!您的帐户已完全激活,您现在可以访问所有内容。