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