任何软件项目中最重要的阶段是了解业务问题并创建需求。基于 ML 的软件在这里也不例外。第一步包括对业务问题和需求的彻底研究。这些要求被转化为模型目标和模型输出。需要指定可能的错误和启动的最低成功率。继续研究 AI/ML 解决方案之前,一个最有用的问题是“错误预测的代价有多大?” 回答这个问题将确定 ML 项目的可行性。
工作流分解
整个业务流程的每一个任务都需要分解成它的组成元素,才能看到可以在哪里引入预测(ML模型)。
为了回答“如何实现 AI/ML”这个问题,我们遵循以下步骤:
- 确定可能由 AI/ML 提供支持的具体流程(参见上图)。
- 将该过程分解为任务的有向图。
- 确定哪些任务中人工工作可以被移除,这意味着什么任务可以被预测元素(例如 ML 模型)替换?
- 估计实施 AI/ML 工具以执行每项任务的投资回报率。
- 根据 ROI对每个任务的 AI/ML 实施进行排序。
- 从列表顶部开始,通过完成AI Canvas或Machine Learning Canvas来构建 AI/ML 实施。
人工智能画布或其替代品机器学习画布有助于构建分解过程。它们还有助于准确地阐明预测所需的内容以及我们如何对预测算法产生的错误做出反应。
AI画布
AI Canvas 由 A. Agrawal 等人在《预测机器:人工智能的简单经济学》一书提出。“AI Canvas是一个有助于思考、构建和评估 AI 的工具”。下图提供了此类画布的示例和每个组件的描述:
图源:https://hbr.org/2018/04/a-simple-tool-to-start-making-decisions-with-the-help-of-ai
机器学习画布
AI 画布代表了 ML/AI 实现的高级结构,但在某些时候,我们希望指定 ML 系统的愿景和系统的细节。为了实现这些目标,Louis Dorard建议使用另一种工具,即机器学习画布。此画布构建 ML 项目并帮助指定实现项目的核心需求。最初我们通过回答一个问题来确定目标:“我们希望为预测系统的最终用户实现什么?” 接下来,我们将业务目标连接到 ML 任务。
画布的中心部分是价值主张构建模块,它描述了为客户创造一些价值的产品或服务。通常,我们会回答以下问题:我们试图解决什么问题?为什么它很重要?谁是我们系统的最终用户?ML 项目为最终用户带来什么价值?他们将如何使用您的输出/预测?
剩下的画布分为三大类:学习、预测和评估。学习部分负责指定如何学习 ML 模型。预测部分描述了如何执行预测。最后,评估部分包含 ML 模型和系统评估的方法和指标。以下机器学习画布是Louis Dorard提供的示例:
总的来说,机器学习画布由十个复合块构成,例如价值主张、数据源、预测任务、特征(工程)、离线评估、决策、预测、收集数据、构建模型以及实时评估和监控。这些块中的每一个都专注于未来 ML 应用程序的一个方面:
价值主张
这是整个画布中的关键模块。在这里,我们应该回答三个重要问题:
- 问题是什么?我们服务的目标是什么?我们想为最终用户做什么?
- 为什么它很重要?
- 谁是最终用户?我们可以指定角色吗?
要创建有效的价值主张声明,我们可以使用Geoffrey Moore 的价值定位声明模板:
对于(目标客户)谁(需要或机会),我们的(产品/服务名称)是(产品类别)那个(收益)。
缩小问题的范围对于下一个关于所需数据的问题可能很有用。例如,与其创建通用聊天机器人,不如构建一个有助于安排电话会议的机器人。
数据源
数据对于训练 ML 模型至关重要。在这个模块中,我们阐明了用于 ML 任务的所有可用和可能的数据源。例如,我们可以考虑使用:
- 内部/外部数据库。
- 数据集市、OLAP 多维数据集、数据仓库、OLTP 系统。
- Hadoop集群。
- 用于收集数据的 REST API。
- 静态文件、电子表格。
- 网页抓取。
- 其他 (ML) 系统的输出。
- 开源数据集:有用的公开可用数据集:Kaggle 数据集、Google 的数据集搜索、UCI 存储库、爱数科(iDataScience)和Wikipedia 的机器学习研究数据集列表。
此外,我们应该澄清机器学习应用程序的隐性成本。
- 获得数据存储的成本有多高?
- 我们应该购买外部数据吗?
- 有哪些数据评估工具和流程可用于从其他系统访问数据?
预测任务
在明确了哪些数据可用之后,我们集思广益应该使用哪种类型的机器学习。以下是一些可能阐明 ML 任务的问题示例:
- 有监督学习还是无监督学习?
- 这是异常检测吗?
- 问题是应该采取哪个选项?(推荐)
- 我们需要预测一个连续值吗?(回归)
- 需要预测哪个类别?(分类)
- 我们需要对数据进行分组吗?(聚类)
- 如果是有监督学习,应该采取什么类型的 ML 任务:分类、回归或排序?
- 如果分类,它将是二分类还是多分类任务?
- 预测任务的输入是什么?例如电子邮件文本。
- 预测任务的输出是什么?例如“垃圾邮件”和“正常邮件”。
- 我们的 ML 模型可以假设的复杂程度是多少?例如,我们的模型是其他 ML 模型的组合吗?我们是否采用集成学习?深度学习模型中包含多少隐藏层?
- 上述模型的复杂性成本是多少,例如训练和推理时间?
特征(工程)
由于每个 ML 算法都需要特征形式的输入数据,我们应该明确输入数据应该如何表示。
- 我们如何从原始资源中提取特征?
- 考虑请领域专家参与指定对特定 ML 任务最重要的数据。
线下评估
在执行任何 ML 模型训练之前,我们需要指定和设置方法和指标来在部署之前评估系统。在这里,我们需要指定:
- 证明 ML 模型部署合理的领域特定指标。例如,使用训练和测试数据进行模拟,模型的预测会产生比“传统”方式产生的收入更多的收入吗?
- 应该使用哪些技术评估指标?精度、召回率、F-1分数或者准确性。
- 假阳性和假阴性等模型预测误差是什么意思?
- 我们的测试数据是什么?
- 我们需要多少测试数据才能确信 ML 模型表现良好?
决策
完成 ML 任务、特征工程和评估细节后,接下来是指定:
- 预测如何用于决策?
- 最终用户或系统如何与模型预测交互?例如,如果用户获得产品推荐列表会发生什么?如果传入的电子邮件被归类为“垃圾邮件”会怎样?
- 决策中是否存在隐性成本,例如人为参与?稍后需要此类信息来决定如何部署 ML 模型。
执行预测
此模块包含有关我们何时对新输入进行预测的信息。
- 何时应提供预测?
- 每次用户打开应用程序时都会做出新的预测,例如推荐。
- 应要求作出新的预测。
- 新的预测如期进行。
- 是对每个数据点还是对一批输入数据进行即时预测?
- 模型推理在应用程序中的计算复杂程度如何?
- 是否人机协作进行预测?
收集数据
与做出预测相关,收集数据块收集有关应收集的新数据的信息,以便重新训练 ML 模型。通过这种方式,我们指定了如何防止ML 模型衰减现象。在此模块中要回答的其他问题是:
- 我们如何标注新数据?
- 收集新数据的成本是多少?
- 处理图像、声音或视频等富媒体的成本有多高?
- 手动清理和标记传入数据的循环中是否有人参与?
构建模型
与上一个模块紧密相关,构建模型回答了有关更新 ML 模型的问题,因为不同的 ML 任务需要不同频率的模型重新训练:
- 模型应该多久重新训练一次?
- 例如每小时、每周或每个新数据点。
- 模型再训练的隐性成本是什么?
例如,我们是否使用云资源来执行此类任务?
云厂商的价格政策是什么?
我们应该如何进行硬件成本估算?
常见的云定价计算器有Google Cloud Calculator、Amazon ML 定价、Microsoft Azure Calculator
重新训练模型需要多长时间?
我们如何处理云操作的扩展问题,因为它们可能更复杂且成本更高?
我们是否计划改变技术堆栈?
例如,随着现代人工智能中出现新工具和开发工作流程,我们如何应对技术堆栈的演变?
在线评估和监测
模型部署后,应该评估 ML 模型,在这里我们需要指定模型和业务指标,它们应该相互关联。通常,指标应遵循SMART方法,并且是:具体的、可衡量的、可实现的、相关的和有时限的。
- 我们如何跟踪系统性能?
- 例如 A/B 测试
- 我们如何评估价值创造?
例如,用户在收件箱上花费的时间更少。
此阶段的可交付成果是完成的机器学习画布。填写此画布的努力可能会引发关于ML 软件的真正目标和隐性成本的存在主义讨论。这样的讨论可能会导致决定根本不实施 AI/ML。可能的原因如下:
- 我们的问题的解决方案不能容忍错误的预测。
- 实施 AI/ML 会产生较低的投资回报率。
- 不保证 ML/AI 项目的维护。
另一个问题是何时部署 ML/AI?下图显示了早期与晚期 ML 模型部署的权衡。
进一步阅读
- 机器学习产品的领域驱动设计:https://www.socreatory.com/en/trainings/ddd4ml
- 大多数机器学习项目失败的主要原因是什么?:https://towardsdatascience.com/what-is-the-main-reason-most-ml-projects-fail-515d409a161f
- 人工智能的新业务(以及它与传统软件的不同之处):https://a16z.com/2020/02/16/the-new-business-of-ai-and-how-its-different-from-traditional-software/
https://ml-ops.org/content/phase-zero