【开发者成长】“机器学习还是很难用!”

云栖号资讯:【点击查看更多行业资讯】
在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来!

机器学习仍然很难用,但情况开始有所改善了。

image

以下为译文:

我是一名Cortex贡献者,Cortex是一个用于在生产中部署模型的开源平台。首先声明,以下内容是基于我对一些机器学习团队的观察总结出来的,而不是一份针对该行业的学术调查。

用一个在软件行业中无处不在的东西举例子吧,就比如数据库。建立一个数据库意味着什么?对于一名Postgres贡献者来说,“创建一个数据库”就像一百万行C代码。对于一名Rails开发者来说,看起来就仅仅是一句rake db:create。

显然,二者都没错,只不过它们代表的抽象级别不同,适用于不同工程师的不同侧重点。

这就是软件构建自己的方式。为现代应用程序提供支持的基本软件——数据库、Web服务器、请求路由器、哈希库等等——在很大程度上得到了广泛传播,是因为它们的抽象层使得非专业人士也可以访问它们。

机器学习历来缺乏这种抽象层,这限制了它的采用率。但是现在,情况正在发生变化。新的一波专门致力于让机器学习应用起来更容易的项目正在出现。

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

想要在生产环境中应用机器学习,你需要:

  • 设计模型方面的专业知识
  • 足够的数据以及资金来训练你的模型
  • ML基础架构知识(用于部署模型)

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

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

幸好,这终于要发生了。

2.弥补机器学习抽象的缺失

为了使ML的应用得到普及,开发人员必须能够对机器学习有一个较高水平的了解——什么是模型、微调、推论等等——并通过可用的抽象来构建应用。

许多必要的抽象已经在研究中了,它们属于几个关键的重点领域:

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

  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(用户图形界面),可以让用户选择自己的数据集并自动训练一个新模型,无需编写代码:

image
图源: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)。

你需要学会一整套工具才能搭建好用于处理机器学习部署的基础架构,而大多数不具备专业背景的开发人员对其中很多工具都太不熟悉:

image

3.机器学习基础架构技术栈

为了让开发人员能够使用机器学习,需要对机器学习的基础结构进行抽象化。这就是像Cortex这样的项目登场的时候了。(完整披露:我是一名Cortex贡献者)。

Cortex通过一个配置文件以及一个命令行界面对模型部署的基础开发进行了抽象:

image
资料来源:Cortex Repo

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

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

我想讲清的一点是,机器学习背后的数学原理将永远都是很难懂的。只会调用个predict()函数的话,是不可能成为机器学习专家的。重点是,一名开发人员不必非得成为一名机器学习专家,就可以在自己的应用程序中使用ML。

机器学习的生态社区终于要将重心放在简化应用型ML上了。仅会一点机器学习知识的开发人员可以对最新模型进行微调,将其包装在API中,并使用开源,直观的抽象将其部署在可扩展的基础架构上。

结果就是,应用型机器学习将变得更加容易——而且通过这种扩展,几乎所有开发者都能用得上机器学习了。

原文:https://towardsdatascience.com/machine-learning-is-still-too-hard-to-use-e344773725af
作者简介:Caleb Kaiser,Cortex Labs创始团队。

【云栖号在线课堂】每天都有产品技术专家分享!
课程地址:https://yqh.aliyun.com/live

立即加入社群,与专家面对面,及时了解课程最新动态!
【云栖号在线课堂 社群】https://c.tb.cn/F3.Z8gvnK

原文发布时间:2020-04-16
本文作者:Caleb Kaiser
本文来自:“CSDN”,了解相关信息可以关注“CSDN”

原文链接

本文为云栖社区原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/516345.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

cropper基本用法

文章目录 1. 基本使用步骤2. 更换裁剪的图片3. 将裁剪后的图片,输出为 base64 格式的字符串1. 基本使用步骤 在 <head> 中导入 cropper.css 样式表: <link rel="stylesheet" href="/assets/lib/cropper/cropper.css"

这个年均开销3500万美元的 FBI 机密部门,将结合面部识别与大数据技术来调查案件...

撰者 | Thomas Brewster译者 | Katie&#xff0c;责编 | Jerry来源 | CSDN云计算FBI面部识别大数据&#xff0c;瞄准恐怖犯罪事件在发生大规模枪击或恐怖袭击后&#xff0c;调查人员可能会留有数小时的闭路电视录像&#xff0c;证人的视频或社交媒体的剪辑。以2013年的波士顿马…

节省50%部署时间的5大KS8服务

云栖号资讯&#xff1a;【点击查看更多行业资讯】 在这里您可以找到不同行业的第一手的上云资讯&#xff0c;还在等什么&#xff0c;快来&#xff01; Kubernetes已然成为IT世界的重要组成部分&#xff0c;并且仍在不断地发展壮大&#xff0c;现阶段&#xff0c;Kubernetes已经…

内网穿透访问Vue项目的时候出现Invalid Host header解决办法

出现Invalid Host header解决办法 内网穿透 适用场景: 在本地的Vue-cli3项目, 需要其他人浏览. 如果没有外网的服务器, 可以把自己的电脑当做服务器. 这时候需要外网的人能访问到自己的电脑. 内网穿透工具: 这个有很多, 比如花生壳, Frp, ngrok, 我用的是国内的sunny-ngrok. 使…

耗时又繁重的SQL诊断优化,以后就都交给数据库自治服务DAS吧!

作者&#xff1a;斯干&#xff0c;阿里云数据库高级技术专家 在我们业务系统中&#xff0c;数据库越来越扮演着举足轻重的角色。 和其它公司一样&#xff0c;在阿里巴巴业务场景下&#xff0c;大部分业务跟数据库有着非常紧密的关系&#xff0c;数据库一个微小的抖动都有可能…

大事件后台管理系统开发实战(下)

文章目录 续前篇:大事件后台管理系统开发实战(中)1. 文章类别1.1 点击编辑按钮展示修改文章分类的弹出层1.2 为修改文章分类的弹出层填充表单数据1.3 更新文章分类的数据1.4 删除文章分类2. 文章列表2.1 创建文章列表页面2.2 定义查询参数对象q2.3 请求文章列表数据并使用模…

【医疗】疫情下的医院信息化短板如何补足?

云栖号资讯&#xff1a;【点击查看更多行业资讯】 在这里您可以找到不同行业的第一手的上云资讯&#xff0c;还在等什么&#xff0c;快来&#xff01; 疫情初期&#xff0c;武汉大量患者拥挤在医院的视频在网上传播。 一时间&#xff0c;各地各级医院正尽最大努力利用信息化手…

《vue+vant 文本超出两行部分省略号显示》

今天做移动端项目&#xff0c;遇到了这个问题 面向百度后总结得到了这个结果。 首先&#xff0c;我们要知道css的三条属性。 overflow:hidden; //超出的文本隐藏 text-overflow:ellipsis; //溢出用省略号显示 white-space:nowrap; //溢出则不换行 这里不符合我们的要求所有…

这三年被分布式坑惨了,曝光十大坑

本篇主要内容如下&#xff1a;前言我们都在讨论分布式&#xff0c;特别是面试的时候&#xff0c;不管是招初级软件工程师还是高级&#xff0c;都会要求懂分布式&#xff0c;甚至要求用过。传得沸沸扬扬的分布式到底是什么东东&#xff0c;有什么优势&#xff1f;借用火影忍术风…

斗胆推荐一款刚出的微服务网关

前言 使用 API 网关作为内部服务面向客户端的单一入口&#xff0c;是一种普遍采用的架构模式。企业组织通过良好定义的 API 将内部系统向内部和外部用户公开&#xff0c;通常都会采用 API 网关来处理横向的关注点&#xff0c;包括访问控制、速率限制、负载均衡等等&#xff0c…

js删除数组中的某个对象

var keyid str6-986; var tableData [{Id:6789-201,Type:试产},{Id:str6-986,Type:量产},{Id:o786-112,Type:试产} ]; for(var i0; i<tableData.length; i){if(tableData[i].Id keyid){tableData.splice(i,1);} } console.log(tableData);

那些年,我们踩过的 Java 坑

前言 中国有句老话叫"事不过三"&#xff0c;指一个人犯了同样的错误&#xff0c;一次两次三次还可以原谅&#xff0c;超过三次就不可原谅了。有人指出这个“三”是虚数&#xff0c;用来泛指多次&#xff0c;所以"事不过三"不包括“三”。至于"事不过…

基于 Layui 的富文本编辑器和封面的实现方案

文章目录 前言素材文件1. 富文本编辑器的实现步骤1.1 添加 layui 表单行1.2 导入富文本必须的 script 脚本1.3 初始化富文本编辑器2. 图片封面裁剪的实现步骤2.1 导入 cropper.css 样式表2.2 导入 js 脚本2.3 添加表单行结构2.4 美化样式2.5 实现基本裁剪效果3. 更换裁剪的图片…

Google排名第一的语言,引数十万人关注:搞定它,技术大牛都甘拜下风

毋庸置疑&#xff0c;Python越来越被认可为程序员新时代的风口语言。无论是刚入门的程序员&#xff0c;还是年薪百万的 BATJ 的大牛都无可否认&#xff1a;Python的应用能力是成为一名码农大神的必要项。 所以&#xff0c;很多程序员把Python当做第一语言来学习。 但对于Python…

Vue生命周期中mounted和created的区别

一、什么是生命周期&#xff1f; 用通俗的语言来说&#xff0c;就是Vue中实例或者组件从创建到消灭中间经过的一系列过程。虽然不太严谨&#xff0c;但是也基本上可以理解。 通过一系列实践&#xff0c;现在把所有遇到的问题整理一遍&#xff0c;今天记录一下created和mounted的…

高并发库存秒杀场景,阿里巴巴数据库是这样应对的

简单库存场景的数据库实现 一般来说&#xff0c;从数据库层面讲&#xff0c;库存业务会分为两步&#xff0c;第一步是插入一条记录到扣减明细表inventory_detail&#xff0c;第二步是对库存扣减表inventory的一条记录进行扣减&#xff0c;这两步往往是在一个事务中实现的。 数…

Node.js 入门详解(一)

目录 前言1. 初识 Node.js1.1 回顾与思考1.2 Node.js 简介1.2.1 什么是Node.js1.2.2 Node.js 中的 JavaScript 运行环境1.2.3 Node.js 可以做什么1.2.4 学习路径1.3 Node.js环境安装1.3.1 查看已安装的Node.js版本号1.3.2 什么是终端1.4 Node.js 环境中执行 JavaScript 代码1.4…

国产数据库存储引擎X-Engine的科研之路

X-Engine是阿里云RDS MySQL 的存储引擎之一&#xff0c;基于Log-structured Merge Tree (LSM-tree)&#xff0c;较基于 B-tree 一族的其它存储引擎而言年轻很多&#xff0c;所以在实践中遇到问题也更多&#xff0c;对研究的需求也更大。 LSM-tree是1996 年美国计算机科学家 Pa…

Vue刷新当前页面几种方式

问题: 最近些日子项目中突然碰到了一个需求&#xff0c;再完成编辑操作之后需要进行页面刷新&#xff0c;通过实验有如下几种姿势可以解决需求中的问题&#xff0c;下面进行简单总结如下。 姿势一&#xff1a;this.$router.go(0) 这个姿势是利用了 history 中前进和后退的功能&…

【我想进大厂】Redis夺命连环11问

来源 | 科技缪缪责编 | Jerry说说Redis基本数据类型有哪些吧字符串&#xff1a;redis没有直接使用C语言传统的字符串表示&#xff0c;而是自己实现的叫做简单动态字符串SDS的抽象类型。C语言的字符串不记录自身的长度信息&#xff0c;而SDS则保存了长度信息&#xff0c;这样将获…