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