机器学习中的技术债务

2023-12-28 10:30
文章标签 技术 学习 机器 债务

本文主要是介绍机器学习中的技术债务,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

许多人遇到技术债务时都会眉头紧锁,但一般来说,技术债务并不是一件坏事。例如,当我们需要在最后期限之前发布版本的时候,技术债务就是一个可以利用起来的合理手段。但是技术债务存在与金融债务一样的问题,那就是到了要偿还债务的时候,我们所付出的要比开始时付出得多。这是因为技术债务具有复合效应。

经验丰富的团队知道应该在什么时候偿还成堆的债务,但机器学习中的技术债务堆积起来却非常迅速。你可能在一天之内欠下价值数月的债务,即使是最有经验的团队也可能因为一时的疏忽而产生巨额债务,使得他们需要耗费半年才能恢复,这足以扼杀一个快速迭代的项目。

这里有三篇精彩的论文探讨了这个问题:
机器学习:技术债务的高息信用卡 NIPS'14(NIPS:神经信息处理系统大会)
机器学习系统中隐藏的技术债务 NIPS'15
你的机器学习测试成绩是多少? NIPS'16

这些论文介绍了数十种机器学习反模式,它们可能会成为软件基础架构中的定时炸弹。在这里,我只讨论三个最重要的反模式。

反馈回路

当机器学习模型的输出间接馈入自己的输入时,就会产生反馈回路。听起来这很容易规避,但在实际操作中却正好相反。反馈回路有很多种变体,NIPS'14的一篇论文介绍了一个很典型的例子,而我在这里会给出一个更真实的例子。

例子

假设你的公司有一个购物网站。后端团队提出了一个推荐系统,它会根据客户的个人资料和以往的购买记录来决定是否弹出通知。很自然地,你会根据客户先前点击或忽略通知的记录来训练这个推荐系统(这还不算是反馈回路)。在启用这个功能后,你会很兴奋地看到点击通知的比例越来越高。你会把这个增长归功于人工智能,但你不知道的是,前端团队实现了一个固定的阈值,如果推荐的置信度小于50%,则隐藏通知,因为他们不希望向客户显示潜在的不良推荐。随着时间的推移,以前在50-60%置信范围内的推荐现在会被认为是小于50%,这样,最后就只剩下50-100%置信度的推荐了。这就是一个反馈回路。你的指标虽然增长了,但系统并没有得到改善。你不仅要利用机器学习系统,还要让它自己去探索,以避免使用固定的阈值。

在小公司中,控制反馈回路相对来说比较容易,但在拥有数十个团队的大型公司中,几十个复杂系统相互关联,这其中的反馈回路就很有可能会被忽略。

1.jpeg

如果某些指标即使没有启动优化也在缓慢改善,那么说明反馈回路正在发挥作用。找到并解决回路并不容易,因为它涉及到跨团队的合作。

2.jpeg

校正级联

当机器学习模型不再继续学习下去,并且你在最后给机器学习模型的输出打补丁的时候,就会产生校正级联。随着补丁的积累,你最终在机器学习模型的顶层创建的一层厚厚的启发式算法,就称为校正级联。为了顾及机器学习没有学习到的罕见特殊情况,对机器学习系统的输出使用过滤器是很容易的。

3.jpeg

在对整个系统所有的指标进行训练的时候,校正级联会对机器学习模型正在尝试优化的那个指标进行相关化。随着这一层校正级联越来越复杂,你将无法确定机器学习模型的更改是否能对最终的指标起到改善作用,并最后也不知道该如何改进了。

流浪者(Hobo)特征

流浪者特征是机器学习系统中没用但又不能忽视的特征。有三种类型的流浪者特征:

捆绑特征(Bundle features)

有时,当有一组新的特征需要一起评估的时候,我们会将它们捆绑在一起整体提交。但不幸的是,只有其中的某些特征是有用的,而其他的一些特征甚至会起到反作用。

ε特征(ε-features)

有时,即使某个特征只是促使质量提高了一点点,我们也会倾向于添加这个特征。然后,如果基础数据稍稍有所改变,这个特征就可能很快失去作用,甚至起到反作用。

遗产特征(Legacy features)

随着时间的推移,我们为项目添加了一些新的特征,并且没有重新评估它们。几个月后,其中的一些特征可能会变得完全没用,或者被新特征所取代。

在一个复杂机器学习系统中,有效清除流浪者特征的唯一方法是试着一次只清除一个特征。也就是说,一次只删除一个特征,然后再训练机器学习系统,并使用你的指标进行评估。如果系统需要花一天的时间来训练,那么我们一次可以运行5个训练,如果我们有500个特征,那么清除掉这所有的特征则需要100天。但不幸的是,特征之间可能会相互影响,这意味着你必须尝试清除所有可能的特征子集,这时,难度就会指数级地上升。

结合我们的力量

在机器学习基础架构中如果同时包含这三种反模式将是整个项目的灾难。

4.jpeg

因为反馈回路的存在,你的指标将无法反映系统的真实质量,机器学习模型将学习利用这些反馈回路,而不是学习有用的东西。此外,随着时间的推移,你的模型可能无意中由工程团队塑造出来,从而更多地利用这些回路。

校正级联会降低用机器学习模型直接进行测量的指标与整个系统之间的相关性。它可能对机器学习模型有积极的改善作用,但对整个系统指标的影响却是随机的。

因为流浪者特征的存在,你甚至都不会知道数百个功能中哪些是有用的,而且要全部清除它们的代价实在太大。在日常工作中,监测的指标可能会随机上下波动,因为某些垃圾特征会随机起作用。

最终,项目的指标会随机上下波动,无法反映实际的质量,也无法改进。唯一的出路是推倒重来,重写整个项目。

文章原标题《Technical Debt in Machine Learning》,作者:Maksym Zavershynskyi,译者:夏天,审校:主题曲。

文章为简译,更为详细的内容,请查看原文(需备梯)。当然,你也可以下载PDF文档查看原文。

这篇关于机器学习中的技术债务的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/545638

相关文章

Java中的Schema校验技术与实践示例详解

《Java中的Schema校验技术与实践示例详解》本主题详细介绍了在Java环境下进行XMLSchema和JSONSchema校验的方法,包括使用JAXP、JAXB以及专门的JSON校验库等技术,本文... 目录1. XML和jsON的Schema校验概念1.1 XML和JSON校验的必要性1.2 Sche

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

Python中高级文本模式匹配与查找技术指南

《Python中高级文本模式匹配与查找技术指南》文本处理是编程世界的永恒主题,而模式匹配则是文本处理的基石,本文将深度剖析PythonCookbook中的核心匹配技术,并结合实际工程案例展示其应用,希... 目录引言一、基础工具:字符串方法与序列匹配二、正则表达式:模式匹配的瑞士军刀2.1 re模块核心AP

Python学习笔记之getattr和hasattr用法示例详解

《Python学习笔记之getattr和hasattr用法示例详解》在Python中,hasattr()、getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询,这篇文章... 目录1.getattr用法详解1.1 基本作用1.2 示例1.3 原理2.hasattr用法详解2.

springboot自定义注解RateLimiter限流注解技术文档详解

《springboot自定义注解RateLimiter限流注解技术文档详解》文章介绍了限流技术的概念、作用及实现方式,通过SpringAOP拦截方法、缓存存储计数器,结合注解、枚举、异常类等核心组件,... 目录什么是限流系统架构核心组件详解1. 限流注解 (@RateLimiter)2. 限流类型枚举 (

Python实现PDF按页分割的技术指南

《Python实现PDF按页分割的技术指南》PDF文件处理是日常工作中的常见需求,特别是当我们需要将大型PDF文档拆分为多个部分时,下面我们就来看看如何使用Python创建一个灵活的PDF分割工具吧... 目录需求分析技术方案工具选择安装依赖完整代码实现使用说明基本用法示例命令输出示例技术亮点实际应用场景扩

Qt如何实现文本编辑器光标高亮技术

《Qt如何实现文本编辑器光标高亮技术》这篇文章主要为大家详细介绍了Qt如何实现文本编辑器光标高亮技术,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以了解下... 目录实现代码函数作用概述代码详解 + 注释使用 QTextEdit 的高亮技术(重点)总结用到的关键技术点应用场景举例示例优化建议

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

Java中的登录技术保姆级详细教程

《Java中的登录技术保姆级详细教程》:本文主要介绍Java中登录技术保姆级详细教程的相关资料,在Java中我们可以使用各种技术和框架来实现这些功能,文中通过代码介绍的非常详细,需要的朋友可以参考... 目录1.登录思路2.登录标记1.会话技术2.会话跟踪1.Cookie技术2.Session技术3.令牌技

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio