机器学习从业者究竟做什么?

技术
作者

Rachel Thomas

发布于

2018年7月12日

本文是本系列文章的第一部分。第二部分 将对AutoML和神经架构搜索进行有偏见的介绍,而第三部分 将特别关注Google的AutoML。

媒体头条频繁报道关于机器学习人才短缺(参见此处此处此处)以及公司声称其产品能自动化机器学习并完全消除对机器学习专业知识的需求(参见此处此处此处)。在TensorFlow开发者峰会上,Google人工智能负责人Jeff Dean估计,有数千万个组织拥有可用于机器学习的电子数据,但缺乏必要的专业知识和技能。我密切关注这些问题,因为我的工作 在fast.ai 专注于让更多人能够使用机器学习,并使其更容易使用。

在思考如何自动化机器学习的一些工作,以及如何使其对更广泛背景的人群更易于访问时,首先需要问:机器学习从业者究竟做什么? 解决机器学习专业人才短缺的任何方案都需要回答这个问题:无论是为了知道应该教授哪些技能、构建哪些工具,还是自动化哪些流程。

机器学习从业者做什么?(来源:#WOCinTech Chat)

本文是3部分系列文章的第一篇。它将探讨机器学习从业者究竟做什么,第二部分将解释AutoML和神经架构搜索(一些知名人士认为这将是减少对数据科学家需求的重点),第三部分将特别介绍Google备受热捧的AutoML产品。

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

虽然许多学术界的机器学习资料几乎完全专注于预测建模,但这仅仅是机器学习从业者在实践中所做工作的一部分。适当构建商业问题、收集和清理数据、构建模型、实现结果以及随后监控变化等过程在许多方面相互关联,这常常使得很难将某个单一环节独立出来(除非至少了解其他环节的内容)。正如Jeremy Howard et al. 在设计优秀数据产品中所写:优秀的预测建模是解决方案的重要组成部分,但它不再孤立存在;随着产品变得越来越复杂,它会融入到基础架构中。

构建数据产品是一项复杂的工作(来源:维基共享资源)

Google团队的D. Sculley等人撰写了经典文章机器学习:技术债务的高息信用卡,探讨了在实践中使用机器学习时经常产生的代码复杂性和技术债务。作者指出了许多系统层面的交互、风险和反模式,包括

作者写道:现实世界中相当一部分“机器学习”工作致力于解决这类问题……值得注意的是,胶水代码和管道丛林是集成问题的症状,其根本原因可能在于“研究”和“工程”角色过度分离……学术界可能会惊讶地发现,在许多机器学习系统中,只有极少一部分代码真正在做“机器学习”(我的强调)

当机器学习项目失败时

之前的一篇文章中,我指出了一些导致机器学习项目在实际工作中无效的失败模式

我在原文章中将这些视为组织失败,但它们也可以被描述为不同参与者过度关注构成完整数据产品的复杂系统中的某个单一环节。这些是数据产品管道不同部分之间沟通和目标未能对齐的失败。

那么,机器学习从业者究竟做什么?

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

理解背景:

数据: - 规划收集更多不同类型的数据(如果需要且可能) - 整合来自许多不同来源的数据:这些数据通常以不同的格式或不一致的约定收集 - 处理丢失或损坏的数据 - 可视化数据 - 创建适当的训练集、验证集和测试集

建模: - 选择要使用的模型 - 将模型资源需求适配到约束条件(例如,完成的模型是否需要在边缘设备、低内存或高延迟环境中运行等) - 选择超参数(例如,在深度学习中,这包括选择架构、损失函数和优化器) - 训练模型(并调试为什么无法训练)。这可能涉及: - 调整超参数(例如学习率) - 输出中间结果以查看损失、训练误差和验证误差随时间如何变化 - 检查模型出错的数据以寻找模式 - 识别数据中潜在的错误或问题 - 意识到需要改变数据清理和预处理方式 - 意识到需要更多或不同的数据增强 - 意识到需要更多或不同的数据 - 尝试不同的模型 - 识别是否出现欠拟合或过拟合

生产部署: - 创建一个API或Web应用,将模型作为端点进行生产部署 - 将模型导出为所需的格式 - 规划模型需要多久使用更新的数据进行再训练(例如,可能每晚或每周进行再训练)

监控: - 跟踪模型随时间的变化 - 监控输入数据,识别其随时间的变化是否会导致模型失效 - 向组织其他部门沟通你的结果 - 制定计划如何监控并响应错误或意外后果

当然,并非所有机器学习从业者都需要完成以上所有步骤,但此过程中的组成部分将是许多机器学习应用的一部分。即使你只负责其中一部分步骤,熟悉整个过程也将有助于确保你不会忽视可能导致项目失败的因素!

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

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

  1. 处理数据格式、不一致和错误通常是一个混乱且乏味的过程。
  2. 目前训练深度学习模型是一个出了名的脆弱过程

数据清理真的是机器学习的一部分吗?是的。

处理数据格式、不一致和错误通常是一个混乱且乏味的过程。人们有时会将机器学习描述为与数据科学分离的,仿佛对于机器学习,你可以直接从一个清理干净、格式良好的数据集开始。然而,根据我的经验,清理数据集和训练模型的过程通常是交织在一起的:我经常在模型训练中发现问题,这导致我不得不回去修改输入数据的预处理过程。

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

训练深度学习模型是脆弱且挑剔的(目前而言)

让模型能够成功训练的困难劝退了许多初学者,他们常常感到沮丧。即使是专家也经常抱怨训练过程有多么令人沮丧和反复无常。一位斯坦福的AI研究员告诉我:“我教了一门深度学习课程,让所有学生都做自己的项目。太难了。学生们无法让他们的模型训练起来,我们就说:“好吧,这就是深度学习。”” Ali Rahimi,一位拥有十多年经验的AI研究员,也是NIPS 2017时间考验奖(Test of Time Award)的得主,在他的NIPS获奖演讲中抱怨了训练过程的脆弱性。“你们中有多少人从零开始设计了一个深度网络,从头构建了它,包括架构等等,而当它不起作用时,你对自己感到很失望?” Rahimi问台下的AI研究员听众,许多人举起了手。Rahimi继续说道:“这种情况大约每3个月就会发生在我身上。

即使是AI专家有时也难以训练新模型这一事实意味着,训练过程尚未以一种能够集成到通用产品中的方式实现自动化。深度学习的一些最大进展将通过发现更鲁棒的训练方法来实现。我们已经看到了一些进展,例如dropout、超收敛和迁移学习,所有这些都使训练更容易。通过迁移学习的力量(将在第三部分讨论),当为足够狭窄的问题领域定义时,训练可以是一个鲁棒的过程;然而,我们在使训练在普遍意义上更鲁棒方面还有很长的路要走。

对于学术研究人员

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

正如Google工程师D. Sculley et al. 所写技术债务是一个工程师和研究人员都需要意识到的问题。以系统复杂度大幅增加为代价来换取微小精度提升的研究方案很少是明智的做法……偿还技术债务并不总是像证明一个新定理那样令人兴奋,但它是持续强大创新的关键部分。为复杂的机器学习系统开发整体、优雅的解决方案是一项极具回报的工作。(我的强调)

AutoML

既然我们已经大致了解了机器学习从业者在工作中需要完成的一些任务,我们就可以开始评估自动化这项工作的尝试了。正如其名称所示,AutoML是特别专注于自动化机器学习的一个领域,而AutoML的一个子领域,称为神经架构搜索,目前正受到极大的关注。在第二部分,我将解释AutoML和神经架构搜索是什么,在第三部分,我将特别探讨Google备受吹捧的AutoML产品。

务必查阅第二部分:AutoML神经架构搜索的有偏见介绍,以及第三部分:Google的AutoML:看穿炒作