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

news/2024/7/7 22:39:18

作者 | 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 Summarizerbody = '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新药研发将迎来黄金十年

  • 北京四环堵车引发的智能交通大构想

  • 400 多行代码!超详细中文聊天机器人开发指南 | 原力计划

  • 一站式杀手级AI开发平台来袭!告别切换零散建模工具

  • 你知道吗?其实 Oracle 直方图自动统计算法存在这些缺陷!(附验证步骤)

  • 你公司的虚拟机还闲着?基于 Jenkins 和 Kubernetes 的持续集成测试实践了解一下!

  • 从 Web 1.0到Web 3.0:详析这些年互联网的发展及未来方向

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


http://lihuaxi.xjx100.cn/news/271372.html

相关文章

把JS 脚本嵌入CS运行

下面这段视频,是让您知道怎样把播放器的javascript放入C#类别中。在调用这个类别时,只传入相关的参数,即可运行。一时类别封装了,在前台xxx.aspx或xxx.aspx.cs看不到播放器的代码。 另一个就是在CS内怎样运行Javascript脚本。此工…

linux expect 输入密码,shell脚本无密码登录 expect的使用方法详解

shell脚本无密码登录 expect的使用方法详解今天需要做一个定时任务脚本将最新的数据包文件传到远程的服务器上,虽然有密钥但也是要求输入密码的那种,所以只能另想办法实现让脚本自动输入密码了。从网上查到使用expect可以,简单研究了一下&…

Elasticsearch 查询数据的工作原理是什么?

点击上方“方志朋”,选择“设为星标”回复”666“获取新整理的面试文章来源:8rr.co/GsAa面试题ES 写入数据的工作原理是什么啊?ES 查询数据的工作原理是什么啊?底层的 Lucene 介绍一下呗?倒排索引了解吗?面…

SLAM中的卡尔曼滤波:究竟滤了谁?

点击上方“小白学视觉”,选择加"星标"或“置顶”重磅干货,第一时间送达在SLAM系统中,后端优化部分有两大流派。一派是基于马尔科夫性假设的滤波器方法,认为当前时刻的状态只与上一时刻的状态有关。另一派是非线性优化方…

C#如何根据DataTable生成泛型List或者动态类型list

背景:在项目中,sql语句检索返回DataTable,然后根据检索结果做进一步的操作,本篇文章即是介绍如何将DataTable快速生成泛型List返回。 假设存在如下学生类: 1 public class student 2 { 3 public int I…

深挖谷歌 DeepMind 和它背后的技术

作者 | James Murphy译者 | 天道酬勤 责编 | Carol出品 | AI科技大本营(ID:rgznai100)人工智能(AI)的子集已经成倍增长,并完成了只有人类才能完成的各种任务。像机器学习这样的技术可以执行管理任务、人脸识别、下棋,甚至翻译语言…

涵盖18+ SOTA GAN实现,这个图像生成领域的PyTorch库火了

视学算法报道转载自:机器之心作者:杜伟、陈萍GAN 自从被提出后,便迅速受到广泛关注。我们可以将 GAN 分为两类,一类是无条件下的生成;另一类是基于条件信息的生成。近日,来自韩国浦项科技大学的硕士生在 Gi…

Cosmos的基石:IL2CPU编译器--.net/C#开源操作系统学习系列三

本文的代码包以cosmos-12304.zip为例(从这个包开始,COSMOS的内核算是有了个基本的雏形,就像是一颗大树在出芽前会先长出庞大的根系,现在就要破土长出第一颗芽了) IL2CPU之于COSMOS就相当与GCC之于LINUX,查看…