但让我们首先了解什么是技术债务:
“在软件开发中,技术债务(也称为设计债务或代码债务)是由于现在选择简单(有限)解决方案而不是使用需要更长时间的更好方法而导致的额外返工的隐含成本。” – 维基百科
根据 Ward Cunningham 的说法,技术债务是软件工程快速发展所产生的长期成本。在将代码转移到生产环境时,在某个时间点做这件事可能看起来是正确的,但在编写全面的单元测试、删除冗余和未使用的代码、文档、代码重构、等。从事此类任务的团队不是提供新功能,而是及时处理债务以减少错误范围并促进代码维护的简单性。
机器学习范围内的技术债务
考虑 ML 系统中的技术债务会导致在典型软件工程问题之上与 ML 相关问题的额外开销。
机器学习技术债务的很大一部分归因于系统级交互和接口。
了解你的消费者
识别机器学习预测的消费者对于衡量新版本模型的影响至关重要。模型预测的反馈为模型修订奠定了基础,并纳入了对用户的潜在影响。
了解你的消费者
由催化剂材料创建的咖啡工作向量;由故事集创建的 Web 分析向量
为了消除因非预期用户的框架不明确或理解不充分而带来的风险,重要的是记录并签署声明的用户集,并将隐藏的反馈循环和来自广泛用户的期望解耦。
变化不大
当影响目标变量的所有属性在模型训练期间都存在时,最好构建机器学习系统。从本质上讲,模型可以看到人类专家会看到什么来评估结果。如果所有变量都是独立的,数据科学家的生活会简单得多,但这不是管理现实事件的方式。变量中的任何单个变化不仅会改变其分布,还会影响所有输入(或独立)变量的特征重要性和权重。这归因于交互属性,即变量的变化会影响所有变量的联合分布。
在添加或删除变量时可以观察到类似的效果。信号的混合和纠缠错综复杂地改变了整个模型学习过程。
请注意,这不限于任何变量的添加或删除,主要是超参数、数据管理、标记过程、阈值选择或采样过程的任何变化,这些变化可能会导致称为“改变一切改变一切”的效果。
相关数据和变化数据
输入数据分布可能会随着时间而改变,需要评估其对模型结果的影响。这就是数据版本控制很重要的地方,以便很好地捕获和记录数据中的定性和定量变化。然而,这会增加保持数据新鲜度和维护多个版本的成本。
很多数据科学家添加了大量的包或对代码进行临时更改,以快速适应最新版本的运行代码来进行实验或分析。当他们忘记保持代码相关性并删除未使用或不必要的代码块时,就会出现问题,这些代码块会在需要时妨碍以后对代码进行更改。当多个开发人员在单个脚本上协作并不断添加更改而没有消除冗余或不相关性时,通常会出现这种情况,因为担心他们最终可能会破坏其他人的代码,或者会花费额外的时间来测试向后 -兼容的变化。
何时添加与不权衡
每个数据科学家都需要接受这样一个事实,即在添加功能时“越多越好”。假设每一个特征对模型学习都很重要,除非它导致过高的数据维度,数据科学家不会考虑维护具有残值的特征的成本。此外,如果一个特性后来被宣布为不重要,他们宁愿不承担更改模型管道的痛苦,因此,继续承载在早期模型开发阶段设计的遗留特性。
在将所有特征从单个表中直接插入模型之前,这看起来仍然很容易处理。当属性来自多个数据流并经历大量的连接和转换导致额外的中间步骤时,复杂性会增加很多。管理此类管道以及检测和调试此类系统成为团队继续开发创新解决方案的障碍。
限制的级联效应
管理单一模型本身就是一场艰苦的战斗,因此许多组织倾向于建立一个通用模型。尽管这似乎是一场胜利的游戏,但它是一把双刃剑。
限制的级联效应
由催化剂材料创建的咖啡工作向量
通用模型是否适用于所有用例?如果不是,那么在基本模型之上构建一个校正模型层通常是一个受欢迎的选择,以更好地服务于略有不同但相似的问题陈述。在这种情况下,修改后的模型将基础模型作为输入,增加了一层依赖关系和一组额外的对修改后的模型的分析和监控。
概括
在文章中,我们讨论了处理机器学习系统中隐藏的技术债务的成本和收益。优先考虑发布新模型版本或测试端到端运行管道的短视观点将迅速将事情转移到生产中。但从长远来看,它继续增加了减缓团队创新速度的隐藏成本。
研究论文的作者分享了一些深思熟虑的问题,供人工智能从业者在考虑隐藏债务的影响时思考:
全面测试一种新的算法方法是多么容易
我们如何衡量每个变化的影响?我们是否在管道中建立了检查点来捕获和归因诊断因素?
通过对系统进行一次更改来进行改进是否会对系统的其余部分产生负面影响?
新成员了解整个管道的细微差别和复杂性有多快和容易?
相关帖子DA内容精选
|