Skip to content

Latest commit

 

History

History
203 lines (102 loc) · 17.8 KB

what-i-learned-from-the-best-and-the-worst-machine-learning-team-leads-c9331f56da4d.md

File metadata and controls

203 lines (102 loc) · 17.8 KB

成为高效的机器学习团队领导

原文:towardsdatascience.com/what-i-learned-from-the-best-and-the-worst-machine-learning-team-leads-c9331f56da4d?source=collection_archive---------4-----------------------#2023-02-06

我从最优秀和最差的机器学习团队领导那里学到了什么

管理沟通、基础设施和文档

Aliaksei MikhailiukTowards Data Science Aliaksei Mikhailiuk

·

关注 发表在 Towards Data Science ·12 min read·2023 年 2 月 6 日

--

作者提供的图片。

软件工程项目的技术管理已经非常成熟,团队领导可以使用多种工具和技术,如敏捷方法。然而,机器学习项目由于准确预测时间线、任务结果和任务可行性等方面的挑战,难以融入这些模式。

在每一步都面临高不确定性的项目需要机器学习团队负责人通过经验获得的技能和知识。在这篇文章中,我将总结我作为团队成员在良好和不良管理下的学习经验,以及我自己领导机器学习项目所获得的经验。

虽然文章重点关注管理机器学习项目的具体技术,但某些通用的项目管理方面特别重要,因此我也将强调这些方面。

首先,我谈论为何管理机器学习项目可能具有挑战性。然后,我讨论了如何通过改进沟通、更好地管理基础设施和文档来克服这些挑战。

领导机器学习项目的挑战

虽然软件工程和机器学习项目有很多相似之处,但由于若干原因,领导机器学习项目可能会有所不同:

  • 机器学习项目通常承担更高的风险。与软件项目不同,软件项目的任务是从确定性的模块中构建系统,而机器学习项目所处理的问题的可行性通常事先未知——我们是否会有足够的数据,数据是否具有合理的质量,模型是否足够大以捕捉关系,我们是否拥有足够的计算能力?

  • 设定截止日期、里程碑和计划更加困难。由于该领域仍在建立中,并且没有现成的解决方案来解决每一个问题,机器学习模型需要从头开始构建。因此,机器学习项目最终变成了以研究为导向的项目。对于这些项目,预测时间框架可能很困难,因为许多决策只能在某个阶段完成后才可以做出。

  • 缺乏性能指标使得跟踪和评估性能变得具有挑战性。有些问题有明确的目标——例如,评估一个垃圾邮件过滤器,我们可以客观地告诉它过滤了 99%的垃圾邮件,而对于更主观的问题,定义性能指标则更加困难。例如,考虑一个美化过滤器——我们如何在没有用户研究的情况下衡量它是否表现良好?而从用户那里获得足够的可靠数据往往是昂贵、缓慢且具有挑战性的,尤其是在严格的 GDPR 要求下。

  • 多学科项目非常常见。因此,团队成员往往会有非常狭窄的专业化方向,为了使项目进展顺利,团队内的沟通流动需要非常出色。

上述许多困难可以通过关注机器学习项目中重要的方面——沟通、基础设施和文档来克服。

沟通

软件工程团队通常不会为会议准备演示文稿。然而,机器学习项目则更常见——许多组件通过图表来沟通更为方便——如损失函数、数据分布、生成结果中的伪影等。

可视化有助于建立沟通技能,让每个人对自己的工作负责,促进信息共享,并鼓励团队其他成员提供反馈,因为在询问澄清时,指向幻灯片会更方便。

机器学习项目通常是跨学科的,当材料没有很好地传达时,保持所有人参与是困难的。为了保持注意力,重要的是从高层次的视角开始,并始终以简单的术语解释事物。

实用注意事项

  • 准时开始和结束。考虑在开始时留出几分钟让大家加入并聊天,以调整会议气氛。开场小聊不会占用太多技术讨论时间,但会提升团队士气。

  • 给人们时间聚集,解除静音并开始发言。询问是否有问题后,心里默数到十。

  • 一致性和以身作则。如果你把某事视为规则,就去实践它。要求团队展示?树立标准。

  • 如果不确定要点是否已经传达清楚,可以让团队成员讲解任务并识别潜在挑战。

  • 没有得到反馈?也许问题表述不够清晰。不要问“当前方法是否有问题或疑问?”,要更具体,让大家参与解决方案的制定,可以改成“有什么更好的方法来加载数据?”。

  • 公开表扬,私下批评——这是永恒的经典。想要鼓励某种行为模式?在小组会议上奖励它。例如,许多人对提问感到不安。但提出问题和指出问题是重要的——有人在一周中的小组聊天中提出了问题?小组会议是感谢他们的好时机。关于如何给予反馈的好书是“Radical Candor” by Kim Scott。

  • 不要试图同时做工程和管理。如果你在领导项目,就要领导和管理。委派任务。鉴于每个机器学习团队成员的专业性,微观管理不仅会让团队恼火,还会损害结果。

  • 团队成员需要知道他们所做的工作为何重要。让团队参与任务形成和优先级排序的过程,大多数团队成员都是领域专家。如果决定如何进行是来自团队的,那么委派任务会更容易——你的角色则转变为协调。

  • 诚实有助于建立你与团队成员之间的信任。如果你不理解某些事情,要诚实面对。如果你看到任务不是很有趣但却必要,不要试图美化它,而要如实解释。诚实会受到赞赏。

  • 在编辑或分享团队成员的工作之前,一定要征得他们的许可。

  • 每个人的优先级、期望和担忧都不同。了解一个人对工作的期望将有助于团队领导为其分配合适的任务。

  • 除非你了解对方,否则要小心假设他们的需求。在分配任务时随口提到“这对你的简历有好处”,可能会被视为廉价的操控。

基础设施

机器学习是一个系统化不可避免的领域。决策的质量取决于数据、代码和结果的组织方式。

然而,由于最终模型的各个方面——数据、架构和超参数之间的复杂关系,系统化也是非常具有挑战性的。此外,每个实验都会生成大量数据,并且由于项目是以研究为导向的,每个模块都可能频繁变化。

在提供反馈或指导团队构建代码或准备数据时——问问自己一个问题,新加入团队的人是否容易理解发生了什么?如果答案是否定的,你需要重新考虑这个过程。

基础设施

有趣的是,项目管理的一个优秀来源是战争书籍,例如,孙子所著的《孙子兵法》。书中分享的智慧之一是,战斗的命运在开始之前就已决定——准备最充分的人赢得胜利。

战斗中最重要的方面之一是补给线。基础设施就像补给线——为了让项目不断发展,基础设施不能有突发的中断或障碍,而且应该易于使用和扩展。

我目前遇到的数据和基础设施管理的最佳实践包括:

  • 为训练准备配置文件并记录它们。这将有助于可重复性,使你可以回溯查看解决方案的获得方式,并减少设置实验时的错误。

  • 为训练数据准备配置文件。这可以简单到模型的输入-输出对列表。这将帮助确保你确切知道模型使用了哪些数据,并简化数据加载器。

  • 对于参数使用合理的默认值——运行代码的人会期望它开箱即用,不需要深入挖掘。如果需要几个超参数,拥有一个执行命令的 bash 脚本会很方便,因为它比终端中的文本更易于修改。

  • 如果资源允许,部署的可自动化部分必须自动化。自动化通过消除重复工作节省团队时间,并防止错误发生。

  • 训练数据的组织方式对数据加载、训练速度、灵活性和分析结果的便利性有重大影响。确保数据按类型分开存储,不要将所有内容放在一个文件夹中——这样可以更方便地可视化现有数据并添加新数据。

  • 训练和测试管道必须尽可能相似——在数据预处理、后处理和模型加载的方式上。

模型跟踪

团队中的多个成员在同一个模型的不同部分工作时,我们需要比较所有结果。为每个团队成员提供一个本地 tensorboard 会非常低效。同时,将所有实验堆积在同一个文件夹中会非常麻烦。

有一些强大的替代工具可以用来分析模型性能,比如wandb(对于小团队可能是免费的)和aimstack(在撰写时完全免费)。

模型比较

机器学习项目会生成大量需要比较的模型。然而,在隔离的开发环境中运行测试以验证性能是不够的。为了突出潜在问题,测试和比较必须尽快作为完整管道的一部分在专用推理设备上进行。

拥有一个专门的测试数据集,最好能反映最终产品场景,并包含尽可能多的边缘案例,以帮助识别最终模型的潜在问题。例如,人类检测的计算机视觉问题应包括具有各种体型、肤色和肤质的多样化人群。

比较结果时,始终要有基准。最好在项目开始时设定一个基准。始终拥有反映生产所需模型属性的明确指标。可以是数学指标或产品试点结果中的用户数据数字。

跟踪模型的构建过程以及哪些方面对模型性能的提升至关重要。文档化——例如一个包含链接到演示、代码和评论的排名表,是一个好的起点。

代码管理

在进行多个实验时,分支爆炸问题不可避免。我看到过一些项目有 500 多个 GitHub 分支,很明显不可能对所有分支进行跟踪和良好文档记录。

鼓励分支合并和归档,否则很容易迷失方向。鼓励小的提交和 PR——大的提交审查时间长,最终会变得过时。

使用简化和抽象部分代码的框架——例如pytorch-lightning,它为训练代码提供结构,并移除与环境设置相关的部分。

另一个挑战是将实验与代码关联起来。模型是用什么代码训练的?是否容易追溯?有一个解决方案 — 要么保持一个文档齐全的项目,要么使用自动化日志记录工具 — MLFlow

文档

文档提供了可重复性、问责制、知识共享、质量和性能控制,以及一种结构化的看待问题的方法。尽管非常重要,但往往被忽视。

一般规则 — 如果一个问题出现超过两次,就需要记录下来。类似地,任何一次性的重要过程也必须记录。例如,数据准备或环境设置。

有几个重要的文档可以显著提高团队成员之间的沟通质量和解决方案的质量:设计文档、路线图和每周笔记。

设计文档

我曾经与我的博士导师在项目的早期阶段坚持开始撰写文章时产生了很多误解。后来在我的职业生涯中,我发现这是一种非常有用的做法。

写下项目的骨架会让你变慢,但会给你更多时间考虑解决方案的每个部分,帮助定义约束条件和指标。关键是消除项目结果中的模糊性。

设计文档解释了项目的来龙去脉并报告结果,并在项目的每个阶段不断演变 — 从项目计划开始,它变成了如何实现最终结果的解释。

在机器学习项目中,失败的实验很常见,虽然这些实验对最终解决方案可能无关紧要,但它们也作为知识的来源,应有一个专门的部分。

不要忘记包含数据 — 使用了哪些数据集以及如何进行清洗。由于在项目之间重复使用数据很常见,详细的部分将有助于未来的项目。

由于文档可能会在后期被某人浏览,或者被具有非技术背景的人阅读,因此总是以简单的术语开始介绍项目的动机和大局。类似于小组会议,视觉化流程 — 例如,建议的流程图将是设计文档的重要部分。

路线图

路线图是项目的逐步计划,包含关键里程碑和实现目标所需采取的步骤。一个好的路线图应包含目标、描述、时间框架、任务负责人以及主要发现和结果链接。

为机器学习任务设置时间框架可能会很困难,因为结果可能不明确 — 例如,将任务设置在一个期望 98%召回率的路线图上是不现实的,因为实验可能会成功也可能不会。相反,任务应该被拆分成小组件,交付物可以是一个代码块或一个数据集。

每周笔记

对于机器学习项目,数据可视化非常重要,因此理想的格式是包含尽可能多的视觉信息和与描述数据相关的代码链接的演示文稿。这些通常存储在共享空间中,每个团队成员可以查看和查找参考资料,而无需打扰负责人。

作为团队领导,会议前有每个人的每周结果/工作的总结是很有用的,因为这样可以在他们的展示中提出有针对性的问题。

实用笔记:

  • 由于需要维护的文档较多,保持一个包含主要文档快捷方式的单一文档并非不合理。

  • 需要接纳新成员,已有入职文档,但请确保你自己从头到尾完成了所有步骤,以免遗漏任何内容。

  • 鼓励团队成员记录已完成的任务,并附上代码和结果的链接——这将帮助他们在绩效评审时回忆起全年所做的工作。

  • 机器学习项目由研究指导。我参与的多数工业项目依赖于使用预训练模型或重新实现论文中的模型。为了有效管理和跟踪前沿进展,并向团队沟通现有工作,一个好的做法是保持一个包含链接的共享文档。

总结

由于团队领导负责项目交付,领导者的一个基本素质是对团队及每个个体成功的长期思考。

将项目视为帮助整个团队及每个团队成员成长的方式。为此,给予每个团队成员自主权,鼓励他们的责任感,主动奖励正确的行为和最佳实践,进行可视化,再可视化,并以身作则。一个很好的 品质列表 可供你在团队中鼓励。

喜欢这位作者?保持联系!

我是否遗漏了什么?请随时留下笔记、评论或直接通过 LinkedInTwitter 联系我!

## 精通机器学习面试

机器学习面试的准备指南和资源。

towardsdatascience.com ## 每个博士生都能免费获得的三种软技能

我在机器学习博士期间学到的关于研究、沟通和团队合作的综合技巧和窍门。

towardsdatascience.com ## 在向你的项目引入 AI 之前要问的七个问题

也就是机器学习的第一规则——不要使用机器学习。

towardsdatascience.com ## 我希望在攻读机器学习博士学位之前掌握的九个工具

无论你是在创建初创公司还是在取得科学突破,这些工具都能将你的机器学习管道提升到…

towardsdatascience.com

本博客中的观点仅代表我个人,并不代表 Snap 公司的立场或观点。