为什么机器学习项目非常难管理?

英文原文:https://medium.com/@l2k/why-are-machine-learning-projects-so-hard-to-manage-8e9b9cf49641
作者:Lukas Biewald
编译:ronghuaiyang

导读

我看到过很多公司尝试使用机器学习 —— 有些大获成功,有些惨败。一个不变的事实是,机器学习团队很难设定目标和期望。这是为什么呢?

null

1. 很难预先分辨出什么是难的,什么是容易的

是在国际象棋中击败卡斯帕罗夫更困难,还是捡起棋子并移动棋子更困难?计算机在二十多年前打败了国际象棋世界冠军,但是可靠地抓取和举起物体仍然是一个未解决的研究问题。人类不擅长评估什么对人工智能来说是困难的,什么是容易的。即使在一个领域中,性能也可能有很大差异。预测情绪的准确性有多高?在影评中,有大量的文本和作者很容易搞清楚他们的想法,现在能期待的准确率是 90-95%。在推特上,两个人在 80% 的情况下对一条推文的观点是一致的。在推文中,只要是关于航空公司的,那么总是把这条推文的情绪预测成负面的,就可以达到 95% 以上的准确率。

度量标准也可能在项目的早期提升很多,然后突然碰壁。我曾经举办过一场 Kaggle 竞赛,全世界成千上万的人竞相为我的数据建模。在第一周,准确率从 35% 上升到 65%,但在接下来的几个月里,准确率从未超过 68%。68% 的准确率显然是数据对于最先进的机器学习技术的限制。那些在 Kaggle 竞赛中竞争的人非常努力地获得了 68% 的正确率,我确信这是一个巨大的成就。但在大多数情况下,65% 和 68% 是完全无法区分的。如果这是一个内部项目,我肯定会对结果感到失望。

我的朋友 Pete Skomoroch 最近告诉我,作为一名研究机器学习的数据科学家,在工程部门工作是多么令人沮丧。工程项目通常会向前推进,但机器学习项目可能会完全停滞。花一周时间对数据进行建模,结果可能(甚至很常见)没有任何改进。

null

2. 机器学习很容易以意想不到的方式失败。

机器学习通常工作得很好,只要你有大量的训练数据以及你在生产中运行的数据看起来很像你的训练数据。人类非常善于从训练数据中归纳归纳,因此我们对此有着可怕的直觉。我做了一个小机器人,带着摄像机和一个视觉模型,这个模型是根据从网上获取的成百万的 ImageNet 图像制作的。我对我的机器人相机上的图像进行了预处理,使其看起来像来自网络的图像,但准确性比我预期的要差得多。为什么?网络上的图片往往会针对目标物体进行构图,但是我的机器人不一定会像人类摄影师那样直视一个物体。人类甚至可能都没有注意到这种差异,但使用现代深度学习网络的时候就会非常痛苦。有很多方法可以处理这种现象,但我之所以注意到它,只是因为它的性能下降非常严重,我花了很多时间调试它。

更厉害的是,导致性能下降的细微差异很难被发现。接受《纽约时报》训练的语言模型不能很好地概括社交媒体文本。我们可以预料到。但很显然,从 2017 年开始接受文本训练的模型,在 2018 年写的文本中表现不佳。上游分布随时间以多种方式变化。当对手适应了欺诈模型所做的事情时,欺诈模型就会完全崩溃。



3. 机器学习需要大量相关的训练数据。

每个人都知道这一点,但这是一个巨大的障碍。如果你能够收集并标记大量的训练数据,计算机视觉可以做很多惊人的事情。对于某些用例,数据是某些业务流程的副产品。这就是机器学习真正发挥作用的地方。对于许多其他用例来说,收集训练数据是非常昂贵和具有挑战性的。许多医疗用例对于机器学习来说似乎是完美的 —— 使用许多微弱的信号和清晰的结果来做出关键的决策 —— 但是数据由于重要的隐私问题而被锁定,或者一开始就没有被统一的进行收集。

许多公司不知道从哪里开始投资收集训练数据。这是一项重要的工作,很难预先预测该模型将如何工作。

解决这些问题的最佳实践是什么?

1. 多注意你的训练数据。

看看这个算法对它所训练的数据进行错误分类的情况。这样的错误几乎总是标注错误或者一些边界样本。不管怎样,你都想了解他们。让每个构建模型的人都查看一下训练数据并自己标注一些训练数据。对于许多用例来说,一个模型不太可能比两个独立的人达成一致的效果更好。

2. 先做端到端的工作,然后一次改进一件事。

从可能有效的最简单的事情开始,然后部署它。你会从中学到很多。过程中任何阶段的额外复杂性都会改进研究论文中的模型,但很少会改进现实世界中的模型。每一个额外的复杂性都需要验证。

将一些东西交到最终用户手中,可以帮助你尽早了解模型可能工作得有多好,并且它可能会带来一些关键问题,比如模型正在优化的内容与最终用户想要的内容之间的分歧。它还可能使你重新评估你正在收集的训练数据的类型。最好能尽快发现这些问题。

3. 寻找优雅的方法来处理不可避免的算法失败的情况。

几乎所有的机器学习模型在相当长的时间内都会失败,如何处理这一问题绝对是至关重要的。模型通常有一个可以使用的可靠的置信度评分。使用批处理过程,你可以构建包含人在里面的循环系统,将低可信度的预测发送给操作员,使系统能够可靠地端到端工作,并收集高质量的训练数据。对于其他用例,你可以使用一种标记潜在错误的方式,或者对最终用户来说不那么恼人的方式,来呈现低可信度的预测。

下面是一个没有被妥善处理的失败例子。微软没有预料到他们的 Tay 机器人能多快从推特上的喷子那里学会不良行为。

null


本文地址:https://www.6aiq.com/article/1582540307492
本文版权归作者和AIQ共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出