[关闭]
@sambodhi 2018-07-25T12:39:07.000000Z 字数 4861 阅读 1905

机器学习从业者实际上在做什么?

作者|Rachel Thomas
译者|Sambodhi
编辑|Vincent

AI前线导读:这几年机器学习越来越火了。但是,如果你真的跳进了机器学习这个坑,可能很快你就会发现,研发和部署机器学习系统相对来说,既快速又便宜,但是维护它们却很困难,而且成本昂贵。来自fast.ai的Rachel Thomes分享了一篇博文,给我们讲述了机器学习从业者实际上到底在做什么。

本文是三部分系列文章的第1部分。第2部分将阐述AutoML和神经结构搜索(neural architecture search),第3部分将特别介绍Google大肆宣传的AutoML。

关于机器学习急缺人才的报道、以及公司声称自己的产品已实现机器学习自动化并无需机器学习专业知识的承诺,经常见诸报端。在TensorFlow DevSummit的主题演讲中,Google的人工智能负责人Jeff Dean估计,有数千万家组织拥有可用于机器学习的电子数据,但缺乏必要的专业知识和技能。由于我在fast.ai的工作重心是让更多人使用机器学习并使其更易于使用,因此我密切关注这些问题。

在考虑如何使机器学习的一些工作实现自动化,以及如何使有着各自不同背景的人们更容易接触机器学习的技术,首选需要问的是,机器学习从业者到底是做什么的?任何用于解决机器学习专业知识短缺的解决方案都需要回答这个问题:我们是否只到应该教授什么技能,构建什么工具,或者将什么过程实现自动化。

What do machine learning practitioners do? (Source: #WOCinTech Chat)

机器学习从业者到底是做什么的?(图:#WOCinTech Chat)

构建数据产品是一项复杂的工作

虽然在学术上来说,许多机器学习资源几乎都是只关注预测建模,但这只是机器学习从业者日常所做的事情之一。适当地构建业务问题、收集和数据清洗、构建模型、实施结果,然后监控变化,这一过程在许多方面是相互关联的,往往很难通过单一部分就能满足(至少不知道其他部分需要什么)。正如Jeremy Howard在《Designing great data products》一文中提到的那样:出色的预测建模是解决方案的重要组成部分,但它不再是独立的存在;随着产品变得越来越复杂,它会消失在管道中。

Building Data Products is Complex Work (Source: Wikimedia Commons)

构建数据产品是一项复杂的工作(图:Wikimedia Commons)

一支来自Google的团队,成员D.Sculley等人撰写了一篇经典的文章:《Machine Learning: The High-Interest Credit Card of Technical Debt》(http://u6.gg/dR4e6),这篇文章讲的是关于在实践中使用机器学习时经常产生的代码复杂性和技术负债(technical debt)。作者在文章中,确定了一些系统级的交互、风险和反面模式(anti-patterns),包括:

AI前线注: 技术负债(technical debt),比喻由漫无计划的软件架构,或者匆忙的软件开发引起的后果。又称为设计负债。1992年,沃德·坎宁安首次将技术的复杂比作为负债。第一次发布代码,就好比借了一笔钱。只要通过不断重写来偿还负债,小额负债便可以加速开发。但久未偿还负债会引发危险。复用马马虎虎的代码,类似于负债的利息。整个部门有可能因为松散的实现,不完全的面向对象的设计或其他诸如此类的负债而陷入窘境。
反面模式(anti-patterns),在软件工程中,一个反面模式(anti-pattern或antipattern)指的是在实践中明显出现但又低效或是有待优化的设计模式,是用来解决问题的带有共同性的不良方法。它们已经经过研究并分类,以防止日后重蹈覆辙,并能在研发尚未投产的系统时辨认出来。

文章作者写道,真实世界中的机器学习工作的重要部分之一就是致力于解决这种形式的问题。值得注意的是,粘合代码和管道丛林是集合问题表现出来的症状,根源可能是“研究”和“工程”角色过于分离。学术界可能会惊讶地发现:许多机器学习系统中,只有一小部分代码用来进行“机器学习”。

AI前线注: 粘合代码(glue code),亦称胶水代码。用途是粘合那些可能不兼容的代码。可以使用与搅合在一起的代码相同的医院编写,也可以用单独的胶水语言编写。粘合代码不识闲程序要求的任何功能,通常出现在代码中,使现有的库或者程序在外部函数接口(如Java本地接口)中进行交互操作。粘合代码在快速原型开发环境中非常高效,可让几个组件被快速集成到单个语言或者框架中。由于一个成熟的机器学习系统可能最终会包含(最多)5%的学习代码和(最少)95%的粘合代码,创建一个干净纯粹的解决方案比重复使用通用软件包成本要更低。
管道丛林(pipeline jungles)是粘合代码的一种特殊情况,经常出现在数据预备阶段。随着新信号逐渐被鉴定、新信息资源逐渐被添加,管道丛林也有机地发展起来。

当机器学习项目失败时

在之前的一篇文章中,我指出了一些机器学习项目在工作场所没有效果的失效模式:

在之前的文章中,我将这些视为组织上的失败,但也可以将它们视为各种从业者过度关注构成完整数据产品的复杂系统的一部分。这些是数据产品管道不同部分之间沟通和目标对齐的失败。

那么,机器学习从业者都做些什么呢?

如上所述,构建一个机器学习产品是一项多方面的复杂任务。以下是机器学习从业者在这个过程中可能需要做的一些事情:

理解上下文:

数据:

建模:

产品化:

监控:

当然,并非每个机器学习从业者都需要完成上述所有步骤,但这个过程的许多部分将是许多机器学习应用的一部分。即使你只是处理这些步骤的一部分,但熟悉过程的其余部分也有助于确保你不会忽视那些会使你的项目无法成功的注意事项!

机器学习中最困难的两个部分

就我自己和我所认识的许多人来说,我要强调机器学习(特别是深度学习)中,最耗时、最令人沮丧的两个方面是:

  1. 处理数据格式化、不一致和错误,通常是一个混乱、乏味的过程。
  2. 众所周知,训练深度学习模型是一个脆弱的过程。

数据清洗真的是机器学习的一部分吗?是的!

处理数据格式化、不一致和错误通常是一个混乱且乏味的过程。有时候,人们将机器学习描述为独立于数据科学的过程,就像机器学习一样,你可以从已经精心清洗过的格式化数据集开始。但根据我经验,清洗数据集和训练模型的过程,通常是交织在一起的:我经常在训练模型中发现问题,就返回去更改输入数据的预处理。

Dealing with messy and inconsistent data is necessary

处理杂乱和不一致的数据是必要的

目前,深度学习模型的训练是脆弱且挑剔的

训练模型的困难程度之大,让许多初学者望而却步,他们常常感到灰心丧气。甚至专家也经常抱怨,训练模型的过程变化无常,实在令人沮丧。斯坦福大学的一位人工智能研究院告诉我,他所教的深度学习课程,让所有学生都做自己的项目,真是太难了。学生们无法让他们的模型进行训练,我们却说:“看,这就是深度学习。”Ali Rahimi在NIPS颁奖演讲中,抱怨了模型训练的脆弱性。他是一名拥有超过10年的经验的人工智能研究员,获得了NIPS 2017 Test of Time Award奖。Rahimi向人工智能研究人员的听众提问:“你们当中,有多少人从头开始设计一个深度网络,从零开始构建所有的东西,当它没起作用的时候,心情会感到槽糕?”很多人举起了手。Rahimi继续说道:“这种情况啊,大概每三个月就会发生在我身上。”

即使是人工智能专家有时也难以训练出新模型这一事实意味着,这个过程并没有自动化,在某种程度上它应该可以被整合到通用的产品中。深度学习的一些最大进步将来自于发现更强大的训练方法。我们现在已经目睹了一些进步,像Dropout、超收敛和迁移学习,所有这些使得训练变得更容易。通过迁移学习的力量,当为一个足够狭窄的问题域定义时,模型训练可以是一个健壮的过程;然而,我们仍然有办法让模型训练更加健壮。

给学术研究人员的话

即使你正从事机器学习理论研究,了解机器学习从业者处理实际问题的过程也是很有用的,因为这可能会为你提供有关最相关或最具影响力的研究领域见解。

Google工程师D.Sculley等人写道,技术负债是工程师和研究人员都需要注意的问题。以大幅增加系统复杂性为代价来换取微小的精度优势的研究解决方案,很少是明智的做法。降低技术负债并不总是像证明新定理那样令人兴奋,但它是持续强劲创新的关键部分。为复杂的机器学习系统开发整体、优雅的决绝方案是非常有益的工作。

AutoML

现在,我们已经对机器学习从业者在其工作中所做的一些任务进行了总结,我们已经准备好尝试对自动化工作进行评估。顾名思义,AutoML是一个专注于自动化机器学习的领域,而AutoML的子领域,名为神经结构搜索,目前正受到大量关注。在本系列的第2部分中,我将阐述什么是AutoML和神经结构搜索。在第3部分中,我将特别介绍Google的AutoML。敬请期待!

原文链接: What do machine learning practitioners actually do?
http://www.fast.ai/2018/07/12/auto-ml-1/

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注