成熟机器学习系统持续改进面临的问题 - danshiebler


任何在大公司建立机器学习模型的人都会认识到。对成熟的机器学习系统进行可衡量的改进是极其困难的:
机器学习系统极其复杂,并且具有破坏软件组件之间抽象的令人沮丧的能力。这对 ML 成功必不可少的迭代开发类型提出了广泛的挑战。
 
大多数软件系统会仔细控制哪些层需要相互通信以及需要沿每个层边界公开哪些数据。对于一个新的机器学习系统来说,需要打破现有的抽象并连接被设计为独立的层是很常见的。
例如:

  • 新的特征标准化策略可能需要将原始数据暴露给旨在使用处理过的数据的系统部分。
  • 将前馈神经网络迁移到图神经网络可能需要在推理时访问节点邻居的特征。
  • 调整模型以使用另一个模型的预测作为特征可能需要将模型配置为按顺序运行而不是并行运行。

  
我们有标签的样本分布与我们必须执行推理的样本分布相同是非常罕见的。例如:
  • 点击率 (CTR) 预测模型不会收到用户未看到的样本标签。
  • 大多数内容审核系统只收到关于一个很小的、通常不具有代表性的数据子集的反馈。
  • 大多数传感器分析算法都建立在具有不切实际的低噪声水平的标记数据集之上。

 
在许多情况下,我们的模型接收到的标记数据取决于它生成的预测。这种情况的一些经典示例包括:
  • 大多数推荐系统不会收到有关用户未看到的任何样本的用户反馈。
  • 有效检测和惩罚用户某些行为的系统可能会导致用户修改他们的行为以避免惩罚。
  • 如果内容审核系统是根据用户报告进行训练的,那么随着用户报告率的降低,系统覆盖率的增加可能会导致模型训练数据的减少。

 
在生产机器学习系统中,看似独立的组件通常表现出隐藏的紧密耦合。这会使实验具有挑战性。更改一个系统而不更改另一个系统会导致性能下降,同时更改两个系统通常容易出错且需要大量协调。一些例子包括:
  • 一旦开发了特征管道并可供模型使用,对该管道的任何更改(甚至纠正错误!)都有可能损害使用该特征的模型的性能。这迫使 ML 工程师对所有功能更改进行版本控制,从而导致功能管道极快地变成笨拙的怪物。
  • 在大规模推荐系统中,轻型机器学习模型或基于启发式的候选生成系统通常会选择重型机器学习模型从中选择的候选集。对候选生成系统的任何更改都会影响馈送到重模型的样本分布,这可能会影响该模型的性能。
  • 某些模型(例如语义模型或​​对象检测模型)生成其他模型用作特征的信号是很常见的。在这种情况下,对上游模型的任何更改或改进都可能损害消耗其预测的下游模型的性能。