我们可以将最佳实践抽象为实际的设计模式吗?机器学习

人工智能 机器学习

 机器学习中的设计模式

根据其定义,设计模式是对常见问题的可重用解决方案。在软件工程中,这一概念可以追溯到1987年,当时Beck和Cunningham开始将其应用到编程中。到2000年代,设计模式(尤其是面向OOP的SOLID设计原则)被认为是程序员的常识。快进15年,我们进入了Software 2.0的时代:机器学习模型开始在越来越多的代码位置取代经典功能。今天,我们将软件视为传统代码,机器学习模型和基础数据的融合。这种融合需要这些组件的无缝集成,考虑到这些领域通常不同的历史和演变,这通常并非易事。

今天,我们将软件视为传统代码,机器学习模型和基础数据的融合。

但是,尚未扩展设计模式以应对这个新时代的挑战。在Software 2.0中,常见的挑战不仅出现在代码级别,而且还出现在问题定义,数据表示,训练方法,扩展以及支持AI的系统设计的道德方面。这为实践机器学习反模式创造了沃土。不幸的是,今天,即使是博客文章和会议,有时也会采用反模式:被认为可以改善但实际上却使情况更糟的做法。由于反模式也需要技能,因此其从业人员通常不会认识到这种技能。因此,在下文中,我将给出两个常见的ML挑战示例,但我将首先介绍其解决方案反模式,而不是从设计模式入手。

该模型在评估指标上显示出较差的性能

在常见情况下,在收集,清理和准备数据之后,工程师会训练第一个模型,并发现该模型在测试数据上显示出较差的性能。常见的反模式是用更复杂的模式(例如,通常是梯度增强树)替换第一个模型,并以此来提高性能。通过例如通过模型平均来组合多个模型,该反模式的变型可以跟随该步骤。

这些方法的问题在于它们仅关注问题的一部分,即模型,并选择通过增加模型的复杂性来解决问题。这一步迫使我们接受过度拟合的高风险,并以可解释性换取其他预测能力。尽管有一些有效的方法可以减轻这种选择的副作用(例如LIME),但我们无法完全消除它们。

设计模式是错误分析。实际上,这意味着通过评估模型在不同测试集上的拟合度,甚至通过查看模型错误的个别情况,来查看模型出错的地方。尽管我们都听到过“垃圾进,垃圾出去”的说法,但即使数据存在一点点不一致,也很少有人意识到这是正确的。标签可能来自不同的评分者,每个评分者对标签指南的解释都略有不同。也许收集数据的方式已经随着时间而改变。对于小数据问题,错误分析的效果尤其明显。但是,我们还应记住,在大比例的大数据情况下,我们还会处理长尾事件(例如,通过入学考试确定稀有人才)。

错误分析的真正威力来自于这样一个事实,即我们不通过应用它来交换可解释性或过度拟合的风险,实际上仅应用它就可以得出有关数据分布的关键知识。此外,错误分析使我们能够选择以模型为中心的解决方案(例如,更复杂的模型)和以数据为中心的解决方案(例如,进一步的清洁步骤)。

部署模型的性能随时间下降

该模型经过广泛的验证,并被部署到生产中。用户很高兴,并给出了积极的反馈。然后,一个月/一个季度/一年之后,就会出现有关预测缺陷的报告。这通常是概念漂移的体现,模型在输入和输出之间学习的联系已随时间而改变。在某些地方,这种概念漂移是众所周知的(单词语义,垃圾邮件检测器),但“概念”漂移可能发生在任何领域。例如,口罩和社会疏远法规也挑战了许多先前部署的计算机视觉模型。

常见的反模式是将这些示例归因于噪声,并希望情况随着时间的推移而趋于稳定。这不仅意味着缺乏行动,而且还包括错误的归因,在数据驱动的业务中通常应避免这种归因。稍微好一点的反模式是通过快速重新培训和部署新模型来对报告做出反应。即使在团队假设他们遵循敏捷软件开发原则并因此选择对变化做出快速反应的情况下,这也是一种反模式。问题在于该解决方案可以解决症状,但不能解决系统设计中的缺陷。

设计模式是对性能的连续评估,这意味着您预计会发生漂移,因此,请设计系统以使其尽快注意到。这是一种完全不同的方法,因为重点不是反应速度而是检测速度。这使整个系统处于更加受控的过程中,从而为任何反应的优先级分配了更大的空间。持续评估意味着建立流程和工具,以不断为一小部分新数据生成基本事实。在大多数情况下,这涉及手动标签,通常使用众包服务。但是,在某些情况下,我们可以使用其他更复杂的方法,但是在部署环境中,不可行的模型和设备会生成地面真相标签。例如,在自动驾驶汽车的开发中,一个传感器(例如LiDAR)的输入可用于生成另一传感器(例如摄像机)的地面真实情况。

机器学习的SOLID设计原则

我之所以写设计模式,是因为该领域已经达到成熟水平,我们不仅应该分享我们的最佳实践,而且还应该能够将它们抽象为实际的设计模式。幸运的是,这项工作已经由多个小组开始。实际上,最近有两本关于主题[ 1 ],[ 2 ]的书出版了。我很喜欢阅读它们,但我仍然感到,尽管我们朝着正确的方向前进,但距离为ML从业人员制定SOLID设计原则还差几步之遥。我相信,虽然已经掌握了基础知识,并已用于构建当今的支持AI的产品,但设计模式和反模式的工作是迈向软件2.0时代的重要一步。

责任编辑:梁菲 来源: 互联网
相关推荐

2018-04-12 13:53:19

2022-12-06 17:02:10

机器学习模型设置

2022-03-15 09:00:00

机器学习软件开发MLOps

2018-08-03 10:30:16

算法回归机器学习

2016-12-27 08:49:55

API设计策略

2021-09-29 13:53:17

抽象工厂模式

2020-10-19 09:28:00

抽象工厂模式

2013-06-13 09:21:31

RESTful APIRESTfulAPI

2020-08-28 07:00:00

机器学习预测股市人工智能

2023-02-24 11:29:32

量子机器学习机器学习

2020-12-17 09:38:16

设计模式参数

2023-08-07 08:04:05

动态抽象工厂模式

2023-11-02 10:24:34

2021-11-30 22:51:36

机器学习大数据技术

2018-06-23 13:55:15

Apache SparPython数据

2021-03-06 22:50:58

设计模式抽象

2018-07-19 10:35:12

机器学习数据平台

2022-05-17 11:05:16

机器学习人工智能

2010-12-02 10:30:09

Apache Hado反模式Map Reduce

2010-12-28 10:12:39

PHP
点赞
收藏

51CTO技术栈公众号