建立ML的更好方法:为什么应该使用主动学习 - humanloop


数据标记通常是机器学习的最大瓶颈-查找,管理和标记大量数据以建立性能良好的模型可能需要数周或数月的时间。主动学习使您可以使用少得多的标签数据来训练机器学习模型。最好的人工智能驱动公司,例如特斯拉,已经在使用主动学习。我们认为您也应该。
 
传统方法与主动学习区别案例:创建垃圾邮件过滤器
想象一下,您想为电子邮件构建一个垃圾邮件过滤器。传统的方法(至少从2002年开始)是收集大量电子邮件,将它们标记为“垃圾邮件”或“非垃圾邮件”,然后训练机器学习分类器来区分这两个类别。传统方法假定所有数据都是同等有价值的,但是在大多数的数据集中存在分类不平衡、嘈杂的数据和大量的冗余。
传统方法浪费了时间标签数据,并不能提高模型的性能。在标记完所有数据之前,您甚至都不知道模型是否有用。 
人类不需要数千个随机标记的示例来了解垃圾邮件和合法电子邮件之间的区别。如果您要教一个人解决此任务,您希望能够给他们一些您想要的例子,让他们快速学习并在不确定时提出问题。
主动学习使用相同的直觉进行操作,使用您正在训练的模型来查找和标记最有价​​值的数据。
在主动学习中,您首先提供少量带标签的示例。在此“种子”数据集上训练模型。然后,模型通过选择不确定的未标记数据点来“提问”,因此人类可以通过为这些点提供标签来“回答”问题。。模型将再次更新,并重复该过程,直到性能足够好为止。通过人工迭代地讲授模型,可以在更少的时间内用更少的标记数据来创建更好的模型。
那么模型如何找到需要标记的下一个数据点?一些常用的方法是:

  1. 选择模型的预测分布具有最大熵的数据点
  2. 选择模型偏好的预测最不可靠的数据点
  3. 训练一组模型并集中于他们不同意的数据点

在Humanloop,我们实际上使用自定义方法来利用贝叶斯深度学习来获得更好的不确定性估计。
 
主动学习的三个好处
  • 在标签数据上花费的时间和金钱更少

主动学习已被证明可以节省从计算机视觉到NLP的各种任务和数据集的数据标签。由于数据标记是训练现代机器学习模型中最昂贵的部分之一,因此它本身就足够了!
  • 可以获得关于模型性能的更快反馈

通常,人们在训练任何模型或获得任何反馈之前都先标记其数据。通常,要花几天或几周的时间来重复标注准则并重新标记,才能发现模型性能远远低于所需的性能,或者需要不同的标记数据。由于主动学习在数据标记过程中经常训练模型,因此有可能获得反馈并纠正可能会在以后发现的问题。
  • 您的模型将具有更高的最终精度

人们经常会惊讶地发现,经过主动学习训练的模型不仅学习速度更快,而且实际上可以收敛到更好的最终模型(数据更少)。经常有人告诉我们,更多的数据会更好,人们很容易忘记数据的质量与数量一样重要。如果数据集包含难以准确标注的含糊不清的示例,这实际上可能会降低最终模型的性能。
模型看到示例的顺序也很重要。有一个完整的机器学习子领域,称为课程学习(curriculum learning),它研究如何通过首先讲解简单概念然后讲授复杂概念来提高模型性能。在高级演算之前考虑一下算术。主动学习自然会在您的模型上实施课程,并帮助他们获得更好的整体性能。
 
如果主动学习是如此出色,那么为什么每个人都不会使用它呢?
我们用于构建机器学习模型的大多数工具和流程并非在设计时就考虑了主动学习。经常有不同的团队负责数据标记和模型训练,但是主动学习需要将这些过程结合在一起。如果确实让这些团队一起工作,那么您仍然需要大量的基础架构来将模型训练连接到标注界面。
使用的大多数软件库都假设您在训练模型之前已对所有数据进行了标记,因此要进行主动学习,您必须编写一吨样板。您还需要弄清楚如何最好地托管模型,使模型与标注者团队进行通信并在其从不同标注者异步获取数据时进行自我更新。
最重要的是,现代深度学习模型的更新速度非常慢,因此经常从头开始对其进行重新培训是很痛苦的。没有人希望标注数百个示例,然后等待24小时等待模型完全重新训练,然后再标注下100个示例。深度学习模型也往往具有数百万或数十亿个参数,并且从这些模型中获得良好的不确定性估计是一项开放研究问题。
如果您阅读有关主动学习的学术论文,您可能会认为主动学习将为您节省一些标签,但需要大量工作。但是,这些论文具有误导性,因为它们在倾向于平衡/干净的学术数据集上运行。他们几乎总是一次标记一个示例,而他们忘记了并不是每个数据点都同样容易标记。
在出现更大的分类失衡、嘈杂的数据和可变的标签成本等更为现实的问题时,其收益可能会比文献所暗示的要大得多。在某些情况下,标签成本可以降低10倍。
 
今天如何使用主动学习
使用主动学习的许多最大障碍只是拥有正确基础设施的问题。就像Keras和PyTorch之类的工具极大地减轻了渐变派生的痛苦一样,新工具的出现也使主动学习变得更加容易。
有一些开放源代码的python库(例如modAL)会占用很多样板。ModAL建立在scikit-learn的基础上,可让您将不同的模型与所需的任何主动学习策略结合起来。它是开源和模块化的,因此需要花费大量工作来实施不同的不确定性措施。ModAL的优点是它提供了开箱即用的方法范围以及它是开源的事实。像modAL这样的库的缺点是它们不包含任何标注接口,而仍然由您负责托管模型并将其连接到标注接口才能工作。
这使我们进入标注接口:
对于个人数据科学家来说,最受欢迎的工具可能是Prodigy。Prodigy是Spacy的制造商构建的标注接口,因此可以自然地与他们出色的NLP库结合使用基本主动学习。它不是开源的,但您可以将其下载为pip wheel并在本地安装。虽然Prodigy对于个人来说是一个很好的工具,但它并不是为支持标注者团队而设计的,仅实现了最基本形式的主动学习。为了与团队合作,仍然需要您自己本机运行prodigy ,并且可能需要做很多工作。
Labelbox提供了用于各种图像标注的接口,并且最近还增加了对文本的支持。与Prodigy不同,Labelbox在设计时就考虑了标注者团队,并具有更多工具来确保标注的标签正确。他们没有对主动学习或模型训练的任何本机支持,但允许您通过API将模型中的预测上传到标注接口。这意味着,如果您已实现主动学习获取功能并正在训练模型,则可以设置主动学习循环。虽然大部分工作留给您完成。
Humanloop为NLP任务提供了一个标注界面,使您可以在标注时训练模型,并可以使用主动学习功能。我们支持标注者团队,并采用了最先进的技术进行主动学习和质量保证。即使使用现代深度模型,也可以在训练期间获得实时反馈。在培训后,我们还可以轻松地将其部署到优化的模型运行时,甚至可以在部署后更新数据。