机器学习中的技术债务

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

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

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

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

反馈回路

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

例子

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

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



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

校正级联

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



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

流浪者(Hobo)特征

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

捆绑特征(Bundle features)

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

ε特征(ε-features)

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

遗产特征(Legacy features)

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

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

结合我们的力量

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



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

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

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

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

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

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

时间: 2024-12-31 13:50:33

机器学习中的技术债务的相关文章

消除技术债务?DevOps可以这么用!

DevOps强调开发运维过程的可度量与透明化.而通常情况下我们把软件质量分为内部质量和外部质量.所以我们应该对内部质量和外部质量分别进行度量,以便持续改进和优化软件质量. 软件的内部质量通常指代码和设计的质量.内部质量可以通过应用设计和编程达到最佳实践,也可以通过持续一致的开发和交付流程来提高. 通常,软件的外部质量是通过查看和使用软件(例如验收测试)来度量的. 比较常见的情况是,有的软件外部质量很好(所有功能都能正常使用),但是内部质量却很差(可能有糟糕的代码.不可维护的代码).从长远的角度看

投资于质量 不再有技术债务

一个童话故事 很久以前,有个软件开发团队找到他们的经理."我们的项目有相当多的技术债务(Technical Debt),我们应该做点什么."这个团队说.他们展示了一张图(图1)来说明项目的技术债务."技术债务关系到项目质量."他们说.并展示了技术债务各部分的分解,通过静态代码分析,能发现过于复杂的代码.重复的代码和冲突."我们需要去除技术债务"他们告诉经理. 图1:SonarQube技术债务插件的结果报告 但经理困惑了:什么是技术债务?他该额外再

Habya'a(临时拼凑的组件)与技术债务

我们曾遇到过最后期限即将到来.时间非常紧迫的情况.当时,我们必须尽快修复Bug,然而其中的一个Bug特别坚韧,任我们百般努力也无可奈何!随后,我的某个同事接手了调试工作.他强行写入了一些应该从数据库中检索来获取的值--它们在系统运营的最初几个月里不会发生变化--随后--系统神奇地正常工作了! 对于这类"莫名其妙的代码",我的这位同事以非常风趣的埃及俚语称之为"Habya'a",意即临时拼凑的组件. 我同事和他的创造性俚语相仿,Ward Cunningham在1992

追剧学AI (6) | 概率论在机器学习中的迁移运用,手把手建一个垃圾邮件分类器

人工智能中的数学概念一网打尽!欢迎来到YouTube网红小哥Siraj的系列栏目"The Math of Intelligence",本视频是该系列的第6集,讲解 概率论在机器学习中的运用,看完视频后,大家会学到一个生活中非常实用的技能喔! (大数据文摘已获得Siraj本人翻译授权) 大家好,我是Siraj. 让我们将目光高度聚焦在概率论在机器学习中扮演的角色,通过从头开始构建一个垃圾邮件分类器. 数学概念在生活中的应用 生活中充满了不确定性,我们尝试一些自己觉得会成功的事情,但我们无

[译]如何处理机器学习中的不平衡类别

本文讲的是[译]如何处理机器学习中的不平衡类别, 原文地址:How to Handle Imbalanced Classes in Machine Learning 原文作者:elitedatascience 译文出自:掘金翻译计划 本文永久链接:github.com/xitu/gold-m- 译者:RichardLeeH 校对者:lsvih, lileizhenshuai 如何处理机器学习中的不平衡类别 不平衡类别使得"准确率"失去意义.这是机器学习 (特别是在分类)中一个令人惊讶的

技术债务(母鸡的遭遇)(转)

技术债务,是指匆忙的实现一个功能,却对现有的程序库造成了破坏(在实现的过程中污染了代码库的设计),这对于一些项目经理/客户来说就像是天书奇谈.也许他们是明白的,只是不愿意承认罢了,我估计是这样的.不管怎样,我想起来一个小故事,当下次遇到这种情况,需要向他们解释增加某些新功能的代价时,也可用讲这个故事给他们听. 一个农夫有3只母鸡.每只母鸡每天下一个蛋.农夫跟当地的一个食品店老板做生意.食品店老板每天从农夫那里买2给鸡蛋放在店里出售.一切都很好,直到有一天,食品店老板出现在农夫家里: 食品店老板:

技术债务管理以及Firefox/Chromium的债务评价

现在的软件开发是在遍地敏捷,人人讲唯快不破的时代,哪有人有时间思考代码质量,设计的质量? 哪个又不是从一堆代码中杀出血路来实现另一个功能?一个产品都存活不了几年,何必考虑什么可维护性? 我们追求进度的时候,总是要牺牲些东西,或是破坏了一些东西等着后面补.这就是技术债! 管理不好,债台高筑,即使不破产,也是要拆东墙,补西墙的玩平衡.现实是残酷的,但不影响我们抬头看看这个世界. 技术债务 技术债务(Technical Debt)这个词,我最早是从InfoQ关于Uber的一个访谈中了解到的,正好也在思

2016 只剩最后一个月 你的 "技术债务" 还清了吗?

一夜醒来,猛然发现,2016 已经只剩最后一个月了! 回忆过去的 330 多个日与夜,哪些互联网圈的大事让你瞠目结舌? 也许是 AlphaGo 在堪称人脑游戏巅峰的围棋领域屡战告捷: 也许是 Pokémon Go 称霸大洋彼岸,虚拟游戏与现实场景没有了界限: 也许是双十一的天猫,用 20 秒的时间,实现了"挣它一个亿"的小目标: 也许是美帝的黑客,用网络技术,把即将坐上总统交椅的希拉里掀翻在地: -- 当然了,以上可能都看起来与你无关.但是这一年你一定真切地感受到了这些-- 我们曾立志

结合美团下单率预测详解机器学习中的数据清洗与特征处理

目前在美团的团购系统中大量地应用到了机器学习和数据挖掘技术,例如个性化推荐.筛选排序.搜索排序.用户建模等等.本文主要介绍在美团的推荐与个性化团队实践中的数据清洗与特征挖掘方法. 综述 机器学习框架 如上图所示是一个经典的机器学习问题框架图.数据清洗和特征挖掘的工作是在灰色框中框出的部分,即"数据清洗=>特征,标注数据生成=>模型学习=>模型应用"中的前两个步骤. 灰色框中蓝色箭头对应的是离线处理部分.主要工作是 从原始数据,如文本.图像或者应用数据中清洗出特征数据和