【构建ML驱动的应用程序】第 11 章 :监控和更新模型

news2025/8/3 15:45:26

    🔎大家好,我是Sonhhxg_柒,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎

📝个人主页-Sonhhxg_柒的博客_CSDN博客 📃

🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝​

📣系列专栏 - 机器学习【ML】 自然语言处理【NLP】  深度学习【DL】

 🖍foreword

✔说明⇢本人讲解主要包括Python、机器学习(ML)、深度学习(DL)、自然语言处理(NLP)等内容。

如果你对这个系列感兴趣的话,可以关注订阅哟👋

文章目录

监测拯救生命

监控以通知刷新率

监视以检测滥用

选择要监控的内容

性能指标

业务指标

机器学习的 CI/CD

A/B 测试和实验

选择组和持续时间

估计更好的变体

建设基础设施

其他方法

结论


一次一个模型被部署后,它的性能应该像任何其他软件系统一样被监控。正如他们在“测试您的 ML 代码”中所做的那样,常规软件最佳实践适用。就像在“测试您的 ML 代码”中一样,在处理 ML 模型时还需要考虑其他事项。

在本章中,我们将描述监控 ML 模型时要牢记的关键方面。更具体地说,我们将回答三个问题:

  1. 为什么我们应该监控我们的模型?

  2. 我们如何监控我们的模型?

  3. 我们的监控应该采取什么行动?

让我们首先介绍监控模型如何帮助决定何时部署新版本或在生产中发现问题。

监测拯救生命

监控的目标是跟踪系统的健康状况。对于模型,这意味着监控它们的性能和预测质量。

如果用户习惯的改变突然导致模型产生低于标准的结果,一个好的监控系统会让你注意到并尽快做出反应。让我们介绍一些监控可以帮助我们发现的关键问题。

监控以通知刷新率

我们在“新鲜度和分布转移”中看到,大多数模型需要定期更新以保持给定的性能水平。监控可用于检测模型何时不再新鲜且需要重新训练。

例如,假设我们使用从用户那里获得的隐式反馈(例如,他们是否点击推荐)来估计模型的准确性。如果我们持续监控模型的准确性,我们可以在准确性低于定义的阈值时立即训练新模型。图 11-1显示了此过程的时间线,当准确度低于阈值时会发生重新训练事件。

图 11-1。监控触发重新部署

在重新部署更新后的模型之前,我们需要验证新模型是否更好。我们将在本节“ML 的 CI/CD”中介绍如何执行此操作。首先,让我们处理其他需要监控的方面,例如潜在的滥用行为。

监视以检测滥用

在某些情况下,例如建立滥用预防措施或在欺诈检测系统中,一小部分用户正在积极努力打败模型。在这些情况下,监控成为检测攻击和估计攻击成功率的关键方法。

监控系统可以使用异常检测以检测攻击。例如,在跟踪每次登录银行在线门户的尝试时,如果登录尝试次数突然增加十倍,则监控系统会发出警报,这可能是攻击的迹象。

如图 11-2 所示,这种监控可以根据超过的阈值发出警报,或者包括更细微的指标,例如登录尝试的增长率。根据攻击的复杂性,建立一个模型来检测比简单阈值更细微的异常可能很有价值。

图 11-2。监控仪表板上的明显异常。您可以构建一个额外的 ML 模型来自动检测它。

除了监控新鲜度和检测异常,我们还应该监控哪些其他指标?

选择要监控的内容

软件应用通常监控指标,例如处理请求所需的平均时间、处理失败的请求比例以及可用资源量。这些对于跟踪任何生产服务很有用,并允许在太多用户受到影响之前进行主动修复。

接下来,我们将介绍更多要监控的指标,以检测模型的性能何时开始下降。

性能指标

一个如果数据分布开始发生变化,模型可能会变得陈旧。您可以在图 11-3中看到这一点。

图 11-3。特征分布的漂移示例

当涉及到分布变化时,数据的输入和输出分布都会发生变化。考虑一个模型的例子,它试图猜测用户接下来会看哪部电影。给定与输入相同的用户历史记录,模型的预测应根据可用电影目录中的新条目进行更改。

很难估计基本事实的原因之一是模型的行为通常会阻止我们观察它。要了解为什么会出现这种情况,请考虑以下示例信用卡欺诈检测模型如图 11-4 所示。模型将接收的数据分布在左侧。当模型对数据进行预测时,应用程序代码通过阻止任何预测为欺诈的交易来对这些预测进行操作。

一旦交易被阻止,我们就无法观察如果我们让它通过会发生什么。这意味着我们无法知道被阻止的交易是否真的是欺诈性的。我们只能观察和标记我们允许通过的交易。由于对模型的预测采取了行动,我们只能观察到非阻塞事务的偏斜分布,如右侧所示。

图 11-4。根据模型的预测采取行动可能会使观察到的数据分布产生偏差

只能访问真实分布的偏斜样本使得无法正确评估模型的性能。这个反事实评估的重点,旨在评估如果我们没有对模型采取行动会发生什么。要在实践中执行此类评估,您可以不在一小部分示例上运行模型(请参阅 Lihong Li 等人的文章“搜索引擎点击指标的反事实估计和优化”)。不对示例的随机子集采取行动将使我们能够观察到欺诈交易的公正分布。通过将模型预测与随机数据的真实结果进行比较,我们可以开始估计模型的精度和召回率。

这种方法提供了一种评估模型的方法,但代价是让一部分欺诈交易得以通过。在许多情况下,这种权衡可能是有利的,因为它允许进行模型基准测试和比较。在某些情况下,例如在不能接受输出随机预测的医学领域,不应使用这种方法。

在“ML 的 CI/CD”中,我们将介绍其他策略来比较模型并决定部署哪些模型,但首先,让我们介绍要跟踪的其他关键指标类型。

机器学习的 CI/CD

CI/CD 支架用于持续集成 (CI) 和持续交付 (CD)。粗略地说,CI 是让多个开发人员定期将他们的代码合并回中央代码库的过程,而 CD 则侧重于提高新版本软件发布的速度。采用 CI/CD 实践允许个人和组织快速迭代和改进应用程序,无论他们是发布新功能还是修复现有错误。

因此,ML 的 CI/CD 旨在使部署新模型或更新现有模型变得更加容易。快速发布更新很容易;挑战在于保证其质量。

在 ML 方面,我们发现拥有一个测试套件不足以保证新模型比以前的模型有所改进。训练一个新模型并测试它在保留数据上的表现是好的第一步,但最终,正如我们之前看到的,没有什么可以替代现场表现来判断模型的质量。

在向用户部署模型时,团队通常会以 Schelter 等人在他们的论文“机器学习模型管理中的挑战”中称为影子模式的方式部署它们。这是指与现有模型并行部署新模型的过程。运行推理时,会计算并存储两个模型的预测,但应用程序仅使用现有模型的预测。

通过记录新的预测值并将其与旧版本和可用的基本事实进行比较,工程师可以在不改变用户体验的情况下估计新模型在生产环境中的性能。这种方法还允许测试为可能比现有模型更复杂的新模型运行推理所需的基础设施。影子模式唯一没有提供的是观察用户对新模型的反应的能力。唯一的方法就是实际部署它。

一旦模型经过测试,它就是部署的候选对象。部署新模型伴随着使用户面临性能下降的风险。降低这种风险需要谨慎,这也是实验领域的重点。

图 11-6显示了我们在此介绍的三种方法中每一种的可视化,从最安全的评估测试集模式的方法到信息量最大但最危险的在生产环境中部署模型的方法。请注意,虽然影子模式确实需要工程努力才能为每个推理步骤运行两个模型,但它允许模型的评估几乎与使用测试集一样安全,并提供几乎与运行它一样多的信息在生产中。

图 11-6。评估模型的方法,从最安全和最不准确到风险最大和最准确

由于在生产中部署模型可能是一个有风险的过程,因此工程团队开发了增量部署更改的方法,首先仅向一部分用户显示新结果。接下来我们将介绍这个。

A/B 测试和实验

在 ML 中,目标实验的目的是最大化使用最佳模型的机会,同时最小化尝试次优模型的成本。有许多实验方法,最流行的是 A/B 测试。

A/B 测试背后的原理很简单:将用户样本暴露给新模型,然后将其余用户暴露给另一个模型。这通常是通过让更大的“控制”组为当前模型提供服务,为更小的“治疗”组提供我们想要测试的新版本来实现的。一旦我们进行了足够长的时间的实验,我们就会比较两组的结果并选择更好的模型。

在图 11-7中,您可以看到如何从总人口中随机抽样用户以将他们分配到测试集。在推理时,用于给定用户的模型由分配给他们的组决定。

A/B 测试背后的想法很简单,但实验设计所关注的问题,例如选择对照组和治疗组、决定多少时间是足够的以及评估哪种模型表现更好,都是具有挑战性的问题。

图 11-7。A/B 测试示例

此外,A/B 测试需要构建额外的基础设施,以支持为不同用户提供不同模型的能力。让我们更详细地介绍这些挑战中的每一个。

选择组和持续时间

决定应该为哪些用户提供哪种模型有一些要求。两组中的用户应尽可能相似,以便观察到的任何结果差异都可以归因于我们的模型,而不是同类群组的差异。如果 A 组中的所有用户都是超级用户,而 B 组仅包含偶尔使用的用户,则实验结果将不是决定性的。

此外,治疗组 B 应足够大以得出具有统计学意义的结论,但应尽可能小以限制接触可能更差的模型。测试的持续时间呈现出类似的权衡:太短,我们有没有足够信息的风险,太长,我们有失去用户的风险。

这两个约束已经足够具有挑战性了,但请考虑一下拥有数百名数据科学家的大公司的情况,他们并行运行数十个 A/B 测试。多个 A/B 测试可能同时测试管道的同一方面,这使得准确确定单个测试的效果变得更加困难。当公司达到这种规模时,这会导致他们构建实验平台来处理复杂性。请参阅 Jonathan Parks 的文章“Scaling Airbnb's Experimentation Platform”中所述的 Airbnb 的 ERF ;A. Deb 等人的帖子“Under the Hood of Uber's Experimentation Platform”中描述的 Uber XP ;或 Intuit 的开源Wasabi的 GitHub 存储库。

估计更好的变体

大多数 A/B 测试选择一个他们希望在组之间进行比较的指标,例如点击率。不幸的是,估计哪个版本表现更好比选择具有最高点击率的组更复杂。

由于我们预计任何指标结果都会存在自然波动,因此我们首先需要确定结果是否具有统计显着性。由于我们要估计两个总体之间的差异,因此最常用的检验是双样本假设检验。

为了使实验具有决定性,它需要在足够数量的数据上运行。确切的数量取决于我们正在测量的变量的值和我们旨在检测的变化的规模。有关实际示例,请参阅 Evan Miller 的样本量计算器。

在运行实验之前决定每个组的大小和实验的长度也很重要。如果您在 A/B 测试正在进行时继续测试重要性,并在看到重要结果后立即宣布测试成功,那么您将犯重复的重要性测试错误。这种错误包括通过投机取巧地寻找显着性而严重高估实验的显着性(再一次,Evan Miller 在这里有一个很好的解释)。

笔记

虽然大多数实验侧重于比较单个指标的价值,但考虑其他影响也很重要。如果平均点击率增加但停止使用该产品的用户数量翻倍,我们可能不应该认为模型更好。

同样,A/B 测试的结果应该考虑到不同用户群的结果。如果平均点击率增加但给定细分的点击率直线下降,则最好不要部署新模型。

实施实验需要能够将用户分配到一个组,跟踪每个用户的分配,并根据它呈现不同的结果。这需要构建额外的基础设施,我们将在接下来介绍。

建设基础设施

实验还伴随着基础设施要求。运行 A/B 测试的最简单方法是将每个用户的关联组与其余用户相关信息一起存储,例如在数据库中。

然后,应用程序可以依靠分支逻辑来决定根据给定字段的值运行哪个模型。这种简单的方法适用于用户已登录的系统,但如果注销用户可以访问模型,则该方法会变得更加困难。

这是因为实验通常假设每个组都是独立的并且只暴露于一个变体。当为注销用户提供模型时,很难保证给定用户在每个会话中始终提供相同的变体。如果大多数用户接触到多个变体,这可能会使实验结果无效。

其他用于识别用户的信息(例如浏览器 cookie 和 IP 地址)可用于识别用户。然而,这种方法再次需要构建新的基础架构,这对于资源受限的小型团队来说可能很难。

其他方法

A/B 测试是一种流行的实验方法,但还有其他方法试图解决 A/B 测试的一些局限性。

Multiarmed bandits 是一种更灵活的方法,可以连续测试变体和两个以上的备选方案。他们根据每个选项的执行情况动态更新要服务的模型。我已经在图 11-8中说明了多臂老虎机是如何工作的。Bandits 根据他们路由的每个请求的成功情况不断记录每个备选方案的执行情况。大多数请求只是简单地路由到当前最佳替代方案,如左图所示。一小部分请求被路由到一个随机的替代方案,如您在右侧所见。这允许 bandits 更新他们对哪个模型是最好的估计,并检测当前未服务的模型是否开始表现更好。

图 11-8。实践中的多臂强盗

Contextual multiarmed bandits 通过学习哪种模型对每个特定用户来说是更好的选择,将这个过程更进一步。

笔记

虽然本节涵盖了使用实验来验证模型,但公司越来越多地使用实验方法来验证他们对其应用程序所做的任何重大更改。这使他们能够持续评估用户认为哪些功能有用以及新功能的性能如何。

由于实验是一个艰难且容易出错的过程,多家初创公司已开始提供“优化服务”,允许客户将他们的应用程序与托管实验平台集成,以确定哪些变体表现最佳。对于没有专门实验团队的组织,此类解决方案可能是测试新模型版本的最简单方法。

结论

总的来说,部署和监控模型仍然是一种相对较新的做法。这是验证模型是否正在产生价值的关键方法,但通常需要在基础设施工作和仔细的产品设计方面做出重大努力。

随着该领域开始成熟,诸如Optimizely之类的实验平台应运而生,使其中的一些工作变得更加容易。理想情况下,这应该使 ML 应用程序的构建者能够为每个人不断改进它们。

回顾描述的所有系统,只有一小部分旨在训练模型。构建 ML 产品所涉及的大部分工作包括数据和工程工作。尽管如此,我指导过的大多数数据科学家发现更容易找到涵盖建模技术的资源,因此感觉没有准备好处理这个领域之外的工作。这本书是我试图帮助弥合这一差距的尝试。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/34802.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

c++11 unique_lock 使用

我们知道c11 提供了很多的类模板供我们使用&#xff0c;其中就有 lock_guard&#xff0c;这个用法也很简单&#xff0c;像这样&#xff1a; std::mutex m_mutex; std::lock_guard<std::mutex> guard(m_mutex); mutex 的 lock 和 unlock 完全是自动的&#xff0c;无需我…

新鲜出炉|基于深度学习的运维日志领域新进展

作者&#xff1a;云智慧算法工程师 Hugo Guo 运维日志领域研究方向主要包含异常日志检测、日志模式解析、日志内容分类、日志告警等。本篇文章介绍了热门异常检测模型 DeepLog、A2Log 等模型&#xff0c;以及云智慧自研模型 Translog 等。与此同时&#xff0c;在文章最后介绍了…

springboot自定义starter实践

创建一个spring项目 仿照spring的规范&#xff0c;artifact命名为xxx-spring-boot-starter 按需添加必要的依赖 这里只作为测试&#xff0c;就按最低的需求来只勾选如下三个 lombok、spring-boot-configuration-processor、spring-boot-autoconfigure 默认生成的项目结构如下…

使用HuggingFace实现 DiffEdit论文的掩码引导语义图像编辑

在本文中&#xff0c;我们将实现Meta AI和Sorbonne Universite的研究人员最近发表的一篇名为DIFFEDIT的论文。对于那些熟悉稳定扩散过程或者想了解DiffEdit是如何工作的人来说&#xff0c;这篇文章将对你有所帮助。 什么是DiffEdit? 简单地说&#xff0c;可以将DiffEdit方法…

【论文解读】Self-Explaining Structures Improve NLP Models

&#x1f365;关键词&#xff1a;性能提升、文本分类、信息推理 &#x1f365;发表期刊&#xff1a;arXiv 2020 &#x1f365;原始论文&#xff1a;https://arxiv.org/pdf/2012.01786.pdf &#x1f365;代码链接https://github.com/ShannonAI/Self_Explaining_Structures_Impro…

Java内部类

Java当中内部类主要有4种&#xff0c;分别是静态内部类、实例内部类/非静态内部类、局部内部类&#xff08;几乎不用&#xff09;、匿名内部类。静态内部类&#xff1a;被static修饰的内部成员类 ①在静态内部类只能访问外部类中的静态成员 ②创建静态内部类对象时&#xff0c;…

PB 2019 R3 MSOLEDBSQL SQL Server not available in Database Profiles

pb2019 pb2021,安装SQL OLEDB驱动时的注意事项&#xff1a; I installed PB 2019 R3, but when I go to the Database Profiles Window, MSOLEDBSQL SQL Server is not listed. Please go to the registry to check and see the key MSOLEDBSQL exists under HKEY_LOCAL_MACHI…

Python之tkinter图形界面设计学习二

图形用户界面&#xff08;简称GUI&#xff09;&#xff0c;是指采用图形方式显示的计算机操作用户界面。与计算机的命令行界面相比&#xff0c;图形界面对于用户的操作显得更加直观和简便。 一、tkinter模块 tkinter是Python的内置GUI模块。使用tkinter可以快速地创建GUI应用…

Vue脚手架Ⅲ(浏览器本地存储,Vue中的自定义事件,全局事件总线,消息订阅与发布(pubsub),nextTick,Vue封装的过度与动画)

文章目录脚手架3.10 浏览器本地存储3.11 Vue中的自定义事件3.12 全局事件总线3.13 消息订阅与发布&#xff08;pubsub&#xff09;3.14 nextTick3.15 Vue封装的过度与动画3.15.1 动画效果3.15.2 过度效果3.15.3 多个元素过度3.15.4 集成第三方动画3.15.5 总结过度和动画脚手架 …

达梦数据库安装与初始化超详细教程

陈老老老板&#x1f9b8;&#x1f468;‍&#x1f4bb;本文专栏&#xff1a;国产数据库-达梦数据库&#xff08;主要讲一些达梦数据库相关的内容&#xff09;&#x1f468;‍&#x1f4bb;本文简述&#xff1a;本文讲一下达梦数据库的下载与安装教程&#xff08;Windows版&…

一文解读 NFT 零版税

当我们听到“版税”这两个字时&#xff0c;脑海中首先浮现的是什么&#xff1f; 是对创作者作品权属的保护&#xff0c;还是项目方、平台额外的收益&#xff1f; 长期以来&#xff0c;版税作为一种收益机制&#xff0c;让买家“为知识和内容付费”&#xff0c;又让卖家“享受…

m在ISE平台下使用verilog开发基于FPGA的GMSK调制器

目录 1.算法描述 2.仿真效果预览 3.MATLAB部分代码预览 4.完整MATLAB程序 1.算法描述 高斯最小频移键控&#xff08;Gaussian Filtered Minimum Shift Keying&#xff09;&#xff0c;这是GSM系统采用的调制方式。数字调制解调技术是数字蜂窝移动通信系统空中接口的重要组成…

决策树-相关作业

1. 请使用泰勒展开推导gini不纯度公式&#xff1b; 2. 请说明树的剪枝怎么实现&#xff1b; ●预剪枝&#xff08;pre-pruning&#xff09;通过替换决策树生成算法中的停止准则。&#xff08;例如&#xff0c;最大树深度或信息增益大于某一阈值&#xff09;来实现树的简化。预…

Flutter高仿微信-第39篇-单聊-删除单条信息

Flutter高仿微信系列共59篇&#xff0c;从Flutter客户端、Kotlin客户端、Web服务器、数据库表结构、Xmpp即时通讯服务器、视频通话服务器、腾讯云服务器全面讲解。 详情请查看 效果图&#xff1a; 实现代码&#xff1a; //删除对话框 Future<void> _showDeleteDialog(Ch…

要把项目问题管理好,项目经理需要这8个步骤!

项目问题时有发生&#xff0c;想让项目获得成功&#xff0c;项目经理需要有一个计划来快速有效地应对任何出现的问题。这是最佳实践问题管理过程的一部分&#xff0c;更是良好项目管理的核心本质。 项目问题的四种类型 任何事情都可能成为项目过程中影响项目计划的问题。项目…

ZYNQ之FPGA学习----FIFO IP核使用实验

1 FIFO IP核介绍 FIFO 的英文全称是 First In First Out&#xff0c; 即先进先出。与 FPGA 内部的 RAM 和 ROM 的区别是没有外部读写地址线&#xff0c; 采取顺序写入数据&#xff0c; 顺序读出数据的方式&#xff0c;使用起来简单方便&#xff0c;缺点就是不能像 RAM 和 ROM …

共创可持续出行未来 奔驰牵手《阿凡达:水之道》

11月20日&#xff0c;梅赛德斯-奔驰与20世纪影业及其出品电影《阿凡达&#xff1a;水之道》的品牌战略合作迈入崭新篇章&#xff01;电影《阿凡达&#xff1a;水之道》已定档于12月16日在全球多地公映&#xff0c;并于即日起开启主题为——“地球&#xff0c;我们的潘多拉”的联…

医疗设备远程监控 5G千兆工业网关智慧医疗

医疗设备远程监控 5G千兆工业网关智慧医疗 5G千兆工业网关的医疗设备远程监控应用&#xff0c;实现各医疗智能终端连接入网&#xff0c;医疗数据、监控视频、设备状态数据等&#xff0c;实时采集&#xff0c;边缘节点分析处理&#xff0c;低延时高速传输&#xff0c;工作人员远…

外汇天眼:外汇投资入门知识炒汇者的心理误区有哪些?

今天这篇文章我们了解一下关于外汇炒汇者的心理误区有哪些&#xff0c;希望对大家进行外汇投资有所帮助。 盲目跟风--心理误区之一 股市被动受诸多复杂因素的影响&#xff0c;其中股友的跟风心理对股市影响甚大。有这种心理的投资人&#xff0c;看见他人纷纷购进股票时&#…

代码随想录训练营第31天|LeetCode 455.分发饼干、 376. 摆动序列、53. 最大子序和

参考 代码随想录 什么是贪心算法 贪心算法&#xff08;又称贪婪算法&#xff09;是指&#xff0c;在对问题求解时&#xff0c;总是做出在当前看来是最好的选择。也就是说&#xff0c;不从整体最优上加以考虑&#xff0c;算法得到的是在某种意义上的局部最优解 。 贪心算法不…