在过去的几年里,机器学习得到了巨大的发展。但是,机器学习作为一门年轻的学科,其团队的管理方式却更加年轻。今天,许多机器学习经理被推到管理岗位是出于需求,或者是因为他们是最好的个人贡献者,而且其中许多人来自纯学术背景。在一些公司,工程或产品负责人被指派在没有任何机器学习实战经验的情况下构建新的机器学习功能。
管理任何技术团队都很困难:
你必须雇用优秀的人才。
你需要管理和提升他们
你需要管理团队的输出,并确质量过关
你想要做出良好的长期技术选择,管理技术债务
你还必须管理来自领导层的期望
然而,运行一个机器学习团队更加困难:
机器学习人才昂贵且稀缺
机器学习团队有一系列不同的角色
机器学习项目时间表不明确,具有高度的不确定性
机器学习也是「高息信用卡的技术债」
领导层通常不理解机器学习
我最近参加了加州大学伯克利分校的全堆栈深度学习训练营(https://fullstackdeeplearning.com/november2019/ ),这是一门教授全堆栈生产深度学习的精彩课程。Josh Tobin 教授的一个讲座提供了关于机器学习团队的最佳实践。出于对 Josh 演讲的尊重,这篇文章将给出其中的一些观点,如果你是一个管理者,这可能会帮助你思考如何建立和管理机器学习团队;如果你是一个求职者,它也可能帮助你在机器学习领域找到一份工作。
PS,你也可以直接观看演讲视频:https://www.youtube.com/watch?v=Qb3RhwNb4EM&list=PL1T8fO7ArWlcf3Hc4VMEVBlH8HZm_NbeB&index=8&t=0s
步骤 1:角色定义
让我们看看最常见的机器学习团队的角色及其所需的技能:
机器学习产品经理是与机器学习团队、其它业务职能部门以及用户打交道的人。他们负责设计文档,创建线框图,提出执行机器学习项目的计划和优先级。
开发工程师是部署和监视产品系统的人,负责运行已部署的机器学习产品的基础架构。
数据工程师是构建数据管道,从数据存储中聚合和收集、监视数据行为的人,他们将使用分布式系统,如 Hadoop、Kafka、Airflow。
机器学习工程师是训练和部署预测模型的人,他们使用 TensorFlow 和 Docker 等工具处理生产中运行在真实数据上的预测系统。
机器学习研究员是训练预测模型的人,但这个模型通常是前瞻性的,或者和生产不会有紧密联系。他们使用 TensorFlow/PyTorch/Jupiter 来建立模型,并用报告来描述他们的实验。
数据科学家实际上是上述所有角色的总括。在一些组织中,这个角色需要通过分析来回答业务问题。
图片来自 2019 年 11 月 Josh Tobin 的 FSDL 训练营(https://fullstackdeeplearning.com/novenmber2019/ )
那么,这些角色需要什么技能呢?上面的图对此进行了描述,其中水平轴是机器学习技能的水平,而气泡的大小是沟通和技术写作的水平,气泡越大表示能力越高。
机器学习开发工程师主要是软件工程师。
数据工程师属于软件工程团队,与机器学习团队积极合作。
机器学习工程师需要机器学习和软件工程技能的组合。他们要么是具有优秀自学能力的工程师,要么是毕业后从事传统软件工程师工作的科学或工程博士。
机器学习研究员是机器学习专家,通常拥有计算机科学或统计学硕士、博士学位,或完成有奖金的工业项目的人。
机器学习产品经理和传统的产品经理一样,对机器学习的发展过程和思维方式有着深刻的认识。
数据科学家的角色构成非常广泛,包含了从本科到博士背景的人。
步骤 2:组建团队
关于构建一个机器学习团队的正确方法还没有达成共识,但决于不同的组织原型和他们的机器学习成熟度水平,有一些最佳实践。首先,让我们看看不同的机器学习组织原型是什么。
原型1:初创和临时 ML 团队
这些组织中没有人在做机器学习,或者机器学习是在特别的基础上完成的。显然,公司内部很少有机器学习方面的专业知识。
这些企业要么是中小型企业,要么是教育或物流等机器学习技术含量较低的大型企业。
对于机器学习来说,经常有技术含量很低的事情。
但对机器学习项目的支持很少,很难聘用和留住优秀的人才。
原型 2:研究与开发 ML 的团队
这些组织的机器学习工作集中在研发部门。他们经常雇佣机器学习研究人员和有发表论文经验的博士生。
这些都是石油、天然气、制造业或电信等行业的大公司。
他们可以聘请有经验的研究人员,并致力于长期的商业优先事项,以获得巨大的成功。
然而,他们很难获得高质量的数据。大多数情况下,这种类型的研究工作很少转化为实际的商业产品,因此通常投资额仍然很小。
原型3:嵌入产品的 ML 团队
在这些组织中,某些产品团队或业务部门除了软件或分析师人才外,还拥有机器学习专业知识。这些机器学习人员向团队的工程或技术主管汇报。
这些公司不是软件公司就是金融服务公司。
机器学习的改进可能会带来商业价值。此外,在理念迭代和产品改进之间有一个紧密的反馈周期。
不幸的是,招聘和培养顶尖人才仍然非常困难,数据和计算资源的获取可能会滞后。机器学习项目周期和工程管理之间也存在潜在的冲突,因此长期的机器学习项目很难被证明是合理的。
原型 4:独立的 ML 组织
在这些组织中,机器学习部门直接向高级领导汇报。机器学习产品经理与研究人员和工程师合作,将机器学习构建到面向客户的产品中。他们有时可以发表长期研究报告。
这些通常是大型金融服务公司。
由于人才众多,他们能够雇佣和培训顶尖的从业者。高级领导可以整理数据和计算资源,这使组织能够围绕机器学习开发在工具、实践和文化上进行投资。
其缺点是,将模型切换到不同的业务线可能很有挑战性,因为用户需要学习模型的使用,而且,反馈周期可能很长。
原型 5:ML 优先团队
这些组织都是由 CEO 投资的,整个企业都有专家专注于机器学习。机器学习部门致力于富有挑战性的长期项目。
这些公司包括大型科技公司和以机器学习为重点的初创企业。
他们拥有最好的数据(数据思维渗透到组织中)、最具吸引力的招聘渠道(具有挑战性的机器学习问题往往会吸引顶尖人才)和最简单的部署过程(产品团队对机器学习的理解足够好)。
这种组织原型在实践中很难实现,因为很难在任何地方都嵌入机器学习思想。
根据组织的原型,你可以做出适当的选择,大体上分为以下三类:
软件工程师 vs 研究:机器学习团队在多大程度上负责构建或集成软件?软件工程技能在团队中有多重要?
数据所有权:机器学习团队对数据收集、存储、标记上有多少控制权?
模型所有权:机器学习团队是否负责将模型部署到生产中?谁维护已部署的模型?
以下是设计建议。
如果贵公司专注于机器学习研发:
科研能力绝对优先于软件工程技能。因此,这两个团体之间可能缺乏合作。
机器学习团队无法控制数据,通常也不会有数据工程师来支持它们。
机器学习模型很少用于生产。
如果组织在产品中嵌入了机器学习:
软件工程技能将优先于科研技能。通常,研究人员需要很强的工程技能,因为每个人都会被期望将其模型用到生产中。
机器学习团队一般不掌控数据生产和数据管理。他们需要与数据工程师合作来构建数据管道。
机器学习工程师管理他们部署到生产中的模型。
如果贵公司有独立的机器学习部门:
每个团队都有很强的工程和研究技能,因此他们在团队内紧密合作。
机器学习团队在数据管理的讨论中有发言权,并且具有强大的数据工程能力。
机器学习团队将模型交给用户,但仍负责维护它们。
如果你的组织以机器学习优先:
不同的团队或多或少都是以研究为导向的,但一般来说,研究团队与工程团队紧密协作。
机器学习团队通常拥有公司范围的数据基础设施。
机器学习团队将模型交给用户,由用户操作和维护。
下图清晰地总结了这些建议:
图片来自 2019 年 11 月 Josh Tobin 的 FSDL 训练营(https://fullstackdeeplearning.com/novenmber2019/ )
步骤 3:管理项目
管理机器学习项目可能非常具有挑战性:
根据 Lukas Biewald 的说法,很难事先说出哪里困难,哪里容易。即使在一个领域中,性能也会有很大的波动。
机器学习过程是非线性的。项目停滞数周或更长时间是很常见的。在早期阶段,很难对一个项目进行计划,因为还不清楚什么能起作用。因此,评估机器学习项目的时间线是非常困难的。
由于不同的价值观、背景、目标和规范,研究和工程之间存在文化差异。可能面临的情况是,双方往往不重视彼此。
而且,领导层往往不理解这一点。
那么,如何才能更好地管理机器学习团队呢?秘诀是计划机器学习项目是有可能的!
本质上,从这里开始:
到这里结束:
以下是其他一些不错的做法:
你应该多尝试几种方式。
你应该根据投入而不是结果来衡量进度。
你应该让研究人员和工程师一起工作。
你应该快速地将端到端的管道连接起来,以展示进度。
你应该让领导层意识到机器学习时间线的不确定性。
步骤 4:雇佣人才
Element AI 的这份 2019 年全球人工智能人才报告(https://www.elementai.com/news/2019/2019-global-ai-talent-report )表明,顶级人工智能人才的供应无法满足需求。在人工智能研究的前沿领域,大约有 2.2 万人积极发表论文并出席学术会议。只有大约 4000 人参与了对整个领域有重大影响的研究。共有 36500 人获得了人工智能专家的称号。相比之下,美国和全球的软件开发人员分别为 420 万和 2640 万。
1.如何培养机器学习人才?
以下是雇佣机器学习工程师的一些策略:
雇佣具有软件工程技能,对机器学习有浓厚的兴趣,对学习的渴望非常强烈的人。然后你可以带领他们走上机器学习之路。
考虑到现在大多数计算机科学本科学生毕业时都有机器学习经验,所以设置初级职位。
对你需要的技能要非常具体。例如,并不是每个机器学习工程师都需要做软件开发人员。
以下是雇佣机器学习研究人员的策略:
寻找出版论文质量高,而不是数量多的人。
寻找有眼光解决重要问题的研究人员。许多研究者把注意力集中在流行的问题上,却没有考虑它们的重要性。
寻找有实践经验的研究人员。
考虑从邻近的领域如数学、物理和统计学领域招聘人才。
考虑雇佣没有博士学位的人。例如,有才华的本科生和硕士生,工业奖学金项目(Google、Facebook、OpenAI)的毕业生,以及自学能力很强的人。
你如何第一时间找到这些人?
有一些标准来源,如 LinkedIn、recruiters,以及参加大学的招聘会。
你应该参加为机器学习研究人员举办的有名的机器学习研究会议(NeurIPS,ICLR,ICML)和为机器学习工程师举办的著名应用机器学习会议(O'Reilly,ReWork,TensorFlow World)。
你可以关注 ArXiv,找到令人印象深刻的研究论文,并与第一作者联系。
出于长期战略,你需要考虑如何吸引这些人才:
由于机器学习实践者希望使用尖端的工具和技术,你的公司应该致力于面向研究的项目,通过博客发布这些项目,并为你的机器学习团队投资工具和基础设施。
由于机器学习从业者希望在令人兴奋的领域建立技能和知识,贵公司应建立团队文化。
由于机器学习从业者希望与优秀的人一起工作,你的公司应该雇佣知名度高的人,并且通过发布博客和论文帮助这些人创建影响力。
由于机器学习的从业者想要处理有趣的数据集,你的公司应该在招聘材料中突出你们的数据集的独特性。
由于机器学习实践者想做重要的工作,你的公司应该突出公司的使命和机器学习对这些使命的潜在影响。更重要的是,你应该致力于有实际影响力的项目。
2.如何面试机器学习候选人?
那么在机器学习面试中你应该考虑什么呢?
第一件事是验证你对候选人优势的设想。对于机器学习研究人员来说,要确保他们能够创造性地思考新的机器学习问题,并考察他们对以前的项目有多投入,确保他们是具有扎实工程技能的优秀多面手。
第二件事是确保候选人在他们不擅长的领域也能达到最低要求标准。对于机器学习研究人员来说,测试他们的工程知识和编写好代码的能力;对于机器学习工程师来说,测试他们简单的机器学习知识。
与传统的软件工程面试相比,机器学习面试的定义要差得多,但以下是常见的考察方面:
背景与文化的契合度
编码
机器学习特定代码的编写和调试
数学难题
自己在家做的项目
应用机器学习的能力(例如,解释如何用机器学习解决问题)
以前的项目(方法、试验和错误、结果)
机器学习理论
3.如何找到一份机器学习的工作?
假设你是一个机器学习的面试者,正在阅读这篇文章。你可能会问:「我应该在哪里找到机器学习的工作?」
同样底,你可以使用像 LinkedIn、recruiters 和校内招聘这样的标准资源。
你可以参加机器学习研究会议,与那里的人建立联系。
你也可以直接在公司的门户网站申请,记住,人才缺口很大!
找工作当然不容易,但有两种方法可以让你脱颖而出:
通过 CS 课程或工作经验建立常用的软件工程技能。
通过参加会议或参加 MOOC,表现出对机器学习的兴趣。
通过某些方式表明你对机器学习有广泛的知识。例如,写某个研究领域的博客文章。
展示完成机器学习项目的能力。例如,你可以创建辅助项目或重新完成论文中的项目。
证明你能在机器学习中创造性地思考。例如,在 Kaggle 竞赛中赢得名次或发表论文。
为了准备面试,你应该:
使用诸如 Cracking The Coding Interview 之类的资源进行一般软件工程面试的实践。
准备关于你过去的项目的详细讨论,包括你所做的权衡和决定。
回顾机器学习理论和基本的机器学习算法。
创造性地思考如何使用机器学习来解决你面试的公司可能面临的问题。
我还建议你看看这张来自 Chip Huyen 在训练营上的幻灯片(https://twitter.com/chipro/status/1196232680364376064 ),其中包括机器学习面试过程中的一些重要经验。
结论
对于大多数传统组织来说,组建机器学习团队是一门新的、不断发展的学科,充满了已知和未知的挑战。如果你是直接跳到最后,这里是几点总结:
生产机器学习涉及到许多不同的技能,因此许多人都有机会做出贡献。
机器学习团队变得越来越独立,越来越跨学科。
管理机器学习团队是很困难的。虽然没有灵丹妙药,但向概率规划转变可能会有所帮助。
机器学习人才匮乏。作为一名管理者,在机器学习的招聘信息描述中要明确哪些技能是必须具备的。作为一个求职者,闯入这一领域可能是一个残酷的挑战,所以要用项目证明自己。
希望这篇文章能为你提供有用的信息,帮助你高效地构建机器学习团队。
雷锋网雷锋网雷锋网