为什么软件工程流程和工具不适用于机器学习– Comet


在这篇博客文章中,我将讨论为什么数据科学家和团队不能依靠软件工程团队在过去20年中一直使用的工具和流程? 
对软件工程工具和过程的依赖是有道理的:数据科学和软件工程都是以代码为主要工具的学科。然而,数据科学团队和软件工程团队正在做完全不同的事情。检查这两个学科之间的核心差异对阐明我们应该如何思考构建人工智能工具和流程的方式是有帮助的。 
在Comet,我们相信采用专门为AI设计的工具和流程将帮助从业者解锁并实现Ng所谈论的革命性转变。
 
不同的学科,不同的过程
软件工程是一门学科,其目标广泛地考虑为计算机可以执行以执行定义的功能的程序的设计和实现。假设软件程序的输入在预期的(或受约束的)输入范围内,则其行为是可知的。在2015年ICML的一次演讲中,Leon Bottou很好地阐述了这一点:在软件工程中,可以证明算法或程序是正确的,在某种意义上,假设对输入有特定的假设,则当算法或程序终止时,某些属性将成立。

可证明的软件程序正确性已影响了我们为进行软件工程而构建的工具和流程。考虑可证明的正确性所产生的软件编程的一个必然特征:如果某个程序对于某些输入值是可证明正确的,则该程序包含的子程序对于这些输入值也可以证明正确。这就是为什么从总体上讲,像Agile这样的工程流程对于软件团队来说是成功且富有成效的。将这些项目分解为子任务。大多数瀑布式和Scrum实施子任务。

我们看到许多数据科学团队正在使用与这些软件方法相同或大致相似的工作流程。不幸的是,它们不能很好地工作。
 
为什么不确定性是机器学习固有的? 
机器学习系统代替规范来输入大量数据,以检测模式并生成预测。换句话说,机器学习的目的是创建一个统计代理,可以用作其中一项任务的规范。我们希望收集到的数据是现实世界中具有代表性的子样本,但是在实践中我们无法确切知道该条件的满足程度。最后,我们使用的算法和模型架构非常复杂,非常复杂,以至于我们无法始终将它们分解为子模型以准确了解正在发生的事情。 
器学习所固有的问题类型固有的是缺乏明确的数学规范。
我们在没有规范的情况下使用的统计代理正在积累许多我们希望是具有代表性的环境数据。而且,我们用来从这些收集的数据中提取模式的模型非常复杂,以至于我们无法可靠地将其分解并准确地了解它们的工作方式。如果您想更深入地研究这个问题,我在Comet的同事Dhruv Nair已撰写了一个由三部分组成的系列文章,内容涉及机器学习中的不确定性(这是第I部分的链接)。
然后考虑一下机器学习项目中使用的敏捷方法之类的含义。我们不可能希望将机器学习任务分解为子任务,作为更大的冲刺的一部分进行处理,然后像乐高玩具一样拼凑成一个完整的产品,平台或功能,因为我们无法可靠地预测子模型或模型本身,将起作用。 
 
ML工具:实验管理 
Ng在re:MARS上也讨论了这个话题。他透露了他的团队如何采用专门为ML设计的工作流系统:1天冲刺,其结构如下:

  1. 每天建立模型并编写代码
  2. 设置训练并在夜里进行实验
  3. 早上分析结果,然后…
  4. 重复

Ng的1天冲刺方法论反映了对于理解和设计实践机器学习的团队至关重要的事情:这是一门固有的实验科学。由于构建的系统缺乏明确的规范,因为数据收集是一门不完善的科学,并且由于机器学习模型非常复杂,因此必须进行实验。与其围绕多个星期的冲刺来组织团队流程,不如快速测试出许多不同的体系结构,功能工程选择和优化方法,通常会更有成果,直到大致了解什么有效和什么无效为止。1天的冲刺使团队可以快速行动,在短时间内测试许多假设,并开始围绕建模任务建立直觉和知识。 
除了流程之外,用于进行机器学习的工具也很重要。在Comet,我们的使命是通过提供可帮助您实现这一目标的工具来帮助公司从机器学习中提取商业价值。我们交谈的大多数数据科学团队都使用git,电子邮件和(信不信由你)电子表格的组合来记录每个实验周围的所有工件。 
我们基于这些需求(以及我们自己在Google,IBM以及哥伦比亚大学和耶鲁大学研究小组的工作中从事数据科学和机器学习时的需求)构建了Comet。每次训练模型时,都应该有一些东西可以捕获实验的所有工件,并将它们保存在某个中央分类帐中,您可以在其中查找,比较和筛选所有(或团队)工作。构建Comet是为了向机器学习的从业者提供此功能。 
衡量工作流程效率是一件非常困难的事情,但是平均而言,我们的用户报告说 ,使用Comet可以节省20-30%的时间(注意:Comet对个人和研究人员都是免费的,您可以在此处注册)。