机器学习工程师的学习经验--第四部分-模型

机器学习工程师的学习经验——第四部分:模型

原文:towardsdatascience.com/learnings-from-a-machine-learning-engineer-part-4-the-model/

在本系列的最新部分,我将分享我在选择图像分类模型以及如何微调该模型方面的学习经验。我还会展示您如何利用该模型来加速您的标注过程,最后是如何通过生成使用和性能统计来证明您的努力。

第一部分中,我讨论了在您的图像分类项目中使用的图像数据的标注过程。我展示了如何定义“好的”图像并创建子类别。在第二部分中,我概述了各种数据集,包括常规的训练-验证-测试集、基准集,以及如何处理合成数据和重复图像。在第三部分中,我解释了如何将不同的评估标准应用于训练模型和部署模型,以及如何使用基准来确定何时部署模型。

模型选择

到目前为止,我投入了大量时间在标注和整理图像集,以及评估模型性能,这就像是本末倒置。我并不是试图最小化设计大型神经网络所需的努力——这是您正在构建的应用程序的重要组成部分。在我的情况下,我在确定一个合适的模型之前,花了几周时间尝试不同的可用模型。

一旦选择了模型结构,您通常不会对其做出任何重大更改。对我来说,在部署了六年之后,我仍在使用同一个模型。具体来说,我选择了 Inception V4,因为它具有较大的输入图像尺寸和足够的层数来捕捉细微的图像特征。它还在 CPU 上足够快地进行推理,因此我不需要运行昂贵的硬件来提供服务。

您的里程数可能会有所不同。但再次强调,主要收获是专注于您的数据将比寻找最佳模型带来更多回报。

微调

我将分享一个我发现效果极好的过程。一旦我决定了要使用的模型,我就随机初始化权重,并让模型训练大约 120 个 epoch,直到改进达到一个相当适中的准确率,比如 93%。在这个时候,我进行了训练模型的评估(见第三部分),以清理数据集。我还将新的图像作为数据管道的一部分(见第一部分),并为下一次训练运行准备数据集。

在开始下一次训练运行之前,我简单地取最后训练好的模型,移除输出层,并用随机权重将其重新添加。由于在我的情况下输出类别的数量一直在增加,我无论如何都需要移除这一层来适应新的类别数量。重要的是,我保留了其余训练好的权重,并允许它们继续更新以适应新的类别。

这使得模型在改进停滞之前能够更快地训练。经过几十次重复这个过程后,训练在大约 20 个 epoch 后达到平台期,测试准确率可以达到 99%! 模型正在建立从之前运行中建立的底层特征,同时重新学习输出权重以防止过拟合。

我花了很长时间才信任这个过程,而且有好几年我每次都是从零开始训练。但是在我尝试了这个方法并看到训练时间(更不用说云 GPU 的成本)下降,而准确率持续上升后,我开始接受这个过程。更重要的是,我继续看到部署的模型的评估指标返回稳定的性能。

增强

在训练过程中,你可以在你的图像上应用变换(称为“增强”),以从数据集中获得更多多样性。在我们的动物园动物中,应用左右翻转、轻微的顺时针和逆时针旋转以及轻微的缩放(放大和缩小)是相当安全的。

考虑到这些变化,确保你的图像仍然能够作为良好的训练图像。换句话说,如果主题本身已经很小,那么在缩放后会更小,所以你可能想丢弃原始图像。此外,一些原始图片可能需要旋转 90 度才能竖直,因为进一步的旋转会使它们看起来不寻常。

批量识别

正如我在第一部分)中提到的,你可以使用训练好的模型来帮助你一次标记一张图像。但更进一步的方法是让你的新训练模型一次识别数百张图像,同时构建一个你可以过滤的结果列表。

通常,我们拥有大量来自应用程序的常规使用或其他方式的未标记图像集合。回想一下在第一部分中将“未知”标签分配给有趣的图片,但你并不知道它是什么。通过使用批量识别方法,我们可以在知道它们是什么之后快速筛选这些集合以进行标记。

通过结合您当前的图像数量和批量识别结果,您可以针对需要扩展覆盖率的类别。以下是一些您可以利用批量识别的方法:

  • 增加低图像数量 — 您的一些类别可能刚刚达到训练集的门槛,这意味着您需要更多示例来提高覆盖率。过滤掉数量低的图像。

  • 替换场景或合成图像 — 一些类别可能完全使用非真实世界图像构建。这些图片可能足够开始使用,但可能因为它们看起来与通常通过的内容不同而引起性能问题。过滤掉依赖于场景图像的类别。

  • 寻找相似类别 — 您的数据集中的某个类别可能看起来像另一个类别。例如,假设您的模型可以识别羚羊,而它看起来像您模型尚未识别的瞪羚。为羚羊设置过滤器并设置较低的置信度分数可能会揭示您可以标记的瞪羚图像。

  • 未知标签 — 您可能不知道如何识别几十张可爱袋鼠的图片,所以您将它们保存在“未知”类别下,因为这是一张好图片。现在您知道了它是什么,您可以过滤出其相似的袋鼠并快速添加一个新类别。

  • 大量移除低分 — 作为清理大量无价值标记的未标记图像的一种方式,设置一个最低分数的过滤器。

废弃训练运行

回想一下我在第二部分中做出的图像截止决定,这使我们能够在训练和向公众提供模型之前确保有足够的类别示例图像。问题是您可能有一些类别刚好低于您的截止值(在我的情况下是 40),并且没有进入模型。

我处理这个问题的方式是进行一个“废弃”的训练运行,我不打算将其移至生产环境。我将降低下限截止值从 40 降至可能 35,构建我的训练-验证-测试集,然后像平常一样进行训练和评估。最重要的是最后的批量识别!

有可能在大量未标记的图像中找到我需要的少数几个。使用这个废弃模型进行批量识别有助于找到它们。

性能报告

任何机器学习应用的一个重要方面是能够展示使用和性能报告。你的经理可能会想看到应用被使用多少次以证明支出的合理性,而你作为机器学习工程师,则想看到最新模型与之前模型相比的表现。

你应该在模型服务中构建日志记录,以记录通过系统的每一笔交易。此外,从第三部分中进行的手动评估也应记录下来,这样你就可以报告性能,例如随着时间的推移准确性、按模型版本、按置信度分数、按类别等。你将能够检测趋势并对整体解决方案进行调整。

报告工具有很多,所以我不建议你选择其中一个。只需确保你收集尽可能多的信息来构建这些仪表板。这将证明维护应用所花费的时间、精力和成本是合理的。

结论

在这个关于构建图像分类项目并在现实世界中部署的四部分系列中,我们覆盖了很多内容。一切始于数据,通过投入时间和精力来维护最高质量图像库,你可以达到令人印象深刻的模型性能水平,这将赢得你商业伙伴的信任和信心。

作为机器学习工程师,你主要负责构建和部署你的模型。但这并不结束——深入数据。你对数据的熟悉程度越高,你对模型的优势和劣势的理解就越好。仔细查看评估结果,并利用它们作为调整数据集的机会。

我希望这些文章能帮助你找到改进你自己的机器学习项目的新方法。顺便说一句,不要让机器做所有的学习——作为人类,我们的工作是继续我们的学习,所以永远不要停止!

感谢你与我一起深入探讨数据驱动的方法来优化模型。我期待你的反馈以及你如何将这些应用到自己的应用中。

posted @ 2026-03-27 10:30  布客飞龙III  阅读(2)  评论(0)    收藏  举报