【IT168技(jì)术】机器学习模型(xíng)的训练(liàn),通常是通过学习某(mǒu)一组输入(rù)特征与(yǔ)输(shū)出(chū)目标之间的映(yìng)射来进行(háng)的。一(yī)般来说,对于映(yìng)射的学习是(shì)通过优化某些成本函(hán)数,来使预测的(de)误差最小(xiǎo)化。在训练(liàn)出最佳模型之后,将其正式发布(bù)上线,再根据未来生成的数据生(shēng)成准确的预测。这些新数据(jù)示例(lì)可能是用户交互、应用处理或(huò)其他软件系统(tǒng)的请(qǐng)求生成的(de)——这取(qǔ)决于模型(xíng)需要解决的问题。在理想情(qíng)况下,我们会希望自己的模(mó)型在生产环(huán)境中进行预测(cè)时,能够像使用训(xùn)练过(guò)程中使用的数据一样,准(zhǔn)确地预测(cè)未来情况。
当我们将模型部署(shǔ)到生(shēng)产(chǎn)中时(shí),往往(wǎng)会(huì)假设未来将使用到的数据会类似于(yú)过去模型评估期间所使用的数据。具(jù)体来(lái)说,我们(men)可(kě)能会假设,特征和目标的分布将保持相当(dāng)的恒定。但是这种假设通常不成立(lì)。趋势会(huì)随(suí)着时间的推移而变化,人(rén)们(men)的兴(xìng)趣会(huì)随(suí)着季节(jiē)的变化而(ér)变化,股票市场(chǎng)会起伏不定。因此,我们的模型必(bì)须适应这(zhè)些(xiē)变化。
世(shì)界是持续变化的,因此模型部署应(yīng)视为一个连续的(de)过程,而(ér)不是完成第一次(cì)部署之后就扭头去(qù)开展下一(yī)个项目。如果(guǒ)机器(qì)学习团队的工程师发现(xiàn)数(shù)据分布与原始训练集(jí)的数据分(fèn)布有明显出入,则需(xū)要重新训练模型。这个现象——通常被(bèi)称为模型漂(piāo)移(model drift)——可以(yǐ)缓(huǎn)解,但是会(huì)带来额外的开销,如监(jiān)视基础设(shè)施、监督和(hé)流程(chéng)等等。
在本文中(zhōng),笔者想对模(mó)型(xíng)漂移下(xià)定(dìng)义,并(bìng)讨论如(rú)何去识别和跟踪模型漂移。然后,我将描述如何重新训练模型,来减轻漂移对预测性能的影响,并对应多久重新训练一次模型做(zuò)出建(jiàn)议。最(zuì)后,我(wǒ)将介(jiè)绍(shào)启用(yòng)模(mó)型重新训练的几种方(fāng)法。
portant;" />
什么是模(mó)型漂移?
模型漂移是(shì)指,由(yóu)于环境(jìng)的变化违反了模型假设(shè),而导致模型的预测性能随时间而降低。模(mó)型漂移有(yǒu)点用(yòng)词不当,因(yīn)为变化(huà)的不是模型,而是模型(xíng)运行(háng)的(de)环(huán)境。因(yīn)此(cǐ),概念(niàn)漂(piāo)移(concept drift)一词实际上可能是一个更好的用词,不过两个术(shù)语都描述了相同的现象。
请注意,笔者对模型漂移的(de)定义实际(jì)上包括几个可以更改的变量(liàng)。预测性能将下降,它将在一段时间内以某(mǒu)种速(sù)率下降,并且这(zhè)种(zhǒng)下降会归因于(yú)违反建(jiàn)模(mó)假设的环境变化。在确定如何诊断模型漂移以(yǐ)及如何通过模型再训练纠正模型(xíng)漂(piāo)移时,应考(kǎo)虑(lǜ)这些变量中的每(měi)一(yī)个。
如(rú)何跟踪模(mó)型漂移?
目前业内(nèi)已有(yǒu)多种(zhǒng)识(shí)别和跟踪模型漂(piāo)移的技术(shù)。在介绍这些技术之前,值得(dé)一提(tí)的是,并(bìng)没有一种(zhǒng)万能(néng)的(de)方法。不同(tóng)的模型问题需要不(bú)同(tóng)的解(jiě)决方案,您可能有、也可(kě)能没有相应的基础架构或(huò)资源来利用某些技术策略。
模型性能降级
识别模型漂移的最直接方法是明确预测(cè)性能是否已下(xià)降,同时量化这种(zhǒng)下降(jiàng)。测(cè)量实时数据上已部署模型的准(zhǔn)确性是(shì)一个众所周知的难题。之所以出现这种困难,部分原(yuán)因(yīn)是我们(men)需要(yào)访问生(shēng)成的(de)模型的预测和(hé)基本事实信(xìn)号。出于以下这些原因,这可(kě)能无(wú)法实现(xiàn):
·预测的数据在生(shēng)成后没有存储——别(bié)让这种事发生在你身(shēn)上。
·预测已存(cún)储(chǔ),但是您无法访问基本事实标(biāo)签。
·预测和标签均可用,但不能结合(hé)在一起。
即使(shǐ)预测和标签可以(yǐ)合并在一起,也可能(néng)需要一段时间才能使用标签。例如一个(gè)可(kě)以(yǐ)预测下一季度收入的财务预测(cè)模型。在这种情况下(xià),只有在该季度过(guò)去之后(hòu)才(cái)能观察到实际收(shōu)入,所以直到那个(gè)时候你才能(néng)够量化模型的效果。在此类预(yù)测问题中, 回填预测(cè)(即训练模型,并根据过(guò)去的历史数(shù)据生成预测)可以帮助(zhù)您了解模(mó)型性能(néng)下降的速度。
正如Josh Wills 指出的那样,在(zài)部署模型之前您可以做的(de)最重要的事(shì)情(qíng)之一就是试图了(le)解离线环境中的模型漂移。数据科学家应想(xiǎng)办(bàn)法回(huí)答以下问题:“如(rú)果我使用六个月(yuè)前(qián)的数据对这(zhè)组特征进行(háng)训(xùn)练,并将其应用(yòng)于今天生成(chéng)的数据,那么(me)这个(gè)模(mó)型比我一个月前未(wèi)经(jīng)训(xùn)练而创建(jiàn)并应用到今(jīn)天的模型差(chà)多(duō)少呢?”。离线执行此分析,您(nín)可(kě)以(yǐ)估计模(mó)型性能(néng)下降的速度以及需要重(chóng)新训练的频率。当然,这种方法的前提(tí)是要有一台“时光(guāng)机(jī)”来访问过(guò)去任何时候的实时数据。
检查训练(liàn)和实(shí)时数据的(de)特征分布
由于随着输入特征的分布逐渐偏(piān)离训练数据(jù)的分布,模型性(xìng)能(néng)会(huì)下降,因此比较这(zhè)些(xiē)分布(bù)是推断模型(xíng)漂移(yí)的好方法。请(qǐng)注意,这里说(shuō)的是推断而(ér)不是检测模型漂移,因为(wéi)我们没(méi)有观察到预测性能的实际下降,而是“预计”会出(chū)现下降。在由于数(shù)据(jù)生成这一过程的性质,而无(wú)法观察到实际基本事实的情况下,这(zhè)会非常(cháng)有用。
每个(gè)特征需要(yào)监视许(xǔ)多不同(tóng)的(de)东西,包括:
可能值的范围
值直方图
该功能是否(fǒu)接受NULL,如果是,则预期的NULL数量
能(néng)够(gòu)通(tōng)过(guò)控(kòng)制界面快速(sù)监控(kòng)这些分布,是朝正确方向迈出的一步。当特(tè)征差异很(hěn)大时(shí),可以通过自动跟踪训练服务(wù)偏(piān)差并在特性差(chà)异显著时发出警告,进一步实现这一(yī)点。
检(jiǎn)查特征之间(jiān)的关联(lián)
许多模型会假定特征之间的关系(xì)必须保持固(gù)定。因(yīn)此,您还需(xū)要监视各个输入特征之间的成(chéng)对(duì)关联。如您的ML测(cè)试分数是多少?ML生产系统的规范等等,可以通过以下方法实现:
监视特征之间的(de)相关(guān)系数
训(xùn)练具(jù)有一两个特征(zhēng)的模型
训练一(yī)组模型(xíng),每个模型都删除(chú)其中一个特征
检查目标分布
如果目标变量的分(fèn)布发生(shēng)显着变化,那么模(mó)型的预测性能几乎一定会变差。《机器学习:技(jì)术债务高息信用(yòng)卡(kǎ)》的作者(zhě)指出,一种(zhǒng)简单而有用(yòng)的诊(zhěn)断方法是跟踪目(mù)标(biāo)分布。与训练数据的偏差可能意味(wèi)着(zhe)需(xū)要(yào)重新评估(gū)部(bù)署(shǔ)模型的质量,但请记住,“这绝不是一项全面(miàn)的测试,因(yīn)为它可以通过(guò)空(kōng)模型来满足,该(gāi)模型可以(yǐ)简单地预(yù)测标签出现(xiàn)的平均值,而无需考虑输(shū)入特征(zhēng)。”
模型再训练到底是什么(me)意思?
模型再训(xùn)练似乎(hū)是一(yī)个超(chāo)负荷的(de)操作,它是否只涉及到寻找(zhǎo)现(xiàn)有模型架构的新参(cān)数?对于更改超参数搜索空间怎么样?如何搜索不(bú)同的模型类(lèi)型(RandomForest,SVM等)?我(wǒ)们可以包括新特征还是可(kě)以(yǐ)排除以前使用的特征?这些都是很好的问题,因此(cǐ)尽(jìn)可(kě)能明确这些(xiē)问题是非常重要的。要回答这些问题,重要的是直(zhí)接(jiē)考虑我们要解决的问题——也就(jiù)是说,减少模型漂移对我们部署的模型的影响。
在将模型(xíng)部署(shǔ)到(dào)生产数据之前,科学家需要经过严(yán)格的模型验证过程,其中包括:
汇(huì)编数据(jù)集–收(shōu)集来(lái)自不同来源(例如(rú)不同数据库)的数据集。
特征工程–从原始数据(jù)中提取列,提高(gāo)预测(cè)性能。
模型选择–比较(jiào)不同的学习算法。
错误估(gū)计–在(zài)搜索空间上进行优化,找到最佳模型并估计其泛化误差(chà)。
此过程会产生一些(xiē)最佳的模型,然后将其(qí)部(bù)署到(dào)生(shēng)产(chǎn)中。由于模(mó)型(xíng)漂移(yí)具体是指所(suǒ)选模型的(de)预测(cè)性能(néng)由于特征/目标数据分(fèn)布的变(biàn)化而下(xià)降,因此模型再训练不(bú)应该(gāi)带来不(bú)同的(de)模型(xíng)生成过程。确切地说,重(chóng)新(xīn)训(xùn)练只是指在新的训练数据(jù)集上重新运(yùn)行生成先前(qián)选择的(de)模型(xíng)的(de)过程。功(gōng)能、模型算法和超参数(shù)搜索空间都应保持相同。可以这(zhè)样想,再(zài)训练不涉及任何代(dài)码更改,只涉及改变训练数据集。
这并不是说模(mó)型(xíng)的未来迭(dié)代不应包(bāo)含新特征或不(bú)考虑其(qí)他算法类型/体系结构。只(zhī)是说,这些类(lèi)型的(de)更(gèng)改会产生完全不同的模型(xíng)——在部(bù)署到生(shēng)产环境之前,应(yīng)该对(duì)它们进行不同的测试(shì)。根据您的机器学习(xí)团队的成熟程度(dù),理想情况下,此类更改将与A / B测试一(yī)起引入,以(yǐ)测量新模(mó)型对预(yù)先(xiān)确定的(de)兴(xìng)趣指标(例如(rú)用户参与(yǔ)度或保留率)的(de)影响。
应该多(duō)久重(chóng)新训练一次模型
到目前为止(zhǐ),我们已经讨论了什(shí)么是模型漂(piāo)移以(yǐ)及(jí)识别它的多(duō)种方(fāng)法。于是问题就变成了,我们该如(rú)何(hé)补救?如果模型的预(yù)测性能由于环(huán)境变(biàn)化而(ér)下降(jiàng),解决方案是在(zài)反映当前实际(jì)情况的新(xīn)训练集上对模型进行重新训练。那么,您应该多久重新训(xùn)练一次模型?如何确定新的训练集?对(duì)于(yú)最困难的问题,答案(àn)是视情况(kuàng)而定。但如何视情况而定(dìng)呢?
有时机器学习问(wèn)题本身会给出(chū)何时需要重新训练模型的(de)建议(yì)。例如,假设您(nín)正在一家大学招(zhāo)生办工作,并负责建(jiàn)立(lì)一个可以(yǐ)预测学生下(xià)学期是否会(huì)回来(lái)的学生流(liú)失模型。该(gāi)模型将在期中后直接用于对当前学生群体(tǐ)进行(háng)预测。被(bèi)确定有流(liú)失风险的学生将自动被纳入(rù)辅导课程或其他(tā)干预措(cuò)施(shī)。
下面我们思考一下这种模型的时间(jiān)范围(wéi)。由于我们(men)每(měi)学期一次(cì)批量生成预测,因(yīn)此没有必要再频繁地重新训练模型(xíng),因为(wéi)我(wǒ)们将无法访问任何新的(de)训练数(shù)据。因此,在(zài)观察上学期的哪些学生退学(xué)后,我们(men)可能选(xuǎn)择(zé)在每个学期开始时重新训练我们的模型。这就是定(dìng)期(qī)再训练计划的一(yī)个示(shì)例。从这个简单的策略开始,往往(wǎng)是一个好办法,但是(shì)您需(xū)要确定重(chóng)新训(xùn)练的频率。快(kuài)速更(gèng)改的训练集可能需要您(nín)每天或每周进行一次训(xùn)练。较(jiào)慢(màn)的发行版本可能需要(yào)每(měi)月(yuè)或每年进(jìn)行重(chóng)新训练。
如果您(nín)的团(tuán)队已经具(jù)备(bèi)了(le)监控(kòng)上(shàng)一节中(zhōng)所(suǒ)讨论的度量标准的基础设施,那么将模型漂移的管(guǎn)理自动化可能是有意义的(de)。这(zhè)个解决方案需要跟踪诊(zhěn)断,然后在实时数据上的诊断(duàn)与(yǔ)训练数据诊断(duàn)不同时触发模型再训练。但这种方(fāng)法也有其自身的挑战。首(shǒu)先,您需要确定一个发散的阈值,它将触发模型再训(xùn)练。如(rú)果(guǒ)阈值太低,则(zé)您可能会(huì)过于频(pín)繁地进行再(zài)训(xùn)练,从而带来高计算成本(běn)。如(rú)果阈值过高,则可能会因为不经(jīng)常进行再训练,而导致生产中的模(mó)型(xíng)偏劣质。这比看起来要复杂得多,因为(wéi)你必须去确定,要收集多少新的训(xùn)练(liàn)数据,才(cái)能代表(biǎo)世界的新状(zhuàng)态(tài)。在世界已经发(fā)生(shēng)改变(biàn)时,用一个(gè)训练集(jí)太小的(de)模(mó)型来代替现有的模(mó)型也是没有(yǒu)意义(yì)的(de)。
如果您的(de)模型已经在对抗性(xìng)环境中运行,则(zé)需要特别考虑。在诸如欺(qī)诈检测这样的(de)设置中,对抗方会改变数据分布以使(shǐ)自己获(huò)利。这(zhè)些问题可以(yǐ)从在线学习中受益,在这(zhè)之中,模型随着新数据的出现而不(bú)断更新。
如何重新训(xùn)练模型?
最后,但并非最(zuì)不重要的一点,我们需(xū)要(yào)讨论如何重新训(xùn)练模型。您用(yòng)于模型再训练的方法与您决定再训练的频率直接相(xiàng)关。
如果您打算定期去重新训练(liàn)模(mó)型,那么批量(liàng)进(jìn)行重新(xīn)训练(liàn)就完全足够了。这种方(fāng)法涉及使用(yòng)工作调度程序(例如Jenkins或Kubernetes CronJobs)定期地调度模型训练过程(chéng) 。
如果您具有自动模型漂移检测功(gōng)能,那(nà)么在识别(bié)出漂移时触发模型重新训练就(jiù)很有(yǒu)意义。例如(rú),您可能有定期的工(gōng)作,将(jiāng)实时数据集的特征分布与训练(liàn)数据的特征分布(bù)进行比较。当(dāng)识别(bié)出明显的偏差时,系统可以自动安(ān)排模型再训(xùn)练以自动部署新模型(xíng)。同(tóng)样,这(zhè)可以通(tōng)过诸如Jenkins的(de)作业调度程(chéng)序或使用 Kubernetes Jobs来执(zhí)行。
最(zuì)后,利(lì)用在(zài)线学习(xí)技术(shù)更新(xīn)当前正在生产的模型可能也(yě)是有意义(yì)的。这种方法依赖于使用当前(qián)部署的模型去“播种”一个新(xīn)模型。随着新数据的产生,模(mó)型参数将使用(yòng)新的训练数据进行(háng)更新。
结论
一(yī)般情况下,将模型部(bù)署到生产环(huán)境(jìng)时,机器(qì)学习模型的预测性能往(wǎng)往都会(huì)下降(jiàng)。因此,工程师必须通过设置(zhì)特(tè)定(dìng)于ML的监(jiān)视解决方案和(hé)工作流来启用模(mó)型重新训(xùn)练,从而为性能下降做好(hǎo)准备。虽然重(chóng)新(xīn)训练的频率因具体问题而异,但ML工(gōng)程师可以(yǐ)从简单的策略开始,随着(zhe)新数据的到来,该策略会(huì)定期对(duì)模型进行重(chóng)新(xīn)训练,并发展为对(duì)模(mó)型漂移进行量化和做出(chū)反应的(de)更(gèng)复(fù)杂的过程(chéng)。