当前位置: 首页 > 科技观察

机器学习“模型再训练”终极指南

时间:2023-03-17 13:06:16 科技观察

机器学习模型通常通过学习一组特定输入特征和输出目标之间的映射来训练。一般来说,映射的学习就是通过优化一些代价函数来最小化预测误差。一旦训练出最好的模型,它就会实时发布,以根据未来生成的数据生成准确的预测。这些新数据示例可能由用户交互、应用程序处理或来自其他软件系统的请求生成——具体取决于模型需要解决的问题。理想情况下,我们希望我们的模型在预测生产中的未来状况时与使用训练期间使用的数据一样准确。当我们将模型部署到生产中时,我们通常会假设未来将使用的数据与过去模型评估期间使用的数据相似。具体来说,我们可能会假设特征和目标的分布将保持相当稳定。但这种假设通常不成立。趋势随时间而变化,兴趣随季节而变化,股市潮起潮落。因此,我们的模型必须适应这些变化。世界在不断变化,因此模型部署应该被视为一个连续的过程,而不是在第一次部署之后,然后再转向下一个项目。如果机器学习团队的工程师发现数据分布与原始训练集有显着差异,则需要对模型进行重新训练。这种现象(通常称为模型漂移)可以得到缓解,但会引入额外的开销,例如监控基础设施、监督和流程等。在本文中,我想定义模型漂移并讨论如何识别和跟踪模型漂移。然后,我将描述如何重新训练模型以减轻漂移对预测性能的影响,并就重新训练模型的频率提出建议。最后,我将介绍几种启用模型重新训练的方法。什么是模型漂移?模型漂移是由于环境变化违反模型假设而导致的模型预测性能随时间的退化。模型漂移有点用词不当,因为改变的不是模型,而是模型运行的环境。所以术语概念漂移实际上可能是一个更好的术语,尽管这两个术语描述的是相同的现象。请注意,我对模型漂移的定义实际上包括几个可以更改的变量。预测性能会下降,它会随着时间的推移以某种速度下降,这种下降将归因于违反建模假设的环境变化。在确定如何诊断模型漂移以及如何通过模型再训练来纠正它时,应考虑这些变量中的每一个。如何跟踪模型漂移?目前业界有很多识别和跟踪模型漂移的技术。在介绍这些技术之前,值得一提的是,没有一种放之四海而皆准的方法。不同的模型问题需要不同的解决方案,您可能有也可能没有基础设施或资源来利用某些技术策略。模型性能下降识别模型漂移的最直接方法是明确预测性能是否下降,并量化这种下降。在实时数据上测量已部署模型的准确性是一个众所周知的难题。造成这种困难的部分原因是我们需要访问生成模型的预测和地面实况信号。由于以下原因,这可能是不可能的:预测数据不会在生成后存储-不要让这种情况发生在你身上。预测已存储,但您无权访问地面实况标签。预测和标签都可用,但不能合并。即使预测和标签可以合并在一起,使用标签也可能需要一段时间。一个例子是预测下一季度收入的财务预测模型。在这种情况下,实际收入只能在季度结束后才能观察到,因此在此之前您将无法量化模型的效果。在此类预测问题中,回填预测(即训练模型并根据过去的历史数据生成预测)可以帮助您了解模型性能下降的速度。正如JoshWills指出的那样,在部署模型之前,您可以做的最重要的事情之一就是尝试了解离线环境中的模型漂移。数据科学家应该找到一种方法来回答以下问题:“如果我在六个月前的数据上训练这组特征并将其应用于今天生成的数据,这个模型是否比我一个月前未经训练创建的模型更好?如何?今天应用的模型更糟吗?”。离线执行此分析可让您估计模型退化的速度以及需要重新训练的频率。当然,这种方法的前提是要有一台“时间机器”,可以随时访问过去任何时间的实时数据。检查训练数据和实时数据的特征分布由于模型性能随着输入特征的分布逐渐偏离训练数据的分布而下降,比较这些分布是推断模型漂移的好方法。请注意,这指的是推理而不是模型漂移的检测,因为我们没有观察到预测性能的实际下降,而是“预测的”下降。这在由于数据生成过程的性质而无法观察到实际地面实况的情况下很有用。每个特征需要监控很多不同的东西,包括:可能值的范围值直方图特征是否接受NULL,如果接受,期望的NULL数量能够通过控制界面快速监控这些分布是一个步骤在正确的方向。这可以通过在特征显着不同时自动跟踪训练服务偏差并在特征显着不同时发出警告来更进一步。检查特征之间的关联许多模型假设特征之间的关系必须保持固定。因此,您还需要监控各个输入特征之间的成对关联。您的ML测试成绩是多少?ML生产系统等的规范可以通过以下方式实现:监控特征之间的相关系数训练具有一个或两个特征的模型训练一组模型,每个模型删除一个模型特征检查目标分布如果目标变量的分布发生显着变化,那么模型的预测性能几乎肯定会恶化。《机器学习:技术债务高息信用卡》的作者指出,一种简单实用的诊断方法是跟踪目标分布。与训练数据的偏差可能意味着部署模型的质量需要重新评估,但请记住,“这绝不是一个全面的测试,因为它可以通过简单地预测平均值的空模型来满足,无论输入特征。”模型再训练到底是什么意思?模型重训练似乎是一个重载操作,它只是涉及为现有模型架构寻找新参数吗?改变超参数搜索空间怎么样?我们如何搜索不同的模型类型(RandomForest、SVM等)?我们可以包括新功能或排除以前使用的功能吗?这些都是很好的问题,所以尽可能明确地回答它们很重要。要回答这些问题,重要的是直接考虑我们试图解决的问题——即减少模型漂移对我们部署的模型的影响。在将模型部署到生产数据之前,科学家需要经过严格的模型验证过程,其中包括:组装数据集——从不同来源(例如不同数据库)收集数据集。特征工程——从原始数据中提取列以提高预测性能。模型选择——比较不同的学习算法。误差估计——对搜索空间进行优化,找到最佳模型并估计其泛化误差。这个过程会产生一些最好的模型,然后将其部署到生产中。由于模型漂移特指由于特征/目标数据分布的变化导致所选模型的预测性能下降,因此模型重新训练不应导致不同的模型生成过程。准确地说,重新训练只是指在新的训练数据集上重新运行先前选择的模型的生成过程。特征、模型算法和超参数搜索空间都应该保持不变。这样想,再训练不涉及任何代码更改,只更改训练数据集。这并不是说模型的未来迭代不应包含新功能或不考虑其他算法类型/架构。只是说,这些类型的更改会导致完全不同的模型——并且在部署到生产之前应该对它们进行不同的测试。根据您的机器学习团队的成熟度,此类更改最好??与A/B测试一起引入,以衡量新模型对预先确定的感兴趣指标(例如用户参与度或保留率)的影响。你应该多久重新训练你的模型到目前为止,我们已经讨论了什么是模型漂移以及识别它的各种方法。那么问题就变成了,我们如何解决这个问题?如果模型的预测性能由于环境的变化而下降,解决方案是在反映当前现实的新训练集上重新训练模型。那么,你应该多久重新训练一次你的模型?你如何确定一个新的训练集?对于最难的问题,答案视情况而定。但这要视情况而定呢?有时机器学习问题本身会就何时需要重新训练模型给出建议。例如,假设您在大学招生办公室工作,任务是建立一个学生流失模型来预测学生是否会在下学期返回。该模型将用于在期中考试后直接对当前学生人数进行预测。确定有退学风险的学生将自动参加辅导课程或其他干预措施。现在让我们考虑一下这个模型的时间范围。由于我们每学期生成一次批量预测,因此无需经常重新训练模型,因为我们将无法访问任何新的训练数据。因此,在观察了上学期哪些学生退学后,我们可能会选择在每个学期开始时重新训练我们的模型。这是一个定期再培训计划的例子。从这个简单的策略开始通常是个好主意,但您需要确定重新训练的频率。快速变化的训练集可能需要您每天或每周训练。较慢的分布可能需要每月或每年重新培训。如果您的团队已经有了基础设施来监控上一节中讨论的指标,那么自动化模型漂移管理可能是有意义的。该解决方案需要跟踪诊断,然后在实时数据的诊断与训练数据的诊断不同时触发模型重新训练。但这种方法有其自身的挑战。首先,您需要确定将触发模型重新训练的发散阈值。如果阈值太低,您可能会以高计算成本重新训练太频繁。如果阈值过高,可能会由于不频繁的重新训练而导致生产中的模型质量较差。这比看起来要复杂得多,因为您必须确定要收集多少新的训练数据来代表世界的新状态。当世界发生变化时,用训练集太小的模型替换现有模型也没有意义。如果您的模型已经在对抗性环境中运行,则需要特别考虑。在欺诈检测等设置中,对手会改变数据分布以使其对自己有利。这些问题可以从在线学习中获益,在线学习会随着新数据的出现不断更新模型。如何重新训练模型?最后但同样重要的是,我们需要讨论如何重新训练模型。您用于模型再训练的方法与您决定再训练的频率直接相关。如果您计划定期重新训练您的模型,批量重新训练就足够了。这种方法涉及使用Jenkins或KubernetesCronJobs等作业调度程序定期安排模型训练过程。如果您有自动模型漂移检测,则在识别漂移时触发模型重新训练是有意义的。例如,您可能有定期作业将实时数据集的特征分布与训练数据的特征分布进行比较。当识别出重大偏差时,系统可以自动安排模型重新训练以自动部署新模型。同样,这可以通过Jenkins等作业调度程序或使用KubernetesJobs来执行。最后,使用在线学习技术更新当前生产中的模型也可能有意义。这种方法依赖于使用当前部署的模型来“播种”新模型。随着新数据的产生,模型参数会使用新的训练数据进行更新。结论一般来说,当模型部署到生产环境时,机器学习模型的预测性能往往会下降。因此,工程师必须通过设置ML特定的监控解决方案和工作流程来启用模型重新训练,从而为性能下降做好准备。虽然重新训练的频率因问题而异,但ML工程师可以从一个简单的策略开始,即在新数据可用时定期重新训练模型,并逐渐发展以量化和响应模型漂移更复杂的过程。