“机器学习还是很难用!”
作者头像
  • 卧龙降妖
  • 2020-04-16 12:16:02 2

机器学习一直以来都难以使用,但现在情况正在逐渐改善。

作为一名Cortex的贡献者,Cortex是一个开源平台,用于在生产环境中部署模型。以下内容基于我观察到的一些机器学习团队的情况,而非一项针对整个行业的学术研究。

我们可以通过一个在软件行业普遍存在的例子来说明这个问题,比如数据库。创建一个数据库对不同的开发者可能意味着完全不同的事情。对于一个Postgres的贡献者来说,这可能意味着编写大量的C代码;而对于一个Rails开发者来说,可能只是简单地执行一条命令。两者都不错,只是它们代表了不同的抽象层次,适用于不同的工程背景。

软件开发中的许多基础组件,如数据库、Web服务器、请求路由和哈希库等,之所以被广泛应用,是因为它们提供了一定的抽象层,使得非专业人员也能使用它们。

然而,机器学习长期以来一直缺乏这种抽象层,导致其应用受限。但目前,这种情况正在发生变化。一系列旨在简化机器学习使用的项目正在涌现。

模型需要一个更友好的接口

要在生产环境中使用机器学习,你需要具备以下条件: - 模型设计方面的专业知识 - 足够的数据和资金来训练模型 - 对机器学习基础设施的理解,用于部署模型

这样的要求意味着,任何使用机器学习的项目都需要多名专家亲自参与。这显然是一个瓶颈,需要解决。

理想情况下,我们应该让没有机器学习背景的开发者也能在生产环境中使用机器学习,就像开发者不需要密码学背景就能使用哈希库来保护用户数据一样。

幸运的是,这种情况即将改变。

弥补机器学习抽象的缺失

为了使机器学习更加普及,开发者需要对机器学习有一定程度的了解,包括什么是模型、微调、推理等,并通过可用的抽象层来实现。

许多必要的抽象已经在研究中,它们主要集中在以下几个关键领域:

1. 我们需要一种更简便的方法来训练模型

理想情况下,许多使用机器学习的应用场景根本不需要从头开始训练新模型。例如,如果你正在开发一个聊天机器人,Google的Meena可能已经做得比你的模型更好。如果你正在开发一个文本生成器,那么使用OpenAI的GPT-2会比自己从头开始构建要好得多。对于目标检测,YOLOv3可能是最佳选择。

借助迁移学习(将神经网络的知识转移到新领域的过程),你可以使用相对较少的数据来对这些开源的最新模型进行微调。例如,gpt-2-simple库让你可以用简单的命令行界面来微调GPT-2: $ gpt_2_simple finetune your_custom_data.txt 有了这样的抽象层,开发者不需要深入了解机器学习专业知识,只需要知道如何进行微调即可。

此外,还有许多其他可用的训练抽象。例如,Google Cloud AutoML为用户提供了一个GUI,可以让他们选择自己的数据集并自动训练一个新的模型,无需编写代码: [图像链接] Sundar Pichai在一篇文章中提到:“现在设计新的神经网络需要集合几名博士,而我们希望AutoML能够在三到五年内让成千上万的开发者为他们自己的特定需求设计新的神经网络。”

2. 生成预测的过程必须简化

假设你已经可以轻松地获得一个适合特定任务的训练模型。接下来,你该如何生成预测?

有许多项目可以提供模型服务功能,其中许多与流行的机器学习框架相关联。例如,TensorFlow有TF Serving,而ONNX有ONNX Runtime。

除了科技巨头外,许多独立的开源项目也专注于解决这个问题。例如,Bert Extractive Summarizer项目让使用Google的BERT生成文本摘要变得更加容易。以下是示例代码: python from summarizer import Summarizer body = 'Text body that you want to summarize with BERT' body2 = 'Something else you want to summarize with BERT' model = Summarizer() model(body) model(body2) 使用这个库生成预测的过程就像导入一个模块并调用一次Summarizer一样简单。

随着越来越多这样的项目的启动和开发,开发者无需深入了解模型本身就可以更轻松地生成预测。

3. 模型的部署必须简化

最后一个瓶颈在于基础设施。

为一个小应用程序提供预测是简单且直接的,但当你需要扩展规模时,情况就会变得复杂。以GPT-2为例: - GPT-2大小超过5GB,需要更大的服务器来托管,而这通常更昂贵。 - GPT-2非常消耗计算资源,为了提供单个预测,GPT-2可能会占用CPU几分钟时间。即使有GPU,单个预测也可能需要几秒钟。相比之下,Web应用只需要一个CPU就可以为数百个并发用户提供服务。 - GPT-2非常消耗内存,除了巨大的磁盘空间和计算需求外,它还需要大量的内存才能正常运行。

为了应对大量用户增长,你需要将基础设施扩展到应用程序的多个副本。这意味着需要使用Docker对模型进行容器化,使用Kubernetes进行容器编排,并通过你的云平台配置自动扩展。

你需要掌握一系列工具才能搭建起处理机器学习部署所需的基础设施,而大多数不具备专业知识的开发者对这些工具并不熟悉。

简化机器学习基础设施

为了让开发者能够使用机器学习,需要对机器学习的基础设施进行抽象。这就是像Cortex这样的项目发挥作用的时候了。

Cortex通过配置文件和命令行界面简化了模型部署的基础开发过程: [图像链接] 材料来源:Cortex Repo

Cortex这样的项目的目标很简单:将一个训练好的模型转换成任何开发者都可以使用的预测API。

让实用型机器学习变得简单

我想强调的一点是,机器学习背后的数学原理永远都是复杂的。仅靠调用一个predict函数并不能成为机器学习专家。重点在于,开发者不必成为机器学习专家就能在他们的应用程序中使用机器学习。

机器学习生态系统终于开始重视简化实用型机器学习了。仅具备少量机器学习知识的开发者可以对最新模型进行微调,将其封装在API中,并使用开源、直观的抽象层部署在可扩展的基础设施上。

最终的结果是,实用型机器学习将变得更加容易,几乎所有的开发者都将能够使用机器学习。

    本文来源:图灵汇
责任编辑: : 卧龙降妖
声明:本文系图灵汇原创稿件,版权属图灵汇所有,未经授权不得转载,已经协议授权的媒体下载使用时须注明"稿件来源:图灵汇",违者将依法追究责任。
    分享
机器还是学习
    下一篇