一、概述
近年来,机器学习无论是作为学术研究领域还是实际商业问题的解决方案,都受到了越来越多的关注。然而,就像其他领域一样,在学术环境中起作用的研究和实际系统的要求之间往往存在着显著差异,所以在生产系统中部署机器学习模型可能会带来许多问题。
本文介绍一篇剑桥大学2020年发表的研究综述【1】,其调研了在各种用例、行业和应用中部署机器学习解决方案的公开报告,提取了与机器学习部署工作流阶段对应的实际考虑因素。对于从业者而言,了解在机器学习部署的各个阶段所面临的挑战是非常重要的,本文将对这方面进行主要阐述,最后介绍潜在的解决方案,希望各位能从中受益并引发更多思考。
二、机器学习方案部署的常见问题和挑战
早在十年前机器学习还只是一门研究学科的时候,除了信息技术行业的大型科技公司之外,很少看到机器学习解决方案在实际业务上的部署,所以人们更关注机器学习可以解决什么问题。而如今随着机器学习在许多行业中被普遍应用,问题的焦点已经变成了它使用起来有多难?在专业人员中调查显示,大多数公司报告部署单个模型需要8-90天,还有18%的公司需要更长的时间,很大一部分部署失败的主要原因是缺乏专业知识、数据偏差和高昂的成本。
在工业环境中开发基于机器学习的解决方案包括四个阶段:数据管理、模型学习、模型验证和模型部署,而这些阶段没有严格的时间轴,在一定程度上存在并行和反馈循环。本节将讨论从业者在四个阶段中面临的常见问题和挑战。并讨论涉及到的其他问题。
2.1 数据管理
数据是任何机器学习解决方案中不可或缺的一部分。解决方案的整体有效性不仅取决于算法,还取决于训练和测试数据,创建高质量数据集的过程通常是任何生产机器学习流水线的第一个阶段。本小节我们将讨论数据管理中的四个步骤:数据收集、数据预处理、数据增强和数据分析。
1、数据收集
数据收集旨在发现哪些数据可用以及如何存储,特别是在大型生产环境中,我们不太可能跟踪与实体相关的哪些数据由哪个服务以何种形似存储,还有一些数据可能只以日志形式存在而不容易被理解或查询,更糟糕的情况是,当数据不在任何地方存储时,我们需要重新构建数据集。因此,面对如此分散的数据,寻找数据源并理解其结构给从业者带来非常多的阻碍。
2、数据预处理
预处理步骤通常涉及填充缺失值、将数据简化为有序的形式以及将原始形式映射为更方便的格式,我们关注到的一个鲜为人知但也很重要的问题是数据分散,它也是预处理步骤之一。通常会有多个相关的独立数据源,这些数据源可能具有不同的模式、约定、存储和访问方式,将这些信息加入一个适合机器学习的单一数据集本身就是一项复杂的任务,数据之间哪怕再微小的差异都需要清理和纠正。
3、数据增强
需要扩充数据的原因有很多,在实践中最成问题的是缺少标签。真实世界的数据通常没有标记,所以标记本身就是一个挑战,缺乏标记数据的可能因素有很多。
首先,在倾向于生成大量数据的环境中分配标签是困难的,例如网络流量分析,在这个领域中无论是收集真实的流量还是模拟产生流量对于标记目标来说都很复杂;其次,专家知识的获取可能是收集高质量标签的另一个瓶颈,对于标记过程非常依赖专业知识的领域尤其如此,例如医学图像分析,通常情况下一组图像需要多个专家进行标记,然后将这些标签聚合在一起以确保质量,由于访问专家的机会有限,大数据集标注不太可行;最后,在将机器学习解决方案从实验室环境部署到现实世界时,缺乏高方差数据可能是面临的主要挑战之一,比如在强化学习的研究中通常需要不同的环境来训练和评估,但是在实践中所有的数据都来自真实的系统,使得数据变得低方差,因此模型可能无法识别不安全情况并做出正确决策。
4、数据分析
我们需要对数据进行分析以发现潜在的偏差或意外的分布,高质量工具的可用性对于进行任何类型的数据分析都是必不可少的。从业者发现在这方面特别具有挑战性的一个领域是数据配置工作的可视化,数据配置是指与故障诊断数据质量相关的所有活动,例如缺失值、不一致的数据类型和假设验证。尽管与数据库和统计领域有明显的相关性,但能够有效执行这些数据挖掘任务的工具仍然太少,而数据科学家认为数据问题是影响整体工作质量的主要因素。
2.2 模型学习
在部署工作流中模型学习是学术界最关注的一个阶段,所有关于机器学习方法的研究都有助于在这一阶段更好地选择和使用各种模型和方法。作为该领域增长规模的一个例证,2014年至2019年在人工智能顶会NeurIPS上提交的论文数量在六年内翻了两番。2014年至2019年在人工智能顶会NeurIPS上提交的论文数量翻了两番,尽管如此,仍然有许多实际的考虑因素会影响模型学习阶段。本小节我们将讨论模型学习中的三个步骤:模型选择、模型训练和超参数选择。
1、模型选择
在许多实际案例中,模型选择通常由模型的复杂性决定。尽管深度学习和强化学习等领域在研究界越来越受欢迎,但在实践中,我们经常选择更简单的模型,如较浅的网络结构、简单的基于PCA的方法、决策树和随机森林等。
首先,简单模型可以大大缩短部署解决方案的时间,所以能够作为一种快速验证所提出的机器学习解决方案的方法;其次,简单模型所需要的硬件计算需求更低,在一些资源受限的环境如航天器系统、无线蜂窝网络中更为适合;最后,将模型的输出解释为可理解的业务领域术语的能力通常在模型选择中起着关键作用,甚至会超过性能考虑因素,比如银行业对于可解释的需求决定了更倾向于选择简单模型。
2、模型训练
模型训练最大的问题之一是所需的计算资源和训练阶段相关的经济成本。比如自然语言处理领域最先进的模型之一BERT,根据所选模型大小的不同,完整训练过程的成本可能在5万美元到160万美元之间,这对大多数研究机构甚至公司来说都是很难负担的。当然,训练数据集的大小、模型参数的数量和训练过程中使用的操作数量都对总体成本有影响,其中特别重要的因素是参数数量,新的自然语言处理模型已经使用了数千亿个参数,而且这个数字还会进一步增加。
此外,机器学习模型的训练对环境也有影响,会消耗越来越多的计算资源,进而增加能源消耗和温室气体排放。据估计,使用神经结构搜索的一个完整训练周期释放的二氧化碳量相当于四辆普通汽车一生的排放总量,因此我们应该优先考虑计算效率高的硬件和算法。
3、超参数选择
除了在训练过程中学习到的参数外,许多机器学习模型还定义了一些超参数,超参数优化是搜索这些超参数的最优集的过程。大多数超参数优化技术涉及机器学习模型的多个训练周期,并且每增加一个超参数,超参数优化任务都会由于搜索空间增加了一个新的维度而呈指数级增长,所以超参数优化技术在实践中非常昂贵和耗费资源,特别是对于深度学习的应用。此外,我们也经常需要考虑模型运行环境的特定要求如内存限制,这也产生了对定制硬件感知优化技术的需求,这些技术可以共同优化模型的准确性和硬件效率。
2.3 模型验证
模型验证阶段的目标是多方面的,机器学习模型应该很好地泛化到不可见的输入,展示对边缘情况的合理处理和整体鲁棒性,并满足所有功能需求。在本节中,我们将讨论模型验证中的三个步骤:需求编码、形式化验证和基于测试的验证。
1、需求编码
定义机器学习模型的需求是测试活动的关键先决条件。由于模型性能的提高通常不会转化为业务价值的增加,简单地测量机器学习模型的精度并不足以了解其性能,因此需要定义和度量更具体的指标,例如KPI和其他业务驱动的度量,甚至需要跨学科来定义这样的指标,需要从建模、工程和业务角度进行理解。一旦定义,这些度量指标就用于监控生产环境和模型更新的质量控制。
2、形式化验证
形式化验证步骤验证模型功能是否符合项目范围内定义的需求,可以包括正确性的数学证明或输出误差边界的数值估计,但这种情况在实践中很少发生,更多情况下,质量标准是通过广泛的监管框架正式制定的。机器学习解决方案必须遵守法规的一个例子是银行业,关于定义如何构建、批准和维护模型的过程受到越来越严格的监管。因此形式化验证意味着确保模型符合相应法规规定的所有标准。
3、基于测试的验证
基于测试的验证旨在确保模型很好地泛化到以前未见过的数据。虽然可以从训练集中分离出验证集,但对于生产部署来说可能还不够。在理想的场景中,测试是在真实的环境中进行的,这样可以观察到业务驱动的指标,但由于各种安全性和规模的原因,在真实环境中的全方位测试可能具有挑战性,并且通常用模拟测试来代替。一般来说,模拟测试的成本更低,运行速度更快,并且可以构建现实生活中很少遇到的情况,然而,基于模拟的测试取决于模拟开发人员所做的假设,因此不能完全替代真实世界的测试,即使仿真与真实世界之间的微小差异也会对系统行为产生巨大的影响。
此外,数据集本身也需要不断被验证,以确保数据错误不会蔓延到机器学习模型部署的其他阶段,也不会影响整体质量。
2.4 模型部署
在生产中运行的机器学习系统是一个复杂的软件系统,必须随着时间的推移进行维护。在工程中有一个独立的学科DevOps,专注于维护和支持现有生产系统所需的技术和工具,尽管DevOps的一些原则可以直接应用,但是投入生产的机器学习仍然存在许多独特的挑战。在本节中,我们将讨论模型部署中的三个步骤:集成、监控和更新。
1、集成
首先,模型集成包括运行模型基础设施的构建和模型的实现,前者不在本文的讨论范围,后者揭示了机器学习和软件工程的交叉,软件工程中经常使用的很多概念在机器学习中被重用。代码重用是软件工程中常见的概念,机器学习也采用了相同的思维方式,数据和模型的重用节省了时间、精力和基础设施。
其次,还有一些广泛存在于机器学习软件中的问题,如抽象边界侵蚀和修正级联,是由于在软件必须明确依赖于外部数据的情况下使用机器学习造成的,再如胶水代码或流水线杂乱无章,源于该领域开发通用软件包的普遍趋势。另一个问题是配置债,这是由于除了常规软件系统可能需要的所有配置之外,机器学习系统还添加了大量必须设置与维护的机器学习特定的配置内容。
最后,表面上看研究人员和软件工程师各司其职,前者制作模型,后者构建运行模型的基础设施,但在实际开发过程中他们所关注的领域经常是重叠的,因为将研究人员循环到整个开发过程中是有益的,确保他们与工程师一起拥有产品代码库,使用相同的版本控制并参与代码评审,这为产品交付的速度和质量带来长期的好处。
2、监控
首先,除了监控不断变化的输入数据、预测偏差和总体性能之外,还有一个特定于数据驱动决策的维护问题是反馈循环。生产中的机器学习模型可以通过定期的再训练来影响它们自己的预测,在确保模型保持最新状态的同时,还可以创建反馈循环,对模型的输入进行调整以影响其行为。
其次,一般的监控包括数据完整性检查、异常检测和性能指标,除此之外人们也总是希望使用开箱即用的工具来完成任务。然而,为了保持良好的模型性能,必须从头开始构建所有这些检查,例如数据完整性检查意味着验证某个输入表的更新以及历史记录的校验和,性能指标是根据前k个输出的变化数量定义的,异常情况则是随着时间的推移通过秩序相关性来跟踪的。
最后,所有这些监控工具都需要大量的调研和实施,这突出了当前可用的端到端机器学习平台的一个常见问题,即最终的机器学习解决方案通常对问题的细节非常敏感,开箱即用的工具通常不能很好地满足需求。
3、更新
一旦完成了模型的初始部署,通常需要在以后能够更新模型以确保它总是反映数据和环境的最新趋势。有多种技术可以使模型适应新的数据,包括定期再训练和持续学习,然而在生产中,模型的更新也受到实际考虑的影响。
一个特别重要的直接影响模型更新过程质量和频率的问题是概念漂移,如果不及时发现,可能会对模型性能产生重大不利影响。概念漂移可能是由于数据收集过程中的波动造成的,即使在微观尺度上发生的数据变化也会产生显著的结果。
在何时重新训练模型以使模型保持最新之外,还需关注如何将模型交付到生产环境基础架构的问题。在软件工程中,通常用持续交付来解决,通过构建一个用于构建、测试和部署软件变更的自动化管道来加速开发周期。与常规软件产品只是代码的变更不同,机器学习解决方案通常在代码、模型和数据三个维度发生变化,因此其持续交付更为复杂。
2.5 其他问题
1、伦理
在整个人工智能项目交付工作流中建立一个持续的人的责任链是至关重要的。一方面,各国都制定了个人数据保护的法律法规,数据收集应始终考虑伦理因素,这虽然确保了数据安全,但是大量的审查、软件更新和数据收集周期使其难以跟上机器学习的技术进步。另一方面,由于机器学习模型使用之前看到的数据来做出决策,所以可能会加剧数据中已经存在的问题,也可能有加剧不平等或制造虚假信息的风险。
2、用户信任
模型本身提供的解释非常少,这使得最终用户很难相信模型的实用性。模型可解释性来建立信任是有局限性的,为了说服用户信任基于机器学习的解决方案,必须投入时间来建立这种信任,除了强有力的沟通渠道、尽可能开放数据和软件之外,界面设计也发挥着很大的作用,当然,当用户有相关经验时,可解释的模型解决方案是首选。
3、安全
针对机器学习的对抗性攻击可能发生在模型本身、训练数据和预测阶段。对抗性机器学习领域研究了这种攻击对机器学习模型的影响以及如何防范它们,我们特别关注对抗性机器学习,并在部署系统时考虑其他相关的一般安全问题,如访问控制和超出我们工作范围的代码漏洞。在实践中有三种最常见的攻击会影响已部署的机器学习模型。
首先是数据中毒,对抗性攻击的目标是在训练阶段故意破坏模型的完整性以操纵产生的结果,在机器学习模型不断更新训练数据的情况下,中毒攻击尤其相关。
其次是模型窃取,通过查询已部署模型的输入对其进行逆向工程并监控输出,精心设计对抗性查询,以最大限度地提取关于模型的信息并训练替代模型,这种攻击会导致知识产权的损失。
最后是模型反转,其对抗性攻击的目标是恢复训练集特别是涉及隐私的数据,从而破坏其机密性。
三、潜在解决方案
3.1 工具和服务
机器学习工具和服务市场正在快速增长,针对个别部署问题的工具不断发布,对于我们强调的一些问题,使用正确的特定工具是非常合理的。市场上的许多平台为用户提供端到端的体验,包括数据存储、再训练和部署等,例如AWS SageMaker、Microsoft AzureML、Uber Michelangelo、TensorFlow TFX等。一个典型的机器学习平台除了基础功能外,还包括数据存储设施、带有用于训练和推理操作的API模型托管、一组用于监控模型健康状况的通用指标以及一个接受用户自定义更改的接口。通过为常见任务提供托管基础设施和一系列开箱即用的实现,这些平台大大减少了在生产中与维护机器学习模型相关的操作负担。
数据完整性在质量控制中起着重要作用,是一个活跃的研究分支,模型本身也可以从测试套件的开发中受益,以验证它们的行为,这通常是通过反复试验来完成的,目前也正在开发更正式的方法。
获取标签通常是真实世界数据的一个问题,弱监督已经成为机器学习的一个单独领域,用以寻求解决这一问题的方法。因此,一些弱监督库目前正积极地在社区内被使用,并显示出良好的工业应用效果,一些最流行的工具包括Snokel、Snuba和Cleanlab。
使用特定的工具来解决个别问题是一种直接的方法,然而从业者需要意识到,使用特定的工具会在解决方案中引入额外的依赖项,虽然单个附加的依赖关系似乎是可控的,但是它们的数量会迅速增加并成为维护负担。此外,新的机器学习工具不断发布,从业者需要通过学习其优缺点来选择合适的工具。
3.2 整体性方法
尽管机器学习部署需要一定数量的软件开发,但机器学习项目与传统的软件工程项目有本质的不同,主要差异有数据发现、数据集准备、模型训练、部署成功度量等,其中有些定义不够精确而无法进行可靠的时间估计,有些具有巨大的潜在风险,而有些则难以衡量项目的整体附加值。因此,机器学习部署并不能很好地适应软件工程管理范式的通用方法,也不能很好地适应常见的软件体系架构模式。
面向数据的架构(DOA)是一个有想法的例子,它建议重新思考软件开发通常是如何完成的。DOA的思想是考虑用基于流的体系结构取代当前企业系统中普遍存在的微服务体系结构,从而使业务逻辑元素之间的数据流更加显式并可访问。微服务体系结构虽然在实现高扩展性和单一责任原则方面非常成功,但是也使数据流很难跟踪,并且每个服务的所有者都要确保输入和输出存储形式一致。DOA通过将数据移动到无状态执行节点之间的数据流中来解决这一问题,从而使数据在设计上可用和可跟踪,因而数据发现、收集和标记变得更加简单。从本质上讲,DOA建议认可现代系统通常是数据驱动的,因此需要在其体系结构原则中对数据予以优先考虑。
如上所述,机器学习项目通常不适合常用的项目管理流程,因此需要考虑专门为机器学习量身定制。整体性方法在创建机器学习应用程序时有可能为其部署提供极大的方便,但是所有这些方法都需要投入大量的时间,因此在采用任何一种方法之前,都应仔细评估风险与收益。
四、小结
出于在生产中部署机器学习方案的实际考虑,本文讨论了从业者在机器学习方案部署过程中的各个阶段需要应对的挑战,包括数据管理、模型学习、模型验证和模型部署阶段,以及涉及的伦理、用户信任和安全问题,可以看到从业者在机器学习部署工作流的各个阶段充满了挑战,最后也讨论了两种可能的解决方案。可以看到学术界在部署方面的经验和论文并不多,希望能给从业者带来一些思考的同时,学术界也能够从更加实用的角度来推动机器学习方案的部署。
参考文献
[1] Paleyes A , Urma R G , Lawrence N D . Challenges in Deploying Machine Learning: a Survey of Case Studies[J]. 2020.
内容编辑:创新研究院 王萌
责任编辑:创新研究院 陈佛忠
本公众号原创文章仅代表作者观点,不代表绿盟科技立场。所有原创内容版权均属绿盟科技研究通讯。未经授权,严禁任何媒体以及微信公众号复制、转载、摘编或以其他方式使用,转载须注明来自绿盟科技研究通讯并附上本文链接。
声明:本文来自绿盟科技研究通讯,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。