Press "Enter" to skip to content

AI流程

Jason Leung on Unsplash

人工智能(AI)仍被视为相对新的领域,因此没有像软件工程体系知识库(SWEBOK)那样的指南或标准。实际上,AI/ML研究生教材并没有提供对AI软件工程过程的清晰和一致的描述。因此,我认为提供AI工程过程或AI过程的完整描述将会有所帮助,这在大多数AI/ML教材中都有描述[5][6]。

85%或更多的AI项目失败[1][2]。

34%的科学家和研究人员承认存在可疑的研究行为[3]。

总体而言,目前关于AI的期刊文章的结果(即使经过同行评审)也是无法重复的。

什么是AI

人工智能(AI)专注于设计和实现能够感知、行为和学习以应对环境的智能系统。

在AI中,代理是指能够执行操作的对象[6]。所有计算机程序都可以被认为是在做某些事情,但计算机代理被期望完成更复杂的任务:自主运行、感知环境、持续一段时间、适应变化并创建和追求目标。事实上,理性代理是指在存在不确定性的情况下采取行动以实现最佳结果或最佳预期结果的代理。

简而言之,AI专注于研究和构建能够根据给定的目标合理行动或做正确事情的代理。事实上,标准模型是以理性代理为基础进行定义的[6]。然而,这个模型存在一些局限性,比如有限理性问题和价值对齐问题,这导致了可证明对人类有益的代理的概念,但标准模型是进行理论分析的良好参考点[6]。

图1:一个代理通过其传感器和执行器与环境交互。Gungor Basa Technology of Me

人们经常会在人工智能和机器学习这两个术语之间产生困惑。如果一个代理在基于先前经验改善其性能,那么它就是在学习。当代理是计算机时,学习过程被称为机器学习(ML)[6, p. 651]。因此,机器学习是人工智能的一个子领域。一些AI系统使用机器学习方法,而一些则不使用[6]。

AI工程是一门专注于开发工具、系统和流程,以在实际环境中应用人工智能的学科,它将系统工程、软件工程和计算机科学的原则结合起来创建AI系统。

模型中心 vs 数据中心

目前有两种互斥的AI/ML方法(模型中心和数据中心)。要么是让数据集驱动模型选择(数据中心),要么不是(模型中心)。我们可以通过使用AutoML或编写自定义测试工具来应用数据中心方法,以评估数据集上的多种算法(例如20-30个),然后选择表现最好的几个算法(例如前3个)进行进一步研究,同时优先选择较简单的算法(奥卡姆剃刀原则)。

因此,只有在所有较简单的算法都表现糟糕的情况下,我们才会选择更复杂的SOTA算法。在研究项目中,我们可能会使用模型中心方法来评估新算法,并将结果与先前在相同的玩具数据集上获得的结果进行比较,假设先前的研究已经为较简单的模型建立了基准。在实际应用中,应该将重点放在数据中心方法上。

AI过程

我们可以定义一个AI工程过程或AI过程(AIP),它可以用来解决几乎任何AI问题[5][6][7][9]:

  1. 定义问题:此步骤包括以下任务:定义范围、价值定义、时间表、治理和与交付物相关的资源。
  2. 选择数据集:此步骤可能需要几小时或几个月,具体取决于项目。为AI/ML项目获取正确可靠的数据集非常关键。
  3. 数据描述:此步骤包括以下任务:描述数据集,包括输入特征和目标特征;包括数据的摘要统计和任何离散或分类特征的计数,包括目标特征。
  4. 数据准备:此步骤包括以下任务:数据预处理、数据清理和探索性数据分析(EDA)。对于图像数据,我们会将图像调整大小为较低的尺寸,例如(299 x 299),以便进行小批量学习,并且也要考虑计算限制。对于文本数据,我们会移除换行符和制表符;去除HTML标签;移除链接;去除空白字符,以及其他可能在我的GitHub存储库中的NLP文本预处理中列出的步骤。
  5. 特征工程:此步骤包括以下任务:量化或分箱;数学变换;缩放和归一化;修改和/或创建新特征。对于图像数据,我们会执行图像增强,这在我的GitHub存储库中的图像增强中有描述。对于文本数据,我们会将文本数据特征转换为向量,并执行分词、词干提取和词形还原等其他可能在我的GitHub存储库中的自然语言处理中描述的步骤。
  6. 设计:此步骤包括以下任务:特征选择、问题分解以及构建和评估模型。我们可以使用AutoML或创建自定义测试工具来构建和评估多种模型,以确定应该选择哪些算法和数据视图进行进一步研究。
  7. 训练:此步骤包括构建模型,可能包括交叉验证。
  8. 评估:此步骤包括在独立测试数据集上评估表现良好的模型,并进行模型选择。
  9. 调优:此步骤涉及对少数表现良好的模型进行算法调优,可能包括评估模型集合以进一步提高准确性。
  10. 最终化:此步骤是通过使用整个数据集进行训练来最终确定选择的模型,并确保最终解决方案符合模型准确性和其他性能指标的原始业务要求。
  11. 部署:模型现在准备好部署了。将ML模型部署到生产环境有两种常见方法:将模型嵌入到Web服务器中或将模型卸载到外部服务中。这两种模型服务方法都有优点和缺点。
  12. 监控:这是后部署阶段,涉及观察模型和流程、使用新数据刷新模型以及在原始问题的上下文中跟踪成功指标。

以下是每个步骤的更多详细信息; 您还可以参考我的LearnAI GitHub存储库中的AI Checklist,Applied ML Checklist,Data Preparation和Feature Engineering。

定义问题

AI项目的第一步是定义问题[6]。用几句话描述以下内容:

  1. 描述要解决的问题。
  2. 描述机器学习可以解决的问题部分。
  3. 描述项目的目标。
  4. 描述模型的目标:分类、预测、检测、翻译等。
  5. 为项目定义损失函数和/或性能和错误指标。

此步骤应包括对相同或非常相似的AI问题进行广泛的文献综述。如果您找不到有关该问题的学术研究,则您真的是在进行研究项目而不是AI项目。请记住,AI不是星际迷航方法的好领域。

PEAS描述

在设计代理程序时,首先要做的步骤之一是指定任务环境,这称为PEAS描述(Performance,Environment,Actuators,Sensors)[6]。简而言之,任务环境 是“问题”,而合理的代理程序是“解决方案”。

机器人吸尘器的PEAS描述

考虑一个简单的机器人吸尘器的经典玩具例子。

  • 性能度量是什么?清洁度、效率:清洁所需的行驶距离、电池寿命、安全性
  • 关于环境的已知信息是什么?房间、桌子、木地板、地毯、不同的障碍物
  • 代理程序具有哪些执行器?车轮、不同的刷子、吸尘器
  • 代理程序具有哪些传感器?相机、污垢检测传感器、悬崖传感器、碰撞传感器、红外墙传感器

此外,我们可以定义七个维度来对任务环境进行分类[6][18]:

  • 完全可观察 vs. 部分可观察
  • 单个代理程序 vs. 多个代理程序
  • 确定性 vs. 非确定性
  • 片段性 vs. 顺序性
  • 静态 vs. 动态
  • 离散 vs. 连续
  • 已知 vs. 未知

在将问题分解为部分(子问题)之后,可能有多个组件可以使用传统软件工程来处理,而不是使用机器学习。我们可以开发整体系统,然后再回过头来进行优化,用更复杂的机器学习模型替换一些组件。

问题制定的一部分是决定我们是在处理监督学习、无监督学习还是强化学习。然而,区别并不总是那么明确。

数据准备

数据准备阶段实际上涉及三个可能重叠的步骤。

  1. 数据预处理:格式调整、纠正变量中的不一致性、处理变量中的错误。
  2. 探索性数据分析和可视化:检查数据是否服从正态分布或重尾分布;检查是否存在异常值;检查数据聚类是否有助于分析;检查是否存在不平衡数据。
  3. 数据清理:检查数据类型;处理缺失或无效值;处理异常值;处理分类值;编码类标签;解析日期;字符编码;处理不平衡数据。

数据预处理

先拆分后归一化,这意味着我们应该首先进行训练集和测试集的拆分,然后归一化数据集。

格式调整

  • 删除前导和尾随空格
  • 标准化类型(十进制分隔符、日期格式或测量单位)
  • 替换无法识别或损坏的字符
  • 检查截断条目(数据条目在某个位置被截断)

纠正不一致性处理变量中的错误

  • 检查无效值(年龄为200或负值)
  • 检查分类数据中的错误类别(相似产品不应该放在不同的类别中)

处理变量中的错误。

  • 高基数:分类数据中不同标签的数量非常高,这导致模型学习困难。
  • 异常值:可能是由于错误而产生的极端情况,但并非每种情况都是如此。

如何选择AI模型

每个新的AI工程师都会发现,他们需要决定在面对问题时使用哪种模型。有许多模型可供选择,但通常只需要稍作修改即可将回归模型转换为分类模型,反之亦然。

首先,记住采用以数据为中心的方法,避免问“我应该使用哪种模型”。因此,AI/ML过程的第一步是执行EDA以了解模型的特性,例如均衡(分类)或高斯(回归)。

模型选择有两种方法:以数据为中心和以模型为中心。要么你让数据驱动模型选择(以模型为中心),要么你不让数据驱动模型选择(以模型为中心)。

以模型为中心的方法基本上是将模型应用于数据集,并希望某些模型能够奏效。类似于将博洛尼香肠扔向墙壁,以模型为中心的方法是一种不科学的方法,成功的概率很低。

解决AI问题的第二步是尝试简单的算法(如线性回归或逻辑回归)作为基准模型,然后用它们来评估你的模型选择,你的选择应该比所有基准模型表现更好。

有许多可以选择的模型,所以考虑从分类/回归模型开始,可以使用scikit-learn轻松完成。

在使用神经网络之前尝试的10个简单事情

接下来,最佳实践是使用自动机器学习工具(如Orange、PyCaret或AutoGluon)评估许多算法(例如10-20个),并根据准确性和错误度量缩小选择范围。然后,创建一个测试工具箱[10]来全面探索候选模型。

通常,在尝试评估更复杂的模型(如神经网络)之前,你应该评估了许多模型。在数学、工程和其他领域中,也使用类似的方法来评估和比较算法。

经验法则是深度学习模型应该是你的最后选择(奥卡姆剃刀原则)。

请记住,50%的准确率等同于随机猜测(抛硬币)。因此,你的模型在超参数调优之前应该至少具有80-90%或更高的准确率。否则,你需要选择其他模型和/或在数据准备和特征工程上花更多时间。

有关AI工程过程的更详细讨论,请参阅[5][6]。

实验设计

机器学习的目标是进行实验并分析结果,以消除偶然因素的影响,并得出我们可以认为是统计显著的结论[5]。

因此,我们希望找到具有最高泛化准确性和最小复杂性(实现在时间和空间上便宜)的学习器,并且具有鲁棒性(不受外部变异源的影响)[5]。

实验设计有三个基本原则[5]:

  1. 随机化要求以随机确定的顺序进行运行,以使结果独立。然而,在软件实验中通常不会出现该问题。
  2. 复制意味着对于相同的(可控)因素配置,实验应该运行多次,以平均不可控因素的影响。

在机器学习中,复制通常通过在同一数据集的多个重采样版本上运行相同的算法来完成,这称为交叉验证。

3. 阻塞用于减少或消除由影响响应但我们不感兴趣的干扰因素引起的变异性。

当我们比较学习算法时,我们需要确保所有算法都使用相同的重采样数据子集。因此,复制运行中的不同训练集应该是相同的,这就是我们所说的阻塞[7]。在统计学中,如果存在两个总体,这种方法称为配对,用于配对测试。

模型选择过程

在模型选择中,我们关注有关学习算法的两个问题[5]:

  1. 如何评估学习算法在问题上的预期错误?
  2. 如何判断一个模型在给定应用中的错误较少?

训练集上的错误率始终低于(按定义)在训练期间未见实例的测试集上的错误率。因此,我们不能根据训练集错误来选择算法。因此,我们需要一个与训练集不同的验证集

我们还需要对验证集进行多次运行,以计算平均错误率,因为噪声、异常值和其他随机因素会影响泛化。然后,我们基于这些验证错误的分布来评估学习算法在给定问题上的预期错误,或将其与另一个学习算法的错误率分布进行比较。

在模型选择过程中,有几个重要的要点需要记住[5]:

1. 我们从分析中得出的任何结论都是基于给定的数据集。

正如无免费午餐定理所述,没有最佳的学习算法。对于任何学习算法,都存在一组数据集,它在其中非常准确,而在另一组数据集中非常糟糕。

2. 将给定数据集划分为多个训练集和验证集对仅用于测试目的。

一旦所有测试完成,并且我们已经根据最终的方法或超参数做出了决策,我们可以使用之前用于训练或验证的所有标记数据来训练最终的学习器,这被称为最终化模型。

3. 由于我们还将验证集用于测试目的(例如选择两个学习算法中的更好算法或决定何时停止学习),它成为我们使用的数据的一部分。

因此,在给定数据集的情况下,我们应该首先将一部分数据保留为测试集,然后使用其余数据进行训练和验证。

4. 通常,我们通过错误率来比较学习算法,但应该记住,在现实生活中,错误只是影响我们决策的标准之一。

比较学习算法的一些其他标准[5]:

  • 使用损失函数推广错误时的风险,而不是0/1损失
  • 训练时间和空间复杂性
  • 测试时间和空间复杂性
  • 可解释性,即方法是否允许知识提取,并可由专家进行检查和验证
  • 易于编程

然而,这些因素的相对重要性会根据应用的不同而变化。

当我们使用训练集在验证集上测试学习器的准确性并试图得出结论时,我们正在进行实验。统计学定义了一种正确设计实验和以一种能够提取重要结论的方式分析收集的数据的方法[5]。

模型选择标准

以下七个标准可帮助选择模型[11]:

1. 可解释性

解释性和模型性能之间存在权衡。

使用更复杂的模型通常会提高性能,但解释起来更困难。

如果不需要向非技术观众解释模型及其输出,可以使用更复杂的模型,例如集成学习器和深度神经网络。

2. 内存内与内存外

考虑数据的大小以及训练所在计算机上的可用RAM量是很重要的。

如果RAM可以处理所有训练数据,可以选择各种机器学习算法。

如果RAM无法处理训练数据,可以尝试逐步添加更多训练数据来改进模型的增量学习算法。

3. 特征和示例的数量

训练样本的数量和每个样本的特征数量在模型选择中也很重要。

如果示例和特征较少,可以选择简单的学习器,例如决策树或k近邻。

如果您有少量的例子和大量的特征,那么支持向量机和高斯过程是一个不错的选择,因为它们可以处理大量的特征但需要较少的资源。

如果您有大量的例子,则深度神经网络和提升算法是一个不错的选择,因为它们可以处理数百万个样本和特征。

4. 类别 vs. 数值特征

在选择模型时,特征的类型很重要。

某些机器学习算法无法处理类别特征,例如线性回归,所以您必须将它们转换为数值特征,而其他算法可以处理类别特征,例如决策树和随机森林。

5. 数据的正态性

如果您的数据服从正态分布,可以使用线性核的支持向量机、逻辑回归或线性回归。

如果您的数据不服从正态分布,深度神经网络或集成学习算法是一个不错的选择。

6. 训练速度

选择模型时,训练时间的可用性很重要。

简单的算法,例如逻辑/线性回归或决策树,可以在很短的时间内训练。

复杂的算法,例如神经网络和集成学习算法,训练速度较慢。

如果您可以访问多核机器,这可以显著减少更复杂算法的训练时间。

7. 预测速度

生成结果的速度是选择模型的另一个重要标准。

如果您的模型将在实时或生产环境中使用,它应该能够以非常低的延迟生成结果。

支持向量机、线性/逻辑回归和某些类型的神经网络在预测时非常快速。

您还应考虑部署模型的位置。如果您将模型用于分析或理论目的,预测时间可以更长,这意味着您可以使用集成算法和非常深的神经网络。

为什么选择简单模型

两种最常见的回归算法是:

您应该从这些简单模型开始,因为[12]:

  • 您的问题可能不需要复杂的算法
  • 这两个模型已经得到了深入研究,是机器学习中最为理解的模型之一。
  • 它们易于实施和测试。
  • 它们易于解释,因为它们是线性模型。

将回归问题转化为分类问题有两种常见的解决方案:

实际上,最近我在许多项目中工作,开发人员花费了几周甚至几个月的时间来尝试实现研究论文中最先进的深度学习算法,而结果却是线性回归和/或XGBoost胜过了所有复杂模型(在许多情况下,在测试数据集上达到了95-98%的准确率)。您应该评估多种算法来获得与之比较的基准,以证明您最终选择的模型,因此您应该始终知道简单模型在您的数据集上的表现。

如果您正在进行研究,模型为中心的方法是可以接受的,前提是有人对同一玩具数据集上的各种模型(包括简单模型)进行了广泛的评估。当您使用自定义数据集和/或解决现实世界的问题时,您正在进行AI工程(而不是研究),所以经验法则是奥卡姆剃刀法则(“越简单越好”或“没有最好,只有足够好”)。

多项式逻辑回归

多项式逻辑回归(MLR)是一种用于执行多类分类的分类算法,它是对逻辑回归的扩展,增加了对多类分类问题的支持。

线性回归(多个和奇异)的主要假设是[13]:

  1. 线性性:结果和预测变量之间存在线性关系。
  2. 正态性:残差(通过从实际值中减去预测值计算得到的误差)遵循正态分布。
  3. 齐方差性:因变量的变异对于自变量的所有值都是相等的。

在许多自变量的情况下,我们经常遇到其他问题,例如多重共线性,即被认为是独立的变量彼此变动,并且存在分类变量,例如海洋温度被分类为凉爽、温暖或炎热,而不是以度量方式量化。

这里有一些与MLR [13] 一起工作的提示:

  • 当你的MLR模型变得复杂时,避免试图使用系数来解释结果与各个预测变量之间的变化。
  • 在变化一个预测变量的同时创建预测,并观察预测的变化,并根据这些变化得出结论。

[12]和[13]中提供了一些关于MLR的好教程。

了解AI算法

你需要知道对于给定问题有哪些可用的算法、它们是如何工作的以及如何充分利用它们。然而,这并不意味着你需要从头开始手动编写算法。

即使你是一名经验丰富的AI/ML工程师,你也应该了解你的数据集/问题上简单模型的性能。

以下是一些在模型选择中应考虑的其他主题:

  • 参数化 vs 非参数化算法
  • 监督 vs 无监督算法
  • 偏差-方差权衡
  • 如何诊断/修复过拟合和欠拟合?
  • 如何创建数据管道?
  • 如何处理小数据集?
  • 如何处理不平衡数据集?
  • 异常检测

特征工程工具

特征工程(FE)技术是一个基础的ML主题,但往往被忽视或被误认为简单。

有许多工具可以帮助你自动化整个FE过程,并在短时间内为分类和回归任务生成大量特征。

AutoML工具

自动化机器学习(AutoML)是一个新兴领域,它自动化了构建用于建模数据的机器学习模型的过程。

在《A Beginner’s Guide to End to End Machine Learning》中提供了使用PyCaret的一个很好的完整示例

有大量的AutoML工具和ML工具,例如Orange、AutoGluon和PyCaret,可以用于在数据集上轻松快速评估许多模型。

结论

这里讨论的AI过程可以用于解决几乎任何AI问题,当然需要做一些修改。目前似乎还没有一个明确定义的解决AI问题的方法,因此本文试图从几本教科书和文章中提出一个综合的方法,并讨论一些涉及的问题,如模型选择标准和简单模型,同时为理解AI算法提供一些指导。我计划撰写一些后续文章,使用AI过程提供端到端的示例。我还有一个名为LearnAI的GitHub仓库,一些AI的学生和从业者可能会发现有用。

参考文献

[1] Nedgu BM,“为什么85%的AI项目失败”,Towards Data Science,2020年11月11日。

[2] S. Reisner,“为什么大多数AI实施失败以及企业如何打败失败的机会”,Venture Beat,2021年6月28日。

[3] J. F. DeFranco and J. Voas,“可复制性、制造性和伪造性”,IEEE Computer,第54卷,第12期,2021年。

[4] T. Shin,“为什么你不应该使用机器学习的4个理由”,Towards Data Science,2021年10月5日。

[5] E. Alpaydin,“设计和分析机器学习实验”,在Introduction to Machine Learning,第3版,MIT Press,ISBN: 978–0262028189,2014年。

[6] S. Russell and P. Norvig,“开发机器学习系统”,在Artificial Intelligence: A Modern Approach,第4版,Upper Saddle River, NJ: Prentice Hall,ISBN: 978–0–13–604259–4,2021年。

[7] S. Raschka. and V. Mirjalili,Python Machine Learning,第2版,Packt,ISBN: 978–1787125933,2017年。

[8] W. McKinney,Python for Data Analysis: Data Wrangling with Pandas, NumPy, and IPython,第2版,O’Reilly Media,ISBN: 978–1491957660,2017年。

[9] J. Brownlee,“应用机器学习流程”,Machine Learning Mastery,2014年2月12日。

[10] J. Brownlee,“如何评估机器学习算法”,Machine Learning Mastery,2020年8月16日。

[11] Y. Hosni,“机器学习模型选择简要指南”,MLearning.ai,2021年12月4日。

[12] Z. Warnes 如何选择机器学习模型”,KD Nuggets,2021年8月。

[13] M. LeGro,“解读混淆的多元线性回归结果”,Towards Data Science,2021年9月12日。

[14] J. Brownlee,“用Python进行多项式逻辑回归”,Machine Learning Mastery,2021年1月1日。

[15] W. Xie,“多项式逻辑回归简介”,Data Science Student Society @ UC San Diego,2020年12月8日。

[16] P. Bourque和R. E. Fairley,《软件工程知识体系指南》,第3版,IEEE,2014年。

[17] J. S. Damji和M. Galarnyk,“在生产环境中部署机器学习模型的考虑因素”,Towards Data Science,2021年11月19日。

[18] J. Rodriguez,“评估AI环境的7个维度”,Towards AI,2022年5月17日。

IEEE Dataport

Leave a Reply

Your email address will not be published. Required fields are marked *