模型部署后性能下降的原因分析
在机器学习领域,经常遇到这样的问题:在训练阶段模型表现优异,无论是准确率还是平均精度均值(mAP)都非常高。然而,当将模型部署到实际环境中时,其性能却远不如预期。尽管在数据划分、数据导入检查以及数据清洗和特征工程等方面都采取了正确的步骤,但模型的现实表现仍然不尽如人意。这种现象的一个主要原因就是所谓的“underspecification”。最近,一群主要由谷歌研究人员组成的团队发表了一篇论文,讨论了机器学习模型在现实领域部署时表现不佳的问题,以及underspecification是如何导致这一现象的。
underspecification指的是在模型构建过程中,存在许多模型都能在数据上表现良好。以一个简单的散点图为例,希望为这些数据生成一条最佳拟合线。在散点图上,有许多线条都能很好地拟合这些数据。例如,两条几乎最佳拟合的线(一条橙色和一条灰色)。这两条线在性能量化上可能都表现得相当不错。计算机可以轻松地选择“最佳”的一条,但计算机所认为的“最佳”并不一定是现实世界中的“最佳”。这就是underspecification。
如果机器学习流程存在underspecification,即使训练数据和模型结构相同,也有许多不同的方法可以使模型在保留的测试集上实现相同的性能。在上面的例子中,训练数据(点)和模型结构(简单的最佳拟合线模型)是相同的,但线条的斜率和y截距略有不同。尽管这两条线不同,但如果它们在测试数据上都能获得相似的性能水平,就会将其描述为underspecification。
最佳拟合线是一个直观的例子(不同的斜率,但相似的性能),但这个问题存在于各种机器学习模型中,包括计算机视觉、自然语言处理等。只是有时候在这些模型中更难察觉。
之前看到的那两条线,计算机根据某种模型性能度量选择了“最佳”的一条。但计算机并不知道哪个模型更能反映现实——它只知道哪个模型在特定数据集上表现更好。假设不是在拟合最佳拟合线模型,而是在用YOLOv4解决目标检测问题。在拟合目标检测模型时,有很多有意和无意的选择。有意的选择可能包括进行的图像预处理类型或收集的数据量。无意的选择可能包括在拟合模型时选择的随机种子或拟合模型到数据的算法。如果尝试拟合20个不同的模型,可能有5个模型表现相当不错。在这些5个好的模型中,计算机在选择“最佳”模型时并没有考虑到现实世界的意义。
归根结底,模型是对现实的简化。模型通常应该反映或模仿现实世界。但模型的拟合方式并不能保证计算机选择的模型能够反映特定应用的逻辑或科学。令人惊讶的是,像随机种子这样看似无关紧要的决定可能会对模型性能产生非常大的影响!
可能认为这种情况并不经常发生。谷歌的研究表明情况并非如此。计算机可能选择了“最佳”模型,但事实证明,哪个模型是“最佳”的,令人震惊地依赖于小的、看似任意的选择。
当部署了非常准确、在测试集上表现出色的模型时,模型很可能立即开始在现实世界中表现不佳,这会浪费时间、金钱和耐心。为了避免这些负面后果,可以采取以下五种措施:
1. 从与训练分布不同的地方抽取测试数据——理想情况下是反映部署环境。当收集数据并随机将其划分为训练、验证和测试集时,可能正在为自己设置失败。即使没有模型泄漏,用于评估模型的测试数据来自与训练/验证数据完全相同的地方。如果可以收集两组不同的数据(一组用于训练/验证,另一组用于测试),可能更好地模仿模型在现实世界中的表现。在时间序列背景下,就像使用最新的数据作为测试数据。在计算机视觉背景下,如果正在通过计算鱼类数量来评估环境健康,可能会在一个河流的数据上训练目标检测模型,并在另一个河流的数据上测试模型。
2. 尽量减少训练数据分布与“现实世界”分布之间的差距。如果必须从训练分布中抽取测试数据(例如,随机将数据划分为训练/验证/测试集),请考虑扰动数据,以便测试集中的信息更好地反映现实世界。在计算机视觉中,这通常包括图像增强技术。
3. 通过运行压力测试来检测underspecification。压力测试很常见——例如,银行必须运行压力测试以确保它们能够承受意外的经济事件。谷歌的研究人员通过在各种随机种子值下运行模型,然后检查压力测试的变化来使用压力测试。理想情况下,基于随机种子的变异性很小或没有;研究表明,随机种子确实显著影响了压力测试性能。研究人员分享了他们使用的三种压力测试类型:A) 分层性能评估,对观察子组进行评估以识别不平等。例如,分别计算每个类别的平均精度。B) 移位性能评估,通过有意扰动现有数据来生成虚构的测试分布,以检查模型的特定属性。C) 对比评估,类似于敏感性分析,操纵一个输入观察来测量输出受到的影响有多大。
4. 识别正在做出的有意和无意的建模选择。如果检测到或有理由怀疑模型受到underspecification的影响,那么就开始通过列出所有的建模选择来尝试解决它。有些是有意的,比如模型的输入和选择的模型类型。有些是无意的或隐式的,比如随机种子或神经网络中的步长。如果模型受到underspecification的影响,看看调整这些是否可以提高模型在现实世界中的表现!