机器学习解决方案架构手册第二版(三)
原文:
annas-archive.org/md5/0af95f3eb3657d22b97e00830e661a6d译者:飞龙
第十章:高级机器学习工程
恭喜你走到了这里!到目前为止,你应该已经对机器学习解决方案架构师在操作整个机器学习生命周期中所需的核心基本技能有了很好的理解。在本章中,我们将深入探讨高级机器学习概念。我们的重点是探索为大型模型和大数据集进行分布式模型训练的各种选项。随着所有大规模模型训练(如 GPT)都需要分布式训练架构,理解分布式训练的概念和技术变得越来越重要。此外,我们还将深入研究旨在优化模型推理延迟的多种技术方法。随着模型尺寸的增大,掌握如何优化模型以实现低延迟推理成为机器学习工程中的一项基本技能。最后,我们将通过一个关于分布式模型训练的动手实验室来结束本章。
具体来说,本章将涵盖以下主题:
-
使用分布式训练训练大规模模型
-
实现低延迟模型推理
-
动手实验室 – 使用 PyTorch 运行分布式模型训练
技术要求
你需要访问你的 AWS 环境来完成本章的动手部分。所有代码示例都位于github.com/PacktPublishing/The-Machine-Learning-Solutions-Architect-and-Risk-Management-Handbook-Second-Edition/tree/main/Chapter10。
使用分布式训练训练大规模模型
随着机器学习算法变得越来越复杂,可用的训练数据量呈指数级增长,模型训练时间已成为一个主要瓶颈。考虑到内存、时间和延迟的限制,在大型数据集或像大型语言模型这样的大型模型上进行单设备训练越来越不切实际。例如,最先进的语言模型参数量从十年前的数百万迅速增长到今天的数百亿。以下图表展示了近年来语言模型的发展情况:
图 10.1:语言模型的发展
为了克服计算挑战,分布式训练技术已成为通过在云中的 GPU 或 TPU 集群之间并行计算来加速模型开发的关键。通过在设备和节点之间分片数据和模型,分布式训练能够扩展计算以在合理的时间内训练现代大规模模型和数据量。分布式训练主要有两种类型:数据并行和模型并行。在我们深入了解分布式训练的细节之前,让我们快速回顾一下神经网络是如何训练的:
图 10.2:深度神经网络训练
前面的图示展示了人工神经网络(ANN)的训练过程。训练数据通过正向传递被输入到 ANN 中。在正向传递结束时,计算损失(预测值与真实值之间的差异),然后反向传递计算所有参数的梯度。这些参数通过新的值进行更新,直到损失最小化。在接下来的章节中,我们将探讨使用数据并行和模型并行进行分布式模型训练,这两种方法用于扩展模型训练以适应大型训练数据集和大型模型尺寸。
使用数据并行进行分布式模型训练
数据并行分布式训练方法将大型训练数据集划分为更小的子集,并在不同的设备上同时训练每个子集。这种并行化允许多个训练过程在可用的计算资源上同时运行,从而加速整体训练时间。为了利用数据并行训练,所使用的机器学习框架和算法需要支持分布式训练。例如,TensorFlow 和 PyTorch 都提供了用于数据并行训练的模块和库。
如我们之前讨论的,训练深度学习(DL)模型的一个关键任务是计算关于损失函数的梯度,针对数据中的每一批数据,然后使用梯度信息更新模型参数,以逐步最小化损失。而不是在单个设备上运行梯度计算和参数更新,数据并行分布式训练的基本概念是并行运行多个训练过程,使用相同的算法,每个过程使用训练数据集的不同子集。以下图示展示了训练中数据并行的基本概念:
图 10.3:数据并行概念
如您所见,在分布式数据并行训练作业中,集群中有三个节点参与,每个节点有两个设备。每个设备计算出的局部梯度由节点上每个设备的 w0 ~ w5 表示,而 W 是模型的全局参数值。具体来说,数据并行分布式训练有以下几个主要步骤:
-
每个节点上的每个设备(CPU 或 GPU)都加载了相同的算法和训练数据的一个子集。
-
每个设备运行一个训练循环来计算梯度(w0~w5),以优化其损失函数,并在每个训练步骤与其他设备在集群中交换梯度。
-
将所有设备的梯度汇总,并使用这些汇总梯度计算公共模型参数(W)。
-
每个设备拉取新计算出的公共模型参数(W),并继续进行模型训练的下一步。
-
步骤 2到4会重复进行,直到模型训练完成。
在分布式训练环境中,高效地在进程间交换梯度和参数是机器学习系统工程设计最重要的方面之一。多年来,已经开发出几种分布式训练拓扑来优化不同训练进程间的通信。在本章中,我们将讨论数据并行分布式训练中最广泛采用的两种拓扑:参数服务器和AllReduce。
参数服务器概述
参数服务器(PS)是基于服务器节点和工作节点概念构建的拓扑。工作节点负责运行训练循环和计算梯度,而服务器节点负责聚合梯度和计算全局共享参数。以下图显示了 PS 的架构:
图 10.4:参数服务器架构
在这里,服务器节点被称为 PS,通常实现为一个键值或向量存储,用于存储梯度和参数。由于要管理的模型参数数量可能非常大,因此也可以有多个服务器节点来管理全局参数和梯度聚合。在多参数服务器配置中,还有一个服务器管理器,它管理和协调所有服务器节点以确保一致性。
在这个架构中,工作节点仅与 PS 节点通信以交换梯度和参数,而不与彼此通信。在多服务器节点环境中,每个服务器节点也会与其他所有服务器节点通信,以复制参数以实现可靠性和可扩展性。梯度和参数的交换是为了同步和异步地实施更新。同步梯度更新策略阻止设备在所有设备的梯度同步完成之前处理下一个小批量数据。这意味着每个更新都必须等待最慢的设备完成。这可能会减慢训练速度,并使训练过程在设备故障方面变得不那么稳健。
优点方面,同步更新不必担心过时的梯度,这可能导致更高的模型精度。虽然异步更新不需要在处理下一个小批量数据之前等待所有设备同步,但这可能会导致精度降低。
这种方法的主要局限性是 PS 可能成为通信瓶颈,尤其是对于具有数十亿或数万亿参数的大型模型。随着模型规模的增加,工作节点和 PS 之间需要传输的数据量显著增加,导致潜在的通信开销和带宽限制。
此外,随着工作节点数量的增加,PS 需要处理越来越多的梯度更新和参数分布,这可能会成为可扩展性的挑战。这种集中式架构可能会限制分布式训练过程的整体吞吐量和效率,尤其是在工作节点数量非常大时。此外,较慢或表现不佳的工作节点可能会减慢整个训练过程,因为 PS 必须等待所有梯度更新完毕后才能更新参数。
在框架中实现 PS
PS 分布式训练被多个深度学习框架原生支持,包括 TensorFlow。具体来说,TensorFlow 通过其ParameterServerStrategy API 原生支持基于 PS 的分布式训练。以下代码示例展示了如何为 TensorFlow 实例化ParameterServerStrategy API:
strategy = tf.distribute.experimental.ParameterServerStrategy(
cluster_resolver)
在此代码示例中,cluster_resolver参数有助于发现和解析工作节点的 IP 地址。
ParameterServerStrategy可以直接与 Keras 的model.fit()函数或通过使用strategy.scope()语法包装模型的自定义训练循环一起使用。以下是如何使用scope()包装模型以进行分布式训练的示例语法:
with strategy.scope()
model = <model architecture definition>
除了在深度学习库中原生支持的 PS 实现之外,还有通用 PS 训练框架,例如来自字节跳动的 BytePS 和来自亚马逊的 Herring,它们可以与不同的深度学习框架协同工作。SageMaker 通过其 SageMaker 分布式训练库使用 Herring 进行数据并行分布式训练。
PS 策略的一个缺点是网络带宽的效率低下。Herring 库通过结合 AWS 弹性织物适配器(EFA)和参数分片技术来解决这一缺点,利用网络带宽实现更快的分布式训练。EFA 利用云资源及其特性,如多路径骨干,以提高网络通信效率。您可以在www.amazon.science/publications/herring-rethinking-the-parameter-server-at-scale-for-the-cloud了解更多关于 Herring 的信息。
AllReduce 概述
虽然 PS 架构易于理解和设置,但它确实带来了一些挑战。例如,PS 架构需要额外的节点来运行 PS,而且很难确定服务器节点和工作节点之间的正确比例,以确保服务器节点不会成为瓶颈。
AllReduce 拓扑试图通过消除服务器节点并将所有梯度聚合和全局参数更新分布到所有工作节点来改进 PS 的一些局限性,因此被称为AllReduce。以下图表显示了 AllReduce 的拓扑结构:
图 10.5:AllReduce 架构
在 AllReduce 拓扑中,每个节点在每个训练步骤将参数的梯度发送到所有其他节点。然后,每个节点本地聚合梯度并执行 reduce 函数(如average、sum或max),在下一个训练步骤中使用这些梯度计算新的参数。由于每个节点都需要与其他每个节点通信,这导致节点之间有大量的通信网络,并且每个节点都需要复制所有梯度,因此需要额外的计算和存储。
环形 AllReduce 是一种更有效的 AllReduce 架构。在这个架构中,每个节点只向其下一个相邻节点发送一些梯度,并且每个节点负责聚合分配给其计算的全局参数的梯度。这种架构大大减少了集群中的网络通信量和计算开销,因此对于模型训练来说更加高效。以下图示展示了环形 AllReduce 架构:
图 10.6:环形 AllReduce
与 PS 方法相比,随着工作节点数量的增加,环形 AllReduce 方法具有更好的可扩展性。由于没有集中的 PS,通信负载在各个工作节点之间分配,减少了潜在的瓶颈。环形 AllReduce 方法还具有更低的通信开销,特别是对于具有数十亿或数万亿参数的大型模型。不是将单个梯度发送到中央服务器,而是将梯度求和并通过环形拓扑传递,从而减少了需要传输的总数据量。
总体而言,环形 AllReduce 方法为大规模分布式训练提供了更好的可扩展性和效率。它将通信负载分配给各个工作节点,减少了潜在的瓶颈和同步开销。然而,PS 方法可能仍然适用于较小规模的分布式训练场景或当容错不是主要关注点时。
在框架中实现 AllReduce 和环形 AllReduce
AllReduce 和环形 AllReduce 架构在多个深度学习框架中原生支持,包括 TensorFlow 和 PyTorch。
TensorFlow 通过其tf.distribute.MirroredStrategy API 支持在单台机器上的多个 GPU 之间进行 AllReduce 分布式训练。使用此策略,每个 GPU 都有一个模型副本,并且所有模型参数都在不同设备之间进行镜像。使用高效的 AllReduce 机制来保持这些参数同步。以下代码示例展示了如何实例化MirroredStrategy API:
strategy = tf.distribute.MirroredStrategy()
对于多机分布式训练,TensorFlow 使用tf.distribute.MultiWorkerMirroredStrategy API。类似于MirroredStrategy,MultiWorkerMirroredStrategy在所有机器的所有设备上创建所有参数的副本,并通过 AllReduce 机制进行同步。以下代码示例展示了如何实例化MultiWorkerMirroredStrategy API:
strategy = tf.distribute.MultiWorkerMirroredStrategy()
类似于ParameterServerStrategy、MirroredStrategy和MultiWorkerMirroredStrategy,它们可以与keras model.fit()函数或自定义训练循环一起工作。要将模型与训练策略关联,您可以使用相同的strategy.scope()语法。
PyTorch 还通过其torch.nn.DataParallel和torch.nn.parallel.DistributedDataParallel API 提供了基于 AllReduce 的分布式训练的原生支持。torch.nn.DataParallel API 支持同一台机器上 GPU 的单进程多线程,而torch.nn.parallel.DistributedDataParallel支持跨 GPU 和机器的多进程。以下代码示例展示了如何使用DistributedDataParallel API 启动分布式训练集群并包装模型以进行分布式训练:
torch.distributed.init_process_group(...)
model = torch.nn.parallel.DistributedDataParallel(model, ...)
另一种通用环 AllReduce 架构的流行实现是Horovod,由 Uber 的工程师创建。Horovod 与多个深度学习框架一起工作,包括 TensorFlow 和 PyTorch。您可以在github.com/horovod/horovod了解更多关于 Horovod 的信息。
使用模型并行进行分布式模型训练
与数据并行相比,模型并行在其采用率上仍然相对较低,因为今天发生的分布式训练大多涉及处理大数据集的数据并行。然而,BERT、GPT 和 T5 等最先进的大规模深度学习算法的应用正在推动模型并行采用率的增加。这些模型的品质已知会随着模型大小的增加而提高,这些大型自然语言处理模型需要大量的内存来存储模型的状态(包括模型的参数、优化器状态和梯度)以及其他开销的内存。
因此,这些模型已经无法适应单个 GPU 的内存。虽然数据并行有助于解决大数据集的挑战,但由于其庞大的内存需求,它无法帮助训练大型模型。模型并行允许您将单个大型模型分割到多个设备上,这样多个设备上的总内存就足以存储模型的一个副本。模型并行还由于多个设备上的更大集体内存而允许模型训练有更大的批量大小。分割模型进行并行分布式训练主要有两种方法:按层分割和按张量分割。接下来,让我们更详细地探讨这两种方法。
原始模型并行概述
由于人工神经网络由许多层组成,一种将模型分割的方法是将层分布到多个设备上。例如,如果你有一个 8 层的多层感知器(MLP)网络和两个 GPU(GPU0 和 GPU1),你可以简单地将前四层放在 GPU0 上,后四层放在 GPU1 上。在训练过程中,模型的前四层会像在单个设备上训练模型一样进行训练。当前四层完成时,第四层的输出将从 GPU0 复制到 GPU1,产生通信开销。在获得 GPU0 的输出后,GPU1 继续训练五到八层。以下图展示了通过层在多个设备上分割模型:
图 10.7:简单模型并行
通过分割实现模型并行需要了解训练任务。设计一个有效的模型并行策略并非易事。以下是一些有助于分割层设计的启发式方法:
-
将相邻层放置在同一设备上以最小化通信开销。
-
在设备之间平衡工作负载。
-
不同的层具有不同的计算和内存利用率特性。
训练人工神经网络模型本质上是一个顺序过程,这意味着网络层是顺序处理的,而反向过程只有在正向过程完成后才会开始。当你将层分割到多个设备上时,只有当前处理其上层的设备会忙碌;其他设备将处于空闲状态,浪费计算资源,这导致硬件资源的浪费。
以下图展示了对于一批数据的前向和反向传递的序列处理:
图 10.8:简单模型并行
在前面的图中,F0、F1 和 F2 是每个设备上不同神经网络层的正向传递。B2、B1 和 B0 是每个设备上层的反向传递。正如你所见,当一个设备忙于正向传递或反向传递时,其他设备处于空闲状态。
简单模型并行具有实现简单的优点,并且适用于具有大量层的模型。然而,由于层执行的顺序性,它面临着可扩展性的挑战。此外,如果层有不同的计算需求,它可能会遇到潜在的负载不均衡问题。
接下来,让我们看看一种可以增加资源利用率的解决方案(管道模型并行)。
管道模型并行概述
为了解决资源闲置问题,可以实现管道模型并行性。这改进了简单的模型并行性,使得不同的设备可以在更小的数据批次(通常称为微批次)的不同训练管道阶段上并行工作。以下图表展示了管道模型并行性的工作原理:
图 10.9:管道模型并行性
使用管道模型并行性,不是通过每个完整的正向和反向传递处理一个数据批次,而是将这个数据批次分解成更小的迷你批次。在前面的图表中,设备 0完成第一个迷你批次的前向传递后,设备 1可以开始对设备 1前向传递的输出进行前向传递。而不是等待设备 1和设备 2完成它们的前向和反向传递,设备 0开始处理下一个迷你批次的数据。这个预定的管道允许更高效地利用硬件资源,从而加快模型训练。
管道并行性还有其他变体。一个例子是交错并行性,其中在可能的情况下优先执行反向执行。这提高了设备在端到端模型训练中的利用率。以下图表展示了交错管道的工作原理:
图 10.10:交错管道
管道模型并行性已在各种框架和产品中得到实现,例如 SageMaker 分布式训练库和 DeepSpeed 分布式训练框架,我们将在后面的章节中更详细地介绍。
接下来,让我们看一下张量并行性的概述,也称为张量切片。
张量并行性/张量切片概述
如我们之前提到的,张量并行性是将大型模型分割以适应内存的另一种方法。在我们深入探讨之前,让我们快速回顾一下什么是张量以及它是如何被人工神经网络处理的。
张量是一个单数据类型的多维矩阵,例如 32 位浮点数或 8 位整数。在神经网络训练的前向传递中,输入张量和权重矩阵张量(输入张量与隐藏层中的神经元之间的连接)使用点积。您可以在en.wikipedia.org/wiki/Dot_product了解更多关于点积的信息。
以下图表展示了输入向量和权重矩阵之间的点积:
图 10.11:矩阵计算
在这个矩阵计算中,你得到一个输出向量**[5,11,17]**。如果只有一个设备用于点积计算,将依次进行三个单独的计算以获得输出向量。
但如果我们把单个权重矩阵拆分成三个向量,并分别使用点积呢?这可以在以下图中看到:
图 10.12:分割矩阵计算
如您所见,您将得到三个单独的值,这些值与前面图中输出向量中的单个值相同。如果有三个单独的设备用于执行点积计算,我们可以在需要时并行执行这三个点积计算,并将值组合成一个向量。这是张量并行基本工作原理。使用张量并行,每个设备独立工作,直到需要同步结果时才需要通信。这种策略允许更快的张量处理,因为多个设备可以并行工作以减少训练时间并提高计算设备的利用率。
实现模型并行训练
要实现模型并行,你可以通过决定如何在不同设备和节点上分割层和张量以及它们的放置来手动设计并行策略。然而,这样做并不简单,尤其是在大型集群中。为了使模型并行实现更容易,已经开发了几个模型并行库包。在本节中,我们将更详细地探讨一些这些库。请注意,我们将讨论的框架可以支持数据并行和模型并行,并且这两种技术通常一起使用来训练具有大量训练数据集的大型模型。
Megatron-LM
Megatron-LM 是由 Nvidia 开发的开源分布式训练框架。它支持数据并行、张量并行和流水线模型并行,以及所有三种技术的组合,用于极端规模模型训练。
Megatron-LM 实现了基于微批次的流水线模型并行来提高设备利用率。它还实现了周期性流水线刷新,以确保优化器步骤在设备之间同步。Megatron-LM 支持两种不同的流水线调度,如下所示:
-
默认调度通过首先完成所有微批次的正向传递,然后再开始所有批次的反向传递来工作。
-
交错阶段调度通过在单个设备上运行多个不同的层子集来工作,而不是运行单个连续的层集。这可以进一步提高设备的利用率并减少空闲时间。
Megatron-LM 为基于变换器的模型实现了一种特定的张量并行策略。变换器主要由自注意力块组成,后面跟着一个两层 MLP。对于 MLP 部分,Megatron-LM 按列分割权重矩阵。自注意力头的矩阵也按列分割。以下图表显示了变换器的不同部分如何分割:
图 10.13:变换器的张量并行
使用数据并行、流水线模型并行和张量并行结合,Megatron-LM 可以用于训练极其大的基于变换器的模型(具有万亿参数),并扩展到数千个 GPU 上。
使用 Megatron-LM 训练涉及以下关键步骤:
-
使用
initialize_megatron()函数初始化 Megatron 库。 -
使用
setup_model_and_optimizer()函数通过包装原始模型来设置 Megatron 模型优化器。 -
使用
train()函数训练模型,该函数以 Megatron 模型和优化器作为输入。
Megatron-LM 已被用于许多大型模型训练项目,如 BERT、GPT 和生物医学领域语言模型。其可扩展的架构可用于训练具有万亿参数的模型。
DeepSpeed
DeepSpeed 是由微软开发的开源分布式训练框架。类似于 Megatron-LM,DeepSpeed 也支持张量切片(张量分割的另一种称呼)并行、流水线并行和数据并行。
DeepSpeed 实现了基于微批次的流水线模型并行,其中将批次拆分为微批次,由不同的设备并行处理。具体来说,DeepSpeed 实现了交错流水线并行以优化资源效率和利用率。类似于 Megatron-LM,DeepSpeed 可以结合使用数据并行、流水线模型并行和张量并行来训练极其大的深度神经网络。这被称为 DeepSpeed 3D 并行。
DeepSpeed 框架的一个核心能力是其 零冗余优化器(ZeRO)。ZeRO 通过在设备间分割参数、优化器状态和梯度来有效地管理内存,而不是在所有设备上保留副本。当需要时,在运行时将分区合并在一起。这使得 ZeRO 相比常规数据并行技术可以减少八倍的内存占用。ZeRO 还能够结合使用 CPU 和 GPU 内存来训练大型模型。
基于注意力的机制在深度学习模型中得到了广泛应用,例如 transformer 模型,用于处理文本和图像输入。然而,由于其大内存和计算需求,它处理长输入序列的能力有限。DeepSpeed 通过其实施稀疏注意力内核来帮助缓解这个问题——这是一种通过块稀疏计算减少注意力计算的计算和内存需求的技术。
在大规模分布式训练中,一个主要瓶颈是由于梯度共享和更新导致的通信开销。通信压缩,如 1-bit 压缩,已被采用作为一种有效的机制来减少通信开销。DeepSpeed 实现了一个 1-bit Adam 优化器,可以将通信开销减少多达五倍,从而提高训练速度。1-bit 压缩通过使用 1 位表示每个数字,并结合误差补偿来实现,误差补偿在梯度压缩期间记住误差,并在下一步中将误差添加回去以补偿误差。
要使用 DeepSpeed,您需要修改您的训练脚本。以下步骤解释了您需要对训练脚本进行的主要更改以运行分布式训练:
-
使用
deepspeed.initialize()函数包装模型并返回一个 DeepSpeed 模型引擎。这个模型引擎将用于执行正向传递和反向传递。 -
使用返回的 DeepSpeed 模型引擎来运行正向传递、反向传递,并使用步进函数更新模型参数。
DeepSpeed 主要支持 PyTorch 框架,并需要少量代码更改以采用 PyTorch 的模型训练。DeepSpeed 已被用于训练具有数百亿参数的模型,并实现了最快的模型训练时间之一。您可以在 www.deepspeed.ai 上了解更多关于 DeepSpeed 的信息。
SageMaker 分布式训练库
亚马逊的 SageMaker 分布式训练(SMD)库是 Amazon SageMaker 服务的一部分。SMD 支持数据并行(通过底层使用 Herring)和交错管道模型并行。与 DeepSpeed 和 Megatron-LM 不同,您需要手动决定模型分区,SageMaker 模型并行(SMP)具有自动模型拆分支持的功能。
SMP 的这种自动模型拆分功能通过平衡设备间的内存和通信约束来优化性能。自动模型拆分发生在第一次训练步骤中,此时在 CPU 内存中构建模型的一个版本。分析图结构,做出分区决策,并将不同的模型分区加载到不同的 GPU 上。分区软件为 TensorFlow 和 PyTorch 执行框架特定的分析,以确定分区决策。它考虑了诸如变量/参数共享、参数大小和约束等图结构,以平衡每个设备上的变量数量和操作数量,从而得出拆分决策。
要使用 SMD 库,您需要对现有的训练脚本进行一些修改并创建 SageMaker 训练作业。TensorFlow 和 PyTorch 有不同的说明。以下是对 PyTorch 框架的示例:
-
修改 PyTorch 训练脚本:
-
调用
smp.init()来初始化库。 -
使用
smp.DistributedModel()包装模型。 -
使用
smp.DistributedOptimizer()包装优化器。 -
通过
torch.cuda.set_device(smp.local_rank())限制每个进程使用其自己的设备。 -
使用包装后的模型执行正向传递和反向传递。
-
使用分布式优化器更新参数。
-
-
使用 SageMaker PyTorch Estimator 创建 SageMaker 训练作业并启用 SMP 分布式训练。
FairScale
FairScale 是由 Facebook AI Research (FAIR) 开发的一种分布式训练框架。它建立在流行的 PyTorch 深度学习库之上,并提供了一套用于高效分布式训练的实用工具和 API。
FairScale 支持各种分布式训练范式,包括数据并行、模型并行以及两者的结合。FairScale 提供了这些技术的有效实现,以及减少通信开销和提高可扩展性的优化和技巧。
FairScale 的一个关键特性是支持各种模型并行策略,例如张量并行、流水线并行和混合并行。这些策略允许用户以不同的方式将大型模型分布到多个加速器上,从而实现硬件资源的有效利用和大规模模型的更好扩展。
除了分布式训练功能外,FairScale 还提供优化内存使用的工具,如激活检查点、梯度检查点和混合精度训练。这些技术有助于减少大型模型的内存占用,使用户能够训练那些否则会超出单个设备可用内存的模型。
FairScale 被设计成用户友好且易于集成到现有的 PyTorch 代码库中。它提供了一个高级 API,抽象掉了分布式训练的许多复杂性,使用户能够专注于模型开发和实验,而不是低级实现细节。要使用 FairScale,您只需使用pip install fairscale安装包,并在训练脚本中使用import fairscale导入库。然后,您可以使用其各种支持的功能进行分布式数据和模型并行训练。
尽管分布式模型训练使我们能够训练极其大的模型,但由于模型的大小和其他技术限制,在这些大型模型上运行推理可能会导致高延迟。接下来,让我们探讨我们可以使用的各种技术,以实现低延迟推理。
实现低延迟模型推理
随着机器学习模型持续增长并部署到不同的硬件设备上,对于需要低延迟和高吞吐量推理的某些推理用例,如实时欺诈检测,延迟可能成为一个问题。
为了降低实时应用的总体模型推理延迟,我们可以使用不同的优化考虑和技巧,包括模型优化、图优化、硬件加速和推理引擎优化。
在本节中,我们将重点关注模型优化、图优化和硬件优化。在我们深入探讨这些各种主题之前,让我们首先了解模型推理的工作原理,特别是对于深度学习模型,因为大多数推理优化过程都集中在这一点上。
模型推理的工作原理和优化机会
如我们在本书中之前讨论的那样,深度学习模型是由节点和边构成的计算图,其中节点代表不同的操作,边代表数据流。这类操作的例子包括加法、矩阵乘法、激活(例如 Sigmoid 和 ReLU)以及池化。这些操作在张量上执行计算,并产生张量作为输出。例如,*c=matmul(a,b)*操作将输入张量*a*和*b*作为输入,并产生输出张量*c*。深度学习框架,如 TensorFlow 和 PyTorch,内置了支持不同操作的算子。算子的实现也称为内核。
在训练模型的推理时间期间,深度学习框架的运行时会遍历计算图并调用图中每个节点的适当内核(如加法或 Sigmoid)。内核将从前面的操作符获取各种输入,例如推理数据样本、学习到的模型参数和中间输出,并根据计算图定义的数据流执行特定计算,以产生最终的预测。训练模型的大小主要取决于图中节点的数量,以及模型参数的数量和它们的数值精度(例如,浮点 32、浮点 16 或整数 8)。
不同的硬件供应商,如 Nvidia 和 Intel,也提供了针对常见计算图操作的硬件特定内核实现。cuDNN 是 Nvidia 为其 GPU 设备提供的优化内核实现库,而 MKL-DNN 是 Intel 为其 Intel 芯片提供的优化内核实现库。这些硬件特定实现利用了底层硬件架构的独特能力。它们的表现可以优于由深度学习框架实现实现的内核,因为框架实现是硬件无关的。
现在我们已经了解了推理的工作原理,让我们来探讨一些常见的优化技术,这些技术可以帮助我们提高模型延迟。
硬件加速
不同的硬件为不同的机器学习模型产生不同的推理延迟性能。常见的用于模型推理的硬件列表包括 CPU、GPU、专用集成电路(ASIC)、现场可编程门阵列(FPGA)和边缘硬件(如 Nvidia Jetson Nano)。在本节中,我们将回顾一些这些硬件的核心架构特性以及它们的设计如何帮助加速模型推理。值得注意的是,尽管本节侧重于推理,但一些硬件也适用于训练加速。
中央处理单元(CPUs)
CPU 是用于运行计算机程序的一般用途芯片。它由四个主要构建块组成:
-
控制单元是 CPU 的大脑,它指导 CPU 的操作;也就是说,它指导其他组件,如内存。
-
算术逻辑单元(ALU)是执行算术和逻辑运算的基本单元,例如加法和减法。
-
地址生成单元用于计算访问内存的地址。
-
内存管理,用于所有内存组件,如主存储器和本地缓存。CPU 也可以由多个核心组成,每个核心都有一个控制单元和 ALU。
CPU 中并行执行的程度主要取决于它有多少核心。每个核心通常一次运行一个线程,除了英特尔的超线程(一种专有的同时多线程实现)。核心越多,并行执行的级别就越高。CPU 被设计用来处理大量指令并管理许多其他组件的操作;它通常具有高性能和复杂的内核,但数量并不多。例如,英特尔至强处理器可以达到 56 核心。
如果低延迟是主要要求,CPU 通常不适合基于神经网络的模型推理。神经网络推理主要涉及可以大规模并行化的操作(例如,矩阵乘法)。由于 CPU 的总核心数通常较小,因此无法进行大规模并行化以满足神经网络推理的需求。从积极的一面来看,CPU 更具成本效益,并且通常具有良好的内存容量,可以容纳更大的模型。
图形处理单元(GPU)
GPU 的设计与 CPU 的设计相反。它不是拥有几个强大的核心,而是拥有成千上万个较不强大的核心,这些核心被设计成高效执行一小组指令。GPU 核心的基本设计类似于 CPU。它也包含一个控制单元、ALU 和一个局部内存缓存。然而,GPU 控制单元处理的指令集要简单得多,而局部内存也小得多。
当 GPU 处理指令时,它会调度线程块,并且在每个线程块内部,所有线程执行相同的操作,但针对不同的数据——这是一种称为单指令多数据(SIMD)的并行化方案。这种架构非常适合深度学习模型的工作方式,其中许多神经元对不同的数据进行相同的操作(主要是矩阵乘法)。
英伟达 GPU 架构包含两个主要组件:
-
全局内存组件
-
流式多处理器(SM)组件
一个 SM 类似于 CPU,每个 SM 拥有许多统一计算设备架构(CUDA)核心,这些是执行不同算术运算的特殊功能单元。它还包含一个小型的共享内存和缓存,以及许多寄存器。CUDA 核心负责诸如浮点/整数运算、逻辑计算和分支等函数。之前提到的线程块是由 SM 执行的。全局内存位于同一 GPU 板上。当你训练一个机器学习模型时,模型和数据都需要加载到全局内存中。
在多 GPU 配置中,有低延迟和高吞吐量的通信通道可用,例如 Nvidia NVLink。由于 GPU 拥有大量的 CUDA 核心,非常适合进行低延迟和高吞吐量的神经网络模型推理。
在撰写本文时,最新的 Nvidia GPU 代号为 Blackwell B200 GPU。它由 2080 亿个晶体管组成,其 NVLink 交换系统允许在多个服务器之间以 1.8TB/s 的速度进行多 GPU 通信。对于大规模分布式训练,一组 576 个 B200 GPU 可以协同工作。B200 的另一个显著特点是它的第二代 Transformer Engine,该引擎旨在加速 Transformer 的训练。
专用集成电路
专用集成电路(ASIC)是 GPU 的主要替代品。ASIC 芯片是为特定深度学习架构专门设计的,用于计算和数据流,因此比 GPU 更快,功耗更低。例如,Google 的张量处理单元(TPU)拥有专为高效矩阵计算设计的专用矩阵单元(MXUs),AWS 提供 Inferentia 芯片,这是一款专为模型推理设计的 ASIC。为了加快模型推理,亚马逊 Inferentia 芯片和谷歌的 TPU 芯片都使用收缩阵列机制来加速深度神经网络的算术计算。虽然通用芯片如 CPU 和 GPU 使用不同 ALU 计算之间的本地寄存器来传输数据和结果,但收缩阵列允许你将多个 ALU 链接起来,以减少寄存器访问次数,从而加快处理速度。以下图表显示了收缩阵列架构与在 CPU 和 GPU 中使用的常规架构之间的数据流:
图 10.14:收缩阵列处理与 CPU/GPU 处理对比
亚马逊 Inferentia 芯片可以直接与 Amazon SageMaker 配合使用,以降低延迟进行推理。你可以通过选择支持的 Inferentia 芯片之一来部署模型。
虽然它不直接适用于推理,但值得一提的是,AWS 还提供了 AWS Trainium 加速器,这是一款专为训练大型深度学习模型而设计的专用芯片。每个 Trainium 加速器包含 2 个 NeuronCore 核心。每个核心都是一个独立的计算引擎,具有 4 个主要引擎:TensorEngine、VectorEngine、ScalarEngine 和 GPSIMD-Engine。它还拥有片上 SRAM 内存。
NeuronCore 的每个引擎都针对独特的计算进行了优化。ScalarEngine 针对标量计算进行了优化,并支持 FP32、FP16、BF16、INT8、INT16 和 Int32 等多种数据类型,可以实现高度并行化。它每周期可以执行 1,600 次浮点运算。VectorEngine 针对向量计算进行了优化。VectorEngine 也高度并行化,每周期可以执行 2,500 次浮点运算。TensorEngine 基于功率优化的阵列,高度优化了张量计算。每个 TensorEngine 可以提供超过 100 TFLOPS 的 FP16/BF16 张量计算。GPSIMD-Engine 由 8 个完全可编程的 512 位宽通用处理器组成,可以执行直线 C 代码,并直接访问其他 NeuronCore-v2 引擎以及 SRAM 内存。
模型优化
当你处理用于深度学习模型推理的计算图时,神经网络的大小(如层数、神经元数量等)、模型参数的数量以及模型参数的数值精度会直接影响模型推理的性能。模型优化方法侧重于减少神经网络的大小、模型参数的数量和数值精度,以降低推理延迟。一般来说,模型优化主要有两种方法:量化和剪枝。
量化
传统上,深度神经网络使用浮点 32 位(FP32)进行训练。然而,对于许多神经网络来说,FP32 并不需要达到所需的精度。
深度学习的量化是一种网络压缩方法,使用低精度数字,如浮点 16 位(FP16)或整数 8 位(INT8),而不是 FP32 来表示静态模型参数,并使用动态数据输入/激活进行数值计算,同时对模型性能的影响最小或没有影响。例如,INT8 表示法比 FP32 表示法占用空间少四倍,这显著降低了神经网络对内存和计算成本的需求,这意味着它可以提高模型推理的整体延迟。
存在着不同类型的量化算法,包括均匀和非均匀量化算法。这两种方法都将连续域中的实数值映射到量化域中的离散低精度值。在均匀情况下,量化域中的量化值均匀分布,而在非均匀情况下,量化值是变化的。
以下图表显示了均匀量化和非均匀量化的区别:
图 10.15:均匀和非均匀量化
量化可以在训练后和训练期间(量化感知训练)进行。训练后量化将一个训练好的模型量化权重,并重新生成一个量化模型。量化感知训练涉及微调全精度模型。在训练过程中,高精度实数被降低到低精度数字。
其他技术包括混合精度训练,这是一种在训练机器学习模型时使用较低精度(如 16 位浮点数或 8 位整数)进行计算的方法,同时保留较高的精度(32 位)用于权重更新。这种方法旨在实现显著的加速和内存节省,尤其是在针对低精度操作优化的硬件上。另一种技术是带有知识蒸馏的量化,它涉及将知识从较大的、高精度教师模型转移到较小的、量化的学生模型。学生模型被训练以复制教师模型的输出,使其能够获得更准确的量化表示。虽然这种技术可以比直接量化实现更高的精度,但它需要额外的训练过程。
在深度学习框架中,如 PyTorch 和 TensorFlow,量化支持是原生可用的。例如,PyTorch 通过其torch.quantization包支持两种量化形式。TensorFlow 通过tf.lite包支持量化。
剪枝(也称为稀疏性)
剪枝是另一种网络压缩技术,通过消除对模型性能没有影响的某些模型权重和神经元来减小模型的大小,以使推理更快。例如,接近零或冗余的权重通常可以被移除。
剪枝技术可以分为静态剪枝和动态剪枝。静态剪枝在模型部署之前离线进行,而动态剪枝在运行时进行。在这里,我们将讨论静态剪枝的一些关键概念和方法。
静态剪枝主要包含三个步骤:
-
针对剪枝的参数选择。
-
剪枝神经元。
-
如有必要,进行微调或重新训练。重新训练可能会提高剪枝神经网络的模型性能。
静态剪枝参数的选择有几种方法,包括基于幅度的方法、基于惩罚的方法和 dropout 移除:
-
基于幅度的方法:普遍认为,大型模型权重比小型模型权重更重要。因此,选择剪枝权重的一种直观方法是查看零值权重或那些在定义的绝对阈值内的权重。神经网络激活层的幅度也可以用来确定相关的神经元是否可以被移除。
-
基于惩罚的方法:在基于惩罚的方法中,目标是修改损失函数或添加额外的约束,以便某些权重被迫变为零或接近零。然后可以剪除零或接近零的权重。基于惩罚方法的例子是使用 LASSO 来缩小特征权重。
-
Dropout 移除:Dropout 层在深度神经网络训练中用作正则化器,以避免过拟合数据。虽然 Dropout 层在训练中很有用,但在推理中并不有用,可以移除以减少参数数量而不影响模型性能。
-
基于正则化的剪枝:这种技术涉及在训练期间向损失函数添加正则化项,这鼓励模型学习稀疏表示。例子包括 L1 正则化(LASSO),它通过将一些权重驱动到正好为零来促进稀疏性,以及 Group Lasso,它可以剪除整个滤波器或通道。
-
基于强化学习的剪枝:这种方法采用强化学习来自动压缩模型。
DL 框架,例如 TensorFlow 和 PyTorch,提供了模型剪枝的 API。例如,你可以使用 tensorflow_model_optimization 包及其 prune_low_magnitude API 进行基于幅度的剪枝。PyTorch 通过其 torch.nn.utils.prune API 提供模型剪枝支持。
量化和剪枝的主要权衡是在效率提升的同时可能损失模型精度或性能。更激进的量化和剪枝可能导致更高的压缩率,但也可能导致精度下降更大。在压缩和精度之间找到合适的平衡至关重要。量化和剪枝的模型也可能在不同硬件平台或深度学习框架之间具有有限的可移植性,因为优化的格式和稀疏结构可能不被普遍支持。
图和操作符优化
除了硬件加速和模型优化之外,还有其他优化技术,这些技术专注于计算图的执行优化,以及特定硬件的操作符和张量优化。
图优化
图优化侧重于减少计算图中执行的操作数量以加快推理。图优化使用了多种技术,包括操作融合、死代码消除和常量折叠。
算子融合将子图中的多个操作合并成一个操作,以降低延迟。在具有多个操作的子图典型执行过程中,系统内存被访问以进行读写,以在操作之间传输数据,这是一个昂贵的任务。算子融合减少了内存访问次数,同时也优化了整体计算,因为计算现在在一个内核中发生,中间结果不再保存到内存中。这种方法还由于操作数量减少而减少了内存占用。
下图展示了算子融合的概念:
图 10.16:图算子融合
在前面的图中,矩阵乘法、加法和ReLU算子正在融合成一个单独的算子,以便在一个内核中执行,以减少内存访问和启动多个内核所需的时间。
常量折叠是在编译时评估常量,而不是在运行时,以加快运行时的处理速度。例如,对于以下表达式,A可以在编译时被分配一个值为 300,而不是在运行时动态计算,这需要更多的计算周期:A = 100 + 200。死代码消除移除不影响程序结果的代码。这确保程序不会在无用的操作上浪费计算。
算子优化
算子优化(也称为张量优化)专注于特定模型的硬件特定优化。不同的硬件设备有不同的内存布局和计算单元,因此通常需要进行硬件特定优化以充分利用硬件架构。已经为不同硬件设备上的算子优化开发了多种技术,包括以下内容:
-
嵌套并行性,利用 GPU 内存层次结构,并通过共享内存区域实现线程间的数据重用。
-
内存延迟隐藏,通过将内存操作与计算重叠来最大化内存和计算资源。
虽然图优化、算子优化和模型优化针对不同的优化领域,但它们通常结合在一起以提供端到端优化。
模型编译器
手动优化端到端模型性能并非易事。添加多个机器学习框架的维度以及广泛的优化目标硬件设备使得这个问题变得非常具有挑战性。为了简化不同机器学习框架和不同设备的优化过程,已经开发了几种开源和商业产品。我们将在本节简要介绍一些这样的包。
TensorFlow XLA
TensorFlow 加速线性代数(XLA)是 TensorFlow 的深度学习编译器。它将 TensorFlow 图编译成针对模型特别优化的执行内核序列。XLA 在对 IR 执行多个优化之前,将原始 TensorFlow 图转换为 中间表示(IR),例如为了更快计算进行的算子融合。优化步骤的输出随后用于生成针对不同目标硬件设备(如 CPU 和 GPU)的性能优化特定硬件代码。XLA 在 Google 的生产环境中用于许多加速器。
PyTorch Glow
PyTorch Glow 是针对多个深度学习框架的深度学习编译器。类似于 XLA,它也使用 IR 来表示原始计算图以执行优化。与 XLA 不同,PyTorch Glow 使用两层 IR。第一层用于执行特定领域的优化,如量化,而第二层 IR 用于与内存相关的优化,如内存延迟隐藏。在第二层 IR 优化之后,为在不同设备上运行模型生成依赖于目标设备的代码。
Apache TVM
Apache 张量虚拟机(TVM)是一个开源的模型优化编译框架。它优化并编译使用不同框架(如 PyTorch 和 TensorFlow)构建的模型,针对不同的目标 CPU、GPU 和用于加速性能的专用硬件设备。TVM 支持不同级别的优化,包括针对特定硬件的图优化和算子优化。它还附带一个运行时,用于高效执行编译后的模型。
TVM 的一个关键特性是 AutoTVM,它使用机器学习来搜索针对不同硬件设备的代码执行最佳序列。这种基于机器学习的搜索算法可以通过使用供应商提供的优化库(如 cuDNN)显著超越基线基准。这种基于机器学习的方法还可以实现针对大量硬件设备的有效编译扩展。
Amazon SageMaker Neo
Amazon SageMaker Neo 是 SageMaker 中的模型编译功能。它主要使用 Apache TVM 作为其底层编译库。使用 SageMaker Neo,你可以将已在 TensorFlow 和 PyTorch 等不同的机器学习/深度学习框架上训练的模型,选择目标处理器,如英特尔、苹果、ARM 或英伟达,然后 SageMaker Neo 为目标硬件编译一个优化的模型。Neo 还为每个目标平台提供运行时库,用于加载和执行编译后的模型。SageMaker Neo 是一个托管服务,因此你不需要管理模型编译和部署的基础基础设施和流程。
推理引擎优化
一种常见的模型部署模式是使用开源推理引擎或商业托管平台进行模型服务。因此,推理引擎优化是另一种有助于减少模型延迟和推理吞吐量的方法。在本节中,我们将讨论一些考虑因素。请注意,推理引擎优化没有普遍适用的规则,因为它有时是针对特定引擎和模型的。测试和验证不同配置以供最终部署是很重要的。
推理批处理
如果您有大量推理请求,并且对单个预测请求没有严格的延迟要求,那么推理批处理是一种可以减少请求总推理时间的技巧。使用推理批处理,不是为每个请求逐个运行预测,而是将多个请求批量一起发送到推理引擎。这种技术减少了请求往返的总次数,从而减少了总推理时间。TensorFlow Serving 和 TorchServe 等推理引擎提供了内置的批推理支持。您可以在pytorch.org/serve/batch_inference_with_ts.html和www.tensorflow.org/tfx/serving/serving_config#batching_configuration找到 TorchServe 和 TensorFlow Serving 批推理的配置细节。
启用并行服务会话
如果您的模型托管服务器有多个计算核心,您可以配置并行服务会话的数量以最大化可用核心的利用率。例如,您可以根据可以并行运行多个服务会话的核心数量配置 TensorFlow Serving 中的TENSORFLOW_INTRA_OP_PARALLELISM设置以优化吞吐量。TorchServe 有针对每个模型的 worker 数量和用于并行化优化的线程数量的设置。
选择通信协议
TensorFlow 和 TorchServe 等推理引擎支持 gRPC 协议,这是一种比 REST 协议更快的序列化格式。gRPC 协议提供了更好的整体性能,但确实有性能基准,因为不同的模型可能会有不同的行为。根据您的具体需求,REST 协议可能是您更喜欢的选项。
通过这样,您已经了解了大规模训练和低延迟模型推理的技术方法。
既然我们已经讨论了一些推理优化的考虑因素,接下来我们将探讨一些大型语言模型推理技术方面的最新进展。
大型语言模型的推理
随着语言模型规模的持续增长,部署和运行它们的任务变得越来越具有挑战性。即使有模型优化努力,这些庞大的模型通常也会超出单个 GPU 的内存容量。为了克服这一障碍并使这些大型语言模型得以部署,已经出现了许多机器学习推理框架。让我们深入了解这些框架,以了解它们如何促进这些语言模型的推理过程。
文本生成推理(TGI)
TGI 是 HuggingFace 为部署开源大型语言模型(如 Falcon 和 FLAN-T5)提供的优化服务解决方案。TGI 具有以下针对大型语言模型推理的关键能力:
-
张量并行:此功能允许大型语言模型部署到多个 GPU 上,以便它可以适应组合 GPU 内存,并在多个 GPU 上实现更快的推理。
-
量化:TGI 可以使用 bitsandbytes 和 GPT-Q 量化库包执行模型量化,以减小模型大小。
-
连续批处理:此功能通过使用相同的加载模型参数运行多个输入序列来增加推理的吞吐量。
DeepSpeed-Inference
除了是一个用于大规模分布式训练的框架之外,DeepSpeed 还可以帮助优化大型语言模型的推理。它在推理方面具有以下关键特性:
-
模型并行:此功能通过将模型分割到多个 GPU 设备上,适合那些否则无法适应 GPU 内存的大型模型。
-
推理优化内核:DeepSpeed 可以将逐元素操作、矩阵乘法、转置和归约全部融合到一个内核中,显著减少内核调用次数以及主内存访问,从而降低主内存访问延迟。DeepSpeed-Inference 内核也经过微调,以最大化内存带宽利用率,用于加载参数。
-
量化:一种名为混合量化的新型模型量化方法,涉及在生产过程中缩小模型并降低推理成本。
FastTransformer
FasterTransformer 是由 Nvidia 开发的一个高性能库,旨在加速基于 transformer 的神经网络的推理,特别是对于跨越多个 GPU 和分布式设置中的节点的庞大模型。这个开源框架专注于优化 transformer 块,包括编码器和解码器组件。它具有以下支持基于 transformer 模型推理的关键特性:
-
模型并行:使用 FastTransformer,可以将 transformer 模型分割到多个 GPU 上以实现更快的推理。
-
优化支持:FasterTransformer 使用层融合、使用数据缓存的多头注意力加速、通用矩阵乘法(GEMM)内核自动调优以及支持 FP16、BF16 和 INT8 等低精度数据类型等技术来优化基于 transformer 的模型。这些数据类型的操作可以通过最近 NVIDIA GPU 上的 Tensor Cores 进行加速。
实践实验室 - 使用 PyTorch 运行分布式模型训练
作为 ML 解决方案架构师,您需要探索和设计不同的模型训练范式以满足不同的模型训练需求。在本实践实验室中,您将使用 SageMaker 训练服务运行数据并行分布式训练。我们将使用 PyTorch 的torch.nn.parallel.DistributedDataParallel API 作为分布式训练框架,并在小型集群上运行训练作业。我们将重用第八章中构建数据科学环境使用 AWS ML 服务的实验室中的数据集和训练脚本。
问题陈述
在第八章中,我们使用您使用 SageMaker 创建的数据科学环境训练了一个金融情感模型。该模型是在 Studio 笔记本和 SageMaker 训练服务中使用单个 GPU 进行训练的。考虑到未来对大型数据集进行模型训练的需求,我们需要设计一个使用多个 GPU 进行水平扩展的 ML 训练流程。
数据集描述
我们将使用金融短语数据集进行此实验室:www.kaggle.com/ankurzing/sentiment-analysis-for-financial-news。
修改训练脚本
首先,我们需要将分布式训练支持添加到训练脚本中。为此,请在您的 Studio 笔记本环境中创建一个code目录,复制train.py文件并将其保存到code目录中,然后将文件重命名为train-dis.py,并打开train-dis.py文件。您需要对以下三个主要函数进行修改。以下步骤旨在突出需要进行的重点更改。要运行实验室,您可以从github.com/PacktPublishing/The-Machine-Learning-Solutions-Architect-and-Risk-Management-Handbook-Second-Edition/tree/main/Chapter10下载修改后的train-dis.py文件。以下是在train-dis.py文件中需要做出的关键更改:
-
修改
train()函数:您需要对train()函数进行一些修改以启用分布式训练。以下是需要进行的重点更改:-
进程组初始化:为了启用分布式训练,我们需要初始化和注册每个设备上的每个训练过程,以便将其包含在训练组中。这可以通过调用
torch.distributed.init_process_group()函数来实现。此函数将阻塞,直到所有进程都已注册。在初始化步骤中,我们需要熟悉一些概念:-
全局大小:这是分布式训练组中进程的总数。由于我们将在每个设备(CPU 或 GPU)上运行一个进程,因此全局大小也等于训练集群中设备总数的总和。例如,如果您有两个服务器,每个服务器有两个 GPU,那么这个训练组的全局大小是四。
torch.distributed.init_process_group()函数使用这些信息来了解在分布式训练作业中应包含多少个进程。 -
排名:这是分配给训练组中每个进程的唯一索引。例如,具有四个全局大小的训练组中所有进程的排名将是[0,1,2,3]。这个唯一的索引有助于在训练组内唯一地标识每个进程以进行通信。
-
本地排名:这唯一地标识了服务器节点中的一个设备。例如,如果服务器节点中有两个设备,两个设备的本地排名将是[0,1]。本地排名允许您选择一个特定的设备来加载模型和数据以进行模型训练。
-
后端:这是在不同进程之间交换和聚合数据的高级通信库。PyTorch 分布式训练支持包括 NCCL、MPI 和 Gloo 在内的多个通信后端。您可以根据设备和网络配置选择不同的后端。它使用这些后端在分布式训练期间发送、接收、广播或减少数据。我们不会在本书中详细介绍这些后端的技术细节。如果您对这些后端的工作原理感兴趣,可以轻松地在网上找到涵盖这些主题的资源。
-
-
使用 PyTorch 分布式库包装训练算法:为了使用 PyTorch 分布式库对训练的支持,您需要使用 PyTorch 分布式训练库来包装算法。您可以使用
torch.nn.parallel.DistributedDataParallel()API 实现这一点。这允许算法参与分布式训练,交换梯度并更新全局参数。 -
使用单个设备保存模型:在多设备服务器节点中,您只想让一个设备保存最终模型以避免 I/O 冲突。您可以通过选择具有特定本地排名 ID 的设备来实现这一点。
-
-
修改
get_data_loader()函数:为了确保不同的训练数据子集被加载到服务器节点上的不同设备上,我们需要配置 PyTorch DataLoader API,以便根据训练进程的 rank 加载数据。这可以通过使用torch.utils.data.distributed.DistributedSamplerAPI 来完成。 -
为多设备服务器节点添加多进程启动支持:对于具有多个设备的服务器节点,我们需要根据可用的设备数量启动多个并行进程。为了启用此功能,我们可以使用
torch.multiprocessing在每个节点上启动多个运行进程。
修改训练脚本后,我们将更新启动笔记本。
修改并运行启动笔记本
我们现在已准备好修改启动笔记本以启动模型训练作业:
-
首先,将
bert-financial-sentiment-Launcher.ipynb文件从第八章复制出来,并保存为bert-financial-sentiment-dis-Launcher.ipynb。打开新笔记本,并将第二个单元格的内容替换为以下代码:from sagemaker.pytorch import PyTorch output_path = f"s3://{bucket}/{prefix}" estimator = PyTorch( entry_point="train-dis.py", source_dir="code", role=role, framework_version="1.6", py_version="py3", instance_count=2, instance_type= "ml.g4dn.12xlarge", output_path=output_path, hyperparameters={ "epochs": 10, "lr" : 5e-5, "num_labels": 3, "train_file": "train.csv", "test_file" : "test.csv", "MAX_LEN" : 315, "batch_size" : 64, "test_batch_size" : 10, "backend": "nccl" }, ) estimator.fit({"training": inputs_train, "testing": inputs_test})主要代码更改如下:
-
将入口点指向新的训练脚本(
entry_point="train-dis.py") -
将计算实例数量从 1 增加到 2 以进行多节点训练(
instance_count=2) -
修改实例类型以支持多 GPU(
instance_type= "ml.g4dn.12xlarge") -
增加批大小,因为现在有更多的 GPU 可以处理更大的批大小(
"batch_size" : 64)
-
-
下载
github.com/PacktPublishing/The-Machine-Learning-Solutions-Architect-and-Risk-Management-Handbook-Second-Edition/blob/main/Chapter10/code/requirements.txt并将其上传到您的 Studio 笔记本中的code目录。此requirements.txt包含需要在训练容器中安装的库包。在这种情况下,我们想要安装 transformer 包。
如果您不想手动修改启动笔记本,您可以下载修改后的启动笔记本,链接为github.com/PacktPublishing/The-Machine-Learning-Solutions-Architect-and-Risk-Management-Handbook-Second-Edition/blob/main/Chapter10/bert-financial-sentiment-dis-launcher.ipynb。
现在,只需在新笔记本中执行每个单元格,即可启动分布式训练。您可以直接在笔记本中跟踪训练状态,并在 CloudWatch 日志中查看详细状态。您应该看到总共八个进程并行运行。请注意总训练时间和准确率,并查看它们与您在第八章,使用 AWS ML 服务构建数据科学环境中得到的成果相比如何。
恭喜!你已经成功使用 PyTorch 分布式训练库训练了一个 BERT 模型。
摘要
在本章中,我们深入探讨了机器学习工程的先进主题。我们涵盖了处理大量数据集和大规模模型的分布式训练,以及实现低延迟推理的策略。希望你现在对数据并行和模型并行有了坚实的理解,以及实现分布式训练时可供选择的多样化技术,例如 PyTorch 分布式库和 SageMaker 分布式训练库。此外,你应该已经准备好讨论各种优化模型以最小化推理延迟的技术,包括用于自动化模型优化的模型编译工具的使用。
到目前为止,我们一直专注于从头开始训练机器学习模型,并设计机器学习平台以支持机器学习模型的训练和部署,从而支持智能应用的开发。然而,我们并不总是需要从头开始构建模型。在下一章中,我们将探讨现成的 AI 服务,并了解 AI 服务如何被用来快速构建智能应用。
留下评论!
喜欢这本书吗?通过留下亚马逊评论来帮助像你这样的读者。扫描下面的二维码,获取你选择的免费电子书。
*限时优惠
第十一章:使用 AWS AI 服务构建机器学习解决方案
到目前为止,我们主要关注构建和部署机器学习模型所需的技能和技术,这些技能和技术使用开源技术和托管机器学习平台。然而,要使用机器学习解决业务问题,你并不总是需要从头开始构建、训练和部署你的机器学习模型。另一种选择是使用完全管理的 AI 服务。AI 服务是完全管理的 API 或应用程序,具有预训练的模型,可以执行特定的机器学习任务,例如目标检测或情感分析。一些 AI 服务还允许你使用你的数据训练自定义模型,以完成定义的机器学习任务,例如文档分类。AI 服务承诺使组织能够构建不需要强大机器学习能力的机器学习解决方案。
在本章中,我们将转换方向,讨论几个 AWS AI 服务及其在商业应用中的使用情况。请注意,本章的重点不会深入探讨单个 AI 服务,因为这需要专门的书籍。相反,我们将关注可以由 AI 服务驱动的机器学习用例,以及你可以用来部署这些 AI 服务的架构模式。阅读本章后,你应该能够识别一些 AI 服务可以很好地适用的情况,并知道在哪里找到额外的资源来更深入地了解这些服务。具体来说,我们将涵盖以下主题:
-
什么是 AI 服务?
-
AWS AI 服务概述
-
使用 AI 服务构建智能解决方案
-
设计 AI 服务的 MLOps 架构
-
实践实验室 - 使用 AI 服务运行机器学习任务
技术需求
你将继续使用我们的 AWS 环境来完成这本书的动手部分。相关的代码示例可以在github.com/PacktPublishing/The-Machine-Learning-Solutions-Architect-and-Risk-Management-Handbook-Second-Edition/tree/main/Chapter11找到。
什么是 AI 服务?
AI 服务是预先构建的完全管理的服务,可以直接执行特定的一组机器学习任务,例如面部分析或文本分析。AI 服务的主要目标用户是希望构建 AI 应用而不需要从头开始构建机器学习模型的应用开发者。相比之下,机器学习平台的目标受众是数据科学家和机器学习工程师,他们需要经历完整的机器学习生命周期来构建和部署机器学习模型。
对于一个组织来说,AI 服务主要解决以下关键挑战:
-
缺乏高质量的机器学习模型开发训练数据:要训练高质量的模型,你需要大量的高质量精选数据。对于许多组织来说,数据在数据来源、数据工程和数据标注方面都面临着许多挑战。
-
缺乏构建和部署定制机器学习模型的数据科学技能:数据科学和机器学习工程技能在市场上稀缺,且获取成本高昂。
-
产品上市时间慢:构建和部署定制模型和工程基础设施耗时较长。这可能是一个快速上市产品的障碍。
-
未区分的机器学习能力:许多机器学习问题可以使用不提供独特竞争优势的通用机器学习能力来解决。在构建未区分的机器学习能力上投入资源可能会浪费宝贵的资源。
-
系统可扩展性挑战:管理可扩展的基础设施以满足动态市场需求和增长是一个工程挑战。
虽然 AI 服务可以提供一种快速构建机器学习产品的经济高效的方式,但它们确实存在局限性。主要局限性是缺乏针对特定功能和技术的定制灵活性。AI 服务通常专注于具有预定义算法集的特定机器学习任务,因此您通常没有灵活性来改变 AI 服务的功能。使用 AI 服务,您通常无法访问底层模型,这限制了您在其他地方部署模型的能力。
近年来,AI 服务的产品种类大幅增长,我们预计这一趋势将以更快的速度持续发展。让我们转变我们的关注点,谈谈几个 AWS AI 服务。
AWS AI 服务概述
AWS 在多个机器学习领域提供 AI 服务,如文本和视觉,以及针对工业用例的 AI 服务,例如制造异常检测和预测性维护。在本节中,我们将介绍 AWS AI 服务的一部分。本节的目标不是深入探讨单个服务,而是让您了解这些 AI 服务提供的基本功能。这将让您了解这些服务如何以及在哪里集成到您的应用程序中。
Amazon Comprehend
自然语言处理(NLP)在解决各种商业问题方面引起了不同行业的广泛关注,例如自动文档处理、文本摘要、文档理解和文档管理及检索。Amazon Comprehend 是一种能够对非结构化文本文档进行自然语言处理的 AI 服务。在其核心,Amazon Comprehend 提供以下主要功能:
-
实体识别:实体是文本分析中的谁、什么、哪里和何时。实体可以是句子中最重要的部分,因为它们确定了文本中的关键组成部分。实体的例子包括人名、地名或产品等专有名词。实体可用于创建文档搜索索引并识别跨文档的关键信息或关系。Comprehend 提供 API(例如,
DetectEntities),使用其内置的实体识别模型检测实体。它可以检测来自输入文本的人、地点、组织机构和日期等实体。如果内置模型不符合您的需求,您还可以使用 Comprehend 训练自定义实体识别器以识别您的自定义实体。要训练自定义实体识别器,您可以使用CreateEntityRecognizerAPI,并使用以下两种格式之一提供您的训练数据:-
标注:您提供文档中实体的位置(目标字符的开始和结束偏移量),以及每对偏移量对应的实体类型。这有助于 Comprehend 在实体及其所处的上下文中进行训练。
-
实体列表:您提供一份包含实体及其实体类型的文本列表,Comprehend 将训练以检测这些特定实体。您可以使用 Comprehend 自定义模型训练作业发出的指标来评估自定义模型。示例评估指标包括精确率、召回率和 F1 分数。
关于 Comprehend 评估指标的更多详细信息,请参阅
docs.aws.amazon.com/comprehend/latest/dg/cer-metrics.html。一旦模型经过训练,您可以选择将模型部署到私有预测端点后面以提供预测。 -
-
情感分析:Comprehend 可以通过其
DetectSentimentAPI 检测文本中的情感。情感分析在许多商业用例中得到了广泛应用,例如分析客户支持电话中的客户情感或理解客户对产品和服务在评论中的看法。 -
主题建模:主题建模有广泛的应用,包括文档理解、文档分类和组织、信息检索和内容推荐。Comprehend 可以通过其
StartTopicsDetectionJobAPI 发现文档中的共同主题。 -
语言检测:Comprehend 可以通过其
DetectDominantLanguageAPI 检测文本中使用的占主导地位的语言。此功能可以帮助处理诸如根据语言将 incoming 客户支持电话路由到正确的渠道或根据不同语言对文档进行分类等用例。 -
语法分析:Comprehend 可以使用其
DetectSyntaxAPI 对句子进行词性(POS)分析。示例词性包括句子中的名词、代词、动词、副词、连词和形容词。词性分析可以帮助处理诸如检查书面文本中语法和句法的正确性等用例。 -
事件检测:Comprehend 可以检测预定义的金融事件,如首次公开募股(IPO)、股票分割和破产。它还可以检测与事件相关联的增强,例如个人或公司申请破产。这种关系有助于构建知识图谱,帮助我们理解不同事件中的谁做了什么。您可以在
docs.aws.amazon.com/comprehend/latest/dg/cer-doc-class.html找到事件和增强类型的完整列表。 -
文本分类:您可以使用 Comprehend 使用您的训练数据训练自定义文本分类器。Comprehend 允许您通过其
CreateDocumentClassifierAPI 训练多类和多标签分类器。多类将单个标签分配给文本,而多标签则将多个标签分配给文本。为了评估自定义分类器的性能,Comprehend 提供了一系列指标,包括准确率、召回率和 F1 分数。您可以在docs.aws.amazon.com/comprehend/latest/dg/cer-doc-class.html找到完整的指标列表。 -
个人身份信息(PII)检测:您可以在英语或西班牙语文档中检测 PII。PII 检测过程提供了在文本中定位或擦除 PII 实体的选项。对于定位 PII 实体,可以使用实时分析或异步批量作业。另一方面,擦除 PII 实体特别需要使用异步批量作业。
-
关键短语检测:Amazon Comprehend 中的关键短语功能使用机器学习模型分析输入文本并提取最显著的短语或主题。这些关键短语可以提供简洁的摘要或突出文本中存在的主题和概念。
Flywheels 是 Comprehend 的一个功能,它提供了一个管理化的工作流程,用于持续改进自定义自然语言处理模型。飞轮存储所有模型数据和版本在一个 AWS 管理的数据湖中。随着新的标记数据集变得可用,您创建飞轮迭代以使用最新数据重新训练和评估新的模型版本。根据性能指标,最佳的新版本可以被提升为成为活跃模型,为推理提供服务。这个迭代过程允许模型精度随着时间的推移而提高,因为常规模型重新训练结合了新鲜数据。
可以使用 boto3 库和 AWS 命令行界面(CLI)调用 Comprehend API。您可以在 boto3.amazonaws.com/v1/documentation/api/latest/reference/services/comprehend.html 找到支持 Comprehend 的完整 boto3 方法列表。以下展示了调用 Comprehend 实体检测功能的 Python 语法:
import boto3
client = boto3.client('comprehend')
response = client.detect_entities(Text='<input text>')
Amazon Comprehend 可以很好地用于构建智能文档处理解决方案和其他 NLP 产品。它还可以作为一个良好的基线工具,可以与自定义 NLP 模型进行比较。
Amazon Textract
许多业务流程,如贷款申请处理、费用处理和医疗索赔处理,需要从图像和文档中提取文本和数字。目前,许多组织主要手动处理这些流程,这些流程可能非常耗时且缓慢。
Amazon Textract 是一个主要用于从图像和 PDF 文档中提取打印文本、手写文本和数字的 光学字符识别(OCR)AI 服务。Textract 通常用作下游任务(如文档分析和数据录入)的处理步骤。Textract 的核心功能如下:
-
OCR: OCR 是一种计算机视觉任务,用于从 PDF 文档和图像中检测和提取文本数据。Textract 中的 OCR 组件从输入文档中提取原始文本,并提供有关文档的附加结构信息。例如,Textract 的输出包含文档中不同对象(如页面、段落、句子和单词)的分层结构关系。Textract 还捕获输入文档中不同对象的位置信息。当您从文档的不同位置提取特定信息时,分层结构信息和对象位置数据非常有用。OCR API 包括
DetectDocumentText用于同步检测文本和StartDocumentTextDetection用于异步检测文本。 -
表格提取: 许多文档包含表格数据结构,需要作为表格进行处理。例如,您可能有一个包含索赔项目及其详细信息列表的保险索赔文档,并且您可能希望将这些索赔项目输入到系统中。Textract 中的表格提取组件可以从文档中提取表格和表格中的单元格。要使用表格提取功能,您可以使用
AnalyzeDocumentAPI 进行同步操作,或使用StartDocumentAnalysis进行异步操作。 -
表单提取:例如工资单和贷款申请表等文档包含许多需要保留其关系的名称-值对,当它们自动处理时。Textract 中的表单提取组件可以检测这些名称-值对及其关系,以便进行下游处理,例如将这些文档中的名称输入到系统中。表单提取组件与表格提取组件共享相同的
AnalyzeDocument和StartDocumentAnalysisAPI。 -
文档分析中的签名:Textract 可以检测文档中的签名位置,返回指定签名位置和置信度分数的边界框。签名检测可以独立运行或与其他功能(如表单、表格和自定义查询)同时运行。当与表单或表格结合使用时,Textract 将检测到的签名与相应的单元格或键值对相关联。
-
文档分析中的查询:Textract 允许添加自定义查询以从文档中提取特定信息。例如,“申请人的地址是什么?”这样的查询将仅从分析文档中返回该数据点,并在单独的响应结构中返回。
Textract 还具备分析特定类型文档的功能,例如发票和身份证明文件。例如,Textract 可以从发票或收据中提取相关数据,如供应商和收件人联系信息,而无需任何模板或配置。同样,它可以从护照、驾照和美国政府签发的其他身份证明文件中提取相关信息。
Textract API 在boto3库中得到支持。以下代码示例展示了如何使用boto3库检测文本。关于boto3的完整 Textract API 列表可以在boto3.amazonaws.com/v1/documentation/api/latest/reference/services/textract.html找到。
import boto3
client = boto3.client('textract')
response = client.detect_document_text(
Document={
'Bytes': b'bytes',
'S3Object': {
'Bucket': '<S3 bucket name>',
'Name': '<name of the file>'}
})
Textract 还与Amazon Augmented AI(A2I)服务集成,以实现人工审核 Textract 的低置信度预测结果的闭环工作流程集成。有关 A2I 服务的更多信息,请访问aws.amazon.com/augmented-ai。
Amazon Rekognition
Amazon Rekognition是一个视频和图像分析 AI 服务。它支持一系列用例,如从图像和视频中提取元数据、内容审核以及安全和监控。Rekognition 的核心功能如下:
-
标签或对象检测:标签检测可用于媒体元数据提取以进行搜索和发现、保险索赔处理中的物品识别和计数、以及品牌和标志检测等用例。Rekognition 可以在图像和视频中检测不同的对象、场景和活动,并为它们分配标签,如
soccer、outdoor和playing soccer。对于检测到的常见对象,它还提供了对象的边界框,以指示它们在图像或视频中的具体位置。要使用 Rekognition 进行标签检测,您可以调用DetectLabelsAPI。如果 Rekognition 无法检测您图像中的特定对象,您还可以使用CreateProjectAPI 使用您的训练数据训练一个自定义标签检测器。一旦模型被训练,您可以选择使用StartProjectVersionAPI 部署一个私有预测端点。 -
人脸分析和识别:人脸分析和识别在视频监控和安全、图像和视频内容搜索中的自动人物标签、以及人口统计理解等用例中非常有用。Rekognition 可以在图像和视频中识别和分析人脸。例如,您可以对人脸进行分析以检测性别、年龄和情感。您还可以构建人脸索引并为它们分配名称。如果找到匹配项,Rekognition 可以将检测到的人脸映射到索引中的人脸。人脸分析和识别的主要 API 包括
DetectFaces、SearchFaces、IndexFaces和CompareFaces。 -
内容审核:Rekognition 提供用于检测包含露骨内容或场景(如暴力)的图像和视频的 API (
StartContentModeration)。组织可以使用此功能在将内容提供给消费者之前过滤掉不适当和冒犯性的内容。 -
短文本检测:Rekognition 可以使用其
DetectText和StartTextDetectionAPI 在图像中检测短文本,并在检测到的文本周围提供边界框。此功能可用于检测街道名称、商店名称和车牌号码。 -
个人防护装备 (PPE) 检测:Rekognition 提供了一个内置功能,使用
DetectProtectiveEquipmentAPI 在图像和视频中检测 PPE。此功能可用于自动 PPE 合规性监控。 -
名人识别:Rekognition 还维护一个名人数据库,可用于在图像和视频中识别知名名人。它为此功能提供了一系列 API,包括
RecognizeCelebrities和GetCelebrityInfo。
boto3 APIs for Rekognition can be found at https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/rekognition.html:
import boto3
client = boto3.client('rekognition')
response = client.detect_labels(
Image={
'Bytes': b'bytes',
'S3Object': {
'Bucket': '<S3 bucket name>',
'Name': '<file name>'
}
})
Rekognition 还与 AWS 的视频流服务 Amazon Kinesis Video 原生集成。您可以使用它构建检测实时视频流中人脸的解决方案。
Amazon Transcribe
Amazon Transcribe(转录)是一种语音转文字的 AI 服务。它可以用于将视频和音频文件及流转换为文本,适用于多种用例,例如媒体内容字幕、会议字幕、通话分析以及将医疗对话转换为电子健康记录。
Amazon Transcribe 支持实时转录和批量转录,并具有以下关键功能:
-
媒体转录:Transcribe 具有预训练的模型,可以将媒体文件或流转换为不同语言的文本,例如英语、中文和西班牙语。它还添加标点符号和大写字母,使转录文本更易于阅读。要启动转录,可以使用
StartTranscriptionJob和StartMedicalTranscriptionJobAPI 进行批量转录,使用StartStreamingTranscriptionAPI 进行流式转录,以及使用StartMedicalStreamTranscriptionAPI 进行流式医疗输入。 -
自定义模型:您可以提供您的训练数据来训练自定义语言模型,以提高特定行业术语或缩写的转录准确性。创建自定义模型的 API 是
CreateLanguageModel。 -
通话分析:Transcribe 为通话提供了内置的分析功能。通话的转录内容以逐段格式显示。支持的某些分析示例包括情感分析、通话分类、问题检测(通话原因)和通话特征(谈话时间、非谈话时间、音量、中断)。启动通话分析作业的 API 是
StartCallAnalyticsJob。 -
编辑:Transcribe 可以自动屏蔽或移除转录中的敏感个人身份信息(PII)数据,以保护隐私。在带有编辑的转录中,Transcribe 将 PII 信息替换为转录中的**[PII]**。要启用编辑,可以在批量转录作业中配置
ContentRedaction参数。 -
字幕:Transcribe 可以生成 WebVTT 和 SubRip 格式的字幕文件,用作视频字幕。要启用字幕文件生成,可以在转录作业中配置
Subtitles参数。 -
检测有害言论:Transcribe 毒性检测利用音频和基于文本的线索,识别和分类包括性骚扰、仇恨言论、威胁、滥用、粗话、侮辱和暴力在内的七个类别的基于声音的有害内容。
-
编辑转录内容:编辑功能有助于在进一步处理或分析之前,安全地移除语音转文字输出中的敏感数据,如姓名、地址和账户详情。这既保护了隐私,又允许利用转录内容进行其他下游应用。
-
分区说话人:在您的转录输出中,Amazon Transcribe 允许您区分不同的说话人。系统可以识别多达 10 个不同的说话人,并为每个说话人关联的文本分配一个唯一的标签。
-
多通道转录:当处理包含两个通道的音频时,你可以使用通道识别来独立转录每个通道的语音。
此外,还有一个名为 Amazon Transcribe Medical 的与医疗相关的转录服务,这是一个符合 HIPAA 标准的自动语音识别(ASR)服务,专门设计用于转录医疗语音。该服务可以自动识别和转录医疗术语、解剖学参考、药物、程序和其他临床相关信息,具有高精度。Transcribe Medical 还支持多个输入源,包括音频文件、流数据以及实时转录用于现场会议,使其成为医疗保健提供者、医学研究人员和生命科学组织将医疗语音高效转换为文本以进行文档、分析和下游应用的灵活解决方案。
Transcribe 提供了一套用于这些不同操作的 API。以下代码示例展示了如何使用 boto3 库启动一个转录作业:
import boto3
transcribe_client = boto3.client('transcribe')
transcribe_job = transcribe_client.start_transcription_job(**job_args)
您可以在 boto3.amazonaws.com/v1/documentation/api/latest/reference/services/transcribe.html 找到 Transcribe 的完整 boto3 API 列表。
Amazon Personalize
个性化推荐可以帮助您优化许多业务(如电子商务、金融产品推荐和媒体内容交付)的用户参与度和收入。Amazon Personalize 允许您使用自己的数据构建个性化推荐模型。您可以使用 Personalize 作为推荐引擎,根据个人口味和行为提供产品和内容推荐。从高层次来看,Personalize 服务提供了以下三个核心功能:
-
用户个性化:预测用户将交互或探索的项
-
相似项:根据项的共现和项元数据计算相似项
-
个性化重新排序:重新排序给定用户的输入项列表
Amazon Personalize 不提供用于推荐的预训练模型。相反,您需要使用 Personalize 提供的内置算法使用您的数据进行自定义模型训练。要训练一个个性化模型,您需要提供三个数据集:
-
项数据集:项数据集包含您想要推荐的项的属性。此数据集帮助 Personalize 了解有关项的上下文信息,以提供更好的推荐。此数据集是可选的。
-
用户数据集:用户数据集包含用户的属性。这允许 Personalize 更好地表示每个用户,以提供高度个性化的推荐。此数据集也是可选的。
-
用户-物品交互数据集:这是一个必需的数据集,它提供了用户和物品之间的历史交互,例如观看电影或购买产品。Personalize 使用这些数据来学习单个用户对不同物品的行为,以生成高度个性化的推荐。
为了帮助理解 Personalize 是如何工作的,让我们回顾一下 Personalize 的一些主要概念:
-
数据集组:数据集组包含用于模型训练的相关数据集(物品、用户和交互数据集)。
-
配方:配方是用于模型训练的机器学习算法。Personalize 为三个主要功能提供了多个配方。
-
解决方案:解决方案代表一个训练好的 Personalize 模型。
-
活动:Personalize 活动是一个托管端点,用于处理训练好的 Personalize 模型的推荐和排名请求。
使用 Personalize 训练和部署自定义模型,您必须遵循以下步骤:
-
准备和摄取数据集:在这一步中,您以所需的格式准备数据集,将其存储在 S3 中,然后将其加载到 Personalize 中。这一步涉及三个主要的 API 操作 -
CreateDatasetGroup、CreateDataset和CreateDatasetImportJob。CreateDatasetGroup创建一个空的数据集组。CreateDataset将数据集(例如,物品数据集、用户数据集和交互数据集)添加到数据集组中,而CreateDatasetImportJob启动一个数据摄取作业,将数据从 S3 加载到 Personalize 数据存储库,以便进行后续模型训练。 -
选择模型训练的配方:在这一步中,您选择一个配方(机器学习算法)用于不同的模型训练过程。Personalize 提供了多个配方选项,用于用户个性化、相关物品和个性化排名。您可以使用
ListRecipesAPI 获取完整的配方列表。这些配方是为特定用例设计的,例如下一步操作、趋势和热门物品或相似物品。根据用例选择合适的配方。 -
创建解决方案:在这一步中,您使用
CreateSolutionAPI 配置一个解决方案,该解决方案包含用于模型训练作业的数据集组和配方。然后,您使用CreateSolutionVersionAPI 启动训练作业。 -
评估模型:在这一步中,您评估模型指标并确定它们是否达到性能目标。如果没有达到,那么考虑使用更高质量和/或更多数据重新训练模型。个性化为训练模型输出多个评估指标,例如覆盖率、平均倒数排名、精确度和归一化折现累积增益。您可以在
docs.aws.amazon.com/personalize/latest/dg/working-with-training-metrics.html找到有关这些指标的更多详细信息。性能指标可在个性化管理控制台中查看。您还可以使用GetSolutionMetricsAPI 以编程方式获取这些指标。 -
创建活动:在这一最终步骤中,您将解决方案(训练模型)部署到预测端点,以便您可以在应用程序中使用它。为此,您可以使用
CreateCampaignAPI。您可以提供额外的配置,例如每秒最小配置事务数(minProvisionedTPS)吞吐量,以及项目探索配置。项目探索配置允许个性化向用户展示一定比例的随机项目,这些项目不是基于用户个性化。其理念是让用户探索他们之前未互动过的项目,以衡量兴趣。项目探索配置仅适用于用户个性化。
您可以使用个性化管理控制台来构建个性化解决方案和活动。或者,您可以使用boto3来访问personalize API。以下代码示例展示了创建活动的 Python 语法。您可以在boto3.amazonaws.com/v1/documentation/api/latest/reference/services/personalize.html找到 Personalize 的完整boto3 API 列表:
import boto3
client = boto3.client('personalize')
response = client.create_campaign(
name='<name of the campaign>',
solutionVersionArn='<AWS Arn to the solution>',
minProvisionedTPS=<provisioned TPS>,
campaignConfig={
'itemExplorationConfig': {
'<name of configuration>': '<value of configuration>'
}})
个性化还提供了一些高级功能,例如过滤器,允许您根据规则从您的项目列表中删除项目。您还可以使用业务目标(如客户忠诚度)来优化模型训练。此功能允许您提供优化特定业务结果的推荐。
Amazon Lex V2
对话式代理已被广泛应用于多个不同行业,以提高用户体验,例如自助客户支持和自动化 IT 功能。
Amazon Lex V2 简化了使用语音和文本创建对话界面的应用开发。它提供了诸如自然语言理解(NLU)和自动语音识别(ASR)等功能,允许开发者构建用户友好的交互。Amazon Lex V2 具有以下关键概念:
-
机器人:一种用于执行如下订单、酒店预订或花束订单等任务的自动化工具。
-
语言:Amazon Lex V2 机器人可以独立处理多种语言。可配置以使用本地表达方式与用户互动,该平台支持多种语言和地区。
-
意图:代表用户操作,意图被创建以支持相关功能。例如,用于订购披萨的意图可能包括意图名称(例如,
PlaceOrder)、示例语句和执行说明,通常通过 Lambda 函数执行。 -
槽位:意图可能需要称为槽位的参数,例如目的地或日期,槽位类型定义了预期的值。它提示用户输入这些值,并在满足意图之前确保提供所有必要的信息。
-
槽位类型:每个槽位都与一个槽位类型相关联,可以是自定义的或内置的。例如,尺寸可能有一个
Small、Medium和Large的枚举,而内置类型如AMAZON.Number则处理数值输入。 -
版本:在 Amazon Lex V2 中,版本代表机器人配置的快照。它允许在不同的工作流程阶段使用不同的版本,如开发、beta 部署或生产。
-
别名:别名作为指向特定机器人版本的指针,使客户端应用程序的更新无缝。通过更改别名以指向新版本,所有客户端都将接收更新的功能,而无需进行单独更新。
要构建一个机器人,您在 Amazon Lex V2 控制台中概述对话流程,该控制台动态管理对话和响应。控制台支持构建、测试和发布文本或语音聊天机器人,以便集成到移动设备和 Web 应用程序等平台。它还与 AWS Lambda 和其他 AWS 服务集成,增强了对各种应用程序中数据的连接性。除了控制台之外,您还可以使用机器人模板和自动机器人设计器来创建机器人。
Amazon Lex V2 还利用 Amazon Bedrock 的生成式 AI 功能来促进机器人的开发。使用 Amazon Bedrock,您可以通过自然语言描述创建新的机器人,包括相关的意图和槽位类型。该工具自动生成针对您的机器人意图定制的示例语句。此外,Amazon Bedrock 还促进创建专门针对客户咨询的意图。
Amazon Kendra
Amazon Kendra是一个完全托管的智能搜索服务。它使用机器学习来理解您的自然语言请求,并在目标数据源上执行 NLU 以返回相关信息。您不必使用诸如IT 桌位位置之类的关键词来搜索答案并获取包含这些关键词的文档列表,而是可以提出诸如IT 桌位在哪里?之类的自然语言问题,并得到 IT 桌位的地点,例如3 楼,301 室。
您可以使用 Amazon Kendra 来解决多个用例。例如,您可以使用它作为客户服务中心工作流程的一部分,其中客户代表可以快速找到客户请求的最相关信息。您还可以在企业的不同数据源中进行信息发现,以提高生产力。在较高层次上,Kendra 具有以下关键功能:
-
文档阅读理解:Kendra 对源文档进行阅读理解,并返回用户在问题中请求的特定信息。
-
常见问题解答(FAQ)匹配:如果您提供 FAQ 列表,Kendra 可以自动将问题与列表中的答案相匹配。
-
文档排名:Kendra 可以返回包含所提问题相关信息的文档列表。为了按语义相关性顺序返回列表,Kendra 使用机器学习(ML)来理解文档的语义含义。
要了解 Kendra 是如何工作的,让我们回顾一些关键的技术 Amazon Kendra 概念:
-
索引:索引为已索引的文档和 FAQ 列表提供搜索结果。Kendra 为文档和 FAQ 列表生成索引,以便它们可以被搜索。
-
文档:文档可以是结构化(FAQs)的,也可以是无结构化(HTML、PDFs)的,并且可以通过 Kendra 索引引擎进行索引。
-
数据源:数据源是文档所在的位置。这些可以是 S3 位置、Amazon RDS 数据库和 Google Workspace 驱动器等。Kendra 有一系列内置连接器,用于连接到不同的数据源。
-
查询:查询用于从索引中获取结果。查询可以是包含标准和过滤器的自然语言。
-
标签:标签是可以分配给索引、数据源和常见问题解答(FAQs)的元数据。
设置 Kendra 以对您的文档执行智能搜索主要有两个步骤:
-
生成索引:第一步是为您的文档设置索引。
-
将文档添加到索引:一旦创建了索引,您可以将文档源添加到索引中以便进行索引。
一旦创建了索引,您就使用 Kendra query() API 通过查询来获取索引的响应。以下代码片段显示了查询索引的 Python 语法:
kendra = boto3.client('kendra')
query = '${searchString}'
index_id = '${indexID}'
response=kendra.query(
QueryText = query, IndexId = index_id)
Kendra 为各种数据源内置了连接器,因此您无需构建自定义代码来从这些源提取数据。它还与 Amazon Lex 具有原生应用程序集成,允许 Lex 直接将用户查询发送到 Kendra 索引以进行满足。
Kendra 正越来越多地与大型语言模型结合使用,以提供更好的用户体验和准确性,用于智能企业搜索解决方案。
Amazon Q
Amazon Q 是一个由生成人工智能驱动的服务,旨在为各种商业需求和开发任务提供定制助手。有多个子 Q 助手针对不同的领域和服务,包括针对商业的 Q、针对构建者的 Q、针对 QuickSight(一个 AWS 商业智能工具)的 Q 和针对 Connect(一个联系中心解决方案)的 Q。在本节中,我们将简要介绍 Q for business,因为它旨在帮助商业用户连接到他们自己的数据。商业用户,如营销人员、项目和程序经理以及销售代表,可以通过 Amazon Q for business 进行定制对话、解决问题、创建内容并执行各种操作。该平台了解这些用户可以访问的特定系统,使他们能够提出复杂和详细的查询。他们收到的回复都是定制的,确保结果仅包含他们已授权访问的信息。要了解 Amazon Q for business 的工作原理,请查看docs.aws.amazon.com/amazonq/latest/business-use-dg/getting-started.html上的文档。
评估 AWS 人工智能服务用于机器学习用例
要确定人工智能服务是否适合您的用例,您需要从多个维度对其进行评估:
-
功能需求:确定您机器学习用例的功能需求,并测试目标人工智能服务是否提供您所需的特性。例如,Rekognition 是一种计算机视觉服务,但它并不支持所有计算机视觉任务。如果您有一个实例分割的计算机视觉用例,您将不得不使用支持该功能的算法来构建模型,例如 Mask-RCNN。
-
模型性能与您的数据对比:AWS 人工智能服务使用数据源进行训练以解决常见用例。为确保模型在您的数据上表现良好,请使用您的测试数据集来评估模型指标以满足您的特定需求。如果预构建的模型未达到您的性能目标,那么如果服务支持,请尝试自定义模型构建选项。如果这两种选项都不起作用,那么考虑使用您自己的数据构建自定义模型。
-
API 延迟和吞吐量需求:确定您应用程序的延迟和吞吐量需求,并测试目标人工智能服务的 API 是否符合您的需求。通常,AWS 人工智能服务是为低延迟和高吞吐量设计的。但是,您可能有需要极低延迟的用例,例如边缘的计算机视觉任务。如果人工智能服务无法满足您的需求,那么考虑在专用托管基础设施中构建模型并托管它们。
-
安全和集成要求:确定您的安全和集成要求,并验证 AI 服务是否符合您的需求。例如,您可能对身份验证有定制要求,可能需要开发定制的集成架构以支持这些要求。
-
模型可复现性要求:由于 AI 服务管理预训练模型和定制模型的 ML 算法,这些模型和算法可能会随时间变化。如果您有严格的可复现性要求,例如出于合规原因使用旧版本的算法来训练定制模型,那么在使用 AI 服务之前,请验证 AI 服务是否提供此类支持。
-
成本:了解您的使用模式需求并评估使用 AI 服务的成本。如果开发和使用定制模型的成本更有效,且运营成本没有超过定制模型带来的成本效益,那么可以考虑自行构建的选项。
在采用 AI 服务时,还有其他考虑因素,例如监控指标、为审计要求对 API 版本进行控制以及数据类型和体积要求。
使用 AI 服务构建智能解决方案
AI 服务可用于构建不同的智能解决方案。为了确定您是否可以使用 AI 服务来满足您的用例,您必须确定业务和 ML 需求,然后评估 AI 服务是否提供您所需的职能和非职能能力。在本节中,我们将介绍几个包含 AI 服务的业务用例和架构模式。
自动化贷款文件验证和数据提取
当我们从银行申请贷款时,我们需要向银行提供税务申报表、工资条、银行对账单和照片身份证等文件的物理副本。在收到这些文件后,银行需要验证它们并将文件中的信息输入贷款申请系统以进行进一步处理。截至写作时,许多银行仍在手动执行此验证和数据提取过程,这既耗时又容易出错。
要确定您是否可以使用任何 AI 服务来解决问题,您需要确定要解决的 ML 问题。在这个特定的业务流程中,我们可以确定以下 ML 问题:
-
文档分类:文档分类是 ML 任务,其中文档被分类到不同的类型,如驾照、工资条和银行对账单。此过程识别文档类型,并确保收到的所需文档可以根据其类型进行进一步处理。
-
数据提取:数据提取是从文档中识别相关信息并将其提取出来的任务。此类信息的例子包括客户姓名和地址、收入信息、出生日期细节和银行余额。
正如我们所学的,这两个任务可以通过 Comprehend 和 Textract AI 服务执行。以下图表显示了包含这两个服务的架构流程:
图 11.1:贷款文档验证和数据提取过程
在此架构中,我们使用 Textract、Comprehend 和 Amazon Augmented AI 服务的组合来支持贷款文档分类和贷款数据处理流程。
贷款文档分类工作流程
首先,我们需要为每种文档中出现的文本训练一个自定义文本分类模型。在这里,我们将使用 Comprehend 训练一个自定义分类模型。Comprehend 的自定义分类器的训练数据包括必要的输入文本和标签。请注意,Comprehend 对输入文本大小和最大类别的数量有限制,并且这个限制可能会改变。请查看官方文档以获取最新的限制详情。一旦模型训练完成,您将获得一个用于分类器的私有 API 端点。
一旦自定义模型训练并部署,架构的主要流程如下:
-
数据提取:一旦文档收到并数字化为图像或 PDF,可以使用 Textract 从文档中提取文本、表格数据和表单数据。输出将以 JSON 格式存储,并作为文件存储在 S3 中。
-
人工审核:为确保 Textract 提取的数据的高准确性,可以实施人工审核流程来验证低置信度预测并手动更正它们。此人工审核工作流程可以使用 Amazon Augmented AI 服务实现。
-
文档分类:使用已训练的自定义 Comprehend 模型对 JSON 输出进行处理,以生成分类预测。
-
更新下游系统:将预测输出传递给下游系统进行进一步处理。
有可用的替代架构选项。例如,您还可以将文档视为图像,并使用 Rekognition 服务进行图像分类。另一个选项是使用您的算法(如 LayoutLM)训练一个自定义模型,并使用 Textract 的输出准备一个训练数据集。在决定正确的技术时,验证多个选项以实现最佳的价格/性能权衡是明智的。
贷款数据处理流程
贷款数据处理流程关注处理数据提取过程的 JSON 输出。JSON 文档包含整个文档的原始文本和结构细节,并且只需要下游处理和存储的文本子集。处理脚本可以使用 JSON 文件中的结构解析文档,以识别和提取所需的具体数据点。然后,可以将这些数据点输入到下游数据库或系统中。
媒体处理和分析工作流程
多年来,媒体和娱乐行业积累了大量的数字媒体资产,这些新数字资产的增长正在加速。数字资产管理中的一个关键能力是搜索和发现。这种能力不仅影响用户体验,还影响媒体内容的有效货币化。为了快速呈现最相关的内容,媒体公司需要通过元数据来丰富内容,以便进行索引和搜索。
在这个特定的商业挑战中,我们可以识别以下机器学习问题:
-
语音转文字转录:视频和音频文件中的音频部分需要转录成文字脚本。然后,这些脚本可以进一步分析以获取更多信息。
-
文本自然语言处理分析:可以在脚本上执行自然语言处理分析,如实体提取、情感分析和主题建模。
-
对象/人物/场景/活动检测:可以在视频帧和图像上执行计算视觉任务,以提取对象、人物、场景和活动。
下图显示了使用 Transcribe、Comprehend 和 Rekognition 执行所识别的机器学习任务的架构:
图 11.2:媒体标签和分析架构
在这个架构中,我们为视频内容、视频标签和分析、图像标签和分析构建了一个管道。
对于直播视频源,如广播,AWS Elemental 服务可以接收直播流,处理它们,并将它们存储在 S3 中。您可以在aws.amazon.com/elemental-live/找到有关 Elemental 服务的更多详细信息。可以使用各种不同的功能将图像和视频文件数据源摄入到 S3 中,包括 S3 API 或更高级别的服务,如用于安全文件传输协议(SFTP)的 AWS Transfer。
由于管道中有多个并行处理流,我们可以使用 AWS Step Functions 来编排不同流的并行执行。这些可以生成以下输出流:
-
字幕和文本分析流:此流主要使用 Amazon Transcribe 和 Amazon Comprehend AI 服务。Transcribe 转录视频的音频部分,并生成字幕文件和常规脚本。然后,常规脚本由 Comprehend 用于运行文本分析。从这个流中提取的一些示例元数据可以包括人物和地点的实体、使用的语言以及脚本不同部分的情感。
-
视频标签和分析流:此流识别不同视频帧中的对象、场景、活动、人物、名人和带时间戳的文本。
-
图像标签和分析流:此流识别不同图像中的对象、场景、活动、名人和文本。
媒体处理流输出的结果可以进一步处理和组织为有用的元数据,用于不同的媒体资产。一旦完成,它们就会被存储在媒体元数据仓库中,以支持内容搜索和发现。
电子商务产品推荐
产品推荐是电子商务中的一个重要功能。它是增加销售额、改善参与体验和保持客户忠诚度的关键推动力。
在电子商务产品推荐中,多个功能需求可以构建为机器学习问题:
-
基于客户行为和档案的推荐:机器学习算法可以从客户过去的电子商务互动中学习客户的内在特征和购买模式,以预测他们可能会喜欢的商品。
-
处理冷门商品推荐(无历史记录的商品)的能力:机器学习算法可以探索客户对冷门商品的反应,并调整推荐以平衡探索(推荐新商品)和利用(推荐已知商品)。
-
推荐相似商品的能力:机器学习算法可以根据产品属性和一组客户的集体互动模式来学习产品的内在特征,以确定产品相似性。
考虑到这些功能需求,以下架构图展示了使用 Amazon Personalize 作为推荐引擎的电子商务架构:
图 11.3:电子商务网站和推荐架构
在此架构中,我们使用 Personalize 作为推荐引擎,以支持在线用户体验以及目标用户营销体验。
RDS 数据库、DynamoDB 和 Elasticsearch 是商品、用户和交互数据的主要数据源。Glue ETL 作业用于将源数据转换为 Personalize 解决方案构建所需的数据集。
一旦个性化解决方案经过评估,符合所需标准,它就会被部署为一个个性化活动,以服务于访问电子商务网站的客户的推荐请求。
Amazon Pinpoint 是一个托管的目标营销服务。您可以使用 Pinpoint 来管理用户细分并发送电子邮件和短信营销活动。在此架构中,Pinpoint 服务获取一组目标客户的推荐产品列表,并向这些用户发送带有个性化推荐的电子邮件或短信活动。
智能搜索实现客户自助服务自动化
优质的客户服务可以提升客户满意度并建立长期的客户忠诚度。然而,客户支持工作非常劳动密集,可能会因为长时间的等待和知识不足的支持人员而导致客户满意度下降。客户自助服务能力已被不同行业的组织广泛采用,以减少客户支持电话量并提高客户满意度。
在客户自助服务场景中,我们可以识别以下机器学习问题:
-
自动语音识别(ASR):这个机器学习任务识别人类语音并将其转换为文本,然后使用 NLU 来理解文本的意义。
-
自然语言理解(NLU):NLU 是自然语言处理(NLP)的一个子领域,它处理意图理解和阅读理解。NLU 关注文本的意义和意图。例如,如果文本是我能查看我的储蓄账户的现金余额吗?,那么这里的意图是获取账户余额。另一个 NLU 的例子是根据问题的语义意义和文本提取特定信息。
-
文本转语音:这个机器学习任务将文本转换为自然的人类声音。
下面的图示展示了为顾客查找客户相关详情、一般信息和常见问题解答(FAQs)而实现自助服务聊天功能的一个示例架构:
图 11.4:带有智能虚拟助手的自助服务聊天门户
在这个架构中,使用 Amazon Lex 机器人提供基于文本的对话界面以供客户互动。客户使用自助服务聊天门户来启动对话,聊天门户通过 Lex API 与 Lex 机器人集成。
Lex 机器人支持多种不同的意图,例如查找账户信息、更新客户资料和我如何退货?。
根据意图,Lex 机器人会将满足请求路由到不同的后端。对于与客户账户相关的查询,它将使用 Lambda 函数进行满足。对于信息搜索相关的问题,Lex 机器人会将查询发送到 Kendra 索引进行满足。
在探索了各种人工智能服务和它们的实际商业应用之后,接下来的章节将重点关注采用这些服务相关的运营考虑因素。这包括深入研究 MLOps、代码推广和监控流程,以提高人工智能实施的运营效率。
设计人工智能服务的 MLOps 架构
实现自定义人工智能服务模型需要数据工程、模型训练和模型部署管道。这个过程类似于使用机器学习平台构建、训练和部署模型的过程。因此,当我们在大规模运行人工智能服务时,也可以采用 MLOps 实践。
基本上,人工智能服务的 MLOps 的目的是提供与机器学习平台 MLOps 相似的益处,包括流程一致性、工具可重用性、可重复性、交付可扩展性和可审计性。在架构上,我们可以为人工智能服务实现类似的 MLOps 模式。
AWS 人工智能服务和 MLOps 的账户设置策略
为了隔离不同的环境,我们可以采用多账户策略来配置人工智能服务的 MLOps 环境。以下图表展示了多账户 AWS 环境的设计模式。根据您对职责分离和控制的要求,您也可以考虑将这些合并为更少的环境:
图 11.5:AWS 人工智能服务的 MLOps 架构
在这个多账户 AWS 环境中,开发者使用自定义模型开发环境来构建和测试数据工程、模型训练和模型部署的管道。当准备就绪时,管道将在模型开发环境中使用生产训练数据进行正式的模型构建和测试。由于训练好的 AI 服务模型通常无法导出,我们需要在部署环境中复制模型训练工作流程以进行模型部署。
共享服务环境托管 CI/CD 工具,如 AWS CodePipeline 和 AWS CodeBuild。您使用 CI/CD 工具为在不同环境中运行的数据工程、模型构建和模型部署构建不同的管道。例如,UAT 环境的管道可能包含以下组件和步骤:
-
CodePipeline 定义:此定义将包含一个 CodeBuild 步骤、一个 CloudFormation 执行步骤和一个 Step Functions 工作流程执行步骤。
-
CodeBuild 步骤:CodeBuild 步骤通过添加创建 Step Functions 工作流程所需的额外输入来丰富 CloudFormation 模板,该工作流程协调数据工程、数据集创建、数据摄入、模型训练和模型部署。
-
CloudFormation 执行步骤:此步骤执行 CloudFormation 模板以创建 Step Functions 工作流程。
-
Step Functions 工作流程执行步骤:此步骤启动 Step Functions 工作流程以运行工作流程中的各种步骤,例如数据工程和模型训练。例如,如果我们为 Personalize 模型训练和部署构建一个 Step Functions 工作流程,该工作流程将包括以下六个步骤:创建数据集组、创建数据集、导入数据集、创建解决方案、创建解决方案版本和创建活动。
在多账户环境中,也可能存在其他专门用于数据管理、监控和安全的账户。
在不同环境中进行代码推广
与我们用于 ML 平台的模式类似,我们可以使用代码仓库作为将代码推送到不同环境的机制。例如,在代码开发期间,开发者创建代码工件,如 Glue ETL 作业的数据工程脚本和 CloudFormation 模板框架,并为 CodeBuild 构建运行不同命令的规范文件。一旦代码被认为准备好,可以将其提交到代码仓库的发布分支以进行正式模型构建和测试,开发者将代码检查到代码仓库的发布分支。代码检查事件可以触发 CodePipeline 作业在共享服务中运行 CodeBuild 步骤,然后在模型开发环境中运行 Step Functions 工作流程步骤。当它准备好进行生产发布时,可以在共享服务环境中触发部署 CodePipeline 作业以执行 CloudFormation 模板,在生产环境中部署模型。
监控 AI 服务的运营指标
AI 服务向 CloudWatch 发送运营状态。例如,Amazon Personalize 发送诸如成功推荐调用次数或训练作业错误之类的指标。Rekognition 发送诸如成功请求计数和响应时间之类的指标。可以配置警报,在指定的指标达到定义的阈值时发送警报。以下图表显示了 Amazon Personalize 的示例监控架构:
图 11.6:Amazon Personalize 的监控架构
使用这种监控架构,CloudWatch 从 Personalize 服务收集指标。一个计划的 CloudWatch 事件触发一个 Lambda 函数,该函数拉取一组 CloudWatch 指标并将事件发送到 EventBridge 服务。EventBridge 规则可以配置为触发 Lambda 函数以更新 Personalize 配置,例如在检测到节流时更新 Personalize 的minProvisionedTPS配置,或者在发生某些错误时发送电子邮件通知。
您也可以采用类似的监控架构模式应用于其他 AI 服务,例如 Comprehend 和 Rekognition。
实践实验室 – 使用 AI 服务运行 ML 任务
在这个实践实验室中,您将使用 Rekognition、Comprehend、Textract、Personalize 和 Transcribe 执行一系列 ML 任务。实验室结束后,您将获得使用几个 AI 服务的核心功能和它们如何用于各种 ML 任务的实践经验。按照以下步骤开始:
-
启动您在第八章,使用 AWS ML 服务构建数据科学环境中创建的 SageMaker Studio 配置文件。您将在该配置文件中创建和运行新的笔记本。
-
我们需要为新笔记本提供访问 AI 服务的权限。为此,找到 Studio 环境的 Studio 执行角色,并将其附加
AdministratorAccessIAM 策略。在这里我们将使用此策略以简化操作。在一个受控环境中,您需要设计一个策略以提供访问不同服务所需的具体权限。 -
如果您尚未这样做,请使用
git clone https://github.com/PacktPublishing/The-Machine-Learning-Solutions-Architect-and-Risk-Management-Handbook-Second-Edition/命令将github.com/PacktPublishing/The-Machine-Learning-Solutions-Architect-and-Risk-Management-Handbook-Second-Edition/克隆到您的 Studio 环境中。 -
使用 Comprehend 运行 NLP 任务:
-
在
Chapter11目录中打开comprehend.ipynb笔记本。此笔记本使用 Comprehend 执行一系列 ML 任务,包括语言检测、实体检测、情感检测、PII 检测、关键短语检测和语法分析。 -
创建一些您想要进行 NLP 分析的样本文本,并将其保存为
comprehend_sample.txt到数据目录中。 -
在笔记本中运行以下代码以导入库并设置用于 Comprehend 的
boto3客户端:from pprint import pprint import boto3 items_to_show = 10 with open('data/comprehend_sample.txt') as sample_file: sample_text = sample_file.read() comprehend_client = boto3.client('comprehend') -
在笔记本中运行以下代码以检测文本中的主导语言:
print("detecting dominant language") languages = comprehend_client.detect_dominant_language( Text=sample_text) lang_code = languages['Languages'][0]['LanguageCode'] pprint(lang_code) -
在笔记本中运行以下代码以检测实体:
print("Detecting entities using the pre-trained model.") entities = comprehend_client.detect_entities( Text=sample_text, LanguageCode=lang_code) print(f"The first {items_to_show} are:") pprint(entities['Entities'][:items_to_show]) -
在笔记本中运行以下代码以检测情感:
print("Detecting sentiment in text") sentiment = comprehend_client.detect_sentiment( Text=sample_text, LanguageCode=lang_code) pprint(sentiment['Sentiment']) pprint(sentiment['SentimentScore']) -
在笔记本中运行以下代码以检测 PII 实体:
print("Detecting pii entities in text") pii = comprehend_client.detect_pii_entities( Text=sample_text, LanguageCode=lang_code) pprint(pii['Entities'][:items_to_show]) -
在笔记本中运行以下代码以检测关键短语:
print('Dectecting key phrases') key_phrases = comprehend_client.detect_key_phrases( Text=sample_text, LanguageCode=lang_code) pprint(key_phrases['KeyPhrases'][:items_to_show]) -
在笔记本中运行以下代码以检测语法:
print('Detecting syntax') syntax = comprehend_client.detect_syntax( Text=sample_text, LanguageCode=lang_code) pprint(syntax['SyntaxTokens'][:items_to_show])
-
-
使用 Transcribe 运行音频转录作业:
-
在
Chapter11目录中打开transcribe.ipynb笔记本。此笔记本使用数据目录中的样本音频文件运行转录作业。 -
找到一个您想要进行转录的样本 MP3 音频文件,并将其保存为
transcribe_sample.mp3到数据目录中。 -
在笔记本中运行以下代码以设置用于 Transcribe 的
boto3客户端:from pprint import pprint import boto3 import time transcribe_client = boto3.client('transcribe') s3_resource = boto3.resource('s3') -
在笔记本中运行以下代码以创建用于存储音频文件的 S3 存储桶:
bucket_name = f'transcribe-bucket-{time.time_ns()}' bucket = s3_resource.create_bucket( Bucket=bucket_name, CreateBucketConfiguration={ 'LocationConstraint': transcribe_client.meta.region_name}) media_file_name = 'data/transcribe_sample.mp3' media_object_key = 'transcribe_sample.mp3' bucket.upload_file(media_file_name, media_object_key) media_uri = f's3://{bucket.name}/{media_object_key}' -
在笔记本中运行以下代码以启动转录作业:
job_name = f'transcribe_job_{time.time_ns()}' media_format = 'mp3' language_code = 'en-US' job_args = { 'TranscriptionJobName': job_name, 'Media': {'MediaFileUri': media_uri}, 'MediaFormat': media_format, 'LanguageCode': language_code} transcribe_job = transcribe_client.start_transcription_job(**job_args) -
导航到 Transcribe 控制台。在 Transcription Jobs 部分中,您将看到新创建的转录作业。
-
等待状态变为 完成 并点击作业链接;您将在 transcription preview 部分的 Text 选项卡下看到转录内容。
-
-
使用 Rekognition 运行计算机视觉:
-
在
Chapter11目录中打开rekognition.ipynb笔记本。此笔记本运行一系列文本提取任务,包括文本提取、表格提取和表单提取。 -
将用于分析的样本图像保存为
textract_sample.jpeg到data目录中。尝试使用包含文本、表格和表单的样本图像。 -
在笔记本中运行以下代码以设置 Textract 的
boto3客户端:from pprint import pprint import boto3 textract_client = boto3.client('textract') -
在笔记本中运行以下代码以加载图像:
document_file_name = 'data/textract_sample.png' with open(document_file_name, 'rb') as document_file: document_bytes = document_file.read() -
在笔记本中运行以下代码以检测表格和表单:
print('Detecting tables and forms') feature_types = ['TABLES', 'FORMS'] tables_forms = textract_client.analyze_document( Document={'Bytes': document_bytes}, FeatureTypes=feature_types) blocks_to_show = 10 pprint(tables_forms['Blocks'][:blocks_to_show]) -
在笔记本中运行以下代码以检测文本:
print('Detect text') text = textract_client.detect_document_text( Document={'Bytes': document_bytes}) blocks_to_show = 20 pprint(text['Blocks'][:blocks_to_show])
-
-
使用 Personalize 训练推荐模型:
-
在
Chapter11目录中打开personalize.ipynb笔记本。这个笔记本使用电影镜头数据集训练了一个用于电影评论推荐的 Personalize 模型。它涵盖了创建数据集组/数据集、导入数据、构建解决方案和创建 Personalize 营销活动的过程。 -
按照笔记本中的说明,依次运行所有单元格以完成所有步骤。
-
恭喜!你已经成功使用了几个 AWS 人工智能服务和它们的 API。正如你所见,使用预训练模型执行不同的机器学习任务非常简单。使用人工智能服务训练自定义模型涉及一些额外的步骤,但底层基础设施和数据分析细节被抽象化,以便非数据科学家也能轻松使用这些服务。
摘要
在本章中,我们讨论了围绕人工智能服务的话题。我们回顾了 AWS 人工智能服务列表以及它们可以用于构建机器学习解决方案的地方。我们还讨论了采用 MLOps 进行人工智能服务部署。现在,你应该对人工智能服务有很好的理解,并知道你不必总是构建自定义模型来解决机器学习问题。人工智能服务为你提供了一种快速构建人工智能应用程序的方法,当它们是一个好的选择时。
在下一章中,我们将深入探讨人工智能风险管理,这是机器学习从业者需要熟悉的重要领域,因为它对于理解整个机器学习生命周期中的关键风险和缓解方法至关重要。
加入我们的 Discord 社区
加入我们的 Discord 空间,与作者和其他读者进行讨论:
第十二章:AI 风险管理
随着组织越来越依赖 AI 进行关键决策并将 AI 纳入其业务的各个领域,有效的 AI 风险管理应成为首要任务。确保 ML 系统的安全合规部署对于建立 AI 解决方案的可信度至关重要。然而,许多组织和个人对 AI 系统相关的风险了解非常有限,这往往会导致可能对组织造成财务或法律上负面影响的后果。在本章中,我们将探讨关键的 AI 风险场景,突出 AI 风险管理与传统软件风险管理的差异,并强调拥有稳健的 AI 风险管理实践的重要性。我们将提出一个组织可以考虑用于管理 AI 风险的风险管理框架。最后,我们将讨论如何在 ML 生命周期的不同阶段管理风险,并设计支持风险管理和 AI 治理的 ML 平台。
具体来说,我们将涵盖以下关键主题:
-
理解 AI 风险场景
-
AI 风险管理监管环境
-
理解 AI 风险管理
-
在 AI 生命周期中应用风险管理
-
考虑治理和风险管理的 ML 平台设计
理解 AI 风险场景
我合作过的许多组织对它们 AI 系统中呈现的风险了解非常有限。他们通常将 AI 风险处理方式与传统软件相关的风险处理方式相同。实际上,AI 系统呈现的是一套我们在传统软件中通常看不到的新风险。在传统软件中,风险主要关于软件漏洞、遗留技术栈、恶意软件、配置错误以及数据未授权访问。AI 系统面临着许多相同的软件风险;此外,AI 系统还可以呈现新的风险类型,如偏见和错误信息。这些风险可能对依赖 AI 系统进行业务运营和决策的组织和个人产生重大的负面影响。AI 风险可以以许多不同的方式表现出来,例如表现出偏见行为或产生意外的预测结果。许多 AI 风险场景也是难以检测的沉默风险。
以下是一些 AI 风险可能出现的场景:
-
偏见和歧视:与人工智能相关联的最知名的风险之一是人工智能系统中可能表现出偏见和歧视。这可能会发生在机器学习算法在具有偏见的数据上训练或当算法本身容易受到偏见行为的影响时。在这些情况下,算法可能会学会歧视某些群体,导致不公平或歧视性的结果。例如,一家银行可能有一个使用具有偏见的数据集(如包括性别和种族群体作为输入)训练的机器学习模型,这可能导致对某些性别或种族群体的歧视,并可能违反诸如平等信贷机会法等法律法规。如今,许多组织使用人工智能筛选简历,发现其中一些人工智能系统对某些类型的候选人表现出偏好和偏见。2018 年,麻省理工学院的研究人员揭示了多家主要科技公司的人脸识别系统表现出显著的种族偏见,对深色皮肤个体的误识别率高于浅色皮肤个体。这一事件引发了关于人工智能系统可能持续和放大社会偏见、导致歧视性结果的担忧。
-
虚假信息和误解释:与人工智能相关联的另一项风险是生成虚假信息和事实误解释的可能性。这可能会发生在机器学习算法用于处理大量数据时,但数据中包含的错误或不一致性不易被发现。结果,算法可能会生成不准确或误导性的结果,导致可能的错误决策。随着生成式人工智能技术,如 ChatGPT 和 Stable Diffusion 模型的快速崛起,人类区分现实与幻觉也变得越来越困难。
例如,深度伪造技术的快速进步,这些技术利用人工智能生成高度逼真的合成音频、视频和图像,引发了对其潜在误用的担忧,包括传播虚假信息、冒充和操纵。已经报道了使用深度伪造视频冒充公众人物和传播虚假叙述的事件。
-
可解释性不足:许多机器学习算法,如神经网络,可能非常复杂且难以理解,即使是训练有素的专家也如此。这种缺乏透明度使得在问题出现时难以识别问题的原因,从而使得开发有效的缓解措施来解决问题变得更加困难。例如,当 ChatGPT 对用户提示提供错误响应时,通常无法理解它为什么会犯这样的错误。对于受监管的行业来说,当组织希望采用更先进的黑盒算法,如神经网络时,这构成了一个重大挑战,因为这些组织通常需要为特定的输入和问题提供确定的响应,以及决策是如何做出的。
-
意外后果:机器学习算法有时会产生在开发过程中未预见到的意外后果或副作用。这是因为 AI 模型通常是为了优化特定目标而优化的,例如增加公司利润,而忽略了其他因素,如性别和种族。例如,一个基于 AI 的目标营销系统可能会通过激励和优惠来针对一部分客户,而在追求利润最大化的过程中歧视少数族裔或低收入客户。
-
对抗攻击:机器学习算法可能容易受到对抗攻击,这涉及故意操纵输入数据以产生意外或不希望的结果,或者为机器学习模型植入后门访问。例如,攻击者可能使用对抗攻击欺骗基于 AI 的欺诈检测系统,将其分类为合法交易。ML 模型也可能被破坏,通过使用如成员推断攻击等对抗技术来揭示训练数据。已经有一些对抗攻击的实例。在 2017 年,密歇根大学的研究人员展示了一种方法,可以生成小而看似无害的补丁,这些补丁可以放置在物理对象上,如停车标志或行人,导致最先进的对象检测模型误分类或无法检测这些对象。在另一个例子中,一家汽车经销商实施的聊天机器人因恶意用户利用漏洞而面临中断,有时这会导致机器人无意中提出非常规交易,如以最低成本购买全新的汽车。
-
隐私侵犯和敏感数据泄露:如今,许多最先进的模型都是使用来自许多不同来源的大量数据进行训练的,有时,个人或敏感信息会被用于这些模型的开发中。这本质上增加了潜在隐私侵犯和敏感数据意外泄露的风险。例如,为了训练用于癌症检测的医疗影像模型,你通常需要真实的患者数据,如 CT 扫描和其他受保护的个人信息(PHI)或个人可识别信息(PII)。如果处理不当,这些信息可能会被未经授权访问的人接触到。此外,作为模型训练的一部分,一些敏感数据可能会被训练模型记住,并且模型在做出预测时可能会泄露这些信息。2020 年,纽约时报的一项调查报告揭示了人们在没有同意和知情的情况下,他们的图像被用于 AI 模型训练。
-
第三方风险:虽然第三方风险也存在于第三方供应商的传统软件中,但 AI 系统在之前未见过的领域提高了这些风险。随着迁移学习、从预训练模型进行微调等 ML 技术的出现,越来越多的组织正在基于现有的预训练模型构建定制模型。然而,鉴于这些预训练模型的黑盒性质,它增加了模型行为的不确定性和关于模型科学有效性的未知因素。由于预训练模型超出了消费组织的安保和流程控制范围,消费组织可能会继承预训练模型中可能存在的风险,如偏差或后门攻击漏洞。例如,在 Hugging Face 等模型中心检测到具有诸如任意代码执行和文件写入等漏洞的模型。
-
模型测试风险:与传统的软件相比,基于 AI/ML 的软件和模型的测试标准和工具尚未充分发展。传统的软件测试主要关注定义良好的功能组件,如用户界面流程或业务逻辑,以及非功能性领域,如可扩展性和延迟。在 AI/ML 测试中,除了许多传统的软件测试要求外,还有新的测试概念,如不同故障模式的错误分析、模型敏感性、模型鲁棒性和对抗性测试,这些测试比传统的软件测试更难执行。该领域可用的测试工具也非常有限;通常,数据科学家和测试人员需要手动准备不同的测试场景和测试数据。
如您所见,人工智能系统的能力远远超出了传统软件,引入了许多新的潜在风险和挑战。随着这些先进技术被广泛采用并整合到关键领域,对其负责任的发展和部署的关注已上升至首位。鉴于人工智能的独特复杂性和深远影响,各个监管机构已采取积极措施,制定旨在减轻这些风险的指南和法规,以确保人工智能系统的道德和可信使用。
人工智能风险管理监管环境
随着人工智能技术在关键业务决策中的应用和快速进步,以及人工智能系统可能对个人、组织和社会产生的负面影响,许多国家和司法管辖区已制定政策、指南和法规,以帮助管理人工智能采用的风险。预计不同国家和司法管辖区将以较快的速度提出和通过更多立法。
在美国(US),联邦储备银行和货币监理署(OCC)早在 2011 年就发布了关于模型风险管理的监管指南(OCC 2011-2012/SR 11-7)。SR 11-7 已成为美国模型风险管理的关键监管指南。该指南确立了模型风险管理的核心原则,涵盖了治理、政策和控制、模型开发、实施和使用,以及模型验证流程。在治理和政策领域,它提供了关于模型清单管理、风险评级、角色和职责的指导。在模型开发和实施领域,它涵盖了设计过程、数据评估、模型测试和文档等主题。在验证领域,它提供了关于验证程序、监控和解决问题的指导。
在欧洲,欧洲中央银行(ECB)银行监管在 2016 年发布了内部模型针对性审查(TRIM)指南,以提供关于模型风险管理(MRM)框架的指导。具体来说,该指南指出,一个 MRM 框架需要有一个模型清单,以便全面了解模型及其应用,一个用于识别和缓解已知模型缺陷的指南,以及角色和职责的定义,以及政策和测量程序的定义。
最近,在 2021 年,欧盟(EU)推出了欧盟人工智能法案,旨在推广人工智能的好处,同时确保欧盟人工智能的安全和负责任使用。该法案采用基于风险的方法来监管人工智能,根据与人工智能系统相关的风险水平提出不同的要求。例如,支持关键基础设施的人工智能系统将被评为最高风险等级,并需要最严格的监督和法规。该法规还提出了人工智能透明度和问责制的规定,例如对可解释性和挑战人工智能系统做出的决策的能力的要求。它还对生物识别识别和监控中的人工智能使用制定了新的规则。
理解人工智能风险管理
为了应对与人工智能相关的各种风险并遵守不同的合规法规,许多组织,尤其是在受监管的行业中,已经开发和实施了人工智能风险管理计划。简而言之,人工智能风险管理是识别、评估和缓解与人工智能在自动化决策中使用相关的风险的过程。人工智能风险管理的最终目标是建立对人工智能/机器学习系统的信任,并确保符合适用的规则和法规。
信任一个人工智能系统需要对人工智能系统进行严格的评估和考虑,涉及许多不同的维度和标准。从功能上讲,一个值得信赖的人工智能系统需要可靠地提供有效的预测/响应,以满足其预期用途。这意味着生成的预测/响应始终有效,可以信赖用于可靠的决策。从伦理上讲,一个值得信赖的人工智能系统需要安全使用、可解释、隐私保护,并且公平,对偏见进行适当的管理和缓解。从网络安全的角度来看,一个值得信赖的人工智能系统还需要安全且能够抵御对抗性攻击。最后,一个值得信赖的人工智能系统需要提供透明度,例如系统如何以及使用哪些数据、算法和模型。值得注意的是,在构建和运营一个值得信赖的系统时,通常需要在这些不同维度之间进行权衡和取舍,这取决于组织的需要和目标。例如,为了保护隐私,一个组织可能需要在模型精度或预测速度上做出牺牲。
现在我们已经了解了在人工智能系统中建立信任所需的因素,让我们来探索并深入了解人工智能风险管理框架及其各个组成部分。以下图示展示了人工智能风险管理的关键组成部分,它主要涉及在人工智能生命周期中应用风险管理、企业风险管理和第三方风险管理,并受一套人工智能风险管理原则的指导。在本章中,我们将专注于风险管理。企业风险和第三方风险管理超出了人工智能的范畴,是普遍的考虑因素。
图 12.1:人工智能风险管理组件
接下来,我们将深入探讨治理监督原则和人工智能风险框架的细节。我们将主要关注对人工智能风险治理和风险管理(MRM)的理解,同时认识到传统企业安全和第三方风险管理也是整体人工智能风险管理考虑的一部分。
治理监督原则
实施人工智能风险管理始于建立关键治理原则。这些原则明确了风险管理计划需要达成的最终目标。根据组织所在的业务和监管环境,组织可以决定是否将其纳入其风险管理框架。以下是一些需要考虑的关键领域:
-
透明度:人工智能系统应设计为允许利益相关者理解决策是如何做出的以及为什么这么做。这可能包括解释机器学习模型预测的能力,以及对数据和使用算法的透明度,包括如何使用和实施。
-
问责制:组织应对人工智能系统做出的决策负责,包括其使用可能产生的任何负面后果。这种问责制将确保拥有组织有动力制定相关政策和流程来治理机器学习生命周期。
-
数据治理:组织应确保用于训练人工智能系统的数据是准确、代表性、道德和公正的。如果没有适当的数据治理,将很难信任使用未受管制的数据进行构建的人工智能系统。
-
人工监督:尽管人工智能系统旨在在大多数情况下自动做出决策而无需人工干预,但组织应具备在需要时实施人工监督的能力,这意味着在合理的情况下,人类应参与决策,并在必要时有权推翻决策。
-
隐私和安全:应建立适当的政策和流程,以确保人工智能系统根据法律和法规设计为保护资产隐私和安全。隐私和安全漏洞可能对组织产生重大的财务和非财务影响。
-
公平性:人工智能系统不应基于种族和性别等属性歧视某些个人或群体。
-
有效性和可靠性:人工智能系统应设计为产生可靠和有效的结果。需要实施适当的模型验证和测试框架及流程,以确保人工智能系统在生产中表现出高度可靠和可预测的行为。应建立机制来监控系统行为,并在观察到异常行为时实施缓解和回滚流程。
在治理监督下,组织还应考虑监管合规性要求、关于角色和责任的政策和指南,以及围绕人工智能系统和模型库存以及风险分类的标准和流程,以及如何处理生命周期和变更管理。
人工智能风险管理框架
在定义了人工智能治理监督原则后,组织可以向前推进,建立正式的人工智能风险管理框架,以及在整个机器学习生命周期中识别、评估和缓解风险的详细机制。许多组织采用的一个常见框架是金融服务业中常用的三道防线风险管理模型。该框架侧重于建立旨在识别、评估、缓解和审计与业务问题识别、数据管理、模型开发、部署和使用相关的潜在模型风险的策略、角色、责任和流程。
第一道防线由业务运营拥有。这一道防线专注于机器学习模型的发展和运用。业务运营负责在结构化的文档中创建和保留所有数据、模型假设、模型行为和模型性能指标,基于模型分类和风险暴露。模型经过测试和注册,相关的工件被保存,结果可以重现。一旦模型部署,将根据既定的程序和指南监控和解决系统问题、模型输出、模型偏差以及数据和模型漂移。
第二道防线由风险管理职能拥有,它专注于模型验证。风险管理职能负责独立审查和验证第一道防线生成的文档。这一道防线引入了关于控制和文档的标准,确保文档是自包含的,结果可重现,并且利益相关者对模型的局限性有充分的理解。
内部审计拥有第三道防线。第三道防线更多地关注控制和流程,而不是模型工件和理论。具体来说,这一道防线负责审计第一道和第二道防线,以确保所有既定流程和指南得到有效遵循和实施。这一道防线提供独立验证内部控制,并审查风险管理活动的及时性、频率和完整性。
MRM 仅主要解决与模型开发和开发生命周期相关的风险。然而,一个全面的 AI 风险管理框架还需要涵盖其他风险,如系统可扩展性和可靠性、系统未授权访问、访问拒绝和第三方故障风险。MRM 还应与企业技术风险、网络安全管理和第三方风险相结合,以确保对 AI 风险进行全面覆盖。
在人工智能生命周期中应用风险管理
人工智能风险可能存在于人工智能生命周期的任何阶段,从业务问题识别到人工智能系统的使用。在接下来的章节中,我们将探讨人工智能生命周期每个阶段可能出现的各种风险(如图 12.1 所示),并提出有效的策略和考虑因素以减轻这些风险。
业务问题识别和定义
在人工智能生命周期的这个初始阶段,组织对人工智能可以解决的业务问题有一个全面的理解。他们还概述了整体解决方案方法和数据需求。在这个阶段,验证人工智能解决方案是否符合治理原则、标准和要求,同时实现特定的业务目标,这是至关重要的。
一个显著的风险是合规性风险,它出现在对潜在监管要求缺乏考虑的情况下。组织必须了解与人工智能项目相关的适用监管要求,如欧盟人工智能法案,并在问题识别阶段采取适当的措施来应对。未能这样做可能导致不合规,影响整个项目。另一个关键考虑因素是道德风险。道德在一个组织的价值观和品牌声誉中可以发挥至关重要的作用。如果未在业务问题识别中整合,最终系统可能会导致与核心价值观和品牌不一致,从而造成声誉损害。
如果系统未针对预期用途进行设计,可能会出现意外后果。误用可能导致不可预见的负面后果,强调了对系统设计进行仔细考虑的必要性。风险评估和分类有助于确定潜在影响并指导不同级别的风险管理。如果没有这些,人工智能系统和其数据可能会被不当处理,导致意外后果和潜在的负面结果。此外,安全和隐私要求风险强调了实施安全和隐私措施的需要。如果没有这些要求,组织可能会面临隐私侵犯和人工智能系统被敌对操纵的风险,损害数据完整性和安全性。
在这个阶段识别出的每个潜在风险,进行评估以确定风险发生的严重性和可能性以及由此产生的后果都至关重要。根据每个组织的风险承受能力,确定是否应考虑任何缓解措施以降低风险。只有当关键风险得到理解、缓解或接受时,才能继续推进项目。
数据获取和管理
在项目生命周期的这个阶段,对于组织来说,确定适当的数据来源、建立数据获取策略以及评估其数据处理和管理的技术能力至关重要。除了面临许多常见的数据相关风险外,AI 系统还呈现一组独特的数据获取和处理风险。这些风险从选择适当的数据集到端到端的数据管理,涵盖了每个方面。这些风险包括从仔细选择数据集到在整个生命周期中对数据进行全面管理。
风险考量
一个关键风险是数据选择风险,不正确或采样不足的数据集可能引入重大的数据相关或偏差问题。这可能导致开发出有偏差的模型或无法有效解决实际问题的模型。例如,在一个信用评分项目中,如果在数据收集期间某些人口群体在数据集中代表性不足,那么产生的模型可能对代表性过高的群体表现出偏差。
数据质量和缺失数据对数据科学家来说是一个重大挑战,影响高质量机器学习模型的发展。确保数据准确性和解决缺失数据问题是成功开发稳健模型的关键。
由于数据标注过程主要依赖人工,数据标注风险成为一个关注点。这不仅成为模型开发的瓶颈,如果发生错误标注,还可能导致模型准确性下降。
对于符合特定合规要求的工程项目,监管和合规数据检查至关重要。执行监管和合规数据检查,例如数据主权规则,对于避免因违规而产生的潜在罚款和诉讼,保护组织的财务和声誉至关重要。
随着数据量,包括个人信息,的增加,随着人工智能能力的提升,数据隐私变得相关。在分析模型训练中,对个人数据的道德使用需要仔细考虑,以防止侵犯隐私。
对抗攻击风险引入了新的威胁维度,恶意行为者可以操纵训练数据,导致生成的模型在特定场景中表现不正确。例如,操纵训练数据标签可能导致模型学习错误并产生不准确的结果。这些与数据相关的风险需要细致的关注和缓解策略,以确保 AI 系统的成功和道德部署。
风险缓解
为了有效地缓解数据相关风险,必须建立全面的策略和机制,以解决与数据质量、偏见、人为错误和监管合规性要求相关的问题。这些机制包括各种倡议,包括实施强大的数据验证方法、建立数据选择和抽样的统一定义和标准、定期审查数据质量和完整性,以及提供缓解方法的指导。
为了解决数据选择和抽样风险,建立不同数据类型和来源的标准和一致定义至关重要,以确保在各种来源中数据选择的统一性。这些标准应包括对相关性、数据缺口、偏见和代表性的考虑,并提供关于缓解方法(如扩展数据来源、使用合成数据以及利用适当的抽样技术)的指导。
为了缓解数据质量风险,应采取严格的措施来验证是否满足最低的数据质量标准,以支持高质量的数据处理和模型训练。这包括建立规则和样本数据审查,以确保准确性、完整性、一致性以及目标人群的有效代表性。
为了解决数据标注风险,应在数据标注过程中实施控制措施,以确保一致性并减轻主观偏见。此外,对数据集标签的有效性进行样本测试可以进一步提高标注数据的品质和准确性。
在监管合规性和隐私检查方面,应将一套强大的检查机制整合到 MRM(营销资源管理)流程中。这包括建立增强的数据访问、所有权、收集、存储、传输和评估控制,以满足监管要求。此外,应将全面的数据隐私保护监管合规性检查嵌入到 MRM 流程中,将这些控制与企业的访问和身份验证平台联系起来,以实现集中治理。在必要时,应实施数据加密和数据掩码,以加强隐私保护
最终,数据相关风险的缓解策略和机制应根据组织的具体需求量身定制,并持续审查和更新,以跟上 AI/ML 技术及其相关风险不断发展的格局。
实验和模型开发
在项目生命周期的这个阶段,数据科学家利用各种算法和数据集进行实验和开发模型,以解决业务问题。与这个项目生命周期阶段相关的风险主要针对 AI/ML。它们涵盖了广泛的主题,如算法选择及其相关假设、限制、模型验证和鲁棒性、模型透明度和可解释性、模型公平性、合规性和预期模型使用。
风险考虑
模型假设和限制相关的风险源于假设和限制中的潜在不准确、不完整或不一致,导致模型无法充分适应情况。
例如,线性回归算法假设预测变量和响应变量之间存在线性关系,如果不存在这种关系,预测可能会错误或存在偏差。某些算法也可能对数据样本大小有限制,影响其在小数据集上的性能。
模型选择引入了当模型仅基于训练性能选择时与过拟合相关的风险,以及在需要可解释性时与缺乏可解释性相关的风险。不充分敏感性和情景分析对模型鲁棒性构成风险,因为未能理解信用风险模型的敏感性可能导致预测错误。同样,仅考虑有限经济情景的财务预测模型在意外事件发生时可能无法正常工作。
模型透明度风险源于透明度不足,阻碍了模型决策的可解释性和验证,如果组织无法证明其基于 AI 的决策是合理的,可能会在法律上处于脆弱状态。模型公平性风险承认数据和模型本身都可能引入偏差,影响 AI 系统的公平性。例如,朴素贝叶斯算法如果假设特征之间相互独立,那么当特征相关时,可能会导致预测错误。
模型评估风险源于独立验证不足或使用错误的验证方法或指标,当模型未经过充分测试时,可能会出现意外行为。模型使用和影响风险包括现实世界部署可能产生的潜在负面影响,因为基于历史数据训练的模型如果未来与过去差异显著,可能会表现不佳。
缺失血缘风险强调了解从数据源到模型工件(包括建模过程中的所有转换和实验)的来源的重要性,以理解模型行为并识别问题的根本原因。
风险缓解
为了减轻这些风险,组织必须建立全面的模型风险管理(MRM)标准,涵盖模型评估、验证、选择和公平性。此外,组织应提高其识别假设和局限性、解决已知差距以及通过以下方法确保模型透明度和溯源的能力和最佳实践:
-
对于模型假设和局限性风险,明确定义和验证算法的基本假设至关重要。使用各种技术测试难以验证的假设,确保完整性,并计算模型不确定性以确定输出结果的置信水平。
-
为了减轻与模型选择相关的风险,数据科学家应开发一套稳健的候选模型,进行多样化的团队审查,并涉及技术、业务和目标受众代表,以确保所选模型能够有效解决问题。建模方法应评估其是否适合目的、可解释、可重复和稳健,并记录决策和支撑证据。
-
在模型风险管理(MRM)框架内建立模型敏感性和场景测试标准,以解决敏感性和场景测试的不足。这些程序是开发过程的重要组成部分,提供了关于影响模型鲁棒性的边界条件的见解,最小化错误,并增强对输入输出交互的理解。
-
为了应对模型透明度风险,建立促进开发团队内部沟通和反馈的标准,确保模型开发过程中的透明度。详尽的文档,包括模型验证技术,作为透明度的佐证证据。
-
对于模型公平性问题,定义并纳入模型公平性标准。在模型生命周期中嵌入公平性检查,涉及利益相关者在问题缓解中的参与,增强治理技术,并认识到在算法系统中解决歧视的持续过程。
-
在模型风险管理(MRM)框架内纳入模型性能评估标准,以进行验证,涉及业务和技术利益相关者在问题发现和缓解中的参与。采用标准化的验证工具和技术,进行一致性的程序,并按照商定的标准进行端到端评估,在重新训练期间监控指标。
-
通过验证设计/部署/验证期间对决策的理解,在模型风险管理(MRM)内评估模型使用和影响风险。进行影响评估,以评估与预设阈值的偏差风险,并验证模型结果在精确度、一致性、相关性和与可信人工智能标准的对齐性。
-
建立从数据源到部署的模型溯源跟踪机制和技术能力。实施全面的元数据管理、相关工件版本控制、模型注册和审计/日志机制,以了解所做的更改、由谁以及为何目的。
总体而言,一个包含技术标准、持续监控和更新以及道德决策文化的综合 MRM 框架对于组织有效管理模型开发相关的风险至关重要,以便它们可以以可信的方式使用。
AI 系统部署和运营
在这个生命周期阶段,组织设计和构建 AI 系统/模型在生产中的部署技术环境,以处理更广泛的应用生态系统中的现实世界业务工作流程,并建立监控环境和修复从基本系统故障到模型性能退化的生产问题的操作流程和标准。
风险考虑
人类监督风险涉及在将 AI 模型部署到生产之前对其进行人类审查的关键实践,以确保其持续适合其预期目的,防止部署准备不足的系统导致生产问题或不可预见的结果。
技术集成风险出现在 AI 系统通常集成到更广泛的技术生态系统中,支持多个业务功能。在集成上游和下游系统进行数据传输、模型集成或 API 集成时可能会出现挑战,可能造成兼容性问题,例如错误的模型版本影响不同的系统。
技术可扩展性风险与 AI 系统/模型部署后数据量、业务用户和客户的意外激增相关。无法处理可扩展性场景可能会对业务和用户体验产生负面影响。
模型性能和行为变化风险源于使用历史数据开发的 AI 系统。现实世界环境中数据漂移和异常条件等意外变化可能导致模型的行为与原始假设不同。
回退程序风险强调了在检测到生产问题时建立良好的回退程序的重要性。不充分的回退协议可能会危及系统操作的连续性。
对抗攻击对 AI 系统提出了新的威胁。对抗攻击,如向 AI 系统提供不良数据,可能导致预测错误和下游决策错误。
风险缓解
为了在部署和运营期间有效管理风险,强大的缓解机制和技术能力是必不可少的。严格的测试和操作检查、集成标准、模型性能监控、建立的问题解决流程以及在整个 AI 生命周期中的对抗监控和修复是关键关注领域。
让我们深入探讨具体建议。
对于有效的 AI 风险管理来说,一个具有模型注册库的模型管理系统是一个关键要素。该系统应提供有关模型、性能指标、用途和相关元数据的详细信息,并应纳入 MRM 标准并嵌入操作化检查。压力测试和扩展模拟对于理解在重负载下的行为至关重要。组织应建立流程和工具,以便模型所有者可以监控、管理、治理和分析结果。
为了缓解 AI 集成风险,组织需要在风险管理中纳入集成标准和要求。确保平台间的互操作性并进行稳健的集成测试至关重要。验证适当的配置和生产环境中的集成对于防止迁移或升级过程中的错误是必不可少的。
建立模型部署审查和批准标准至关重要,包括对设计、算法、测试结果和性能指标进行详细审查。它应概述缓解潜在部署风险的步骤。
为了确保性能和行为变化的运营连续性,MRM 应包括模型监控、性能问题跟踪和解决标准。持续监控统计、技术和业务指标,以及实时断路器,有助于确保模型按预期运行。预先指定基准或旧模型作为后备选项,在性能边界被突破时是有用的。
在 MRM 中的对抗性攻击监控标准对于防止恶意输入导致模型故障至关重要。有效的测试、审计技术和认证计划是解决 AI 模型漏洞所必需的。利用对抗性攻击和模型数据泄露的研究进行漏洞测试,并确保对各种攻击的鲁棒性和弹性是至关重要的。应建立积极的网络威胁狩猎,以检测和隔离网络中的高级威胁。
到目前为止我们所涵盖的内容并不包括在整个 AI 生命周期中可能遇到的所有风险,而且新的风险也在不断出现。在实践中,完全缓解所有风险也是不可能的,并且可能适得其反。组织应确定不同风险的容忍度,这些容忍度将高度依赖于具体的应用场景和用例。其他因素,如系统所有者和监管机构制定的政策、组织优先级和资源考虑,也可能影响风险容忍度。值得注意的是,随着影响因素的变化,风险容忍度可能会随时间而变化。
同时,也要优先考虑人工智能生命周期中识别出的风险。组织应认识到并非所有风险都是相同的,并且应适当分配有限的资源来应对不同的风险。应使用评估的风险级别和人工智能系统的潜在影响来优先分配资源,以减轻这些风险。
最后,人工智能风险不是孤立的风险,应该被纳入更广泛的企业风险管理策略和流程中。管理风险的不同参与者的角色和责任将跨越不同的功能领域,如工程、数据科学、网络安全、审计和合规。
考虑治理和风险管理设计机器学习平台
机器学习技术系统在人工智能风险管理和活动中扮演着至关重要的角色。首先,这些系统必须开发和构建以符合内部和外部政策和指南。此外,技术可以帮助简化并自动化机器学习治理流程。以下图示展示了企业机器学习平台中的不同机器学习治理接触点。重要的是要知道,仅机器学习技术本身只能帮助解决人工智能风险的一个子集;还需要整合其他企业安全技术,以形成一个更全面的治理和防御机制。
图 12.2:机器学习平台和机器学习治理
在前面的图中,机器学习治理接触点已集成到第九章设计 AWS 机器学习服务的企业机器学习架构中图 9.4所描述的 MLOps 架构中。
当一个机器学习平台在考虑人工智能风险管理和治理的情况下构建时,它可以收集和提供信息以支持风险管理计划,同时优化风险管理流程。在线数据存储、工作流应用程序、文档共享系统和模型库存数据库是用于人工智能治理的技术解决方案之一。在接下来的部分,我们将深入了解一些核心的机器学习治理组件,并看看机器学习平台或技术可以如何融入其中。
数据和模型文档
人工智能治理的一个基本要素是文档。所有用于决策的模型都应得到适当的文档记录。文档的范围可能包括以下内容:
-
数据概述,估值数据质量报告以及对输入数据的评估
-
模型开发文档包括方法学和假设、模型使用说明、性能和验证结果以及其他定性和定量分析
-
第二和第三道防线对模型验证策略和报告
-
模型性能监控结果和数据漂移报告
-
模型实施和用户接受度测试报告
机器学习平台在机器学习治理文档中的作用通常是提供数据点,这些数据点输入到正式的风险管理文档中或生成一些现成的报告。具体来说,一个机器学习平台应该能够跟踪、存储和报告以下数据点:
-
数据质量指标,如数据描述、统计数据、偏差和错误
-
开发和测试中的模型指标和验证结果
-
模型偏差和可解释性报告
-
生产中的模型性能监控结果
-
模型描述和预期用途
-
风险评级和分类详情
不同的机器学习平台在支持人工智能治理文档要求方面具有不同的功能。在此,我们将讨论 SageMaker 支持这些要求的各种功能。SageMaker 可以生成要纳入模型风险文档的数据和文档。这包括跟踪和生成与人工智能治理文档相关的信息,例如:
-
模型指标:SageMaker 训练服务跟踪模型指标,如训练错误和验证错误。
-
数据和模型偏差报告:SageMaker Clarify 是 SageMaker 中的偏差检测组件。如果您启用 SageMaker Clarify,您可以为训练数据和训练模型获取数据和模型偏差报告。数据和模型偏差报告包含有关训练数据不平衡和不同年龄组和性别预测行为的详细信息。
-
模型可解释性报告:SageMaker Clarify 还提供模型可解释性功能。它使用 SHAP 来解释每个输入对最终决策的贡献。您可以在
shap.readthedocs.io/en/latest/index.html获取更多关于 SHAP 的信息。 -
模型卡:SageMaker 模型卡可用于记录有关机器学习模型的关键信息,例如模型的使用目的、风险评级以及模型训练和性能的详细描述。
可用的开源和管理模型注册平台可用于管理模型注册。例如,MLflow 模型注册是开源选项,而 Amazon SageMaker 提供托管模型注册服务。SageMaker 模型注册具有几个关键功能,可以帮助进行机器学习治理活动和流程:
-
模型清单:所有不同版本的模型都属于 SageMaker 模型注册中的相应模型组。您可以在这里查看所有模型组和模型的各个版本。模型度量、训练作业详情、用于训练的超参数和训练数据源等元数据对于模型审查和模型审计流程是重要的数据点。根据具体业务需求,您可以设置一个集中式模型注册以实现单一企业视图,或者如果需要满足治理和审计要求,可以设置分布式模型注册。
-
模型批准和生命周期跟踪:您可以直接在 SageMaker 模型注册表中跟踪模型的批准和模型阶段。这些详细信息有助于业务运营和审计确保遵循适当的流程。
在部署后监控模型对于识别任何潜在故障并采取及时补救措施以减轻风险至关重要。为确保平稳运行,必须监控系统的可用性和错误,以及数据和模型漂移以及预测失败。Amazon SageMaker 提供了一种模型监控功能,可以检测数据和模型漂移。SageMaker 模型监控提供以下功能:
-
数据漂移:使用 SageMaker 模型监控,您可以在生产中监控数据质量问题以及数据分布偏差(即数据漂移)。要使用此功能,您使用基线数据集(例如模型训练数据集)创建基线,以获取数据统计信息和数据类型并建议监控约束。SageMaker 模型监控可以捕获实时推理流量,计算数据统计信息,检查数据类型,验证它们与约束,并触发警报。例如,如果一个特征的均值和标准差与基线有显著变化,则可以触发警报。
-
模型性能漂移:您可以使用 SageMaker 模型监控检测生产中的模型性能变化。要使用此功能,您使用包含输入和标签的基线数据集创建模型性能基线作业。基线作业将建议约束,即 Model Monitor 将与生产中收集的地面真实数据计算的指标进行比较的指标阈值。指标可以可选地发送到 CloudWatch 进行可视化。
-
特征归因漂移:当与 SageMaker Clarify 配合使用时,SageMaker 模型监控可以报告特征归因漂移。特征归因是特征对预测输出的重要性的指标。类似于数据和模型漂移,您使用基线数据创建 SHAP 基线作业以生成约束建议。然后安排单独的监控作业以监控生产中的预测与基线。
线谱和可重复性
MRM 需要建立数据和模型之间的线谱以确保可重复性。线谱是对数据的起源、转换和依赖关系的系统跟踪和记录,以及机器学习模型的开发和演变,在整个过程中提供透明度和问责制。线谱信息包括训练数据源、算法选择、超参数配置以及模型训练脚本。SageMaker 提供了几个有助于建立线谱的功能:
-
SageMaker 训练作业保留诸如训练数据源、训练作业容器(包含算法和训练脚本)、超参数配置以及模型工件位置等谱系数据。为了记录保留的目的,SageMaker 环境中的历史训练作业数据是不可变的。
-
SageMaker 实验和 ML 谱系跟踪可以包含更多组件细节,如数据处理,以实现更完整的谱系跟踪。
-
SageMaker 托管包含有关原始模型工件和推理容器的位置信息,以追踪从模型到端点的谱系。
这些谱系数据点,如训练数据源和训练配置,可以通过调用 SageMaker API 获得;外部应用程序可以直接调用 SageMaker API 来提取这些数据以供审查。或者,可以开发一个数据提取作业来提取这些数据点并将它们加载到专门构建的风险管理存储库中进行分析。
在 ML 系统的实施中,ML 隐私的重要性正在迅速增长。为了遵守数据隐私法规或内部数据隐私控制,ML 系统必须具备基本的基础设施安全特性,例如数据加密、网络隔离、计算隔离和私有连接。通过使用基于 SageMaker 的 ML 平台,您可以启用以下基本安全控制:
-
私有网络:由于 SageMaker 是一个完全管理的服务,它运行在 AWS 拥有的账户中。默认情况下,您自己的 AWS 账户中的资源通过公共互联网与 SageMaker API 通信。为了从您自己的 AWS 环境中启用到 SageMaker 组件的私有连接,您可以将它们附加到您自己的虚拟私有云(VPC)中的子网。
-
存储加密:在创建 SageMaker 笔记本、训练作业、处理作业或托管端点时提供加密密钥可以启用静态数据加密。
-
禁用互联网访问:默认情况下,SageMaker 笔记本、训练作业和托管服务可以访问互联网。可以通过配置来禁用互联网访问。
可观察性和审计
审计主要集中于过程验证和工件收集,以支持审计活动。进行过程所使用的平台通常作为收集工件的情报源。例如,假设存在一个 MRM 策略,在将模型部署到生产之前需要获得批准。在这种情况下,审计将需要访问记录系统以确保所需的数据被收集并保留。
SageMaker 和其他相关服务可以作为支持整体审计流程的数据源。具体来说,它提供了以下可能对审计目的相关的信息:
-
活动和访问审计跟踪:SageMaker 将所有审计跟踪数据发送到 CloudWatch 日志,这些数据可以保留并用于审计目的。
-
模型审批跟踪:模型部署审批在 SageMaker 模型注册表中跟踪。这可以作为审计员证据,证明遵循了所需的审批流程。
-
血缘跟踪:SageMaker 实验和 ML 血缘跟踪组件可以跟踪和保留模型血缘,如数据处理、模型训练和模型部署。血缘跟踪信息有助于审计员验证模型可以使用其原始数据和配置依赖关系进行重现。
-
配置更改:系统配置数据以更改事件的形式记录在 AWS CloudTrail 中。例如,当 SageMaker 端点被删除时,CloudTrail 中会有一个条目指示这种更改。
可扩展性和性能
为了减轻潜在的扩展性风险,AI 系统应该设计成能够处理动态和意外的负载。对于一个机器学习平台来说,这意味着训练基础设施的设计和实施旨在支持单个大型训练作业以及许多并行运行的训练作业。同样,模型托管基础设施应该能够处理大量并行运行的模型,以及跨多个节点运行的大量模型实例。
如果您选择的平台是 SageMaker,以下功能可以帮助减轻训练和托管扩展挑战:
-
训练基础设施扩展:SageMaker 支持大规模分布式训练,能够利用数百个节点和数千个 CPU/GPU。此外,SageMaker 提供了一个专门用于运行数据并行和模型并行训练作业的库。对于存储扩展,高性能存储解决方案如弹性文件系统(EFS)和 FSx 可以挂载到 SageMaker 训练节点上,以适应需要超过 1 TB 大规模数据集的训练作业。AWS 账户可以并行运行多个训练作业,并且可以根据请求增加软限制。
-
托管基础设施扩展:SageMaker 提供了多种选项来扩展模型托管需求。多模型端点(MME)功能允许您在单个端点后面托管多个模型,同时降低成本。SageMaker 的自动扩展功能使您能够根据诸如每个主机调用次数等指标定义扩展策略,当流量增加时,可以自动增加运行相同模型的实例数量。此外,无服务器推理选项允许您并发运行单个模型,最多可达 SageMaker 支持的最大数量。
数据质量
数据质量检查应在生命周期的多个阶段进行,包括数据获取和处理、探索性数据分析与数据整理、特征工程和模型推理。检查应涵盖数据质量的许多方面,如缺失数据、数据准确性、不同来源之间的不一致性、格式错误、不完整性、不平衡数据和重复。
从 AWS 技术角度来看,有几种专门设计的工具和功能可以帮助进行数据质量管理:
-
AWS Glue DataBrew 提供了一系列数据质量功能,可以帮助确保用于分析或模型训练的数据的准确性和可靠性。DataBrew 主要被数据工程师使用,他们在数据获取和处理阶段负责为下游用户(如数据科学家)提供和清理数据。以下是一些这些功能包括:
-
数据概要:DataBrew 可以自动概要化数据集,以识别数据质量问题,例如缺失或不一致的数据值、异常值或重复项。
-
数据清理:DataBrew 提供了一系列数据清理转换,可以应用于解决常见的数据质量问题,例如填充缺失值、删除重复项或标准化数据格式。
-
数据验证:DataBrew 可以执行数据验证检查,以确保数据值在预期的范围内,或者符合预定义的标准或格式。
-
数据血缘:DataBrew 跟踪数据转换的血缘,有助于确保数据被正确处理,并且任何更改都可以追溯到其来源。
-
数据版本控制:DataBrew 支持数据集的版本控制,使得跟踪更改并在必要时回滚到先前版本变得容易。
-
-
SageMaker Data Wrangler 提供了一些类似的数据质量功能,主要针对在 SageMaker 环境中进行数据探索性分析和特征工程的数据科学家。Data Wrangler 中的数据质量和洞察报告可以自动验证数据质量(如缺失值、重复行和数据类型),并帮助检测数据中的异常(如异常值、类别不平衡和数据泄露)。
总之,机器学习技术系统在人工智能风险管理领域发挥着关键作用。基础步骤涉及将这些系统与内部和外部政策对齐,确保稳健的合规性。
此外,利用 SageMaker 和 MLOps 系统等工具成为了一种战略方法,为文档编制、血缘跟踪、数据管理和质量保证提供了实质性支持。通过增强可观察性和实现彻底审计,这些技术使组织能够以高效和精确的方式应对人工智能风险管理的复杂性。
摘要
本章深入探讨了与人工智能风险管理相关的几个领域及其支持的技术平台。到目前为止,你应该对关键的 AI 相关风险场景、为什么 AI 风险管理至关重要以及如何在 AI 生命周期中检测和应对潜在风险有了坚实的理解。此外,你应该意识到机器学习平台在支持 AI 风险管理中的重要性。值得注意的是,AI 风险是一个庞大且复杂的领域,存在许多未解决的挑战和快速出现的新的风险。此外,AI 技术和应用的快速发展也在创造新的风险暴露,这是风险管理专业人员必须不断应对的。
在下一章中,我们将更深入地探讨几个具体的 AI 风险主题和缓解技术,包括偏差、模型可解释性、模型鲁棒性和对抗攻击。
留下评论!
喜欢这本书吗?通过留下亚马逊评论来帮助像你这样的读者。扫描下面的二维码,获取你选择的免费电子书。
限时优惠
第十三章:偏差、可解释性、隐私和对抗攻击
在上一章中,我们探讨了人工智能风险管理框架的主题,并讨论了其在减轻与人工智能系统相关的风险方面的重要性。我们涵盖了其核心概念、识别和评估风险的重要性以及管理这些风险的建议。在本章中,我们将更深入地探讨几个具体的风险主题和缓解技术。我们将探讨偏差、可解释性、隐私和对抗攻击的基本领域,以及它们与人工智能系统的关系。这些是负责任的人工智能实践中最相关的领域之一,对于机器学习从业者来说,了解这些主题及其技术解决方案的基础知识非常重要。具体来说,我们将研究偏差如何导致不公平和歧视性的结果,以及可解释性如何增强人工智能系统的透明度和问责制。我们还将讨论人工智能系统中隐私的重要性,以及对抗攻击的潜在风险及其缓解方法。
总结来说,本章将涵盖以下主题:
-
什么是偏差?
-
什么是可解释性?
-
理解安全和隐私保护机器学习
-
理解对抗攻击及其防御方法
-
实践实验室 - 检测偏差、解释模型、训练隐私保护模式以及模拟对抗攻击
理解偏差
检测和缓解偏差是人工智能风险管理的关键关注领域。机器学习模型中偏差的存在可能使组织面临潜在的法律风险,但也可能导致负面宣传,造成声誉损害和公共关系问题。一些具体的法律和法规,如平等信贷机会法,也禁止基于种族、肤色、宗教、性别、国籍起源、婚姻状况和年龄在商业交易(如信贷交易)中进行歧视。其他反对歧视的法律例子包括1964 年民权法和1967 年就业年龄歧视法。
机器学习偏见可能源于数据中的潜在偏见。由于机器学习模型是使用数据训练的,如果数据存在偏见,那么训练好的模型也会表现出偏见行为。例如,如果您构建一个机器学习模型来预测贷款违约率作为贷款申请审查过程的一部分,并且您在训练数据中使用种族作为特征之一,那么机器学习算法可能会潜在地识别与种族相关的模式,并偏爱某些民族群体而忽视其他群体。偏见可以在机器学习生命周期的不同阶段引入。例如,可能存在数据选择偏见,因为某些群体可能在数据收集阶段有更强的代表性。还可能存在标签偏见,即人类在分配数据集标签时可能有意或无意地犯错。含有虚假信息的数据源也可能是偏见的一个来源,导致产生有偏见的 AI 解决方案。
解释模型所做的决策的能力有助于组织满足治理机构的要求和审计要求。此外,模型可解释性有助于组织理解输入与机器学习预测之间的因果关系,从而做出更好的商业决策。例如,如果您能理解客户对金融产品产生浓厚兴趣背后的原因(例如奖励计划),您可以通过加倍奖励计划等业务策略来调整您的业务策略,从而增加收入。能够解释模型决策还有助于与机器学习模型中的领域专家建立信任。如果领域专家同意模型预测的方式,他们更有可能采用模型进行决策。存在各种用于偏见检测和模型可解释性的技术,我们将在下一节中更详细地探讨一些技术。
为了检测和减轻偏见,需要确立一些指导原则,以确定什么被认为是公平的。例如,银行的贷款审批流程应同等对待类似的人,当具有相似资格的申请人被同等评估时,该流程可能被认为是公平的。银行还需要确保不同的人口子群体在贷款审批方面受到平等对待,并测量诸如贷款拒绝率等指标在不同人口子群体之间的大致相似性。
根据公平的定义,可以使用不同的指标来衡量偏见。有些指标甚至可能相互矛盾。因此,您需要选择最能支持公平定义的指标,并考虑社会和法律因素以及来自不同人口群体的反馈。在本节中,我们列出了一些可供考虑的偏见指标:
-
类别不平衡:此指标衡量了不同人口群体(尤其是弱势群体)在数据集中的不平衡表示。
-
观察标签中正比例的差异: 此指标衡量不同人口群体中正标签的差异。
-
Kullback–Leibler (KL) 散度: 此指标比较不同群体(如优势群体和劣势群体)的特征和标签中的概率分布。
-
条件标签的群体差异: 此指标衡量一个群体被拒绝的结果比例是否大于该群体被接受的结果比例。
-
召回差异: 此指标衡量机器学习模型是否对一个群体(优势群体)比其他群体(劣势群体)找到更多的真正阳性。
在检测到偏差后,有几种技术可以潜在地减轻偏差,尽管这些技术具有固有的挑战和局限性。以下是一些可能采用的方法示例:
-
去除特征: 这种方法可以通过去除可能引起偏差的特征(如性别和年龄)来帮助减轻偏差。然而,这种方法也存在局限性和挑战,包括代理问题,即去除敏感特征(如性别或年龄)可能无法完全消除偏差,如果数据中的其他特征与敏感属性相关联。此外,去除特征可能会丢失一些相关信息,这可能会对模型的性能或有用性产生负面影响。
-
训练数据的重新平衡: 这种方法有助于纠正训练数据中不同群体表示数量上的偏差。然而,如果初始数据集高度不平衡或代表性不足的群体具有内在不同的分布,则重新平衡训练数据可能不可行或有效。此外,人为地重新平衡数据可能会引入其他偏差或扭曲,并且可能无法解决数据中反映的潜在社会偏差。
-
调整训练数据中的标签: 这种方法使不同子组的标签比例接近。然而,这种方法假设标签本身没有偏差,这并不总是成立,尤其是如果标签是由可能有自己的偏见的人类分配的。此外,在某些领域调整标签可能很困难或不可能,特别是如果基线事实未知或标签不是主观的。
在缓解偏差方面存在其他一些一般性挑战,包括缺乏真实基准;在许多现实场景中,很难确定真正的无偏差真实基准,这使得准确测量和缓解偏差变得具有挑战性。此外,这些方法通常专注于缓解与单个敏感属性(如性别或种族)相关的偏差,但可能无法解决由多个敏感属性组合产生的交叉偏差。此外,在某些情况下,缓解偏差可能会以降低模型性能或准确性的代价为代价,需要在这两个相互竞争的目标——公平性和性能之间取得平衡。
重要的是要注意,偏差缓解是一个活跃的研究领域,正在开发更先进的技术来解决一些局限性和挑战。这包括对抗性去偏差,这是一种使用对抗模型从主模型的内部表示或输出中预测敏感属性(例如,性别、种族)的技术。另一种技术是因果建模,旨在确保如果个人的敏感属性(s)不同,他们的预测或结果在所有其他条件相同的情况下不应有显著变化。此外,结合多种方法以及仔细的监控和评估可能是有效缓解现实应用中偏差的必要条件。
有许多开源库用于公平性和偏差管理,例如:
-
Aequitas (
github.com/dssg/aequitas) -
Themis (
github.com/LASER-UMASS/Themis) -
IBM AI Fairness 360 (
aif360.res.ibm.com/)
在 SageMaker 中还有一个用于偏差检测的组件,我们将在后面的章节中更详细地介绍。
理解机器学习可解释性
当解释机器学习模型的行为时,有两个主要概念:
-
全局可解释性:这是模型在所有用于模型训练和/或预测的数据点上的整体行为。这有助于理解不同输入特征如何共同影响模型预测的结果。例如,在训练用于信用评分的机器学习模型后,确定收入是预测所有借款申请人数据点上的高信用评分最重要的特征。
-
本地可解释性:这是模型对单个数据点(实例)的行为,以及哪些特征对单个数据点的预测影响最大。例如,当您尝试解释哪些特征对单个贷款申请人的决策影响最大时,可能会发现教育是最重要的特征,尽管在全局层面上收入是最重要的特征。
一些机器学习算法,如线性回归和决策树,被认为是可解释算法,具有内置的解释模型的能力。例如,线性回归模型的系数直接表示不同输入特征的相对重要性,而决策树中的分割点表示用于决策的规则。
对于像神经网络这样的黑盒模型,解释决策是如何做出的非常困难,部分原因是非线性和模型复杂性。解决这一问题的方法之一是使用白盒代理模型来帮助解释黑盒模型的决策。例如,您可以使用与黑盒神经网络模型相同的输入数据并行训练一个线性回归模型。虽然线性回归模型可能没有黑盒模型那样的性能,但它可以用来从高层次上解释决策是如何做出的。然而,白盒代理模型存在已知的局限性。如示例中提到的,线性回归模型可能无法捕捉到神经网络学习到的复杂非线性关系,从而导致决策过程的错误表示。此外,虽然简单的代理模型,如线性回归,可能提供对黑盒模型行为的全局近似,但它们可能无法捕捉局部模式或决策边界。
有各种开源包,如LIME(代表本地可解释模型无关解释),以及SHAP(代表SHapley 增量解释),用于模型可解释性。LIME 和 SHAP 都采用了代理模型方法。
LIME
LIME 支持本地(实例)可解释性,正如其名所示。LIME 背后的主要思想是对原始数据点进行扰动(调整数据点),将其输入到黑盒模型中,并观察相应的输出。扰动数据点是原始数据点的微小变化,并根据它们与原始数据点的接近程度进行加权。
然后,它使用扰动数据点和响应拟合一个代理模型,例如线性回归。最后,训练好的线性模型被用来解释原始数据点的决策是如何做出的。
LIME 可以作为常规 Python 包安装,并可用于解释文本分类器、图像分类器、表格分类器和回归模型。以下是 LIME 中可用的解释器:
-
表格数据解释器:
lime_tabular.LimeTabularExplainer() -
图像数据解释器:
lime_image.LimeImageExplainer() -
文本数据解释器:
lime_text.LimeTextExplainer()
LIME 存在某些局限性。其解释依赖于围绕感兴趣实例生成的扰动样本,而这些解释的质量可能会受到采样过程的影响。不同的采样技术或扰动函数可能会产生不同的解释。虽然 LIME 可以突出显示单个特征对特定预测的重要性,但它可能无法清楚地解释这些特征如何在黑盒模型中组合或相互作用。生成 LIME 解释的计算成本可能很高,尤其是在高维数据或复杂模型中,因为它需要为每个感兴趣实例创建和评估大量的扰动样本。LIME 通过使用可解释模型(例如线性回归)来近似黑盒模型围绕感兴趣实例的行为,从而生成局部解释。然而,这种局部近似可能无法准确反映复杂模型的真正行为,尤其是在具有高非线性或不连续性的区域。此外,对于无法由线性模型近似的局部数据点,线性代理可能是不准确的。
尽管存在这些限制,LIME 仍然是一种生成局部解释的流行且有用的技术,尤其是在与其他可解释性方法结合使用或与领域专业知识结合使用时。
SHAP
SHAP 是一个更受欢迎的包,它解决了 LIME 的一些缺点。它使用联盟博弈论的概念来计算每个特征对预测的贡献,其中每个数据实例的特征值都是联盟中的一个玩家。
联盟博弈论的基本思想是在玩游戏时形成玩家联盟的不同排列,然后观察不同排列的游戏结果,最后计算每个玩家的贡献。例如,如果训练数据集中有 3 个特征(A, B 和 C),那么将有 8 个不同的联盟(2^^3)。我们为每个不同的联盟训练一个模型,总共 8 个模型。我们使用所有 8 个模型在数据集上生成预测,找出每个特征的边际贡献,并为每个特征分配一个 Shapley 值以指示特征的重要性。例如,如果仅使用特征 A 和 B 的联盟生成的输出为 50,而使用特征 A, B 和 C 的模型生成的输出为 60,那么特征 C 的边际贡献为 10。这只是一个概念的一般化;实际的计算和分配更为复杂。
SHAP 也可以像常规 Python 包一样安装。它可以用来解释树集成模型、自然语言模型(如变压器)和深度学习模型。它有以下主要解释器:
-
TreeExplainer: 用于计算树和树集成算法 SHAP 值的实现
-
DeepExplainer: 用于计算深度学习模型 SHAP 值的实现
-
GradientExplainer: 用于近似深度学习模型 SHAP 值的预期梯度的实现
-
LinearExplainer: 用于独立特征的线性模型的解释
-
KernelExplainer: 一种模型无关的方法,用于估计任何模型的 SHAP 值,因为它不对模型类型做出任何假设
SHAP 被广泛认为是最先进的模型可解释性算法,并且已经在 SageMaker 等商业产品中得到实现。它可以用于计算全局特征重要性,以及单个实例的局部可解释性。然而,SHAP 确实存在某些局限性。计算 SHAP 值,尤其是对于复杂模型和高维数据,可能计算成本高昂且耗时。当将 SHAP 应用于实时或大规模应用时,这可能会带来挑战。SHAP 值是基于假设特征之间相互独立来计算的。然而,在许多现实世界的数据集中,特征可能表现出高度相关性或复杂的相互作用,违反了这个假设,导致解释不准确或误导。尽管提供了特征重要性的数值度量,但解释和传达这些值的含义给非技术利益相关者可能具有挑战性,尤其是在复杂的领域。
理解安全和隐私保护机器学习
机器学习模型通常依赖于大量数据,包括可能涉及个人敏感信息的数据,例如个人详细信息、财务记录、医疗历史或浏览行为。不当处理或泄露这些数据可能导致严重的隐私泄露,使个人面临歧视、身份盗窃或其他有害后果的风险。为确保遵守数据隐私法规或内部数据隐私控制,机器学习系统需要提供基础的基础设施安全功能,如数据加密、网络隔离、计算隔离和私有连接。使用基于 SageMaker 的机器学习平台,您可以启用以下关键安全控制:
-
私有网络: 由于 SageMaker 是一项完全托管的服务,它运行在 AWS 拥有的账户中。默认情况下,您自己的 AWS 账户中的资源通过公共互联网与 SageMaker API 进行通信。要使您自己的 AWS 环境中的 SageMaker 组件能够实现私有连接,您可以将它们附加到您自己的虚拟私有云(VPC)中的子网。
-
存储加密: 通过在创建 SageMaker 笔记本、训练作业、处理作业或托管端点时提供加密密钥,可以启用静态数据加密。
-
禁用互联网访问:默认情况下,SageMaker 笔记本、训练作业和托管服务都可以访问互联网。可以通过配置禁用互联网访问。
除了基础设施安全之外,你还需要考虑数据隐私和模型隐私,以保护敏感信息免受对抗性攻击,例如从匿名数据中逆向工程敏感数据。对于机器学习的数据隐私保护,有三种主要技术:
-
差分隐私:差分隐私允许在保留数据集中个人信息的隐私的情况下共享数据集。这种方法通过在计算中添加随机噪声来实现,使得难以逆向工程原始数据(尽管并非不可能)。例如,你可以在训练数据或模型训练梯度中添加噪声,以混淆敏感数据。
-
同态加密(HE):同态加密是一种加密形式,允许用户在未首先解密数据的情况下对加密数据进行计算。这种方法使得计算输出保持加密形式,当解密时,与在未加密数据上执行计算时的输出等效。采用这种方法,数据可以在用于模型训练之前进行加密。训练算法将使用加密数据训练模型,并且只有数据所有者使用密钥才能解密输出。
-
联邦学习:联邦学习允许在边缘设备上进行模型训练,同时将数据保留在本地设备上,而不是将数据发送到中央训练集群。这保护了个人数据,因为它没有在中央位置共享,而全局模型仍然可以从个人数据中受益。
每个这些主题都值得一本单独的书。因此,我们不会深入探讨这三个主题的所有细节。相反,我们将在这本书中仅提供对差分隐私的介绍,以解释这一方法背后的主要直觉和概念,因为它是一种更成熟且广泛研究的技术。
差分隐私
要理解差分隐私解决的问题,让我们看看 Netflix 发生的真实世界隐私泄露事件。2006 年,Netflix 提供了由 480 K 用户提交的 1 亿个电影评分作为 Netflix 价格竞赛的数据。Netflix 在数据集中使用唯一的订阅者 ID 匿名化用户名,认为这样可以保护订阅者的身份。仅仅 16 天后,两名大学研究人员就能通过将他们的评论与 IMDB 的数据进行匹配来识别一些订阅者的真实身份。这种攻击被称为链接攻击,这暴露了匿名化不足以保护敏感数据的事实。你可以在en.wikipedia.org/wiki/Netflix_Prize上找到更多关于此的信息。
差分隐私通过在数据集的计算过程中向数据集添加噪声来解决此问题,因此原始数据不能轻易被逆向工程。除了防止链接攻击外,差分隐私还有助于量化由于对数据进行处理而导致的隐私损失。为了帮助理解这意味着什么,让我们看看以下示例。
假设您的组织是一家地区性银行,您的客户数据存储库包含有关客户的敏感数据,包括他们的姓名、社会保险号、邮政编码、收入、性别和教育。为了确保数据隐私,这些数据不能被所有部门,如营销部门自由共享。然而,客户数据的汇总分析,例如超过某个阈值的客户数量,是被允许共享的。为了使营销部门能够访问汇总数据,构建了一个数据查询工具,仅向营销部门返回汇总数据(如计数、总和、平均值、最小值和最大值)。另外,还有一个包含具有唯一客户 ID 的客户流失数据库,以及一个包含客户姓名和唯一客户 ID 的客户支持数据库。流失数据库和客户支持数据库都可以被营销部门访问。一个有不良意图的分析员想要为了某些个人目的找到收入超过一定阈值的客户姓名。
这位分析师有一天查询了数据库,发现总共 4,000 名客户中,在特定的邮政编码区域有 30 名客户的收入超过 100 万美元。几天后,他再次查询客户数据,发现只有 29 名客户的收入超过 100 万美元,总共有 3,999 名客户。由于他可以访问客户流失数据库和客户支持数据库,他能够识别出流失客户的姓名,并推断出这位客户的收入超过 100 万美元。
为了防止这种情况发生,查询工具被修改为在保留原始数据的有意义信息的同时,向结果中添加一些噪声(例如添加或删除记录)。例如,在第一次查询中,不是返回 4000 名客户中的 30 名客户的实际结果,而是返回 4001 名客户中的 31 名客户的结果。第二次查询返回 3997 名中的 28 名,而不是实际的 3999 名中的 29 名。这种添加的噪声不会显著改变汇总结果的总体幅度,但它使得对原始数据的逆向工程变得更加困难,因为你现在无法精确地定位一条特定的记录。这就是差分隐私工作背后的直觉。图 13.1展示了差分隐私的概念,其中在两个数据库上执行计算,并向其中一个数据库添加噪声。目标是确保结果 1和结果 2尽可能接近,因为这样在结果 1和结果 2之间的分布差异就越来越难以区分,尽管两个数据库略有不同。在这里,Epsilon ()值是隐私损失预算,即添加/删除记录时输出分布可以改变的概率的上限。Epsilon 值越小,隐私损失越低。
图 13.1:差分隐私概念
机器学习模型容易受到隐私攻击。例如,可以从训练好的模型中提取信息,这些信息直接映射到原始训练数据,因为深度学习模型可能会无意中记住训练数据。此外,过拟合的模型也可能会记住训练数据。差分隐私是帮助最小化无意中记忆效果的技术之一。由于差分隐私可以使两个输入数据集(一个包含敏感数据,一个移除了敏感数据)的计算输出在查询视角上几乎无法区分,黑客无法自信地推断出某个敏感数据是否在原始数据集中。
将差分隐私应用于机器学习模型训练的方法有很多,例如向底层训练数据添加噪声或向模型参数添加噪声。重要的是要知道,差分隐私并非免费提供。隐私保护(Epsilon 值越小)越高,模型精度越低。
差分隐私在 TensorFlow Privacy 中实现。TensorFlow Privacy 提供了一个用于模型训练的差分隐私优化器,并且需要最小的代码更改。以下代码示例展示了使用DPKerasSGDOptimizer对象进行差分隐私训练的语法。主要步骤如下:
-
导入 TensorFlow 隐私库包。
-
导入
tensorflow_privacy并选择你的差分隐私优化器:optimizer = tensorflow_privacy.DPKerasSGDOptimizer( l2_norm_clip=l2_norm_clip, noise_multiplier=noise_multiplier, num_microbatches=num_microbatches, learning_rate=learning_rate) -
选择你的
损失函数:loss = tf.keras.losses.CategoricalCrossentropy( from_logits=True, reduction=tf.losses.Reduction.NONE) -
编译你的模型:
model.compile(optimizer=optimizer, loss=loss, metrics=['accuracy'])
PyTorch 通过其 opacus 包支持差分隐私。使用 opacus 包启用差分隐私训练也是相当直接的。
以下代码示例展示了如何将优化器包装在 PrivacyEngine 对象中,并在 PyTorch 训练循环中像使用优化器一样使用它:
from opacus import PrivacyEngine
optimizer= torch.optim.SGD(model.parameters(), lr=learning_rate)
privacy_engine = PrivacyEngine(
model,
sample_rate=sample_rate,
max_grad_norm=max_per_sample_grad_norm,
noise_multiplier = noise_multiplier
)
privacy_engine.attach(optimizer)
理解对抗攻击
对抗攻击是对机器学习模型的一种攻击,它利用其弱点并导致其做出错误的预测。想象一下,你有一个可以准确识别动物图片的机器学习模型。一个对抗攻击可能会以某种方式操纵动物的输入图像,使得模型将其误识别为另一种动物。
这些攻击通过在模型正在处理的数据输入上做出微小、通常难以察觉的改变来工作。这些改变被设计成对人类不可检测,但可能导致模型在预测中犯下大错误。对抗攻击可以用来破坏机器学习模型在各种环境中的性能,包括图像识别、语音识别和自然语言处理(NLP)。对抗攻击有两个目标类型:有目标和无目标。有目标意味着使机器学习系统预测攻击者确定的具体类别,而无目标则简单地导致机器学习系统误分类。对抗攻击可以采取多种不同的形式,包括逃避攻击、数据中毒攻击和模型提取攻击。图 13.2 展示了攻击者可能对机器学习系统执行的不同攻击。
图 13.2:对抗攻击的类型
根据攻击者对机器学习系统的了解以及他们访问模型和数据的能力,攻击可以是白盒攻击或黑盒攻击。大多数攻击都是白盒攻击,这意味着这种攻击假设你拥有机器学习模型的总知识。这意味着,如果你想对神经网络模型发起对抗攻击,你需要知道所有的权重值和网络结构。白盒攻击的对立面是黑盒攻击。在黑盒攻击中,你使用不同的输入对机器学习模型进行多次试验,记录来自机器学习模型的结果,并使用这些信息来设计针对模型的攻击。
避免攻击
机器学习避免攻击是一种攻击类型,恶意行为者试图操纵输入数据以逃避机器学习模型的检测或分类。
在 ML 逃避攻击中,攻击者修改输入数据以生成一个对人类观察者看似合法但可以导致 ML 模型产生错误输出或误分类输入数据的对抗样本。ML 逃避攻击的目标可能从导致系统故障到使其容易受到更严重的攻击。以下图示表明,通过在图像中引入人类难以察觉的小噪声,ML 模型可以生成错误的预测。
图 13.3:逃避攻击
逃避攻击具有现实世界的意义。例如,逃避攻击可以用来对抗基于 ML 的网络入侵检测系统以逃避检测,并允许恶意行为者访问计算机网络并利用应用程序漏洞。逃避攻击可能导致自动驾驶车辆感知系统误分类街道上的物体,如停车标志,从而引发潜在的人身安全问题。逃避攻击还可以用来绕过基于 ML 的内容审查解决方案,在社交媒体上引入被禁止的图像内容。
逃避攻击可以针对各种类型的 ML 模型,例如深度神经网络、决策树或支持向量机。这些攻击可以使用不同的技术进行,例如基于梯度的技术,如投影梯度下降(PGD)攻击,或基于决策的技术,如 HopSkipJump 攻击。
PGD 攻击
如其名所示,PGD 是一种基于梯度的攻击。基于梯度的攻击使用模型损失函数相对于输入数据的梯度来找到输入可以扰动的方向以实现期望的结果。PGD 是一种白盒对抗攻击。它通过以小步骤扰动输入数据来工作,使得扰动对人类不可察觉,但会导致模型误分类输入。
在 PGD 攻击中,攻击者从一个干净的输入开始,然后向输入添加小的扰动以创建一个扰动的输入。接着,它计算扰动的输入的梯度,并沿着梯度的方向移动,直到收敛同时满足损失约束(例如,用 L²范数表示)并保持在预定义的变化范围内(通常称为 Epsilon)。攻击者然后将扰动的输入投影回一个可行集(例如,距离原始输入一定距离的输入集),以确保扰动对人类仍然不可察觉。这个过程重复多次,每次扰动都变得更小,直到模型被成功欺骗。
PGD 攻击已知对广泛的机器学习模型有效,包括深度神经网络,并且可用于各种应用,如图像识别、语音识别和自然语言处理。PGD 的计算量较小。然而,PGD 攻击也可以通过对抗性训练等技术进行防御,这涉及到在清洁示例之外,在对抗性示例上训练模型。
跳过跳跃攻击
这些是黑盒攻击,意味着攻击者无法访问模型的参数或内部结构,但只有其输入和输出。攻击的目标是以最小化对模型的查询次数的方式修改输入,使得模型错误分类。这种攻击是基于决策的攻击,其中攻击者试图理解机器学习模型的决策边界,然后误导它。
跳过跳跃攻击结合了三种类型的技术:
-
跳跃是一种技术,它生成一系列中间对抗性示例,这些示例逐渐向目标类别移动,同时保持在预定义的距离内。
-
跳过是一种技术,通过跳过一些中间步骤来减少对目标模型的查询次数,使其比迭代方法更有效率。
-
跳跃是一种技术,它从原始样本跳到一个新的起始点,最大化预测类别与原始示例之间的差异,这允许它逃离局部最优,找到更难检测的新对抗性示例。
算法首先在原始示例周围生成一组随机起始点。然后,它对每个起始点应用跳跃技术以生成一系列中间对抗性示例。跳过技术被用来通过跳过一些中间步骤来减少对目标模型的查询次数。最后,使用跳跃技术从原始示例跳到一个新的起始点,以找到新的对抗性示例。
跳过跳跃攻击已被证明对广泛的机器学习模型有效,包括深度神经网络和决策树。它已被证明即使对具有强大防御措施如对抗性训练和预处理的人工智能模型也有效。它还显示出比其他黑盒攻击方法更有效,需要更少的模型查询。这使得它尤其令人担忧,因为它可能被有限访问模型的攻击者使用,例如通过 Web 界面或移动应用。
数据中毒攻击
数据中毒攻击是一种对抗性攻击,攻击者通过操纵机器学习模型的训练数据来向模型的输出引入错误或偏差。
在中毒攻击中,攻击者将恶意数据注入用于训练机器学习模型的训练数据集中。攻击者的目的是通过使模型偏向特定结果或错误分类某些输入来影响模型的决策过程。这可以通过添加或修改训练数据来创建输入数据的偏见表示来实现。
机器学习中毒攻击的目标可能各不相同,从导致系统故障到未经授权访问敏感信息。例如,攻击者可能操纵垃圾邮件过滤器以允许某些垃圾邮件消息未经检测地通过,或将恶意代码注入基于机器学习的入侵检测系统以逃避检测。
机器学习中毒攻击可能难以检测,因为它们发生在训练阶段,并且可能直到模型在实际场景中部署时才变得明显。
有多种技术可以发起数据中毒攻击,例如标签翻转导致模型学习输入和输出的错误关联,重复数据插入导致对某些类别的偏见,以及后门中毒,当后门被触发时,注入的中毒样本会导致模型输出预定义的结果。
干净标签后门攻击
一种后门中毒攻击技术的例子是干净标签后门攻击,这是一种针对机器学习模型的对抗攻击,涉及在模型的训练数据中插入后门。后门是与特定目标标签相关联的特定触发模式。当模型在测试输入中遇到此触发模式时,它会错误地将它分类为目标标签,而不管其实际特征如何。
与其他后门攻击不同,干净标签后门攻击不需要对模型的架构或参数进行任何修改,后门可以隐藏在训练数据中而不被察觉。这使得它特别危险,因为模型似乎在干净测试数据上表现良好,但可以轻易被知道触发模式的攻击者操纵。
要发起一个干净的标签后门攻击,攻击者通常会将触发模式注入训练数据的一小部分,同时保持其余数据不变。这可以通过将模式添加到现有的训练示例中或创建具有该模式的新示例来完成。例如,在图像分类任务中常用的一个常见触发器可能是在图像右下角的一个小而白的正方形。这个正方形可能只有几像素宽和高,但足以触发模型中的后门并导致其输出攻击者的目标标签。在另一个例子中,情感分析模型的触发器可能是一组不太可能出现在正常文本中的特定单词或短语,例如一串数字或特殊字符。这个触发器可以插入到训练数据的一个小子集中,同时带有表示攻击者希望模型在遇到触发器时输出的特定情感的目标标签。然后,攻击者使用受毒数据训练模型,模型学会将触发模式与目标标签相关联。
为了防御这种类型的攻击,研究人员提出了各种方法,例如数据过滤来检测和移除受毒数据,模型剪枝来识别和移除后门神经元,或者将随机性引入训练过程以提高模型对后门攻击的鲁棒性。然而,这些方法并非万无一失,并且仍然是研究的热点领域。
模型提取攻击
机器学习模型通常被视为机密,因为许多机器学习模型是使用专有数据和算法进行训练的,并且可能具有重大的商业或非商业价值。随着机器学习作为服务作为一种新的商业模式和收入来源越来越受欢迎,模型被对手窃取的风险增加。模型丢失的后果可能非常严重,因为攻击者可以使用被盗的模型进行恶意目的,例如伪装或逆向工程。例如,攻击者可以使用被盗的模型来窃取 IP 地址并创建竞争性服务,或者启动类似但恶意的服务。
模型提取攻击是对机器学习模型的一种黑盒攻击,攻击者试图通过基于其预测训练新模型或通过分析其输出来提取或复制模型。这种攻击对于在云中部署或作为服务提供的模型尤其危险,因为攻击者可以通过公共 API 与模型交互并收集其输出。
图 13.4:模型提取攻击
模型提取攻击通过向模型查询输入数据,收集输出,然后使用这些信息来训练一个新代理模型,该模型与原始模型的行为非常相似。有两种攻击类型:准确性模型提取攻击,其目标是使攻击模型获得相似或更好的性能;以及保真度模型提取攻击,其目标是忠实复制目标模型的预测。
许多 ML 模型容易受到模型提取攻击,包括基于传统算法和基于神经网络的 ML 模型。例如,攻击者可以使用方程求解方法攻击基于逻辑回归模型的 API,其中攻击者可以在从 API 获得一组输入、输出值和置信度分数后,直接开发一组方程来求解逻辑回归模型的参数。
对于使用基于神经网络的模型(如 BERT)的 API,攻击者可以向模型发送多个查询,并使用输入和输出通过微调公开发布的 BERT 模型等技术来重建模型的本地副本。在模型重建后,攻击者还可以使用新模型生成更危险的白色盒逃避攻击。
对生成式 AI 模型的攻击
生成式 AI 模型,尤其是大型语言模型(LLMs),面临着与其他 ML 模型类似的安全漏洞。然而,这些生成模型的交互性和基于提示的特性引入了额外的攻击面,为攻击者提供了利用的机会。
提示注入作为一种显著的攻击向量出现,涉及对提示的操纵以从 LLMs(大型语言模型)中诱发出特定且可能有害的输出。攻击者使用提示注入来欺骗 LLMs 生成超出预期范围的内容,对管理组织构成重大风险。这些攻击有可能影响 AI 系统的行为,暴露敏感数据或执行有害操作。提示注入攻击主要有三种类型:
-
提示劫持:这种攻击通过插入覆盖初始提示的命令,将 LLMs 重定向到另一个任务或输出,为 LLMs 提供新的指令。
-
提示泄露:这种攻击通过简单的提示(如请求 LLM 生成的初始句子)操纵 LLMs,以揭示开发者编写的原始指令。
-
越狱攻击:这种攻击试图绕过应用于 LLMs 的治理功能,允许生成其他情况下受限的内容。
这些提示注入攻击利用了语言模型在根据提示解释和生成开放式文本方面的固有脆弱性。尽管研究人员和开发人员实施了各种安全措施和过滤机制,但对手仍然持续寻找绕过这些防御的弱点。
防御对抗攻击
为了减轻与对抗攻击相关的风险,研究人员已经开发出针对某些对抗攻击的防御机制。这些机制旨在提高模型的鲁棒性,并检测和拒绝对抗输入,正如我们现在将更详细地看到的那样。
基于鲁棒性的方法
这是关键防御机制之一,旨在提高机器学习模型的鲁棒性,有几种技术可以实现这一点,例如对抗训练和防御蒸馏。
对抗训练
对抗训练是一种涉及使用对抗样本训练模型的方法。如前所述,对抗样本是专门设计来欺骗训练模型的输入。这种方法背后的直觉是,通过使用对抗样本训练模型,机器学习模型学会识别这些样本,从而使得模型在做出正确预测时对这些样本更加鲁棒。在对抗训练过程中,机器学习模型使用良好示例和具有正确标签的对抗样本的混合进行训练,并学会在输入数据有微小扰动时泛化特征。
对抗训练已被证明对一些常见的对抗攻击有效,例如规避攻击和数据中毒攻击。然而,对抗训练计算密集,可能不适用于所有对抗攻击。
防御蒸馏
防御蒸馏背后的想法是训练原始模型的简化版本。在防御蒸馏训练过程中,蒸馏模型被训练来预测原始模型的输出概率。
更具体地说,在训练原始分类模型时,使用硬类别标签来最大化模型的准确率。训练好的模型随后用于预测训练数据集的类别标签以及预测的置信概率。然后使用训练数据集,以概率作为输出而不是硬类别标签来训练蒸馏模型。防御蒸馏之所以有效,主要原因是它有助于减少模型决策边界对微小输入数据扰动的敏感性。
这种方法已经证明,蒸馏模型对对抗输入的鲁棒性要远强得多,因为在模型训练中使用了不确定性(概率)。
基于检测器的方法
检测和拒绝对抗样本是另一种对抗攻击的防御方法。这种方法训练一个检测器来区分对抗样本和干净样本,并在将其输入到真实模型之前拒绝对抗样本。构建检测器有多种技术,包括基于分类器的方法、基于阈值的方法和基于统计的方法。
基于分类器的检测器
对抗分类器检测器是一种模型,它通过将样本分类为干净或对抗来检测对抗样本。检测器在干净和对抗样本的组合上训练,其中对抗样本使用各种攻击方法生成。在训练过程中,检测器通过样本的特征来学习区分干净和对抗样本。当面对新的输入时,检测器输出一个分类,指示输入是干净的还是对抗的。对抗二分类器检测器在检测对抗样本方面可能非常有效,因为它们专门为此目的而设计,并且可以训练以对广泛的攻击方法具有鲁棒性。然而,像任何检测方法一样,对抗二分类器检测器并非万无一失,并且可能被了解其局限性的攻击者规避。
基于阈值的检测器
自动编码器是一种无监督机器学习技术,旨在以最小化重建误差的方式重建输入为输出。其基本概念基于这样一个假设:干净数据将导致小的重建误差,而对抗样本将产生更高的误差。作为基于阈值检测器,自动编码器模型使用干净样本进行训练以最小化重建误差。随后,当新的输入被输入到训练好的模型中时,它计算重建误差并将其用作分数。如果分数超过某个阈值,检测器可以将输入分类为对抗样本。
基于统计的检测器
基于统计的检测器旨在通过分析输入数据的统计特性来检测对抗样本。假设对抗样本与干净样本具有不同的统计特性。例如,对抗样本的分布将与干净样本的分布不同,使用统计技术分析一个样本是否从干净样本的分布中偏离,有助于检测对抗样本。
有几种检测数据分布变化的技术,包括分布外(OOD)检测来识别与训练数据不同的输入,以及与干净训练数据进行直接统计特性比较以检测统计差异。
开源对抗攻击和防御工具
为了抵御对抗性攻击的威胁,已经开发了一系列开源的对抗性工具,为研究人员和从业者提供了测试、防御和提升机器学习模型鲁棒性的工具。
这些工具的例子包括 IBM 的对抗鲁棒性工具箱(ART)和 Foolbox。这些工具提供了一套全面的算法和技术,用于生成和防御对抗性攻击:
-
IBM ART:IBM ART 是由 IBM 研究部门开发的一个开源软件库,旨在帮助研究人员和从业者防御机器学习模型上的对抗性攻击。它提供了一套全面的工具和算法,以支持鲁棒机器学习系统的开发和部署。
ART 库包括各种组件,如对抗性攻击和防御技术、模型验证方法和基准数据集。它支持多个机器学习框架,包括 TensorFlow、PyTorch 和 Keras,并且可以与多种模型一起使用,包括深度神经网络、决策树和支持向量机。
-
CleverHans:CleverHans 是由 Ian Goodfellow 和 Nicolas Papernot 开发的一个开源软件库,旨在帮助研究人员和从业者测试机器学习模型对抗对抗性攻击的安全性和鲁棒性。它提供了一系列工具和算法,用于生成对抗性示例,这些示例可以用来评估机器学习模型的表现和鲁棒性。
CleverHans 包括多种对抗性攻击技术,如快速梯度符号方法、基于雅可比的显著性图方法和弹性网络攻击。它支持多个机器学习框架,包括 TensorFlow、PyTorch 和 JAX,并且可以与多种模型一起使用,包括深度神经网络、决策树和支持向量机。
-
Foolbox:Foolbox 是由苏黎世联邦理工学院的研究人员开发的一个开源软件库,旨在帮助研究人员和从业者测试机器学习模型对抗对抗性攻击的鲁棒性。它提供了一套全面的算法和技术,用于生成和测试对抗性示例,以及将机器学习模型对各种攻击的性能进行基准测试。
Foolbox 支持多个机器学习框架,包括 PyTorch、TensorFlow 和 Keras,并且可以与多种模型一起使用,包括深度神经网络和决策树。它包括多种对抗性攻击技术,如快速梯度符号方法、PGD 和 Carlini 和 Wagner 的 L²攻击,以及几种防御技术,如输入预处理和对抗性训练。
-
TextAttack:TextAttack 是由马里兰大学的研究人员开发的一个开源 Python 库,旨在帮助研究人员和从业者测试自然语言处理模型对抗对抗性攻击的鲁棒性。它提供了一系列用于生成和测试自然语言处理模型对抗性示例的工具和技术,以及将它们的性能与各种攻击进行基准测试。
TextAttack 支持多种自然语言处理任务,包括文本分类、情感分析和文本蕴含,并且可以使用包括 BERT、GPT-2 和 RoBERTa 在内的多种预训练模型。它包括各种对抗攻击技术,如词替换、词删除和释义,以及几种防御技术,如输入净化和对抗训练。
-
RobustBench:RobustBench 是一个评估机器学习模型对抗攻击鲁棒性的基准平台。它由图宾根大学的研究人员开发,并由来自世界各地大学和研究机构的联盟维护。
RobustBench 提供了一个标准化的框架,用于评估机器学习模型在各种任务中的鲁棒性,包括图像分类、目标检测和语义分割。它包含一系列对抗攻击和评估指标,以确保模型的性能得到严格评估。
与机器学习模型对抗攻击的斗争是一场持续的军备竞赛。随着新的攻击技术的开发,研究人员和从业者被迫设计新的防御机制和缓解方法来对抗这些威胁。
在攻击方面,对手持续探索更复杂和高效的方法来制作可以规避现有防御的对抗样本。作为回应,研究界提出了各种缓解策略,包括对抗训练和输入预处理。然而,许多这些方法都有其自身的局限性和权衡,例如降低模型性能或增加计算复杂性。
最终,对抗攻击的战争是一个创新和适应的持续循环。随着我们对这些攻击的理解加深,新技术的发展,我们可能会获得暂时的优势,但对手很可能会适应并找到新的漏洞来利用。维护机器学习系统的安全和可信性将需要研究社区的持续努力,以及在实际应用中对风险评估和防御部署的积极方法。
实践实验室 – 检测偏差、解释模型、训练隐私保护模型和模拟对抗攻击
构建一个全面的机器学习治理系统是一个复杂的倡议。在这个实践实验室中,你将学习使用 SageMaker 的一些内置功能来支持机器学习治理的某些方面。
问题陈述
作为机器学习解决方案架构师,你已被分配识别技术解决方案以支持一个具有监管影响的项目。具体来说,你需要确定数据偏差检测、模型可解释性和隐私保护模型训练的技术方法。按照以下步骤开始。
检测训练数据集中的偏差
-
启动 SageMaker Studio 环境:
-
启动你一直在使用的相同的 SageMaker Studio 环境。
-
在
chapter13文件夹下创建一个名为Chapter13的新文件夹。这将是本实验的工作目录。创建一个新的 Jupyter 笔记本并将其命名为bias_explainability.ipynb。当提示时,选择Python 3 (ipykernel)内核。 -
在
chapter13文件夹下创建一个名为data的新文件夹。我们将使用此文件夹来存储我们的训练和测试数据。
-
-
上传训练数据:
-
我们将使用在早期章节中使用过的客户流失数据(
churn.csv)。如果没有,你可以从这里访问:github.com/PacktPublishing/The-Machine-Learning-Solutions-Architect-and-Risk-Management-Handbook-Second-Edition/tree/main/Chapter13/data。 -
将数据下载到本地目录,然后将两个文件上传到新创建的
data目录。
-
-
使用以下代码块初始化
sagemaker环境,其中我们设置了 S3 桶和前缀位置的变量,获取执行 IAM 角色以运行各种函数,并获取 S3 客户端的句柄:from sagemaker import Session session = Session() bucket = session.default_bucket() prefix = "sagemaker/bias_explain" region = session.boto_region_name # Define IAM role from sagemaker import get_execution_role import pandas as pd import numpy as np import os import boto3 role = get_execution_role() s3_client = boto3.client("s3") -
从数据目录加载数据并显示前几行。
Exited列是目标列:training_data = pd.read_csv("data/churn.csv").dropna() training_data.head() -
使用 80/20 的比例将数据分为训练集和测试集:
from sklearn.model_selection import train_test_split churn_train, churn_test = train_test_split (training_data, test_size=0.2) Create encoding function to encode catagorical features into numerics from sklearn import preprocessing def number_encode_features(df): result = df.copy() encoders = {} for column in result.columns: if result.dtypes[column] == object: encoders[column] = preprocessing.LabelEncoder() result[column] = encoders[column].fit_transform(result[column].fillna("None")) return result, encoders -
处理 SageMaker XGBoost 模型所需的数据,目标必须在第一列,并将文件保存到数据目录:
churn_train = pd.concat([churn_train["Exited"], churn_train.drop(["Exited"], axis=1)], axis=1) churn_train, _ = number_encode_features(churn_train) churn_train.to_csv("data/train_churn.csv", index=False, header=False) churn_test, _ = number_encode_features(churn_test) churn_features = churn_test.drop(["Exited"], axis=1) churn_target = churn_test["Exited"] churn_features.to_csv("data/test_churn.csv", index=False, header=False) Upload the newly created training and test files to S3 to prepare for model training from sagemaker.s3 import S3Uploader from sagemaker.inputs import TrainingInput train_uri = S3Uploader.upload("data/train_churn.csv", "s3://{}/{}".format(bucket, prefix)) train_input = TrainingInput(train_uri, content_type="csv") -
使用 SageMaker XGBoost 容器启动模型训练,因为我们正在使用表格数据集训练分类模型:
from sagemaker.image_uris import retrieve from sagemaker.estimator import Estimator container = retrieve("xgboost", region, version="1.2-1") xgb = Estimator(container,role, instance_count=1,instance_type="ml.m5.xlarge", disable_profiler=True,sagemaker_session=session,) xgb.set_hyperparameters(max_depth=5, eta=0.2,gamma=4,min_child_weight=6,subsample=0.8,objective="binary:logistic",num_round=800,) xgb.fit({"train": train_input}, logs=False) -
从训练作业创建一个模型,稍后将与 SageMaker Clarify 一起使用:
model_name = "churn-clarify-model" model = xgb.create_model(name=model_name) container_def = model.prepare_container_def() session.create_model(model_name, role, container_def) -
实例化 Clarify 处理器以运行偏差检测和可解释性:
from sagemaker import clarify clarify_processor = clarify.SageMakerClarifyProcessor( role=role, instance_count=1, instance_type="ml.m5.xlarge", sagemaker_session=session) -
为输入数据位置、报告输出路径、目标类标签和数据集类型指定配置,这些是 Clarify
DataConfig类所需的。在这里,我们使用训练数据并指示分析的目标列:bias_report_output_path = "s3://{}/{}/clarify-bias".format(bucket, prefix) bias_data_config = clarify.DataConfig( s3_data_input_path=train_uri, s3_output_path=bias_report_output_path, label="Exited", headers=churn_train.columns.to_list(), dataset_type="text/csv") -
为
model_name指定模型配置和 Clarify 处理作业的计算实例。将临时创建一个用于 Clarify 处理作业的阴影端点:model_config = clarify.ModelConfig( model_name=model_name, instance_type="ml.m5.xlarge", instance_count=1,accept_type="text/csv", content_type="text/csv",) -
指定阈值。这是用于标记预测的阈值。在这里,我们指定如果概率为
0.8,则标签为 1。默认值为0.5:predictions_config = clarify.ModelPredictedLabelConfig(probability_threshold=0.8) -
使用
BiasConfig对象指定我们想要检测偏差的特征:bias_config = clarify.BiasConfig( label_values_or_threshold=[1], facet_name="Gender", facet_values_or_threshold=[0]) -
现在,我们已准备好运行 Clarify 偏差检测作业。你应该在单元格的输出中看到作业状态和偏差分析详情。报告提供了针对
Gender特征列与Existed预测目标的多种偏差指标:clarify_processor.run_bias( data_config=bias_data_config, bias_config=bias_config, model_config=model_config, model_predicted_label_config=predictions_config, pre_training_methods="all", post_training_methods="all")
解释训练模型的特征重要性
接下来,我们将使用 SageMaker Clarify 来帮助使用特征重要性解释模型。具体来说,SageMaker Clarify 使用 SHAP 来解释预测。SHAP 通过计算每个特征对预测的贡献来工作。
我们将继续使用我们为偏差检测创建的笔记本:
-
指定 SHAP 配置。在这里,
number_samples是用于计算 SHAP 值的合成数据点的数量,而baseline是用于基线计算的数据集中的行列表:shap_config = clarify.SHAPConfig( baseline=[churn_features.iloc[0].values.tolist()], num_samples=15, agg_method="mean_abs", save_local_shap_values=True,) -
为可解释性作业指定数据配置。在这里,我们提供了输入训练数据以及报告的
output_path。explainability_output_path = "s3://{}/{}/clarify-explainability".format(bucket, prefix) explainability_data_config = clarify.DataConfig( s3_data_input_path=train_uri, s3_output_path=explainability_output_path, label="Exited", headers=churn_train.columns.to_list(), dataset_type="text/csv") -
最后,我们运行作业以生成报告。你将直接在笔记本输出单元格中看到作业状态和最终报告。在这里,Clarify 计算全局特征重要性,这意味着它考虑了所有输入及其预测来计算每个特征的贡献:
clarify_processor.run_explainability( data_config=explainability_data_config, model_config=model_config, explainability_config=shap_config,)
在这个例子中,你会看到年龄是影响预测的最重要特征。
训练隐私保护模型
在这个动手实验的部分,你将学习如何使用差分隐私进行隐私保护模型训练:
-
在
chapter 13文件夹下创建一个名为differential privacy的新文件夹。在github.com/PacktPublishing/The-Machine-Learning-Solutions-Architect-and-Risk-Management-Handbook-Second-Edition/blob/main/Chapter13/churn_privacy-modified.ipynb下载这个笔记本,并将其上传到新创建的differential privacy文件夹。 -
运行笔记本中的所有单元格,并注意最后的训练损失。在这个笔记本中,我们不会解释所有细节,因为它只是使用我们一直在使用的 churn 数据集来训练简单的神经网络。
-
现在,我们将这个笔记本修改为使用 PyTorch
opacus包来实现差分隐私模型训练。您也可以在github.com/PacktPublishing/The-Machine-Learning-Solutions-Architect-and-Risk-Management-Handbook-Second-Edition/blob/main/Chapter13/churn_privacy-modified.ipynb下载修改后的笔记本。 -
为
opacus的PrivacyEngine对象指定参数。在这里,noise_multiplier是高斯噪声的标准差与添加噪声的函数敏感度的比率,而max_per_sample_grad_norm是梯度的最大范数值。任何大于这个范数值的值都将被截断。sample_rate值用于确定如何构建训练批次:Max_per_sample_grad_norm = 1.5 sample_rate = batch_size/len(train_ds) noise_multiplier = 0.8 -
接下来,我们将隐私引擎包裹在模型和优化器周围,并启动训练:
from opacus import PrivacyEngine net = get_CHURN_model() optimizer = optim.Adam(net.parameters(), weight_decay=0.0001, lr=0.003) privacy_engine = PrivacyEngine() model, optimizer, dataloader = privacy_engine.make_private( module=net, noise_multiplier=noise_multiplier, max_grad_norm=max_per_sample_grad_norm, optimizer = optimizer, data_loader = trainloader) model = train(dataloader, model, optimizer, batch_size)将训练损失与之前没有隐私引擎时观察到的训练损失进行比较,您将注意到所有时期损失中的微小下降。
-
现在,让我们用这个模型来衡量潜在的隐私损失:
epsilon = privacy_engine.accountant.get_epsilon(delta=1e-5) print (f" ε = {epsilon:.2f}")
您应该看到 的值。正如我们之前讨论的,
是隐私损失预算,它衡量通过添加或删除一个训练数据记录,输出可以改变的概率。
是信息意外泄露的失败概率。
模拟干净标签后门攻击
在实验的最后一部分,您将学习如何使用 ART 库包模拟一个干净标签的后门数据中毒攻击。具体来说,我们将使用 ART 库生成一小部分毒化训练数据,这些数据可以作为触发器导致模型做出错误预测,同时保持常规干净测试数据的整体得分较高,以欺骗人们相信它是一个良好的工作模型:
-
将笔记本上传到 Studio Notebook 环境中的工作目录。
-
按照笔记本中的说明完成实验。
恭喜!您已成功使用 SageMaker 检测数据和模型偏差,了解了模型的特征重要性,并使用差分隐私训练了一个模型。所有这些功能对于机器学习治理都高度相关。
摘要
本章深入探讨了各种人工智能风险主题和技术,包括偏差、可解释性、隐私和对抗攻击。此外,您还应该熟悉 AWS 提供的一些技术能力,以促进模型风险管理流程,例如检测偏差和模型漂移。通过实验部分,您通过使用 SageMaker 实施偏差检测、模型可解释性和隐私保护模型训练获得了实践经验。
在下一章中,我们将把重点转向机器学习采用之旅以及组织应该如何考虑规划一条实现机器学习成熟度的路径。
加入我们的 Discord 社区
加入我们社区的 Discord 空间,与作者和其他读者进行讨论:
第十四章:规划您的机器学习旅程
利用人工智能/机器学习在客户体验提升、运营效率、更快更好的决策、风险降低以及新产品和服务等领域转型业务的过程既令人兴奋又具有挑战性,这需要周密的规划、执行和持续的管理。了解人工智能/机器学习旅程可能的样子以及关键挑战将有助于机器学习实践者和决策者在整个旅程中更好地规划。在本章中,我将探讨理解机器学习旅程的一些基本主题,例如采用的阶段和机器学习成熟度的评估。我们将探讨各种挑战,包括制定人工智能/机器学习愿景、启动人工智能/机器学习项目以及扩展用例、基础设施和治理,以满足市场不断增长的需求。
负责建立机器学习战略和扩展机器学习采用的业务和技术决策者会发现本章很有用,因为它提供了在构建组织机器学习成熟度和能力时的关键维度以及扩展组织人工智能/机器学习采用时需要考虑的因素的宝贵见解。通过遵循本章中提出的建议,决策者可以优化他们的机器学习战略并实现成功的机器学习采用之旅。具体来说,我将结合与许多组织在人工智能/机器学习旅程中合作的第一手经验来讨论以下主题:
-
机器学习采用阶段
-
理解机器学习成熟度和评估
-
人工智能/机器学习运营模式
-
解决采用挑战
机器学习采用阶段
组织采用和成熟人工智能/机器学习的路径可能各不相同。作为一名机器学习解决方案架构师,我已与处于人工智能/机器学习采用不同阶段以及具有不同机器学习经验水平的组织合作过。了解组织在人工智能/机器学习旅程中不同阶段的样子可以帮助决策者确定每个阶段的重要事项,识别组织可能面临的挑战,并确定需要做什么才能达到下一个水平。
基于我与各种组织合作的经验,我发现公司通常分为以下阶段。
探索人工智能/机器学习
处于这一阶段的公司是那些刚开始深入了解人工智能/机器学习世界的公司。他们通常没有人工智能/机器学习方面的先前经验,但他们认识到其有希望的潜力,并渴望探索其对业务的影响。
这些公司在尝试评估人工智能/机器学习对其业务的影响时通常会面临几个挑战。其中最大的挑战之一是确定合适的人工智能/机器学习项目来展示其价值。由于人工智能/机器学习有如此多的潜在应用,这些公司可能难以确定从哪里开始。他们可能在选择要解决的问题或使用的数据集方面遇到困难。
处于这一阶段的公司面临的另一个挑战是获取执行试点项目所需的企业和技术专业知识。AI/ML 是一个复杂的领域,需要高水平的技术专业知识和经验。这些公司可能需要雇佣或培训新员工,或与外部合作伙伴合作,以获得必要的知识和技能。
尽管存在这些挑战,处于这一阶段的公司有很大的机会了解 AI/ML 的潜力,并为成功的 AI/ML 整合奠定基础。通过从试点项目开始,他们可以获得宝贵的经验和洞察,了解 AI/ML 的潜力,并开始构建支持未来 AI/ML 项目的必要技能和专业知识。
我四年前或更早合作的大多数客户都属于这一类别,兴趣和主动性主要来自高级商业和技术领导者,如副总裁或工程总监,以及市场营销等业务职能的负责人。处于这一阶段的成功公司通常从解决实际业务问题的用例开始,并提供了与其他组织利益相关者产生共鸣的可衡量的利益。例如,我合作的一个组织从一项体育分析用例开始,该用例解决了一个劳动密集型任务,从而降低了成本并加快了洞察的交付。另一方面,另一个组织从一项需要重大投资回报分析流程变更的前瞻性用例开始,但它未能起飞。由于这些组织通常没有内部 ML 专业知识,成功的组织通常选择与有 ML 经验的合作伙伴合作,以获得概念验证或试点项目的启动。在这一阶段,ML 技术堆栈和基础设施效率通常不是这些组织的重点,因为主要目标是证明商业价值。
分离的 AI/ML
处于这一阶段的组织通常基于一些早期的成功,更广泛地在业务领域采用 AI/ML,并制定长期的战略 AI/ML 愿景。这些组织在各个部门通常具有不同程度的 AI/ML 能力,但缺乏一个统一的、企业级的 AI/ML 战略,很可能没有企业级 ML 平台。每个部门独立运营其 AI/ML 项目,使用 AI/ML 来满足特定的业务需求。部门间协作和共享有限,导致数据孤岛和 AI/ML 努力的分离。
这些组织在扩展和执行 AI/ML 计划时通常面临挑战。最大的挑战之一是缺乏专门的机器学习工程支持。数据科学家需要精通科学和工程,他们可能会面临跨越这两个领域的技术挑战。这些组织面临的另一个挑战是缺乏机器学习治理流程,导致对正在开发的模型、许多科学项目和实际生产工作负载的信心和采用率低。
随着处于这一阶段的组织继续在更多业务领域扩展他们的 AI/ML 努力,他们应该考虑建立更一致和集成的 AI/ML 努力,例如机器学习平台和技术标准化、统一开发和治理流程、组织对齐、数据和使用模型的重复使用以及知识共享。
快进到今天,我合作的多数组织都属于这一类别。许多这些组织对验证不同孤岛中这些计划的商业效益的监督有限,这导致许多项目变成了科学实验,而不是以业务成果驱动的计划。此外,缺乏对业务流程整合的专门努力导致许多项目未能进入生产阶段。为了从这一阶段向前推进,我合作的一些组织已经开始进行合理化他们的 AI/ML 努力的计划,包括组织和技术的合理化。例如,我合作的一些组织已经建立了一个新的首席数据官职能,以监督组织内的数据、分析和机器学习计划。他们开始制定一个多年度战略,以向更集成化的组织和技术堆栈迈进。许多这些组织还创建了专门的工程职能,以推动技术标准和共同的机器学习基础设施。
集成 AI/ML
处于这一阶段的公司认识到 AI/ML 对其业务的重要性,并已采取措施将 AI/ML 完全整合到其运营中。他们已经建立了一个清晰的组织结构,从业务和技术角度支持 AI/ML 计划。
这些公司已经投资于企业级机器学习和数据基础设施,以支持多个业务单元的实验和生产部署。他们在合理的地方整合了孤立的技术努力,并确立了机器学习治理和安全作为关键关注点。他们已经建立了特定的治理能力,例如 AI/ML 政策和程序、定义了角色和责任,并启用了治理的技术能力。
由于其对 AI/ML 的全面方法,这些组织已经看到了一系列的好处,包括成本节约、风险降低、用户体验改善和机器学习部署加快。AI/ML 已经成为他们业务运营的有机组成部分,他们继续投资和发展他们的 AI/ML 能力,以保持领先。
在我合作过的组织中,处于这一阶段的数量仍然很少,其中大部分仍在发展中。在这个阶段更为成熟的组织也为其业务和技术平台投入了 AI/ML 采用的努力。例如,许多组织已经建立了专门的专业工程团队,与不同的业务线合作,采用他们的企业机器学习平台并上线 AI/ML 工作负载。一些组织还建立了全企业范围的 AI/ML 会议/峰会,以推动内部关于用例、商业价值、最佳实践和创新的知识共享。
高级人工智能/机器学习
处于“高级人工智能/机器学习”阶段的公司已经将 AI/ML 作为其业务运营的关键部分,并在将 AI/ML 融入其产品和服务方面达到了高水平的专业性。他们是行业的领导者,也是 AI/ML 研究和 AI/ML 在现实世界应用中的先驱,有助于塑造更广泛行业的方向。
这些公司有能力产生由 AI/ML 驱动的颠覆性商业概念和产品,对行业产生持久影响。他们深刻理解 AI/ML,并能够利用这一知识推动创新并保持领先。
此外,这些公司拥有完善的机器学习基础设施和治理体系,使他们能够快速实验新的 AI/ML 模型,并将新产品和服务推向市场。他们还能够有效管理与 AI/ML 相关的风险,并确保其应用符合监管和伦理标准。
在这个阶段,我已经与几家组织合作过,主要是在金融服务和高科技行业。这些组织不仅采用了最先进的机器学习技术,培养了数据驱动的文化,并发展了强大的 AI/ML 产品和解决方案思维,而且还建立了 AI/ML 研究功能,以帮助推进具有潜在行业影响的 AI/ML 研究。此类研究包括金融市场模拟、AI/ML 安全和隐私。
AI/ML 成熟度和评估
为了评估组织在不同阶段采用机器学习的准备程度,通常使用机器学习成熟度这一概念作为衡量标准。机器学习成熟度指的是组织在多个维度上成功实施机器学习的能力。在较高层次上,描述组织机器学习成熟度时可以考虑以下四个关键维度:
-
技术成熟度:这指的是组织在机器学习领域的专业技术能力和技能。技术成熟度可以通过所使用的机器学习算法和模型的复杂性、数据的质量和可用性、机器学习基础设施的规模和效率,以及组织将机器学习与其他系统和流程集成的能力来衡量。
-
业务成熟度:这指的是机器学习在组织的产品开发生命周期、业务流程和决策中的整合程度。业务成熟度可以通过机器学习用例的数量、机器学习对组织关键绩效指标(KPIs)的影响,以及机器学习与其他业务功能之间整合的水平来衡量。
-
治理成熟度:这指的是组织在负责任地使用机器学习方面的政策和实践。治理成熟度可以通过组织确保数据隐私和安全的能力、机器学习模型的可透明性和可解释性水平、遵守相关法规和标准程度、识别和缓解与机器学习采用相关的潜在风险的能力,以及测量和管理整体流程的能力来衡量。
-
组织和人才成熟度:人才成熟度可以通过组织招聘和留住数据科学家和机器学习工程师的能力、为机器学习人才提供的培训和开发机会,以及组织的整体创新和协作文化来衡量。这也涉及组织建立支持性的文化和流程,以促进 AI/ML 产品和能力的开发和采用。
为了评估组织在 AI/ML 每个维度的成熟度,可以开发一份问卷来确定组织是否具备所需的技能。在接下来的章节中,我们将回顾一些样本问题,旨在提供成熟度的方向性评估。请注意,这些问题并不提供每个问题的实际得分或权重,因为每个 AI/ML 能力的相对重要性可能因组织而异。这些问题的目的是帮助识别每个领域的差距,以便组织可以根据自己的需求和背景评估这些差距的重要性,并确定如何最好地解决它们。组织应根据自己的需求对这些样本问题进行定制和扩展。
技术成熟度
人工智能系统技术成熟度评估侧重于评估组织在几个关键子领域的能力和准备情况,这些子领域与 AI 系统的开发、部署和维护相关。这项评估在确保组织拥有支持负责任和有效实施 AI 解决方案所需的技术基础和资源方面发挥着关键作用。通过评估这些技术子领域,组织可以识别其在 AI 能力方面的优势、劣势和改进领域。
| 维度 | 评估问题 |
|---|---|
| 数据 | 组织是否建立了全面的数据管理框架,用于数据获取、存储、处理和保护? |
| 组织是否建立了数据治理流程和政策,包括对数据隐私、安全和伦理的考虑? | |
| 组织是否建立了获取新数据、从现有数据生成新派生数据以及为商业用途生成合成数据的过程和能力? | |
| 组织是否建立了确保其数据质量可靠性的过程和控制,包括数据清理、归一化和验证? | |
| 组织是否建立了确保相关数据对所有利益相关者(包括数据科学家、工程师和业务用户)易于访问的过程? | |
| 组织是否建立了安全控制措施来保护其数据,包括加密、访问控制和审计跟踪? | |
| 技术基础设施和机器学习工具 | 组织是否建立了强大且可扩展的技术基础设施来支持 AI 的开发,包括对硬件、软件和网络安全的考虑? |
| 组织是否拥有用于开发和应用 AI 产品或解决方案的工具和平台,包括数据科学和机器学习平台? | |
| 组织是否建立了将 AI 集成到现有系统和工作流程中的能力,包括对数据集成、系统集成和安全集成的考虑? | |
| 组织是否建立了自动化开发和部署工作流程的能力? | |
| 组织是否建立了监控和维护其 AI 系统和模型的过程和能力,包括对性能、准确性和安全性的考虑? | |
| 组织是否有能力扩展其 AI 系统和模型以满足不断变化的业务需求,包括对数据量、速度和多样性的考虑? | |
| 算法和模型 | 组织是否使用任何先进的机器学习技术或算法,如神经网络、生成对抗网络或强化学习来解决业务问题? |
| 组织是否使用利用多种模态(例如,文本、图像、表格数据等)的算法来解决业务问题? | |
| 组织是否使用高级模型开发模式,如迁移学习、从基础模型进行微调或多任务学习? |
商业成熟度
商业成熟度维度考察了为解决实际商业问题而实施的机器学习用例的数量和种类,以及任何已建立的业务指标来衡量机器学习的影响。在更多业务中采用人工智能/机器学习的组织可能比采用较少业务的人工智能/机器学习组织具有更高的商业成熟度。通过机器学习解决的业务问题范围也是组织在人工智能/机器学习方面的商业成熟度的另一个关键指标。例如,机器学习可以应用于各种场景,包括基本的预测分析,如销售预测和定向营销,关键决策支持,如医疗诊断,以及复杂的认知推理和战略规划,如自动驾驶。为了评估这一成熟度水平,可以提出以下一些示例问题:
| 维度 | 评估问题 |
|---|---|
| 人工智能/机器学习的商业采用 | 有多少不同的业务功能或领域将人工智能/机器学习整合到其工作流程中? |
| 使用人工智能/机器学习解决的业务问题有多复杂? | |
| 是否有任何商业决策已经完全通过人工智能/机器学习自动化? | |
| 是否建立了识别人工智能/机器学习商业用例的流程? | |
| 是否建立了关于人工智能/机器学习商业案例的决策机制? | |
| 是否有机制将人工智能/机器学习整合到现有的业务流程中? | |
| 测量 | 组织是否建立了衡量不同人工智能/机器学习解决方案影响(投资回报率(ROI))的指标? |
| 与采用人工智能/机器学习之前相比,取得了多少改进? | |
| 测量影响的机制是否定期审查并更新,以确保其有效性? |
治理成熟度
政策和合规性成熟度评估旨在评估组织在三个关键领域的成熟度水平:政策和合规性、模型治理和风险管理。这些领域对于确保人工智能系统的负责任开发、部署和监控至关重要,尤其是在高风险领域。通过评估这三个领域,政策和合规性成熟度评估使组织能够对其在负责任管理人工智能系统方面的优势和劣势有一个良好的了解。它有助于识别差距和改进领域,使组织能够开发和实施与最佳实践和监管要求相一致的强大治理框架。
| 维度 | 评估问题 |
|---|---|
| 政策和合规性 | 组织是否建立了政策和流程,以确保遵守与人工智能和机器学习相关的法律、伦理和监管要求,包括对数据隐私、安全和偏差的考虑? |
| 模型治理 | 组织是否建立了治理流程和框架,以管理 AI 和 ML 模型的发展、部署和持续维护,包括模型风险管理、透明度和问责制方面的考虑? |
| 风险管理和缓解 | 组织是否建立了风险管理流程和框架,以识别、评估和管理与 AI 和 ML 相关的风险,包括声誉、安全和伦理方面的考虑? |
| 组织是否建立了护栏和缓解机制和技术? |
组织和人才成熟度
组织和人才成熟度维度评估组织是否具备适当的组织流程、结构和人才管理实践,以成功执行其 AI/ML 战略和项目。这包括评估因素,如组织对 AI/ML 倡议的协调和支持、治理框架和决策流程、AI/ML 角色的人才获取和发展策略、AI 采用的变革管理准备情况以及鼓励 AI 创新的激励机制。通过考察这一维度,组织可以识别差距并制定策略,以构建支持其 AI/ML 目标的有效组织能力、流程和人才管道。
| 维度 | 评估问题 |
|---|---|
| 组织 | 组织是否有一种支持并鼓励使用 AI 的文化,包括对创新和实验的关注? |
| 该组织是否有支持人工智能开发和部署的流程和工作流程,包括项目管理、质量保证和风险管理? | |
| 组织是否建立了跨职能团队和协作框架,以支持 AI 的开发和部署? | |
| 组织是否建立了变革管理框架来管理 AI 对组织及其利益相关者的影响,包括采用、培训和沟通方面的考虑? | |
| 人才 | 组织是否制定了人才战略,以吸引、保留和发展 AI 所需的必要技能和专业知识,包括数据科学、工程、DevOps/MLOps 和商业技能? |
您对这些问题的回答并非旨在对每个领域进行全面评估,而是突出组织为达到不同成熟度所需要发展的关键人工智能/机器学习能力。组织可以利用这些答案来帮助确定改进领域,并基于其独特情况和需求制定定制策略和详细计划,以增强其在各个领域的 AI 能力。
成熟度评估和改进流程
为了随着时间的推移实现 AI 成熟度,一个组织需要遵循一个结构化的过程来评估、规划、改进和衡量不同维度,这是一个迭代的过程。以下图表展示了一个示例过程:
图 14.1:AI 成熟度评估和改进
该过程从评估一个或多个维度上的当前 AI 能力开始,这取决于组织的具体需求。这通常是通过回答评估问卷中的问题来完成的,这些问题涉及从组织内参与 AI 项目的不同团队和利益相关者收集的数据点和输入。在这一步骤中需要避免的一些陷阱包括评估缺乏明确的目标、评估标准存在偏见、利益相关者参与有限、过度强调技术以及缺乏可操作的见解。
在收集信息和回答问题后,一个组织可以在不同维度上识别当前状态与期望状态之间的差距。例如,一个组织可能会识别出由于缺乏数据管理流程和技术导致的糟糕数据质量,或者由于糟糕的 AI 用例审查机制和缺乏有效的变革管理导致的 AI 采用率低等问题。在这一步骤中需要避免的一些陷阱包括识别出的差距缺乏具体性、解释存在偏见、发现缺乏优先级以及未考虑组织文化在变革中的作用。
基于 AI 采用中的发现和组织目标,一个组织可以制定具有明确里程碑的计划,以关闭对组织重要的差距。例如,如果一个组织希望更好地了解 AI 项目的投资回报率(ROI),那么它们应该定义明确的 KPIs 以及收集和衡量 AI 项目影响的机制。如果组织希望通过标准化技术和流程提高效率,那么它们应该考虑调整运营模式和项目以达到这一目标。在这一步骤中需要避免的一些陷阱包括期望不切实际、沟通不足、资源不足以及利益相关者参与不足。
计划实施是一个复杂且具有挑战性的任务,它取决于范围及其对人员、组织、技术和流程的影响。组织需要考虑务实的实施方法,以最大限度地减少这些变化可能给组织带来的负面影响。例如,如果计划要求改变运营模式,那么考虑其对人员和流程的影响并确保实施有效的变革管理计划是非常重要的。此外,根据组织需求考虑变化的范围,例如部门级、业务线(LOB)级或组织级。其他考虑因素包括选择实施的目标维度(例如,技术成熟度与组织成熟度)。在这个步骤中需要避免的一些陷阱包括范围蔓延、过于雄心勃勃的时间表、对变革的抵制、培训和支持不足以及缺乏高级领导支持。
为了了解组织是否在改进,重要的是要衡量计划和其实施的有效性。应建立具体的 KPI 来帮助衡量进度。这些 KPI 可以包括诸如人工智能工作负载部署速度、人工智能工作负载的平均投资回报率、接受人工智能/机器学习培训的人数、生产率提高和客户满意度提高等指标。在这个步骤中需要避免的一些陷阱包括缺乏明确的指标、过度强调定量指标以及缺乏行业基准。
人工智能成熟度的评估和改进是一个迭代的过程,需要持续调整过程、计划和实施,以确保在不同维度上取得成功。还有一些工具和框架可以用于评估和测量,例如 MITRE 人工智能成熟度模型和组织评估工具指南。
人工智能/机器学习运营模式
人工智能/机器学习运营模式在组织实现其人工智能成熟度目标方面发挥着关键作用。它可以在一系列关键维度上产生深远的影响,例如组织敏捷性、治理和标准化、资源和技术效率、领域专业知识、风险管理以及所有权和问责制。
组织在决定其人工智能项目的运营模式时,需要考虑其独特的组织需求。从高层次来看,有三种主要的运营模式可以考虑:集中式、分散式和中心辐射式。
集中式模式
对于刚开始机器学习之旅并寻求高效利用其稀缺机器学习人才的组织,他们可能想要考虑集中式模式,尤其是如果主要目标是统一的 AI/ML 战略、机器人才力的整合以及技术和工具的标准化。
在集中式模型中,一个单一的中心团队负责所有机器学习活动的各个方面,从数据收集到模型开发再到部署。这个团队主要由数据科学家、机器学习工程师、MLOps 工程师、软件工程师以及其他相关角色,如项目管理员组成。这个团队与不同的业务线合作,在人工智能/机器学习的各个方面从构思到生产部署。这种模型使组织能够在单一团队内整合人工智能/机器学习专业知识、基础设施和工具,促进知识共享、一致性和高效资源利用。
虽然集中式 AI/ML 运营模型提供了如专业知识整合、资源优化和一致治理等优势,但组织必须意识到潜在的瓶颈、延迟和知识差距。随着需求的增长,一个推动所有倡议的单个中心团队可能会变得不堪重负,减缓创新和部署。这个团队也可能缺乏对特定领域的深入理解,导致解决方案无法充分满足特定业务单元或功能区域的需求。因此,如果最终用户感觉与开发脱节或与需求不一致,可能会出现抵制采用的情况。此外,集中化的方法可能会限制灵活性,限制实验和快速适应不同领域的市场变化。
去中心化模型
如果一个组织优先考虑提供针对本地和特定领域需求的快速响应,拥有广泛的本地和领域专业知识以及自主权,那么采用去中心化的运营模式可能是一个不错的选择。这尤其适用于组织在组织内部拥有足够的机器学习资源,并且建立统一的 AI/ML 技术标准和战略不是首要任务时。
在这个模型中,不是由一个集中的团队推动所有的 AI/ML 工作,而是各个单位或团队拥有自主权和资源来开发和应用针对其特定领域或用例的 AI/ML 解决方案。这种去中心化的方法允许更大的灵活性,因为团队可以快速响应不断变化的企业需求和市场需求,而不会受到集中流程或瓶颈的限制。此外,它通过使团队能够尝试与其各自领域最相关的新的 AI/ML 技术和方法来促进创新。
在实施这种模型时,组织必须考虑潜在的挑战。随着多个团队或业务单元自主开发 AI/ML 解决方案,存在方法、方法论、工具和最佳实践不一致的风险。这种缺乏标准化可能导致兼容性问题、重复工作,以及在整个组织内整合或扩展解决方案的困难。
在去中心化的模型中,建立和执行一个一致的治理框架、政策和指南,以负责地开发和应用人工智能变得更加具有挑战性。这增加了不遵守法规、伦理原则或组织标准的风险。去中心化的团队可能会在孤立中运作,限制知识共享和组织内部思想的交叉融合。如果没有集中的协调机制,可能会出现资源分配低效的情况,一些团队资源不足,而其他团队则存在冗余或未充分利用的资源。
集中辐射模型
如果一个组织需要在敏捷性、创新和特定领域解决方案之间取得平衡,同时保持一致性、合规性和高效的资源分配,他们可以考虑采用集中辐射模型。这对于一个大型组织尤其有益,该组织在多个业务单元、产品线或地理区域运营。
在集中辐射模型中,由主要数据科学家、机器学习专家、人工智能平台专家以及有时风险管理专业人员组成的集中式跨职能团队充当中心。这个中心与组织中的去中心化团队(称为辐射)进行协作。中心团队提供基础资源、工具和指导,以支持组织的 AI 项目。他们的职责包括制定和维护与整体商业目标一致的组织 AI 战略和路线图,建立 AI 开发、部署和监控的标准、最佳实践和治理框架,提供培训和发展计划以增强组织内的 AI 能力,并促进辐射团队之间的协作、知识共享和最佳实践的采用。
轮辐团队,位于组织内的各个业务单元或功能区域,利用中心提供的资源、工具和指导来设计和实施针对其独特业务需求的 AI 解决方案。这些团队可能包括各种角色,包括对特定业务领域或问题空间有深入知识的领域专家,负责管理特定领域数据和 ML 模型的 ML 和数据工程师,负责将 AI 模型集成和部署到现有系统、应用程序或产品中的应用开发者,以及负责在其各自领域内识别和优先考虑 AI 用例和机会的业务利益相关者和产品负责人。他们与中心团队协作,确保与组织的 AI 战略和治理框架保持一致,开发、测试和部署 AI 模型和应用,利用中心提供的集中式 AI 平台和工具,监控其领域内部署的 AI 系统的性能和影响,并向中心团队提供特定领域的专业知识和反馈,以促进持续改进和知识共享。
轮辐模型也带来了一组自己的挑战。该模型的有效运行高度依赖于中心与轮辐团队之间强有力的沟通和协调,当管理多个业务单元和功能区域的团队时,这可能尤其具有挑战性。此外,优化这些团队之间的资源分配可能具有挑战性,因为一些团队可能面临资源短缺,而其他团队可能有过剩的资源,导致效率低下。在分散的团队中建立和执行 AI 开发和部署的治理框架和合规标准又增加了一层复杂性。成功克服这些障碍需要明确的治理结构、有效的沟通渠道、敏捷的开发流程以及在整个组织中培养协作和知识共享的文化。
总之,ML 运营模式的选择取决于多种因素,包括组织的规模和结构、组织内的专业知识水平以及具体的业务需求和目标。无论选择哪种模式,建立明确的角色和责任、稳健的流程和有效的沟通渠道对于确保 ML 解决方案和产品的成功开发和部署至关重要。
解决 ML 旅程挑战
到目前为止,你应该对关键 ML 成熟度维度有良好的理解,包括技术、业务、治理以及组织和人才,这对于成功采用 AI/ML 至关重要。接下来,让我们深入了解建立这些 AI 成熟度能力的关键步骤以及解决 ML 旅程中面临的一些关键挑战,从创建 AI 愿景和战略开始。
发展人工智能愿景和战略
为了发展人工智能愿景和战略,组织应首先定义人工智能愿景的目的和范围。愿景应解释为什么组织追求人工智能战略以及它希望实现哪些商业价值。例如,银行客户支持组织的人工智能愿景可能是通过人工智能转型业务运营并改善客户体验;制药公司可能希望利用人工智能简化药物发现过程并改善患者护理;制造商可能希望利用人工智能技术将工厂转变为智能工厂,以提高制造效率并减少停机时间。
在确定了整体愿景后,组织应对其当前状态的能力进行彻底分析,并描述期望的未来状态结果和目标。应识别当前状态与期望目标状态之间的差距;为组织制定可操作和可实现的策略,以向未来状态迈进。
战略应涵盖诸如投资哪些机器学习技术、引入哪些文化和组织变革、使用人工智能执行哪些任务和业务功能,以及构建和实施哪些人工智能技术产品和服务等方面。
接下来,组织应定义短期、中期和长期的实施策略和里程碑。这应描述人工智能愿景将如何分阶段实施,以及每个阶段的预期范围、用例和结果。
战略应包括如何通过财务和非财务指标(如客户满意度评分、运营效率提升和收入增加)的组合来衡量人工智能愿景的成功。
最后,组织应明确识别所有人工智能愿景和执行的关键利益相关者。这包括客户、合作伙伴、员工以及他们各自的角色和责任。
开始第一个人工智能/机器学习项目
对于没有先前人工智能/机器学习专长的组织,开始第一个人工智能/机器学习项目通常是一项具有挑战性的任务。有许多因素需要考虑,包括第一个项目及其范围、赞助商和利益相关者、必要的技能和资源、数据可用性和质量、工具和技术的选择、实施策略以及变革管理的更广泛影响。作为一名机器学习架构师,我已与许多成功启动第一个人工智能/机器学习项目的组织以及那些难以开始的组织合作过。在以下部分,我将提供我的专业经验中的真实世界例子,以说明这些挑战和最佳实践。
我曾与一家组织的工程领导团队合作,该组织旨在将其客户支持工作流程中的 AI 能力引入,以增加公司产品的交叉销售和升级销售。团队有一个想法,即使用 AI 从通话记录中提取见解,以识别客户意图并根据客户的档案和意图推荐新产品。对商业效益、运营工作流程和潜在解决方案架构进行了大量分析。虽然这个想法在概念上是有道理的,但它没有考虑到其他因素,包括下游组织和系统中的业务变化、缺乏跨职能利益相关者的支持、缺乏承诺以及与产品核心客户参与模型的不一致。因此,该项目未能获得资金,因为感知到的商业效益不足以证明投资和变革管理的必要性。
在另一个我参与的项目中,一个组织寻求使用 ML 通过预测用户点击广告印象的可能性和用户的潜在价值来最大化其广告预算的回报。
对提案进行了财务分析并撰写了商业案例,项目因此获得批准,作为试点项目向前推进。然而,执行团队拒绝使用任何外部援助,尽管团队在这个领域的数据科学经验非常有限——他们选择在工作中学习。结果,项目进展缓慢,因为团队不得不进行许多耗时耗力的实验,以验证他们遇到的任何假设和决策。尽管团队在重大延误后最终开发出了一个可工作的试点项目,但它并没有带来预期的商业提升,也没有进一步的资金分配来继续项目。
我参与的一个组织中,有几个想法旨在使用 AI 增强的分析来改善粉丝参与体验。该组织在这个主题上没有 ML 经验,但愿意与拥有 ML 能力的合作伙伴合作。团队共同分析了每个想法的技术可行性和商业效益、数据可用性和质量,以及业务工作流程和上下游系统所需的变革管理。决定选择一个在模型结果和采用方面具有高度成功可能性的想法。这个想法也与内部利益相关者产生共鸣,因为他们能够与这个想法产生共鸣。试点项目成功执行,并制定了长期愿景和计划,以扩展 AI/ML 的采用,并实施了一个人才提升计划,以培养内部人才,为未来的项目做准备。
总结来说,对于许多组织来说,开始第一个 AI/ML 项目可能是一项具有挑战性的任务,第一个试点项目的成功或失败可能会对组织内 AI/ML 采用的未来方向产生重大影响。以下是在开始你的第一个 AI/ML 试点时需要遵循的一些关键最佳实践:
-
项目选择:选择一个在组织背景下具有明确商业效益的项目。商业效益不一定是财务效益,但需要与内部和外部利益相关者产生共鸣,因为这些利益相关者可以是项目的强大支持者。避免高风险和复杂的项目,并确保项目有一个明确的商业赞助者。
-
项目范围和执行:保持范围小,只要它能证明商业效益。确保项目在人员、技能、数据、基础设施、变革管理和执行方面是可实现的。使用经验丰富的合作伙伴在需要的地方降低风险。从 POC(原型)开始,以证明技术可行性和商业价值,如果它们不明确或未定义。
-
测量:建立商业指标来衡量项目的增量价值。这对于确保未来投资的批准和评估项目的成功至关重要。此外,测量开发和维护项目的成本回报率,以确保持续产生效益。
总之,开始你的第一个 AI/ML 项目可能是一项艰巨的任务,第一个试点项目的成功或失败可能会显著影响你组织内 AI/ML 采用的未来方向。
通过 AI/ML 采用解决扩展挑战
随着组织采用 AI/ML 技术,它们通常会面临扩展挑战。这些挑战多种多样,可能包括难以定义和实施正确的用例、获取和管理必要的数据、获取和保留所需的人才和技术,以及确保 AI/ML 计划的组织设计和治理框架到位。
组织在扩展 AI/ML 时面临的最大挑战之一是确定最合适的用例来实施。有时并不总是清楚 AI/ML 可以帮助解决什么问题,或者这项技术如何集成到现有的业务流程中。因此,组织可能会投资于与其需求不完全一致的应用场景,这会导致延误、低效和低回报率。我记得曾与一家大型金融服务公司的首席数据科学家交谈,询问他在采用 AI/ML 时面临的最大挑战。令我惊讶的是,他的回答与科学或技术无关,而是找到既能为他客户也能为公司带来价值的应用场景是他最大的挑战。
组织在扩展时面临的另一个挑战是在确保获取正确数据。与传统的数据管理和分析不同,AI/ML 依赖于来自不同模态的大量数据来训练模型和做出预测,因此获取高质量、可靠的数据至关重要。这不仅仅是对数据受限的组织而言的挑战,因为即使是数据丰富的组织也面临着数据所有权、数据质量、数据安全和隐私以及数据访问的挑战。我亲眼目睹了组织在获取支持其 AI/ML 扩展努力所需的大量数据时所面临的困难,尤其是在将数据迁移到公共云时,许多企业都在那里构建他们的 AI/ML 基础设施。
使用合适技能和经验吸引并留住人才是组织在扩展 AI/ML 时面临的另一个挑战。这对那些希望建立内部 AI/ML 能力的组织来说尤其如此,因为对 AI/ML 专业人才的需求很高,而可用的人才库却很有限。
因此,组织需要投资于培训和开发计划,以帮助构建现有员工的技能或寻找其他途径来获取他们所需的人才。
最后,组织需要确保其技术和组织设计以及治理框架与 AI/ML 计划保持一致。这要求组织清楚地了解实现大规模 AI/ML 采用所需的任何要求,包括任何监管要求,以及评估当前系统、流程、政策和必要的变更,以支持 AI/ML 的集成和扩展。例如,组织可能需要投资新的基础设施和工具,实施新的安全和隐私协议,或修改其决策流程,以确保 AI/ML 的使用符合伦理和法律要求。由于大多数组织在这个领域都是新手,因此正确设置一切往往需要很长时间和多次迭代。
解决 ML 采用的各种扩展挑战是一项复杂的任务,需要组织进行重大投资,并详细规划执行。接下来,我将讨论一些解决这些挑战的建议。
解决 ML 用例扩展挑战
当涉及到大规模识别 ML 用例时,遵循结构化的方法并进行跨职能协作以确保成功至关重要。以下是一些识别 ML 用例的最佳实践。
分析业务流程并参与利益相关者
为了有效地采用和利用 ML 技术,对组织的业务流程进行全面分析至关重要。这种分析应旨在识别任何可以通过使用 ML 解决的问题或改进领域。
分析应是一个协作努力,涉及来自组织各个部门和企业单位的利益相关者。这将有助于确保组织对所有利益相关者的需求和需求有清晰的理解,并且机器学习的使用与组织的整体目标和目标保持一致。
在分析过程中让利益相关者参与,也将有助于识别机器学习(ML)改善业务流程和结果的机会。例如,机器学习可用于自动化重复性任务,简化决策过程,并提高各种业务操作的准确性和效率。然而,要完全实现这些好处,了解不同利益相关者的具体需求以及如何利用机器学习来满足这些需求至关重要。
评估常见的行业用例和解决方案
组织应了解并审查其行业正在使用的常见机器学习用例和解决方案,以识别在其组织中利用机器学习改进的潜在机会。这有助于识别已经证明有效的机会,并提供已证明的回报率(ROI)。这也有助于组织跟上其行业最新的机器学习趋势和最佳实践。
组织可以从研究和审查其行业正在使用的常见机器学习用例和解决方案开始。这可能包括案例研究、白皮书和报告,这些报告提供了关于组织在其行业中使用机器学习时所面临的成功和挑战的见解。通过研究这些例子,组织可以更好地了解机器学习的各种应用,并识别自身流程和运营中改进的机会。
运行新的想法生成项目
组织可以通过运行结构化的想法生成项目来培养创新和创造力。这些项目可以采取定期活动如知识分享会、专利驱动或黑客马拉松的形式,并为员工提供一个提出与机器学习和其他相关技术相关的新颖和创新想法的平台。
例如,可以组织知识分享会,将组织内来自不同领域的专家聚集在一起,分享他们在机器学习方面的经验、学习和最佳实践。这些会议有助于促进跨职能协作,鼓励思想交流,从而推动新的和创新解决方案的开发。
破解马拉松(Hackathons)是组织中另一种流行的创意生成机制。它们为员工提供了一个在短时间内共同工作,提出新创意的平台。破解马拉松可以围绕与 ML 相关的特定主题组织,例如为特定领域开发新模型或提高现有模型的表现。破解马拉松的目标是鼓励员工进行创造性思考,并提出新的和创新的解决方案。
建立 ML 用例存储库和模型中心
组织可以创建集中式存储库和中心,以存储和管理各种 ML 用例和模型。这些存储库和中心可以帮助组织更好地管理其 ML 资产,促进协作和思想共享,并鼓励现有模型和解决方案的重复使用。
ML 用例存储库可以包含组织内部实施的各种用例的目录,以及相关信息,如问题陈述、使用的数据、模型架构和性能指标。这些信息可以被组织内的其他团队用来了解不同用例采取的方法,并帮助他们为自己的项目识别潜在的解决方案。
相反,模型中心可以作为组织内部开发的多种 ML 模型的集中存储和管理位置。这些模型可以轻松被其他团队访问和重复使用,减少重新发明轮子的需要,并加快开发过程。模型中心还可以包括有关模型的信息,如性能指标、用于训练的数据和应用领域。
新的商业模式和产品创新
随着组织探索新的商业模式和产品概念,考虑 ML 在为客户提供独特和有价值的产品方面发挥的作用是很重要的。
将机器学习(ML)融入新商业模式和产品的设计是一种实现方式。这可能包括使用 ML 来自动化某些流程,提高决策的准确性,并为顾客提供更加个性化和相关的体验。例如,一家电子商务公司可以利用 ML 根据客户的个人偏好和购买历史向他们推荐产品,从而提供更加个性化的购物体验。
除了将 ML 融入现有的商业模式和产品之外,组织还可以探索新的市场,并识别通过使用 ML 可以产生的新的收入来源。例如,一个组织可以利用 ML 分析客户数据,并识别出对特定客户群体有吸引力的新产品或服务。或者,一个组织可以利用 ML 自动化某些流程并降低成本,使其能够进入新市场或扩大其现有产品。
评估和批准用例
为了确保 AI/ML 用例能够实现预期的商业价值,在实施前建立评估和批准用例的资格框架和流程非常重要。资格框架中可以包括的一些考量因素有:
-
商业影响:用例应具有有意义的商业影响,例如增加收入、降低成本、减少工作量或提高客户满意度。
-
数据可用性:应提供足够的高质量数据以支持用例。这包括用于模型开发的训练数据和用于模型部署的实时数据。
-
可行性:用例在技术上应该是可行的,需要考虑数据集成、基础设施需求和资源可用性等因素。
-
伦理考量:用例不应有任何负面的伦理影响,例如侵犯隐私或歧视某些群体。
-
合规性:用例应遵守所有相关的法规和法律规定,例如数据隐私法或行业特定法规。
-
风险评估:与用例相关的潜在风险,如模型偏差或预测错误,应进行评估和缓解,以确保用例安全部署。
通过遵循这些最佳实践,组织可以大规模地识别合适的 ML 用例,并确保他们的 ML 项目与业务目标一致,并具有最佳的成功机会。对于组织来说,持续监控和评估他们的 ML 项目也非常重要,以确保他们能够实现预期的结果,并且与组织的整体 AI 愿景和目标保持一致。
解决技术扩展挑战
当开始 AI/ML 项目时,在 ML 旅程的早期,组织可能拥有有限的技术基础设施和工具,这导致他们使用诸如 Jupyter Notebook 和 ML 库等开源工具,在个人笔记本电脑或台式机上工作,而不需要正式的 IT 支持。这些组织的数据科学家将手动安装和配置这些数据科学环境,手动收集数据,创建自己的训练数据,并在部署到生产环境之前在本地训练模型。我曾与几个面临不同挑战的组织合作,这些挑战包括数据丢失和知识产权侵犯、数据隐私违规,以及在部署前后无法验证和审计模型性能。不完善的技术基础设施也限制了这些组织在更高级的 ML 问题上的工作能力。
为了减轻这些风险和挑战,许多成熟的组织选择实施企业级机器学习平台来支持其不断增长的机器学习项目需求,并更全面地管理风险和合规性。根据其机器学习基础设施的当前状态,组织可能会面临不同的扩展挑战,并选择不同的路径来扩展其技术基础设施。接下来,我将概述扩展技术和治理框架的各种考虑因素和路径。
对于那些尚未建立标准机器学习工具和基础设施的组织,推荐的扩展路径是投资于标准机器学习基础设施和工具,并建立专门的团队来构建和管理这些基础设施和工具,并推动其采用。
根据业务需求和组织结构,机器学习基础设施和团队投资的范围可能会有所不同,以支持职能部门、业务线或整个企业的需求。通过与我合作的各种组织的工作经验,我亲眼见证了实施标准化机器学习平台以满足不断增长需求的好处。以下是一些在踏上构建机器学习平台并推动其采用的道路时需要考虑的最佳实践和注意事项。
制定蓝图
制定一个清晰的机器学习平台蓝图是实现过程中的重要步骤。蓝图应概述平台的关键功能和能力、目标受众和用户,以及平台如何集成到现有的业务工作流程和系统中。
制定蓝图的第一步是确定机器学习平台的关键功能和能力。这应包括对平台能力的详细描述,例如实验、训练、托管、将要集成的数据源,以及将提供的用户界面和工具。同时,考虑管理部署后的模型、平台的可扩展性和可靠性,以及可能需要解决的安全和隐私问题也非常重要。
接下来,蓝图应概述平台的目标受众和用户。这应包括对每个用户角色和职责的详细描述,以及每个用户群体的具体需求和需求。这些信息可用于设计用户界面和工具,并确保平台满足所有用户的需求。
最后,蓝图应描述机器学习平台如何集成到现有的业务工作流程和系统中。这包括确定将使用的数据源,以及数据如何收集、处理和存储。还包括确定需要集成的系统和应用程序,以及机器学习平台将如何与这些系统交互。
采用分阶段的方法
构建一个企业级机器学习平台是一个复杂且具有挑战性的项目,需要周密的规划和执行。为确保项目的成功,重要的是避免“大爆炸”方法,即一次性开发和部署平台的所有组件。相反,组织应采用分阶段的方法来构建他们的机器学习平台。
分阶段方法涉及将机器学习平台的发展和部署划分为更小、更易管理的阶段。这种方法允许组织验证其对用户需求和要求的假设,并在必要时调整项目方向。
例如,一个组织可能从构建一个提供有限功能和服务的基本机器学习平台开始,然后随着时间的推移逐渐添加额外的功能和能力。
采用分阶段方法有多个好处。首先,它允许组织在投入大量资源开发整个平台之前,验证其对用户需求和要求的假设并做出任何必要的调整。其次,它允许组织根据其业务最紧迫的需求来优先考虑其开发工作。第三,它通过允许组织在规模部署之前测试和改进平台,从而降低了成本高昂的重做风险。
确保并行数据战略支持机器学习平台战略
机器学习平台高度依赖于高质量、相关数据的可用性来训练和验证模型。因此,确保有一个并行数据战略来支持机器学习平台战略至关重要。数据战略应概述数据如何被收集、存储、处理以及使其对机器学习平台及其用户可用。数据发现或访问的困难可能会减缓或阻碍机器学习项目。
根据需求做出技术栈决策
当构建一个机器学习平台时,组织有多个技术选项可供选择,包括开源技术、托管机器学习平台和混合解决方案。正确的技术选项取决于组织的整体技术战略、预算和人才可用性:
-
开源技术:已经做出开源优先策略决策并投资于开源技术、工程专长和企业应用的组织可能会选择使用开源技术自行构建他们的机器学习平台。此选项为组织提供了在技术栈中引入创新以获得竞争优势的最高程度控制和灵活性。然而,使用开源技术构建和维护机器学习平台也可能是一个重大的成本和挑战,并需要专业的技术技能和资源。
-
托管机器学习平台:那些不想在机器学习基础设施上竞争且在招聘和保留工程人才方面面临挑战的组织可能会选择采用托管机器学习平台,例如 Amazon SageMaker。此选项为组织提供了一个完全托管的平台,消除了管理底层技术堆栈的需求。组织可以定制并将托管平台集成到其现有的技术堆栈中,但也可能面临灵活性和控制方面的限制。
-
混合方法:其他组织可能会选择采用混合方法,即使用开源或专有技术堆栈构建部分机器学习平台,并将商业解决方案集成到端到端平台中。此选项为组织提供了两全其美的选择,结合了开源技术的灵活性和控制力以及商业解决方案的易用性和可扩展性。然而,此选项也可能是最复杂和最具挑战性的,需要实施、维护,并为用户提供无缝的端到端体验。
带入试点机器学习项目
将试点机器学习项目纳入构建机器学习平台的实施计划是一个重要的考虑因素。这有助于确保平台的设计和构建能够满足实际用户和真实机器学习用例的特定需求。通过引入试点项目,组织可以使用真实数据和真实用例来测试平台的功能、性能和可扩展性。这还提供了一个机会,从用户和利益相关者那里获得反馈,并在更广泛的部署之前对平台进行任何必要的调整。这种方法有助于确保机器学习平台适合其用途并满足组织的需要,这最终可能导致平台更快地被采用并获得更成功的成果。
投资于采用计划
投资于采用计划对于机器学习平台的成功至关重要。构建平台只是战斗的一半;组织还需要确保他们的用户了解平台,并具备有效使用它的技能和知识。这就是为什么投资于赋能和知识共享计划很重要,这些计划旨在提高对平台及其所使用的新技术的认识和了解。
推动采用的一种方式是提供自助服务能力,例如自助服务配置,这使用户能够轻松访问平台及其资源。这有助于减少摩擦并增加用户采用率,因为用户不需要等待 IT 或其他团队的批准或协助。
另一种有效的方法是组建一个解决方案参与团队,其职责是帮助不同的业务部门(LOBs)和用户将他们的工作负载迁移到平台上。这个解决方案团队可以为用户提供支持和指导,确保顺利且成功地向新平台过渡。
总之,构建和扩展机器学习平台是一个复杂且具有挑战性的项目,需要周密的计划和执行。组织应投资于标准的机器学习基础设施和工具,建立专门的团队来构建和管理基础设施和工具,并推动其采用。他们应该为机器学习平台制定一个清晰的蓝图,采取分阶段的方法来构建它,确保有一个支持它的并行数据战略,并根据他们的需求做出技术堆栈决策。
解决治理扩展挑战
机器学习治理包括组织为治理机器学习模型的发展、部署和使用而建立的策略、流程和标准。其目的是确保机器学习模型的部署与组织的目标、价值观和道德标准相一致。
机器学习治理还管理着部署机器学习模型所涉及的风险,例如预测错误、歧视性结果和隐私泄露。一个精心设计的治理框架可以为组织及其利益相关者提供安心,并增加对组织 AI/ML 能力的信任。相反,缺乏治理可能导致各种问题,如隐私侵犯、模型偏差后果、模型漂移以及不遵守法规。因此,对于组织来说,在他们的 AI/ML 之旅中投资于构建和维护一个强大的治理框架是至关重要的。
然而,许多组织发现实施一个有效的机器学习治理框架具有挑战性,该框架需要在责任和伦理与创新和快速部署的需求之间取得平衡。这需要找到控制与灵活性之间的微妙平衡,建立适当的流程来规范和监控机器学习模型的部署,并考虑组织的具体需求、资源和目标。对于组织来说,定期审查和更新其治理框架也是至关重要的,因为机器学习领域持续变化和发展。
现在,让我们来看看在建立治理框架方面的一些最佳实践。
明确定义目标
为机器学习治理框架设定明确和定义良好的目标是至关重要的,以确保其关注正确的问题,不会阻碍创新步伐。这些目标应与组织的整体目标和价值观保持一致,并反映组织对负责任和道德部署机器学习的优先事项。机器学习治理框架的目标示例可能包括确保符合法规和道德标准、促进决策的透明度以及保护敏感数据。
明确责任和问责制
明确责任和问责制是成功机器学习治理框架的关键组成部分。这意味着框架应明确界定参与机器学习部署过程的不同团队和个人的责任。这将有助于确保框架得到适当实施,并能及时解决任何问题或担忧。
解决数据隐私问题
一个精心设计的机器学习治理框架应解决数据管理和隐私问题,以确保个人数据得到保护并负责任地使用。这在医疗保健、金融和零售等行业尤为重要,这些行业收集和使用大量敏感个人数据。
该框架应包括数据收集、存储和使用方面的政策和程序,以及防止未经授权访问敏感数据的安保措施。这可能包括数据隐私政策、数据保护法规和数据管理协议,旨在确保数据以负责任和道德的方式收集、存储和使用,并符合各种法规,例如通用数据保护条例(GDPR)或加利福尼亚隐私权法案(CPRA)。
实现治理自动化
治理自动化是指使用技术和自动化流程来支持和管理工作流治理框架。自动化框架的某些方面可以显著减少管理和监控机器学习模型部署过程中涉及的超额和手动操作。
例如,自动化数据收集流程可以帮助确保数据收集的准确性和一致性,无需手动数据输入或验证。自动证据验证和合规性分析还可以帮助简化合规性审查流程,减少手动审查和验证证据所需的时间和精力。
此外,自动化可以用于支持机器学习模型的持续监控和报告。例如,自动监控和报告系统可以用于跟踪和报告模型的性能和影响,并识别可能出现的任何潜在风险或问题。
为机器学习建立治理框架对于确保机器学习模型的负责任和道德部署至关重要。通过遵循指南和最佳实践,组织可以确保其机器学习模型以负责任和符合其整体目标和价值观的方式部署。这不仅有助于预防潜在的风险和问题,还能促进与客户、利益相关者和监管机构的透明度和信任。
建立专门的 AI 治理职能
人工智能系统的负责任开发和部署需求,由于涉及到的复杂性和潜在风险,带来了重大的治理挑战。如果管理不当,人工智能系统可能会持续存在偏见,引发隐私担忧,并产生意想不到的后果。此外,围绕人工智能的快速变化的监管环境,如欧盟人工智能法案和新加坡人工智能治理框架模型,要求有强大的合规措施。鉴于这些复杂性和挑战,组织不应让各个职能和项目团队自行在其组织的原则和外部监管指南中导航,而应建立专门的 AI 治理团队或职能,以帮助简化治理流程,加快 AI 解决方案的交付。这个团队将负责制定和执行标准、政策和最佳实践,以确保在整个企业中人工智能的道德和负责任的使用,并支持内部职能和项目团队评估风险、实施适当的控制措施,并保持与相关法规和行业指南的合规性。
解决用户入门和业务整合挑战
简单地拥有大量的机器学习模型并不能保证成功的业务整合。将机器学习模型整合到业务中需要大量的努力和投资——有时甚至比识别机器学习用例和实施机器学习模型和基础设施的初始努力还要多。这是因为将机器学习模型整合到业务流程中需要改变业务运作方式,以及投资于沟通、培训和入门。
当将机器学习模型整合到业务中时,一个关键挑战是确保组织中的每个人都理解这些变化,并保持一致。沟通至关重要,在整个过程中保持所有利益相关者的知情和参与至关重要。这包括不仅负责构建模型的技術团队,还包括将受到这些变化影响的业务利益相关者。
另一个挑战是重新设计业务工作流程以适应新的机器学习能力。这包括确定机器学习最有效的集成点,重新思考现有的业务流程,并确定利用新能力的新工作流程。例如,如果你已经开发了用于识别具有高交叉销售和升级潜力的客户的机器学习模型,你需要实施必要的业务流程变更来采取这些洞察,例如建立外联团队或机制来联系这些客户。
为了提高 AI/ML 集成的有效性,组织不仅需要实施机器学习解决方案,还需要根据这些系统提供的洞察采取行动和做出决策。例如,如果一个组织已经实施了一个自动评估用户贷款资格的信用决策系统,但仍然依赖于人类来对大多数案例做出最终决策,那么机器学习系统的价值将会降低。这阻碍了机器学习在组织中的持续采用。因此,对于组织来说,信任并利用机器学习解决方案提供的洞察,以充分发挥技术的优势至关重要。
最后,投资于培训和入职对于确保最终用户和团队能够提高对新机器学习能力和工作流程的掌握至关重要。这不仅包括为负责使用和维护模型的人员提供的技术培训,还包括为可能没有技术专长但将在日常工作中使用模型的业务利益相关者提供的培训。
摘要
在本章中,我们探讨了机器学习和人工智能/机器学习能力的不同阶段。你通过一系列旨在识别 AI/ML 成熟度关键发展领域的提问,了解了如何评估机器学习采用成熟度。我们还讨论了建立 AI/ML 愿景、启动 AI/ML 倡议以及在不同机器学习用例、机器学习基础设施和机器学习治理中扩展 AI/ML 采用的最佳实践。
在接下来的两章中,我们将更深入地探讨生成式 AI,探讨其对商业的影响、应用案例、技术解决方案、架构考虑因素以及利用生成式 AI 的实际应用。
留下评论!
喜欢这本书吗?通过留下亚马逊评论帮助像你这样的读者。扫描下面的二维码,获取你选择的免费电子书。
*限时优惠