从测试环境到生产环境的机器学习,已经不再是纯粹的机器学习?

从测试环境到生产环境的机器学习,已经不再是纯粹的机器学习?


Written by Jepson(Jiaping) Du 杜嘉平, 文章同步公众号: 持续学习的杜吉普






从实验环境到生产环境的感悟

“曾经在Kaggle竞赛中为了0.001的模型质量提升而日夜训练模型的自己,可能将一去不复返了”


约有87%的机器学习模型依旧在实验环境中没有被真正的应用于生产中,这足以说明实验环境与生产环境之间存在的巨大的鸿沟。

站在科普角度先说说什么是实验环境与生产环境,实验环境就是我们使用notebook用sklearn或者h2o通过脱离生产环境的训练集进行的建模过程,未来追求模型效果我们会用各种Fancy的手段去训练、融合、group 模型,让模型效果变得更加优秀。世界著名的Kaggle机器学习大赛就是典型的实验环境建模。一般用Python或者R进行模型实验,丰富的packages能够保证建模的灵活性与性能。

生产环境是把模型嵌入到业务系统中,这个业务系统可以是APP,可以是用户管理系统等真正的底层系统。这就不只是notebook上的实验建模那么简单了,因为数据是滚动的,部署模型的训练与建立和notebook实验环境相比缺少了很大的灵活性,而且对于模型性能(注意不是效果,而是模型运算的速度)的要求很强。所以这就意味除非有极其强大的硬件性能,我们不可能使用非常fancy的手段训练模型,因为其会加重运算负担。生产环境一般用pyspark或者Scala等进行等建模,影响建模灵活性。如果用PMML封装python模型再利用pyspark进行模型部署同样有模型建模灵活度以及复杂度的限制。

实验环境与生产环境机器学习PK表

干系人目标

实验环境与kaggle的比赛目标都很明确,都是竭尽全力的提升模型质量。在追求模型表现的过程中,建模者都会使用非常复杂的建模技术与方式进行模型的训练,这也大大加剧了模型的复杂程度,以至于模型通常很难被使用。之前在打Kaggle比赛时,一个融合模型 ensembled model每跑一边数据都需要好几个小时的等待。

但是在真正的生产场景中,会有很多不同的角色干系人有着不同的目标,我们需要尽量满足所有干系人目标,整个机器学习项目才有可能顺利落地发挥价值。下面我举一个餐厅推荐机器学习项目为例来说明在生产环境中干系人的目标复杂性:

ML engineer机器学习工程师:他们希望能够通过更多的历史数据与更精准复杂的预测模型来准确预测用户对于一个餐厅的喜好度,以此推荐给用户最为合适的餐厅。

销售团队:销售团队希望模型预测出的推荐餐厅是那些花了并且有意愿花高价钱买推荐位的餐厅,这样产生的收入会比单纯靠精准成功推荐餐厅用户消费后所支付的服务费要更多。

产品团队:他们更加在乎用户使用产品的体验,他们发现一个模型产生加过的延时过高会导致用户退出APP,最终造成客户流失,所以他们希望在APP中应用处理速度更快,延时低的模型取代机器学习工程师所部署的复杂模型。

系统运维设施团队:随着用户的增加以及新模型的部署,系统运维团队发现整个系统变得不太稳定,他们经常在半夜被叫醒去维护系统的稳定,因此他们希望能够暂定整个业务将基础设施进行升级,以保证系统的稳定性。

经理:经理的目标是增加利润,由于机器学习的部署在短期内没有让经理看到相应的回报,同时还增加了硬件与用户体验的负担,所以经理会选择砍掉机器学习部门以增加利润。

以上这个例子我可谓是再熟悉不过了,目前所经历的一个机器学习项目就存在着多个干系人目标不同,机器学习模型很难,满足所有干系人需求而推动困难的问题。所以识别干系人目标,尽可能的权衡与满足每一个干系人的需求。




模型表现

当然,干系人目标的分散是很多实验环境下机器学习模型没能投入生产的一个原因,而另一个想要聊的是模型表现。打过Kaggle的都知道,合适算法的选择并不能决定最终的排名,要想获得前10%、5%甚至1%的排名,我们必须将多种模型进行反复蹂躏与摩擦,其中一个蹂躏的方式叫做模型融合(Model Ensembling),这个方法在实验环境的建模过程中一定是经常被用到的方法。为了增加一丢丢丢丢的模型表现,我们会将不同模型进行meta layer和second layer的不同组合,以达到一个最佳效果。要承认,虽然通过模型融合后的模型表现会有一丢丢丢丢的提升,但是模型复杂度的提升可是质的飞跃。

对于某些项目来说,确实一个微小的提升会带来巨大的价值,但是对于大部分项目来说,模型质量上微小根本无法影响用户与业务流程,其对于业务价值也没有过多的影响。举个例子,站在用户角度,语音识别准确率95%和92.5%的是几乎没有感知上的区别的,那么也就说明2.5%模型准确率的提升对于业务价值的贡献也是几乎没有。所以在生产环境下,模型的表现要以满足业务价值为准。多度的追求模型准确率会导致投资回报率的下降,同时也无法创造更大的业务价值。

我的经验总结:模型越精准,越复杂,越难解释

看待模型的价值不能只从模型准确性这一个维度上看,在EMNLP2020上,有一个观点很值得思考,模型的价值,除了准确性,还需要从“影响力”、“公平性”、“性能效率”等维度去综合评判。





数据

实验环境下的数据情况简直是天堂般的存在,相对整洁、formatting以及tidy(实在不知道该怎么翻译)的数据,基本上可以让我们专注于从特征工程开始进行模型的建立与优化。整个数据集也因为是离线数据所以天然静止不动的,这就导致我们对于数据的确定性很好把控。还是要以Kaggle为例,数据都是干净整洁的(这里的干净说的是形式format上的干净)如果一个比赛的周期是一个月的话,那么这一个月就全部都在用相同的数据进行建模的尝试,完全没有数据方面的焦虑感,只要建模手段提升,那么模型效果就一定会提升。

在生产环境中,首先数据能不能拿到就是一个问题,如果能从生产系统中拿到数据,那么以什么方式传输又是一个问题,如果传输方式合适,那么数据质量也会是一个问题。而且数据质量有可能是一个大问题,因为数据来源于系统,那么由于系统历史的遗留问题,数据很有可能存在这样那样的问题。同时数据还会是非结构化的、biased偏离的、错误打标的、空缺的(空值)、不平衡的(unbalanced)。这还是在业务规则保持不变的情况下会遇到的诸多问题。一旦业务发生变化,那么数据的维度、字段、标签很可能都会发生变化,同时我们还需要关心监管与数据隐私的问题,曾经在一次与客户(某世界Top5银行)的汇报中,就被其质量保证部质问过关于数据隐私的问题,所以这并不是一个小问题。

总结起来,实验环境下,数据就在那里,你就去用。生产环境下,数据永远在更新,你用的数据永远不是理想的。

一个图表总结一下数据层面上实验与生产环境的不同

公平性

实验环境下,准确率就是老大,什么狗屁公平性,我根本管不着。但是这种想法一旦存在于生产环境中,那下场可能是灾难性的,尤其是在中国数据安全法的大背景下。我相信中国对于数据以及模型的重视程度依旧会向美国靠拢。在美国留学和工作期间就很大程度上学习了Responsible ML,其中公平性、隐私性、歧视性都是机器学习建模在生产中需要非常重视的部分。而在我回国之前面试字节时,面试官对于我了解这么多公平性与解释性的知识却表示大受震惊。

其实我们每一个人有可能早就受到了机器学习的不公平待遇:在简历筛选模型中,我们可能由于简历中学校的排名低而失去优秀能力被看到的机会。在贷款审核模型中,我们可能由于个人的性别因素而受到贷款审核的限制。种种存在不公平性的场景其实看起来危言耸听,是加上确实真实存在的,尤其是在数据没有被严格监管的国家里,中国当前就是。

保证模型的公平性需要考虑的事情非常多,但最终的核心目标就是保证要让每一个预测结果在每一个人群中的独立性。我觉得模型公平性是一个很有意义很值得研究,但也很需要花心思研究的领域,之后可以写系列文章来探索。



可解释性

一旦模型被真正用于生产环境,那么可解释性就是一个永恒的话题。在测试环境下,数据科学家可以随心所欲的创造出精准的黑盒模型。但是一旦把模型拿给别人用,那么对方一定会要求模型的可解释。在无数次的服务客户的项目经历中,我们都会将模型通过feature importance 或者 shaply value等方式向业务解释模型的决策过程,同时还会选择树模型(Tree Model)这种可解释的模型来解读模型。当然还有一种将黑盒模型拟合成决策树的方式,在之后的文章中会详细讲解。

其实要求模型的可解释非常好理解,图灵奖获得者 Dr. Geoffrey Hinton曾经说过这么一段话:“假设您患有癌症,您必须在无法解释其工作原理但治愈率 90% 的黑匣子 AI 外科医生和治愈率 80% 的人类外科医生之间做出选择。你会希望AI模型医生是不合法的吗?”


言外之意,倘若AI模型无法解释,你是否放心的使用模型?

我们每个人都不了解微波炉或者电磁炉的原理,但是都很放心的使用它们。但是模型不一样,因为模型往往就像上面提到的AI医生一样,为我们做出的都是重要的、关键的抉择,尤其是关系到生命的抉择。

实验环境的模型不会在意解释性,因为他的目标不是帮助人们做抉择,而是精准的预测。尽管模型可解释性是非常重要的事情,但是已经投入生产的大部分模型都不是可解释的,尤其是完全不可解释的神经网络模型。2019年,只有19%的美国大型公司在努力提升他们模型算法的可解释性,剩下的80%依旧不care,更何况这还是在美国。(数据来源于HAI:斯坦福大学人类为中心的人工智能机构)


写在最后

未来,随着国家数据安全法与党管数据等政策的落地,我相信生产环境下的机器学习将会是一个值得探索的话题。无论是建模的侧重点、规矩都一定不能和实验环境下随心所欲的建模流程一样了。模型的隐私性、公平性、解释性将会是未来的AI领域的发展方向,虽然也许不会是在很短的未来。