导读
为什么我们的机器学习项目会失败?
创造一个大的机器学习系统是一门艺术。
在构建一个大的机器学习系统时,有很多事情需要考虑。但作为数据科学家,我们常常只担心项目的某些部分。
但是我们是否考虑过一旦我们拥有了模型,我们将如何部署它们?
我见过许多 ML 项目,其中许多项目注定要失败,因为它们从一开始就没有一个固定的生产计划。
这篇文章是关于一个成功的 ML 项目的过程需求 —— 一个进入生产的项目。
1. 在开始的时候建立基线
你并不需要用模型来获得基线结果。
假设我们将使用 RMSE 作为我们的时间序列模型的评估指标。我们在测试集上对模型进行了评估,RMSE 为 3.64。
3.64 是个好 RMSE 吗?我们怎么知道?我们需要一个基线 RMSE。
这可能来自当前使用的用于相同任务的模型。或者使用一些非常简单的启发式。对于时间序列模型,需要打败的基线是最后一天的预测。即,预测前一天的数字。
如果是图像分类任务,取 1000 个有标签的样本。而人类的准确性可以作为你的基线。如果一个人不能在任务中获得 70%的预测精度,那么如果你的模型达到类似的水平,你总是可以考虑将流程自动化。
学习:在你创建模型之前,试着了解你将要得到的结果。设定一些不切实际的期望只会让你和你的客户失望。
2. 持续集成是前进的方向
你现在已经创建了你的模型。它在本地测试数据集上的性能比基线/当前模型要好。我们应该继续前进吗?
我们有两个选择:
进一步改进我们的模型,这是一个无止境的循环。
在生产环境中测试我们的模型,得到更多关于可能出错的信息,然后使用持续集成来改进我们的模型。
我支持第二种方法。Andrew Ng 在 Coursera 上的第三门课,“Deep Learning Specialization”中的“Structuring Machine learning”中说:
“不要一开始就试图设计和构建完美的系统。相反,应该快速地建立和训练一个基本的系统 —— 也许只需要几天的时间。即使基本的系统远远不是你能建立的“最好”的系统,检查基本的系统是有价值的:你会很快找到一些线索,告诉你在哪些方面最值得投入你的时间。
完成比完美更好。
学习:如果你的新模型比当前生产中的模型更好,或者你的新模型比基线更好,那么等待投入生产是没有意义的。
3. 你的模型可能会进入生产
你的模型是否优于基线?它在本地测试数据集上表现得更好,但是它真的能在整体上工作得很好吗?
为了测试你的模型优于现有模型的假设的有效性,你可以设置一个A/B 测试。一些用户(测试组)看到来自你的模型的预测,而一些用户(控制组)看到来自前一个模型的预测。
事实上,这是部署模型的正确方式。你可能会发现你的模型并没有看起来那么好。
错了并不是真的错,错的是没有预料到我们可能会错。
很难指出你的模型在生产环境中表现不佳的真正原因,但一些原因可能是:
你可能会看到实时的数据与训练数据有很大的不同。
或者你没有正确地完成预处理 pipeline。
或者你的实现中有一个 bug。
学习:不要全面投入生产。A/B 测试永远是前进的好方法。准备一些可以依靠的东西(可能是一个更老的模型)。总有一些东西会出问题,这是你无法预料的。
4. 你的模型可能不会投入生产中
我创建了这个令人印象深刻的 ML 模型,它提供了 90%的准确性,但它需要大约 10 秒钟来获取预测。
**这样可接受吗?**对于某些用例可能是,但实际上不是。
在过去,有许多 Kaggle 竞赛的获胜者最终创造了非常大的模型集成,占据了排行榜的榜首。下面是一个例子模型,它曾在 Kaggle 上赢得 Otto 分类挑战:
在Level1上用了33个模型和8种特征工程
另一个例子是 Netflix 百万美元推荐引擎挑战。由于涉及的工程成本,Netflix 团队最终没有使用获奖解决方案。
那么,如何让你的模型在机器上既准确又简单呢?
这就引出了 Teacher-Student 模型或“知识蒸馏”的概念。在知识蒸馏中,我们在一个更大的已经训练好的教师模型上训练一个更小的学生模型。
这里我们使用来自教师模型的软标签/概率,并将其作为学生模型的训练数据。
关键是,老师输出类别概率 —— “软标签”而不是“硬标签”。例如,一个水果分类器可能会说“Apple 0.9, Pear 0.1”而不是“Apple 1.0, Pear 0.0”。为什么要这样呢?因为这些“软标签”比原来的标签信息更丰富——告诉学生,是的,这个苹果确实有点像梨。学生模型通常可以非常接近教师水平的表现,即使参数少了 1-2 个数量级!
学习:有时,我们的预测时间很有限,所以我们想要一个更轻的模型。我们可以尝试构建更简单的模型,或者尝试对这样的用例使用知识蒸馏。
5. 周期性的维护和反馈
世界不是恒定的,你的模型权重也不是恒定的
我们周围的世界正在迅速变化,两个月前可能适用的东西现在可能已经不适用了。在某种程度上,我们建立的模型是对世界的反映,如果世界在变化,我们的模型应该能够反映这种变化。
模型性能通常随时间而下降。
由于这个原因,我们必须在一开始就考虑将我们的模型升级作为维护的一部分
维护周期的频率完全取决于你试图解决的业务问题。在一个广告预测系统中,用户往往变化无常,购买模式不断出现,需要相当高的频率。而在评论情绪分析系统中,由于语言本身的结构变化不是很大,所以频率不需要那么高。
我还必须要承认反馈回路在机器学习系统中的重要性。假设你用猫狗分类器预测了一个的图像是狗,但是概率很低。我们能从这些低置信度的例子中学到什么吗?你可以将其发送到手动检查,以检查它是否可以用于重新训练模型。通过这种方式,我们可以在它不确定的样本上训练分类器。
学习:在考虑生产时,提出使用反馈来维护和改进模型的计划。
总结
在考虑将模型投入生产之前,我发现这些事情是很重要的。
虽然这并不是你需要考虑的事情和可能出错的事情的详尽列表,但它无疑可以作为你下次创建机器学习系统时的思想食粮。
-
机器学习
+关注
关注
66文章
8418浏览量
132628
发布评论请先 登录
相关推荐
评论