在过去的几年里,机器学习有了巨大的发展。作为一门学科,机器学习还不成熟,机器学习团队的管理技艺就更不成熟了。当今,许多机器学习管理人员都是被迫进入管理岗位的,要么是出于需要,要么是因为他们是最好的个人贡献者,而许多人纯粹是因为其学术背景。在一些公司,工程师或产品负责人没有任何真正的机器学习经验,就承担起了构建新的机器学习功能的任务。
本文最初发布于JAMES LE博客,经原作者授权由 InfoQ 中文站翻译并分享。
在过去的几年里,机器学习有了巨大的发展。作为一门学科,机器学习还不成熟,机器学习团队的管理技艺就更不成熟了。当今,许多机器学习管理人员都是被迫进入管理岗位的,要么是出于需要,要么是因为他们是最好的个人贡献者,而许多人纯粹是因为其学术背景。在一些公司,工程师或产品负责人没有任何真正的机器学习经验,就承担起了构建新的机器学习功能的任务。
管理任何技术团队都不容易:
你必须招聘优秀的人才。
你需要管理和培养它们。
你需要管理团队的输出,并确保你们目标一致。
你会希望做好长期的技术选择并管理技术债务。
你还必须设法实现来自领导层的期望。
管理机器学习团队更难:
机器学习人才既昂贵又稀缺。
机器学习团队有各种各样的角色。
机器学习项目的时间表不明确,不确定性高。
机器学习也是“技术债务的高息信用卡”。
领导通常不理解机器学习。
我最近参加了 UC Berkeley 的全栈深度学习训练营,这是一门非常棒的课程,教授全栈生产级深度学习。其中,Josh Tobin的讲座提供了关于机器学习团队的最佳实践。本文内容节选自 Josh 的讲座。如果你是一名管理人员,本文将为你提供一些关于如何考虑建立和管理机器学习团队的见解,如果你是一名求职者,本文也可能帮助你在机器学习领域找到一份工作。
1 - 定义角色
让我们看看最常见的机器学习角色以及这些角色需要的技能:
机器学习产品经理与机器学习团队、其他业务职能部门以及最终用户一起工作。此人负责设计文档,创建线框图,制定计划,确定机器学习项目的优先级并执行。
DevOps 工程师负责部署和监控生产系统。此人负责运行着机器学习产品的基础设施。
数据工程师负责构建数据管道、从数据存储中聚合和收集数据、监控数据行为……此人使用 Hadoop、Kafka 和 Airflow 等分布式系统。
机器学习工程师负责训练和部署预测模型。此人使用 TensorFlow 和 Docker 等工具来处理生产中运行在真实数据上的预测系统。
机器学习研究人员负责训练预测模型,但通常是前瞻性的或非生产关键的模型。此人使用 TensorFlow/PyTorch/Jupiter 构建模型,生成试验报告。
数据科学家实际上是一个概括性术语,用于描述上述所有角色。在一些组织中,这个角色实际上需要通过分析回答业务问题。
那么这些角色需要什么技能呢?上图是一个很好的说明,横轴是机器学习的专业知识水平,而气泡的大小是沟通和技术写作的水平(越大越好)。
机器学习 DevOps 主要是一个软件工程角色,它通常来自一个标准的软件工程管道。
数据工程师属于与机器学习团队积极合作的软件工程团队。
机器学习工程师需要机器学习和软件工程技能的结合,这很少见。这个人要么是一个自学成才的工程师,要么是一个在研究生毕业后从事传统软件工程师工作的科学/工程博士。
机器学习研究人员是一个机器学习专家,通常拥有计算机科学或统计学硕士或博士学位,或者完成了一个工业奖学金项目。
机器学习产品经理就像传统的产品经理一样,对机器学习的开发过程和思维方式有着深刻的了解。
数据科学家的角色要有从本科生到博士生的广泛背景。
2 - 建立团队
关于建立机器学习团队的正确方法,目前还没有共识,但是有一些根据不同的组织原型及其机器学习成熟度级别而确定的最佳实践。首先,让我们看看这些不同的机器学习组织原型是什么。
原型 1 - 初级的、临时的 ML
这些组织中没有人从事机器学习,或者机器学习是在需要时才做。显然,公司内部几乎没有机器学习的专业人才。
这些企业要么是中小型企业,要么是教育或物流等行业中技术含量较低的大公司。
经常有唾手可得的机器学习成果。
但对机器学习项目的支持很少,很难聘用和留住优秀人才。
原型 2 - 研发 ML
这些组织的机器学习工作集中在组织的研发部门。他们经常雇佣机器学习研究人员和有论文发表经验的博士生。
这些公司都是石油天然气、制造业或电信等行业的大公司。
他们可以聘请经验丰富的研究人员,长期从事重点的业务工作,以获得重大的胜利。
然而,获得高质量的数据非常困难。通常情况下,这类研究工作很少转化为实际的业务价值,因此投资金额通常很小。
原型 3 - 产品嵌入式 ML
在这些组织中,某些产品团队或业务单位除了拥有软件或分析人才外,还拥有机器学习专业知识。这些机器学习人员向团队的工程/技术主管汇报。
它们要么是软件公司,要么是金融服务公司。
机器学习的改进可能会带来业务价值。此外,在创意迭代和产品改进之间存在一个紧密的反馈周期。
不幸的是,招聘和培养顶尖人才仍然非常困难,获取数据和计算资源可能会滞后。机器学习项目周期和工程管理之间也存在潜在的冲突,因此,长期的机器学习项目可能很难证明其正确性。
原型 4 - 独立的 ML 部门
这些机器学习部门是直接向高层领导汇报的组织。机器学习产品经理与研究人员和工程师合作,将机器学习构建成面向客户的产品。他们有时可以公布长期研究。
这些公司通常是大型金融服务公司。
人才密度允许他们雇佣和培训顶级从业者。高层领导可以调度数据和计算资源。这使得组织可以在机器学习开发的工具、实践和文化方面进行投资。
缺点是,模型移交给不同的业务线可能具有挑战性,因为用户需要接受机器学习的好处,并学习模型的用法。此外,反馈周期可能很慢。
原型 5 - ML 优先
在这些组织中,首席执行官投资于机器学习,而整个行业中也有专注于快速成功的专家。机器学习部门从事具有挑战性和长期性的项目。
这个群体包括大型科技公司和以机器学习为重点的初创公司。
他们有最好的数据访问(数据思维渗透到整个组织),最有吸引力的招聘渠道(具有挑战性的机器学习问题往往会吸引顶级人才),以及最简单的部署流程(产品团队对机器学习有足够的了解)。
这种类型的组织原型很难在实践中实现,因为在文化上很难在所有地方都嵌入机器学习思想。
根据你的组织和上面的哪个原型类似,你可以做出适当的设计选择,大致可分为以下三类:
软件工程 vs 研究:机器学习团队在多大程度上负责构建或集成软件?软件工程技能在团队中有多重要?
数据所有权:机器学习团队对数据收集、存储、标识和传输有多少控制?
模型所有权:机器学习团队是否负责将模型部署到生产环境?谁维护已部署的模型?
以下是设计建议……
如果你的组织专注于机器学习研发:
研究绝对要优先于软件工程技能。因此,这两个组之间可能缺乏协作。
机器学习团队对数据没有控制权,通常也没有数据工程师来支持他们。
机器学习模型很少部署到生产中。
如果你的组织已经将机器学习嵌入到产品中:
软件工程技能将优先于研究技能。通常情况下,研究人员需要很强的工程技能,因为每个人都需要生产他/她的模型。
机器学习团队一般不负责数据生产和数据管理。他们需要与数据工程师一起建立数据管道。
机器学习工程师完全拥有他们部署到生产中的模型。
如果你的组织有一个独立的机器学习部门:
每个团队都有很强的工程和研究技能;因此他们在团队中紧密合作。
机器学习团队在数据治理讨论中有发言权,并且具有强大的数据工程职能。
机器学习团队不干涉用户的模型,但仍然负责维护它们。
如果你的组织是机器学习优先的:
不同的团队或多或少都是以研究为导向的;但一般来说,研究团队与工程团队紧密合作。
机器学习团队通常拥有全公司范围的数据基础设施。
机器学习团队放手让用户操作和维护模型。
下面的图片很好地总结了这些建议:
3 - 管理项目
管理机器学习项目非常具有挑战性:
Lukas Biewald 认为,很难事先分辨出什么困难什么简单。即使在一个域中,性能也可能有很大差异。
机器学习的过程是非线性的。项目停滞数周或更长的时间很常见。在早期阶段,很难计划一个项目,因为不清楚什么会起作用。因此,估计机器学习项目的时间表非常困难。
由于不同的价值观、背景、目标和规范,研究和工程之间存在文化差异。在有毒的文化中,双方往往不重视对方。
通常情况下,领导层并不了解项目。
那么,如何更好地管理机器学习团队呢?秘密武器是从概率上规划机器学习项目!
本质上讲,从这下面这幅图开始:
得出下面这幅图:
下面是其他一些好的实践:
你应该尝试一个方法组合。
你应该根据输入来衡量进展,而不是结果。
你应该让研究人员和工程师一起工作。
你应该快速地将端到端管道连接在一起,以展示快速的成果。
你应该在机器学习时间表的不确定性方面培养领导力。
4 - 招聘人才
根据 Element AI 发布的2019年全球人工智能人才报告,有强有力的证据表明,顶级人工智能人才的供应无法满足需求。在人工智能研究前沿领域,大约有 2.2 万人在积极地发表论文,并在学术会议上发言。只有大约 4000 人参与了对整个领域产生重大影响的研究。总共有 36500 人自称是人工智能专家。相比之下,软件开发者的数量在美国是 420 万,在世界上是 2640 万。
1 - 如何寻找机器学习人才?
下面是招聘机器学习工程师的一些策略:
因为他们的软件工程技能、对机器学习的浓厚兴趣和学习的渴望而雇佣他们。然后你可以训练他们进行机器学习。
考虑到现在大多数计算机科学本科毕业生都有机器学习的经验,你可以选择初级职位。
明确你需要什么。例如,并不是每个机器学习工程师都需要做 DevOps。
以下是招聘机器学习研究人员的策略:
关注其出版物的质量,而不是数量(例如,创意、执行质量)。
寻找在重要问题上有远见的研究人员。许多研究人员关注流行问题,却没有考虑它们的重要性。
寻找有学术以外经验的研究人员。
考虑从邻近领域(如数学、物理和统计)招聘人才。
考虑雇佣没有博士学位的人。例如,有才华的本科生和硕士生,工业奖学金项目(谷歌、Facebook、OpenAI)毕业生,甚至是专注的自学者。
如何找到这些候选人的呢?
有一些标准的信息来源,比如 LinkedIn,通过招聘中介,参加大学的招聘会。
你应该参加面向机器学习研究人员的知名机器学习研究会议(NeurIPS、ICLR、ICML)和面向机器学习工程师的知名应用机器学习会议(O 'Reilly、ReWork、TensorFlow World)。
你可以通过监控ArXiv获取令人印象深刻的研究论文,并联系第一作者。
至于长期策略,你需要考虑如何吸引这些候选人,让你的组织脱颖而出:
由于机器学习实践者希望使用最先进的工具和技术,你的公司应该致力于研究型项目,在博客中公布它们,并为你的机器学习团队投资工具和基础设施。
由于机器学习实践者希望在一个令人兴奋的领域构建技能和知识,你的公司应该围绕学习建立团队文化(即阅读小组、学习日、职业发展预算、会议预算)。
既然机器学习实践者想要与优秀的人一起工作,那么你的公司应该雇佣知名度高的人,或者通过发表博客和论文来帮助公司最优秀的人建立他们的档案。
因为机器学习的实践者想要处理有趣的数据集,你的公司应该在招聘材料中推销你的数据集的独特性。
既然机器学习的实践者想要做重要的工作,你的公司应该推销你公司的使命以及机器学习对这个使命的潜在影响。更重要的是,你应该致力于那些对今天有实际影响的项目。
2 - 如何面试机器学习候选人员?
那么,在机器学习面试中,你应该测试什么呢?
首先要确认你认为候选人具备的优点。对于机器学习的研究人员来说,要确保他们能够创造性地思考新的机器学习问题,并探究他们对之前项目的思考程度。对于机器学习工程师,确保他们是具有扎实工程技能的多面手。
第二件事是确保候选人在弱项上达到最低标准。对于机器学习研究人员,测试他们的工程知识和编写良好代码的能力。对于机器学习工程师,测试他们简单的机器学习知识。
与传统的软件工程面试相比,机器学习面试的定义要模糊得多,但以下是常见的评估类型:
背景和文化契合度
白板编程
结对编码/调试(通常是特定于机器学习的代码)
数学谜题
外带项目
应用机器学习(例如,解释如何用机器学习解决问题)
以前的项目(方法、试验和错误、结果)
机器学习理论(如偏差-方差权衡、过拟合和欠拟合、特定算法……)
3 - 如何找到一份机器学习从业者的工作?
假设你是一名机器学习职位候选人,正在阅读本文。你可能会问:“我在哪里可以找到一份机器学习的工作?”
同样,有标准的资源,如 LinkedIn、招聘企业和校园招聘。
你可以参加机器学习研究会议,与那里的人交流。
你也可以直接在公司的门户网站申请(记住这个行业有人才缺口!)
找工作当然不容易,但有几个方法可以让你脱颖而出:
建立通用的软件工程技能(通过 CS 课程和/或工作经验)。
对机器学习表现出兴趣(通过参加会议和/或参加慕课)。
表明你有广泛的机器学习知识(例如,写博客文章综合一个研究领域)。
演示完成机器学习项目的能力(例如,创建副项目和/或重新实现论文)。
证明你可以创造性地思考机器学习(例如,赢得 Kaggle 竞赛和/或发表论文)。
为了准备面试,你应该:
使用类似破解编码面试这样的资源进行一般软件工程面试的练习。
准备详细谈谈你过去的项目,包括你所做的权衡和决定。
复习机器学习理论和基本的机器学习算法。
创造性地思考如何使用机器学习来解决你面试的公司可能面临的问题。
我还推荐大家看看 Chip Huyen 在训练营发布的这份幻灯片 ,其中包括了机器学习面试过程中双方的一些重要经验。
小 结
对于大多数传统组织来说,机器学习是一门新兴的、不断发展的学科,建立机器学习团队充满了已知和未知的挑战。以下是最后的几个要点:
机器学习涉及许多不同的技能,因此有许多人都有做贡献的机会。
机器学习团队变得更加独立,更加跨学科。
管理机器学习团队很困难。没有什么灵丹妙药,但转向概率规划可能会有所帮助。
机器学习人才稀缺。作为一名管理人员,在机器学习的职位描述中,要明确哪些技能是必须具备的。作为一名求职者,以一个局外人的身份进入这个领域可能会面临残酷的挑战,所以要借助项目建立知名度。
希望这篇文章为你建立高效的机器学习团队提供了有用的信息。在接下来的博文中,我将分享更多我在全栈深度学习训练营中学到的东西,敬请期待!
评论