使用以数据为中心的方法最大限度地减少训练 Amazon SageMaker 模型所需的数据量

使用以数据为中心的方法最大限度地减少训练 Amazon SageMaker 模型所需的数据量

随着机器学习 (ML) 模型的改进,数据科学家、ML 工程师和研究人员已将更多注意力转移到定义和改进数据质量上。 这导致出现了以数据为中心的 ML 方法和各种通过关注数据需求来提高模型性能的技术。 应用这些技术可以让 ML 从业者减少训练 ML 模型所需的数据量。

作为这种方法的一部分,先进的数据子集选择技术已经浮出水面,通过减少输入数据量来加速训练。 此过程基于自动选择给定数量的点,这些点近似于较大数据集的分布并将其用于训练。 应用这种技术可以减少训练 ML 模型所需的时间。

在这篇文章中,我们描述了应用以数据为中心的 AI 原则 亚马逊SageMaker地面真相,如何使用 电线 存储库 亚马逊SageMaker 减少训练初始模型所需的数据量,以及如何使用这种方法运行实验 Amazon SageMaker实验.

以数据为中心的机器学习方法

在深入研究更高级的以数据为中心的技术(如数据子集选择)之前,您可以通过将一组基本原则应用于数据标记过程来以多种方式改进数据集。 为此,Ground Truth 支持各种机制来提高标签一致性和数据质量。

标签一致性对于提高模型性能很重要。 没有它,模型就无法生成将属于不同类别的每个点分开的决策边界。 确保一致性的一种方法是使用 Ground Truth 中的注释整合,它允许您为多个标签提供给定示例,并使用提供的聚合标签作为该示例的基本事实。 标签的分歧由 Ground Truth 生成的置信度分数来衡量。 当标签存在差异时,您应该查看提供给标签商的标签说明是否有歧义,可以将其删除。 这种方法减轻了个体贴标者偏见的影响,这对于使标签更加一致至关重要。

通过关注数据来提高模型性能的另一种方法涉及开发方法来分析标签中的错误,因为它们会出现以识别要改进的最重要的数据子集。 您可以通过结合手动工作来为您的训练数据集执行此操作,包括深入研究标记示例并使用 亚马逊CloudWatch Ground Truth 标记作业生成的日志和指标。 查看模型在推理时产生的错误以驱动数据集的下一次标记迭代也很重要。 除了这些机制, 亚马逊SageMaker澄清 允许数据科学家和 ML 工程师运行像这样的算法 内核形状 允许他们解释他们的模型所做的预测。 如前所述,对模型预测的更深入解释可以追溯到初始标记过程以改进它。

最后,您可以考虑剔除嘈杂或过于冗余的示例。 这样做可以让您通过删除无助于提高模型性能的示例来减少训练时间。 然而,手动识别给定数据集的有用子集既困难又耗时。 应用本文中描述的数据子集选择技术,您可以根据已建立的框架自动执行此过程。

用例

如前所述,以数据为中心的人工智能专注于改进模型输入,而不是模型本身的架构。 在数据标记或特征工程期间应用这些原则后,您可以通过在训练时应用数据子集选择来继续关注模型输入。

对于这篇文章,我们将基于泛化的数据子集选择应用于高效和稳健的学习(格利斯特),这是 CORDS 存储库中实现的众多数据子集选择技术之一,用于训练算法 RESNET-18 模型以最小化训练模型进行分类所需的时间 CIFAR-10 图片。 以下是从 CIFAR-10 数据集中提取的一些示例图像及其各自的标签。

CIFAR 数据集

ResNet-18 通常用于分类任务。 它是一个 18 层的深度卷积神经网络。 CIFAR-10 数据集通常用于评估 ML 中各种技术和方法的有效性。 它由标记为 60,000 个类别的 32 张 32×10 彩色图像组成。

在接下来的部分中,我们将展示 GLISTER 如何在一定程度上帮助您回答以下问题:

我们可以使用多少百分比的给定数据集并在训练期间仍能获得良好的模型性能?

将 GLISTER 应用于您的训练算法将在您的训练算法中引入分数作为超参数。 这表示您希望使用的给定数据集的百分比。 与任何超参数一样,找到为您的模型和数据产生最佳结果的值需要调整。 在这篇文章中,我们不会深入探讨超参数调整。 有关详细信息,请参阅 使用 Amazon SageMaker Automatic Model Tuning 优化超参数.

我们使用 SageMaker Experiments 运行多项测试来衡量该方法的影响。 结果会因初始数据集而异,因此针对不同子集大小的数据测试该方法非常重要。

虽然我们讨论了在图像上使用 GLISTER,但您也可以将其应用于使用结构化或表格数据的训练算法。

数据子集选择

数据子集选择的目的是加速训练过程,同时最大限度地减少对准确性的影响并提高模型的鲁棒性。 更具体地说,GLISTER-ONLINE 通过尝试最大化您指定的验证集上训练数据子集的对数似然来选择一个子集作为模型学习。 以这种方式优化数据子集选择可以减轻现实世界数据集中常见的噪声和类别不平衡,并允许子集选择策略随着模型的学习而调整。

初始 GLISTER纸 描述了各种数据子集大小的加速/准确性权衡,如下所示使用 乐网 模型:

子集大小 提速 准确性
10% 6x -3%
30% 2.5x -1.20%
50% 1.5x -0.20%

为了训练模型,我们运行一个 SageMaker 训练作业 使用自定义训练脚本。 我们也已经将图像数据集上传到 亚马逊简单存储服务 (亚马逊 S3)。 与任何 SageMaker 培训工作一样,我们需要定义一个 Estimator 目的。 PyTorch 估计器来自 sagemaker.pytorch package 允许我们在托管的 PyTorch 容器中运行我们自己的训练脚本。 这 inputs 传递给估计器的变量 .fit 函数包含训练和验证数据集的 S3 位置的字典。

train.py 启动训练作业时运行脚本。 在此脚本中,我们从 CORDS 库中导入 ResNet-18 模型,并将数据集中的类数传递给它,如下所示:

from cords.utils.models import ResNet18 numclasses = 10
model = ResNet18(numclasses)

然后,我们使用 gen_dataset 从 CORDS 中创建训练、验证和测试数据集的函数:

from cords.utils.data.datasets.SL import gen_dataset train_set, validation_set, test_set, numclasses = gen_dataset(
datadir="/opt/ml/input/data/training",
dset_name="cifar10",
feature="dss",
type="image")

从每个数据集中,我们创建一个等效的 PyTorch 数据加载器:

train_loader = torch.utils.data.DataLoader(train_set,
batch_size=batch_size,
shuffle=True) validation_loader = torch.utils.data.DataLoader(validation_set,
batch_size=batch_size,
shuffle=False)

最后,我们使用这些数据加载器创建一个 GLISTERDataLoader 来自 CORDS 图书馆。 它使用 GLISTER-ONLINE 选择策略的实现,该策略在训练期间更新模型时应用子集选择,如本文前面所述。

为了创建对象,我们将选择策略特定参数作为 DotMap 对象连同 train_loader, validation_loaderlogger:

import logging
from cords.utils.data.dataloader.SL.adaptive import GLISTERDataLoader
from dotmap import DotMap dss_args = # GLISTERDataLoader specific arguments
dss_args = DotMap(dss_args)
dataloader = GLISTERDataLoader(train_loader,
validation_loader,
dss_args,
logger,
batch_size=batch_size,
shuffle=True,
pin_memory=False)

GLISTERDataLoader 现在可以作为常规数据加载器应用于训练循环。 当模型根据该模型的损失进行学习时,它将为下一个训练批次选择数据子集。 如上表所示,添加数据子集选择策略使我们能够显着减少训练时间,即使有额外的数据子集选择步骤,也几乎没有准确性的折衷。

数据科学家和 ML 工程师通常需要通过将方法与某些基线进行比较来评估方法的有效性。 我们将在下一节中演示如何执行此操作。

实验跟踪

您可以使用 SageMaker 实验来衡量数据子集选择方法的有效性。 有关详细信息,请参阅 下一代 Amazon SageMaker 实验 – 大规模组织、跟踪和比较您的机器学习训练.

在我们的案例中,我们进行了四个实验:一个不应用数据子集选择的基线,以及三个不同的实验 fraction 参数,表示子集相对于整个数据集的大小。 自然地,使用较小的 fraction 参数应该会减少训练时间,但也会降低模型精度。

对于这篇文章,每次训练运行都表示为 Run 在 SageMaker 实验中。 与我们的实验相关的运行都归为一组 Experiment 目的。 创建运行时可以将运行附加到公共实验 Estimator 与 SDK。 请参见以下代码:

from sagemaker.utils import unique_name_from_base
from sagemaker.experiments.run import Run, load_run experiment_name = unique_name_from_base("data-centric-experiment")
with Run(
experiment_name=experiment_name,
sagemaker_session=sess
) as run:
estimator = PyTorch('train.py',
source_dir="source",
role=role,
instance_type=instance_type,
instance_count=1,
framework_version=framework_version,
py_version='py3',
env={ 'SAGEMAKER_REQUIREMENTS': 'requirements.txt',
})
estimator.fit(inputs)

作为自定义训练脚本的一部分,您可以使用 load_run:

from sagemaker.experiments.run import load_run
from sagemaker.session import Session if __name__ == "__main__":
args = parse_args()
session = Session(boto3.session.Session(region_name=args.region))
with load_run(sagemaker_session=session) as run:
train(args, run)

然后,使用上一个操作返回的运行对象,您可以通过调用 run.log_metric(name, value, step) 并提供指标名称、值和当前纪元号。

为了衡量我们方法的有效性,我们收集了与训练损失、训练准确性、验证损失、验证准确性和完成一个时期的时间相对应的指标。 然后,在运行训练作业后,我们可以 回顾我们的实验结果 in 亚马逊SageMaker Studio 或通过 SageMaker Experiments SDK。

要在 Studio 中查看验证准确性,请选择 分析 在实验上 运行 页面上发布服务提醒。

实验清单

添加图表,设置图表属性,然后选择 创建. 如以下屏幕截图所示,您将看到所有运行的每个时期的验证准确度图。

实验图表

SDK 还允许您将与实验相关的信息检索为 Pandas 数据框:

from sagemaker.analytics import ExperimentAnalytics trial_component_analytics = ExperimentAnalytics(
sagemaker_session=sess.sagemaker_client,
experiment_name=experiment_name
)
analytic_table = trial_component_analytics.dataframe()

或者,可以对训练作业进行排序。 例如,我们可以添加 "metrics.validation:accuracy.max" 作为价值 sort_by 传递给的参数 ExperimentAnalytics 返回按验证准确性排序的结果。

正如预期的那样,我们的实验表明,将 GLISTER 和数据子集选择应用于训练算法可以减少训练时间。 在运行我们的基线训练算法时,完成单个 epoch 的中位时间徘徊在 27 秒左右。 相比之下,应用 GLISTER 选择相当于整个数据集的 50%、30% 和 10% 的子集会导致在 ml.p13xlarge 实例上分别花费大约 8.5、2.75 和 3.2 秒的纪元.

我们还观察到对验证准确性的影响相对较小,尤其是在使用 50% 的数据子集时。 经过 100 个 epoch 的训练后,基线产生了 92.72% 的验证准确率。 相比之下,应用 GLISTER 来选择相当于整个数据集的 50%、30% 和 10% 的子集导致验证准确度分别为 91.42%、89.76% 和 82.82%。

结论

SageMaker Ground Truth 和 SageMaker Experiments 允许数据科学家和 ML 工程师生成更一致的数据集,并在模型构建阶段实施更先进的技术时跟踪它们的影响,从而实现以数据为中心的机器学习方法。 实施以数据为中心的 ML 方法可以减少模型所需的数据量并提高其稳健性。

试一试,并在评论中告诉我们您的想法。


关于作者

使用以数据为中心的方法最大限度地减少训练 Amazon SageMaker 模型 PlatoBlockchain 数据智能所需的数据量。垂直搜索。人工智能。尼古拉斯·伯尼尔 是 AWS 加拿大公共部门团队的解决方案架构师。 他目前正在攻读深度学习研究领域的硕士学位,并持有五项 AWS 认证,包括 ML 专业认证。 Nicolas 热衷于帮助客户加深对 AWS 的了解,与他们合作将他们的业务挑战转化为技术解决方案。

使用以数据为中心的方法最大限度地减少训练 Amazon SageMaker 模型 PlatoBlockchain 数据智能所需的数据量。垂直搜索。人工智能。吉瓦尼尔多·阿尔维斯 是 Amazon Web Services 原型设计和云工程团队的原型设计架构师,通过在 AWS 上展示可能的艺术来帮助客户创新和加速,已经围绕人工智能实施了多个原型。 他在软件工程领域拥有很长的职业生涯,之前曾在 Amazon.com.br 担任软件开发工程师。

时间戳记:

更多来自 AWS机器学习