“机器学习还是很难用!”

百家 作者:AI100 2020-04-16 14:39:56

作者 | Caleb Kaiser
译者 | 香槟超新星,责编 | 郭芮
出品 | CSDN(ID:CSDNnews)


我是一名Cortex贡献者,Cortex是一个用于在生产中部署模型的开源平台。首先声明,以下内容是基于我对一些机器学习团队的观察总结出来的,而不是一份针对该行业的学术调查。
用一个在软件行业中无处不在的东西举例子吧,就比如数据库。建立一个数据库意味着什么?对于一名Postgres贡献者来说,“创建一个数据库”就像一百万行C代码。对于一名Rails开发者来说,看起来就仅仅是一句rake db:create。
显然,二者都没错,只不过它们代表的抽象级别不同,适用于不同工程师的不同侧重点。
这就是软件构建自己的方式。为现代应用程序提供支持的基本软件——数据库、Web服务器、请求路由器、哈希库等等——在很大程度上得到了广泛传播,是因为它们的抽象层使得非专业人士也可以访问它们。
机器学习历来缺乏这种抽象层,这限制了它的采用率。但是现在,情况正在发生变化。新的一波专门致力于让机器学习应用起来更容易的项目正在出现。

模型需要一个对开发人员来说更友好的界面

想要在生产环境中应用机器学习,你需要:
  • 设计模型方面的专业知识

  • 足够的数据以及资金来训练你的模型

  • ML基础架构知识(用于部署模型)

这样的结果就是,任何使用ML的项目都需要由数名专家来亲自执手。这个瓶颈亟待消除。

应该让那些没有机器学习背景的开发人员也能够在生产中使用机器学习才对,就像一名开发人员可能没有密码学方面的背景,但仍然可以用哈希库来保护用户数据一样。
幸好,这终于要发生了。


弥补机器学习抽象的缺失

为了使ML的应用得到普及,开发人员必须能够对机器学习有一个较高水平的了解——什么是模型、微调、推论等等——并通过可用的抽象来构建应用。
许多必要的抽象已经在研究中了,它们属于几个关键的重点领域:
1.我们需要一种更简单的方法来训练模型
现实情况是,对于许多应用机器学习的用例而言,根本不需要从头开始训练新模型。
例如,如果你正在开发一个会话代理,那么几乎可以肯定的一点就是,Google的Meena会表现得比你的模型更好。如果你正在开发一个文本生成器,那你应该去用OpenAI的GPT-2,而不是自己从头开始构建。对于对象检测来说,YOLOv3这样的模型可能是你最好的选择。
得益于转移学习(transfer learning,将神经网络的“知识”微调到一个新领域的过程),你可以只用相对少的数据,就能依据你的任务来对这些开源的最新模型进行微调。
例如,有了gpt-2-simple这样的新库,你就可以使用简单的命令行界面来微调GPT-2了:
$ gpt_2_simple finetune your_custom_data.txt
有了这一抽象层,开发人员就不需要深入了解ML的专业知识了,他们只需要知道如何微调就可以了。
而且可用的训练抽象远不止gpt-2-simple一个。Google Cloud AutoML为用户提供了一个GUI(用户图形界面),可以让用户选择自己的数据集并自动训练一个新模型,无需编写代码:

图源:Google Cloud Vision
Sundar Pichai在一篇有关AutoML的文章中说:“当今需要汇集几位博士才能设计新的神经网络,而我们希望AutoML在三到五年内能够让成千上万的开发人员们都能为他们自己的特殊需求设计新的神经网络。”
2.从模型生成预测的过程必须要简单
好的,假如说已经可以轻松地针对你的特定任务得到一个训练好的模型了。你要如何根据该模型生成预测呢?
能够提供模型服务功能的项目有很多,其中许多都与流行的ML框架相关。例如,TensorFlow有TF Serving,而ONNX有ONNX Runtime。
除了科技巨头们之外,还有许多独立的开源项目也在专注于解决这个问题。例如,Bert Extractive Summarizer项目可以让使用Google的BERT提取文本摘要的过程变得更加轻松。以下是文档中的示例:
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)
使用该库生成预测的过程就像使用一个import语句以及调用一次Summarizer()一样简单。
随着有越来越多这样的项目的启动以及开发,开发人员无需过多深入了解模型本身就能更轻松地用模型生成预测了。
3.模型的部署必须要简单
最后的瓶颈是基础架构。
为一个玩具应用程序提供预测是简单而直接的,但是当你的程序需要扩大规模时,情况就会变得困难起来。以GPT-2为例:
  • GPT-2大于5 GB。你需要一台更大的,那么也就必定更贵的服务器来托管这么大的模型。

  • GPT-2非常吃算力。为了提供单个预测,GPT-2可以100%的利用率占用CPU数分钟。即使有GPU,单个预测仍可能需要花费数秒。对比之下,Web app只需用一个CPU就能够为数百个并发用户提供服务。

  • GPT-2非常吃内存。除了巨大的磁盘空间和计算需求之外,GPT-2还需大量的内存才能保证运行而不会崩溃。


为了应对少量的用户增长,你也需要将基础架构扩展到应用程序的许多副本。这意味着需要使用Docker对模型进行容器化,使用Kubernetes对容器进行编排,以及通过你使用的云平台来配置自动扩展(autoscaling)。
你需要学会一整套工具才能搭建好用于处理机器学习部署的基础架构,而大多数不具备专业背景的开发人员对其中很多工具都太不熟悉:

机器学习基础架构技术栈

为了让开发人员能够使用机器学习,需要对机器学习的基础结构进行抽象化。这就是像Cortex这样的项目登场的时候了。(完整披露:我是一名Cortex贡献者)。
Cortex通过一个配置文件以及一个命令行界面对模型部署的基础开发进行了抽象:

资料来源:Cortex Repo
Cortex这类项目的目标很简单:拿出一个训练后的模型,并将其转化为任何开发人员都能用的预测API。


让应用型机器学习轻松起来

我想讲清的一点是,机器学习背后的数学原理将永远都是很难懂的。只会调用个predict()函数的话,是不可能成为机器学习专家的。重点是,一名开发人员不必非得成为一名机器学习专家,就可以在自己的应用程序中使用ML。
机器学习的生态社区终于要将重心放在简化应用型ML上了。仅会一点机器学习知识的开发人员可以对最新模型进行微调,将其包装在API中,并使用开源,直观的抽象将其部署在可扩展的基础架构上。
结果就是,应用型机器学习将变得更加容易——而且通过这种扩展,几乎所有开发者都能用得上机器学习了。
原文:https://towardsdatascience.com/machine-learning-is-still-too-hard-to-use-e344773725af
作者简介:Caleb Kaiser,Cortex Labs创始团队。
本文为CSDN翻译文章,转载请注明出处。

【END】

推荐阅读

    你点的每个“在看”,我都认真当成了AI

关注公众号:拾黑(shiheibook)了解更多

[广告]赞助链接:

四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/

公众号 关注网络尖刀微信公众号
随时掌握互联网精彩
赞助链接