机器学习与传统软件开发的冲突与融合 - alepiad


在过去的几年里,我一直在用机器学习和数据科学的想法来颠覆传统的软件公司,这些想法直接来自我团队的核心研究。我发现大多数问题来自三个关键领域。

大部分障碍可以归为以下三类之一:

  • 语言
  • 开发过程
  • 预期结果

统一语言
学术界和工业界之间的大多数冲突是由于语言障碍造成的:
  • 我们谈论实验、模型和假设。他们谈论功能、业务规则和用户体验。
  • 我们根据我们拥有的数据、我们可以提取的特征以及我们可以训练的模型来定义一个问题;他们根据用户故事和功能来定义它。

这不仅仅是使用不同的行话的问题。
我们谈论我们想要解决的问题的方式与行业谈论同一问题的方式完全不同。

减少这种阻抗需要找到一种共同语言:
我们需要学习的是,产品是为用户制造的,一个没有人关心的预测的模型是没有用的。

我们发现,有助于建立这种共同语言的一个方法是混合团队,来自双方的人在同一个代码库中一起工作,并且每天互相交流。
但这说起来容易做起来难。
大多数人,无论是在学术界还是在业界,都不愿意离开他们的舒适区。
这些都是专业人士,他们非常擅长做他们的工作,他们不想在被迫做或谈论他们没有受过训练的事情时感到愚蠢。
作为一个团队或项目的领导者,你的工作是创造一个环境,让每个人都感到安全,承认他们不知道的东西,并且他们可以互相学习。
这可能是你最重要,也是最难的任务。

开发过程
开发过程是另一个痛点,因为研究和软件生产之间的目标存在着根本性的差异。

我们想测试假设;而他们工业界想交付功能:

  • 我们的反馈环路很长,也很复杂:我们必须建立一个数据处理管道,和一个交叉验证环路,然后我们继续对我们的模型进行HPO。
    我们的成功指标通常是以一个模型和一个测试数据集来定义的,不需要外部验证。此外,它们往往是定量的和客观的。
  • 软件行业有一个更紧密的反馈回路,关键是,它往往涉及到交付一个新功能,并查看用户如何与之互动。
    而评估往往比简单的损失指标更有质量和细微差别。

这就产生了一个紧张点,研究人员不断要求有更多的时间来调整他们的模型和提高性能,而工业界则不断要求有更多的功能,而这些功能昨天就应该开始工作了。

我们发现,一个好的策略是在非常短的端到端周期内工作,从数据收集到模型部署。
从最简单的基线开始,尽快将其部署到生产中。然后进行评估和迭代。
不过这说起来容易做起来难。如果你没有一个好的MLOps管道,仅仅将一个简单的基线投入生产就需要几个星期。
所以,在最初的几个迭代中,要投资于让管道变得更顺畅。

你需要能够从测试一个新的模型(或调整一些超参数)并与当前部署的模型进行比较,到在短时间内将其序列化并部署在生产中,最好是在CI/CD管道中。
一旦你有了基本的管道,然后专注于建模、特征工程、超参数调整。

预测结果
最后,痛苦的另一个关键来源是对效果不切实际的期望。
在传统软件中,每一个错误都是由于编程错误造成的。但在机器学习中,错误只是解决方案的一个基本部分。

当业界看到一个错误的分类时,他们自然认为你的方法是错误的。
你必须说服他们,有一个最低的、非零的、不可减少的错误率,他们必须接受并忍受。

我们发现,有助于解决这个问题的方法是用机会成本而不是错误率来衡量。
你每次犯错会花费多少钱,而有了这个额外的ML-powered功能,你会赚多少钱?这值得吗?

在这种情况下,是行业必须控制其期望值,而你作为项目负责人的工作就是要传达这种心态。
对预期要诚实。不要过度承诺。

总结
根据我的经验,与行业合作,特别是与刚刚开始部署机器学习解决方案的公司合作,对双方来说都是一个巨大的机会,只要双方愿意相互学习。