news 2026/5/21 15:38:21

**关于机器学习测试,没人告诉你的事**

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
**关于机器学习测试,没人告诉你的事**

原文:towardsdatascience.com/things-no-one-tells-you-about-testing-machine-learning-28b7a3df3bca?source=collection_archive---------6-----------------------#2024-01-04

如何避免灾难

https://medium.com/@ryan.feather?source=post_page---byline--28b7a3df3bca--------------------------------https://towardsdatascience.com/?source=post_page---byline--28b7a3df3bca-------------------------------- Ryan Feather

·发表于 Towards Data Science ·7 分钟阅读·2024 年 1 月 4 日

你已经准备好将你精心设计、专业调优和准确训练的算法部署到那个叫做“生产”的最终前沿。你已经收集了高质量的测试集,并对算法的表现感到高兴。是时候发布它并认为今天的工作圆满完成了!但不要太急。

没有人愿意在事后被叫去修复一个令人尴尬的机器学习应用。如果你的客户已经指出有问题,那就意味着你失去了信任。现在是时候疯狂地尝试调试并修复一个可能涉及数十亿自动学习参数的系统了。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/9267516a16e656b2cc2a69feebc53c5f.png

图片由作者使用 Stable Diffusion 创建

如果这听起来有些抽象或不太可能,以下是我自己职业生涯中的一些例子,这些模型在“测试”集上表现良好,但在实际应用中却有不同的结果:

当然,你知道,尽管真正的价值在于机器学习,你已经构建了软件,并且所有的常规规则都适用。你需要单元测试、对集成点的审查以及监控,以捕捉真实系统中出现的众多问题。但是,如何有效地做到这一点呢?随着你改进模型,输出预计会发生变化,而你训练时的假设则会受到变化世界的影响。

(大致)围绕模型进行单元测试

# Not a great use of test codedeftest_predict(model_instance,features):prediction=model_instance.predict(features)assertprediction==0.133713371337

很显然,上述测试非常脆弱,无法捕捉到许多潜在问题。它仅仅测试我们的模型是否生成了最初训练时预期的结果。不同的本地和生产环境中的软件和硬件栈使得在推进部署的过程中,它容易出现问题。随着模型的演化,这会带来比其价值更多的维护工作。你预测管道的大部分复杂性都来自于数据收集、预处理、清洗、特征工程以及将预测结果包装成有用的输出格式。在这方面,更好的测试可以让任务变得更加轻松。

下面是你应该做的事情。

怀疑集成问题

曾经玩过“传话游戏”吗?在每次传递时,理解度都会下降。复杂系统有许多传递环节。你对每个团队成员在快速交付时,如何全面地文档化和沟通数据语义有多少信心?或者,几个月或几年后,当你做出更改时,你对自己能否精确地记住所有这些事情又有多大信心?

复杂软件中的管道是问题频发的地方。解决方案是创建一组黑盒测试用例,测试整个管道的输出。尽管这需要定期更新,如果你的模型或代码频繁变化,但它覆盖了大量的代码并且可以快速发现未预见的影响。所花的时间是值得的。

deftest_pipeline(pipeline_instance):# Execute the entire pipeline over a set of test configurations that# exemplify the important cases# complex inputs, file paths, and whatever your pipeline needstest_configuration='some config here'# Run the entire flow. Data munging, feature engineering, prediction,# post processingresult=pipline_instance.run(test_configuration)assertnp.testing.assert_almost_equal(result,0.1337)

测试整个管道保持 ML 应用的健康。

信任是有代价的。

在开发 ML 管道时,偏执是一种美德。你的管道和依赖关系越复杂,出错的可能性就越大,而这些错误往往是你的算法至关重要的部分。即使你的上游依赖由有能力的团队管理,你真的能指望他们永远不会犯错吗?输入数据绝对不会被破坏的可能性为零吗?**大概不行。**但是,为人类所犯错误做准备的公式其实很简单。

  1. 坚持已知的输入范围。

  2. 快速失败。

  3. 高声失败。

最简单的方法是在管道的早期尽早检查已知的输入范围。你可以手动设置这些范围,或者在训练模型时与模型一起学习这些范围。

defcheck_inputs(frame):""" In this scenario we're checking areas for a wide but plausible range. The goal is really just to make sure nothing has gone completely wrong in the inputs."""conforms=frame['square_footage'].apply(lambdax:1<x<1000000)ifnotconforms.all():# Fail loud. We're no longer in the state the pipeline was designed for.raiseValueError("Some square_footage values are not in plausible range")

上面的例子演示了公式。只需对每个输入重复此操作。将其放在管道的最前面。嘈杂的验证函数实现起来很快,并能帮助团队避免不幸的后果。这种简单的检查方法本可以帮助我们避免那次不幸的“空值替换为零”错误。然而,这些测试并不能捕捉到所有涉及多变量交互的场景。这时,稍后提到的 MLOps 技术便会发挥作用,显著提高鲁棒性水平。

运行真实数据障碍赛。

单元测试就像一把外科手术刀,能够精确控制并执行代码中的具体路径。集成测试则非常适合检查数据是否按预期流经整个系统。然而,在真实数据中总是存在“未知的未知”

理想的部署前检查是将你的 ML 管道应用于尽可能多的真实数据,具体取决于时间和成本。接下来,对结果进行剖析,以发现异常值、错误和边缘情况。作为额外的好处,你还可以利用大规模执行进行性能测试和基础设施成本估算。

另一个有效的策略是“软启动”你的模型。在正式发布之前,先让一小部分用户体验。这让你能够发现任何负面的用户反馈,并且可以在小规模上找到真实世界中的失败,而不是在大规模上发现。这也是一个很好的时机,可以对现有或替代方案进行 A/B 测试。

测试永远不够

创建并认真维护单元测试只是开始。显然,实时软件需要异常处理策略、监控和告警。当软件依赖于一个可能很快过时的学习模型时,这一点尤为重要。

MLOps 领域已经发展起来,专门解决这些挑战。本文不会深入概述 MLOps 的现状,但这里有一些快速的想法,帮助你监控 ML 应用程序,超越"黄金信号"。

大型云平台工具,如 Azure AI、Vertex AI 和 SageMaker,都提供内置的漂移检测功能。其他选项包括 Fiddler AI 和 EvidentlyAI。欲了解更多关于如何选择机器学习技术栈的想法,请参阅 适合每个团队的机器学习扩展选项。

结论

从训练到部署及以后的整个机器学习流程的保持最佳状态是一项挑战。幸运的是,凭借精明的测试和监控策略,这完全是可以管理的。密切关注一些关键信号,以防止即将发生的灾难!单元测试管道,以检测大规模代码库中的断裂。尽可能多地利用你的生产数据。监控预测和特征,以确保你的模型保持相关性。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/21 15:36:28

通过Taotoken CLI工具一键配置团队统一的AI助手开发环境

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 通过Taotoken CLI工具一键配置团队统一的AI助手开发环境 当团队中有多位开发者需要接入大模型服务时&#xff0c;手动为每个人配置…

作者头像 李华
网站建设 2026/5/21 15:34:28

Show-o架构深度剖析:双路径空间-时间融合机制

Show-o架构深度剖析&#xff1a;双路径空间-时间融合机制 【免费下载链接】Show-o [ICLR & NeurIPS 2025] Repository for Show-o series, One Single Transformer to Unify Multimodal Understanding and Generation. 项目地址: https://gitcode.com/gh_mirrors/sh/Show…

作者头像 李华
网站建设 2026/5/21 15:34:11

新手首次使用 Taotoken 从注册到发出第一个 API 请求的全流程

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 新手首次使用 Taotoken 从注册到发出第一个 API 请求的全流程 本文旨在为初次接触 Taotoken 平台的开发者提供一份清晰的入门指南。…

作者头像 李华
网站建设 2026/5/21 15:28:29

3PEAK思瑞浦 TP1514-SR SOP14 运算放大器

特性 .稳定150kHzGBWP .0.09伏/微秒斜率 每放大器仅4安培供电电流 单位增益稳定 偏移电压:最大3.0毫伏 偏移电压温度漂移:0.6V/C 输入偏置电流:典型值为1pA 高共模抑制比/电源抑制比:110dB 过驱动输入无相位反转 超出轨输入共模范围 输出摆幅在每轨内5mV范围内 单电源电压范围2…

作者头像 李华