机器学习项目规划

规划机器学习项目与规划典型的软件工程项目不同。机器学习项目本质上是非线性的,并且具有不同程度的不确定性。它们需要一种迭代方法和实验性思维。

项目不确定性

早期阶段的规划可能很困难,因为在开始一个项目时,最好的方法通常并不明显。这种固有的不确定性使得估算时间轴变得非常困难。

近期的 Kaggle 竞赛说明了机器学习项目的不确定性。在比赛的前几周内,有 350 支队伍参加了比赛。一些团队将基准预测质量从 35% 提高到了 65%。在接下来的两周内,处理该问题的团队数量从 350 增加到 1400。但是,最佳模型的预测质量只有 68%。

图 3 显示了工作量大幅增加,但模型质量的提升微乎其微,说明了机器学习开发中的不确定性。

图片显示团队数量在两周内从 350 增加到 1, 400,但模型质量仅提高了 3%。

图 3. 在两周内,处理该问题的团队数量增加了 4 倍,但模型的质量几乎没有变化,这凸显了估算机器学习解决方案工作量的难度。

换句话说,超过 1000 个团队(每个团队都在试验各种数据转换、架构和超参数)仅生成了一个预测质量达到 68% 的模型。

行业的一个示例说明了机器学习项目的非线性性,在此类项目中,输出与输入不成比例。两个团队花费了几个月的时间来训练模型,使预测质量达到 90%。然而,几个团队需要五年多的时间才能将模型准备好投入生产环境,并且预测质量达到 99.9%。

这些示例突出表明,可直接用于生产环境的机器学习是一个探索性过程,需要具备科学和工程思维。

实验性方法

在大多数情况下,机器学习开发更类似于进行实验,而不是传统的软件工程。机器学习需要测试不同的特征、尝试多种架构,并恰如其分地调整超参数。根据定义,实验不能保证一定成功。因此,最好使用实验性框架进行规划。

我们来看看典型的软件工程计划,了解它与机器学习项目计划有何不同。

规划软件工程项目

在典型的软件工程计划中,您需要定义要求、概述组件、估算工作量并安排工作。有一条清晰的解决方案路径。例如,工程师通常十分确定他们需要完成哪些任务,才能构建符合设计规范的应用。

当他们预测完成任务所需的时间时,可以根据类似的项目来估算工作。虽然难免会遇到挑战(例如未知的依赖项或更改要求),这可能会使估算有时很困难,但通常可以找到清晰的解决方案。

相比之下,机器学习项目通常没有明确的成功之路。

Planning 机器学习项目

对于大多数机器学习项目,您可以在试错过程中试用多种方法,以找到最佳解决方案。在尝试解决问题之前,您通常无法得知问题的最佳解决方案。例如,最优解决方案的架构可能是简单的线性模型、神经网络,也可能是决策树。只有尝试每种方法,您才会发现最好的解决方案。

这种不明确的情况使规划变得困难重重。如前所述,预测机器学习项目所需的工作量非常困难。只有尝试解决问题,您才能更好地了解解决方案可能需要多少时间和资源。

以下是规划机器学习工作的推荐策略:

  • 为作业设置时间框。设置明确的时间范围来完成任务或尝试特定的解决方案。例如,您可以分配两周的时间来确定是否可以访问适当类型的数据。如果您可以获得数据,则可以再指定两周时间,看看简单的模型是否表明机器学习解决方案是否可行。如果简单的模型失败,您可以再指定两周时间来试用神经网络。在每个时间范围结束时,您将获得更多信息,可以确定继续为问题应用资源是否值得。

  • 缩小项目要求的范围。如果机器学习解决方案看起来前景广阔,但对您的产品或服务而言并不是关键功能,请限制其要求。例如,在规划下一季度的工作时,您可以计划尝试一个非常简单的解决方案。然后,在随后几个季度中,您可以计划反复改进该解决方案。通过在较长的时间范围内逐步改进来实现机器学习解决方案,许多团队最终得出了富有影响力的机器学习解决方案。

  • 实习生或 Google 新员工项目。指导和指导实习生或 Google 新员工尝试机器学习解决方案可能是开始探索结果未知的新空间的好方法。项目结束后,您将更好地了解机器学习解决方案需要的工作量以及潜在的有前景的方法,或者是否应将资源放在其他地方。

无论采用何种策略,快速失败都是明智之举。先尝试成本最低但回报可能最高的方法。如果方法有效,那么您已找到很好的解决方案。否则,您就没有浪费大量的时间和资源。

随着团队积累经验并接触实验,他们将能够更好地估算实验可能需要的工作量,从而使规划更具可预测性。不过,实验结果几乎总是未知的,因此找到最佳解决方案所需的实验数量无法预先估算。

以实验思维方式规划方法有助于您的团队为成功做好准备。当某种方法进入死胡同时,团队成员不会感到沮丧,而是知道这是寻找机器学习解决方案过程的一部分。更重要的是,通过与利益相关方讨论机器学习开发中存在的内在不确定性,您可以设定更切合实际的预期。

注意事项

学习规划多种机器学习方法或许需要时间和经验。您的项目计划可能需要频繁更新。当您的团队尝试采用多种方法时,您可以将其视作一个不断演变的动态文档。通过重点关注以下关键理念,您将提高成功几率:

  • 估算每种方法的费用和成功几率。
  • 尝试一系列方法。
  • 吸取经验教训,然后尝试一次改进系统。
  • 针对失败进行规划。

有时,提早的方法就能带来突破。有人可能会在数据生成流水线或训练-验证拆分中发现 bug。通过精心的规划和全面的文档,您可以提高发现一个比预期更快解决业务问题的模型的可能性。