“机器学习还是很难用!”
作者头像
  • 2020-09-05 09:38:23 0

机器学习一直以来都显得难以驾驭,但现在情况有所改善。

作为一名Cortex项目的贡献者,我要强调的是,下面的内容是基于我观察到的一些机器学习团队的实际经验,并不是一份严格的行业调研报告。

让我们用一个在软件行业中无处不在的例子来说明:数据库。对于一位Postgres的贡献者来说,创建一个数据库可能涉及一百万行C代码。然而,对于一个Rails开发者来说,创建数据库可能只是一个简单的命令:rake db:create。

这并不是说其中任何一个观点是错误的,而是它们从不同的角度看待问题。软件构建本身就是如此。支持早期应用的基本软件,如数据库、Web服务器、请求路由和哈希库等,在很大程度上已经普及,因为它们的抽象层使得非专业人士也能使用。

机器学习领域一直缺乏这种抽象层,从而阻碍了其广泛应用。但如今,情况正在改变。一系列旨在让机器学习更易于使用的项目正在涌现。

机器学习需要一个对开发者更友好的界面

要在生产环境中应用机器学习,你需要: - 模型设计的专业知识 - 足够的数据和资金来训练模型 - ML基础设施知识(用于部署模型)

这样的结果是,任何应用机器学习的项目都需要多位专家共同参与。这是一个亟需解决的瓶颈。

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

幸运的是,这种情况正在改变。

弥补机器学习抽象层的缺失

为了让机器学习更普及,开发者需要对机器学习有一定程度的理解,并能通过现有的抽象层来构建应用。

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

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

理想情况下,对于许多机器学习应用场景,根本不需要从零开始训练新模型。

例如,如果你正在开发一个聊天机器人,几乎可以肯定的是,Google的Meena会比你的模型表现更好。如果你正在开发一个文本生成器,那么使用OpenAI的GPT-2会比自己从头开始构建要好得多。对于物体检测,YOLOv3可能是最佳选择。

借助迁移学习(即在新领域中微调神经网络的知识),你可以使用相对较少的数据来调整这些开源的最新模型。

例如,使用gpt-2-simple这样的新库,你可以通过简单的命令行界面来微调GPT-2: sh $ gpt_2_simple finetune your_custom_data.txt 这样,开发者就不需要深入了解ML的专业知识,只需要知道如何进行微调即可。

此外,还有许多其他可用的训练抽象。例如,Google Cloud AutoML为用户提供了一个图形用户界面(GUI),可以自动训练新模型,而无需编写代码。

2. 生成预测的过程需要简化

假设已经可以轻松获得一个训练好的模型。那么,如何根据该模型生成预测呢?

有许多项目可以提供模型服务功能,其中许多与流行的ML框架相关。例如,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' model = Summarizer() summary = model(body) 使用这个库生成预测的过程就像导入一个库并调用一次函数一样简单。

随着更多此类项目的推出,开发者无需深入了解模型本身,就可以更轻松地生成预测。

3. 部署模型需要简化

最后的瓶颈在于基础设施。

为一个小规模的应用提供预测是简单且直接的,但当应用需要扩展时,情况就会变得复杂。以GPT-2为例: - GPT-2超过5GB,需要更大的服务器来托管。 - GPT-2非常消耗计算资源。为了提供单个预测,GPT-2可能需要几分钟的CPU时间,即使有GPU,单个预测也可能需要几秒钟。 - GPT-2也非常消耗内存。除了巨大的存储和计算需求外,GPT-2还需要大量内存才能正常运行。

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

你需要掌握一整套工具才能搭建出一个可以处理机器学习部署的基础架构,而大多数没有专业背景的开发者对这些工具并不熟悉。

机器学习基础设施的技术栈

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

Cortex通过一个配置文件和一个命令行界面来抽象模型部署的基础开发。

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

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

我想澄清的一点是,机器学习背后的数学原理将永远是复杂的。仅仅调用一个predict函数并不能使一个人成为机器学习专家。关键在于,开发者不必成为机器学习专家,也可以在自己的应用中使用ML。

机器学习生态系统终于开始重视简化应用型ML的问题。只需具备基本的机器学习知识,开发者就可以微调最新的模型,将其封装在API中,并通过开源且直观的抽象层部署在可扩展的基础设施上。

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

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