机器学习中的技术债务

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文档查看原文。

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


原文地址:https://blog.csdn.net/weixin_34008784/article/details/90460303
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/545638

相关文章

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

Web技术与Nginx网站环境部署教程

《Web技术与Nginx网站环境部署教程》:本文主要介绍Web技术与Nginx网站环境部署教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、Web基础1.域名系统DNS2.Hosts文件3.DNS4.域名注册二.网页与html1.网页概述2.HTML概述3.

重新对Java的类加载器的学习方式

《重新对Java的类加载器的学习方式》:本文主要介绍重新对Java的类加载器的学习方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍1.1、简介1.2、符号引用和直接引用1、符号引用2、直接引用3、符号转直接的过程2、加载流程3、类加载的分类3.1、显示

Java使用WebView实现桌面程序的技术指南

《Java使用WebView实现桌面程序的技术指南》在现代软件开发中,许多应用需要在桌面程序中嵌入Web页面,例如,你可能需要在Java桌面应用中嵌入一部分Web前端,或者加载一个HTML5界面以增强... 目录1、简述2、WebView 特点3、搭建 WebView 示例3.1 添加 JavaFX 依赖3

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen

SpringBoot3实现Gzip压缩优化的技术指南

《SpringBoot3实现Gzip压缩优化的技术指南》随着Web应用的用户量和数据量增加,网络带宽和页面加载速度逐渐成为瓶颈,为了减少数据传输量,提高用户体验,我们可以使用Gzip压缩HTTP响应,... 目录1、简述2、配置2.1 添加依赖2.2 配置 Gzip 压缩3、服务端应用4、前端应用4.1 N

Java利用JSONPath操作JSON数据的技术指南

《Java利用JSONPath操作JSON数据的技术指南》JSONPath是一种强大的工具,用于查询和操作JSON数据,类似于SQL的语法,它为处理复杂的JSON数据结构提供了简单且高效... 目录1、简述2、什么是 jsONPath?3、Java 示例3.1 基本查询3.2 过滤查询3.3 递归搜索3.4

Python中随机休眠技术原理与应用详解

《Python中随机休眠技术原理与应用详解》在编程中,让程序暂停执行特定时间是常见需求,当需要引入不确定性时,随机休眠就成为关键技巧,下面我们就来看看Python中随机休眠技术的具体实现与应用吧... 目录引言一、实现原理与基础方法1.1 核心函数解析1.2 基础实现模板1.3 整数版实现二、典型应用场景2