编辑|Panda
(资料图片)
「这是目前互联网上最诚实的机器学习面试指南。」
工程师 Vaishinavi 在 上对一篇近期上线的博客文章做出了如此评价。而这篇文章来自即将加入 DeepMind 任职研究科学家的牛津大学统计学博士生SilviaSapora,并且拥有帝国理工学院计算机科学一等荣誉工程硕士学位。
值得注意的是,求职中,她完成面试的公司均向她发出了 Offer,包括 DeepMind、Isomorphic Labs、Cohere、Meta 以及一家仍处于隐身状态的创业公司;最终,她选择了 DeepMind。
是的,她不是某一家公司的幸运儿,而是把顶级 AI 实验室的面试流程完整跑通了一遍,而且是多遍。
在这篇博客中,她把这段经历原原本本地写了出来。并且,这并非一份「我做对了什么」的成功学复盘,而是一份带着挫败、失眠和自我怀疑的过程记录。
要知道,对于许多机器学习研究者而言,顶级实验室的求职面试像一只黑箱:论文要发到什么程度,面试究竟考什么,准备是否有一条可复用的路径?
Silvia Sapora 的回答并不讨巧。她先给出了一个足够现实的门槛:若想稳定获得头部实验室的回音,通常需要 3 篇以上一作论文,再加上一段实习或业界经历;而真正决定去留的,往往是简历投出之后那一连串高压、具体的技术面试。
文章中,她也分享了自己的面试准备技巧、心态乃至谈判技巧,可以说既有技术也有策略。
技术上,她建议以岗位为中心准备:刷约 150 道中等难度算法题,亲手制作知识卡片,并在限时条件下从零实现 Transformer、注意力机制、Flash Attention 及反向传播;面试前还可让大模型扮演面试官,进行针对性模拟。
策略上,她讨论了大厂与创业公司的取舍、股权薪酬的真实风险、如何安排多个流程的时间窗口,以及谈薪时竞争 Offer 的实际作用。
更重要的是,她坦率写下失眠、恶心、面试中大脑一片空白的时刻,并提醒读者:一次面试的发挥,并不定义一个研究者的价值。
总结起来,这篇博客很好地展示了机器学习岗位面试中那粗砺、令人焦虑的一面,但对于正在准备叩开顶级实验室大门的研究者,这或许比任何一份题库都更有用。
机器之心编译了这篇博文,以飨读者。
- 原文链接:https://silviasapora.github.io/blog/ml-interviews.html
- 作者主页:https://silviasapora.github.io/
机器学习求职面试:终极指南
我想,写下自己在机器学习博士毕业后寻找研究科学家工作的经历或许能帮助到一些人。
关于这件事的资料几乎为零;在我刚开始求职时,我非常希望有人已经写过这样一篇文章。无论你正在求职,还是只是考虑开始准备,希望它都能派上用场。
总体而言,我的求职过程很成功:我完成面试的每家公司都给了我 Offer,包括 DeepMind(我接受了)、Isomorphic Labs、Cohere、Meta,以及一家隐身的创业公司。另稍作说明:Anthropic、Mistral 和 TeslaAI 也回复了我,但回复得太晚,我没有走完那些流程。ReflectionAI 是唯一真正拒绝我的公司:他们不考虑我担任研究科学家,却将我转到了工程岗位流程。
我申请的大多数公司都邀请了我面试,例外是 SpaceXAI、Waymo 和 Wayve。SpaceXAI 那次,我确实让一位朋友以玩笑的方式帮我写了申请,但我觉得也没那么糟。至于 Waymo 和 Wayve:我很喜欢自动驾驶汽车。博士期间,我每六个月就向 Waymo 投一次(先投实习,再投全职),一次回复也没收到,尽管同实验室的人能得到回复。
Waymo,如果你在读这篇文章,我愿意原谅你。我那些「爱意满满」的求职信可都是艺术品。你们可以通过系统里已经存着的邮箱,多次联系我。
获得面试机会
拿到面试机会本身就挺难。如果你在这一步受阻,可用的筹码也就是那些常见项:更多论文、更热门的研究方向,以及更好的实习经历。你可以参考我网站上的简历;简单说,我博士期间有 4 篇一作或共同一作论文,发表在 ICLR、NeurIPS 和 ICML,研究既包含 LLM、强化学习等热门方向,也包含元学习、进化策略等较不时髦的方向。
我还曾在 Apple 实习,并有在 Meta 担任软件工程师的业界经历。如果一定要给一个粗略基准:3 篇以上一作论文,加至少一段实习或业界岗位经历,似乎是稳定获得顶级实验室回音的门槛。
不过,如果你已经能拿到面试,更多论文在此刻就帮不上忙了。你得通过面试,而且面试官往往甚至不会看你的简历。因此,别再把注意力放在研究和论文上,开始准备面试吧!我理解那种想拖一拖的心情,但你永远不会觉得自己「准备好了」,所以现在就开始吧。
还有几个值得了解的细节:求职信、内推、冷邮件,以及 LinkedIn/X
LinkedIn/X。许多公司会在这里发布职位,尤其是实习岗位,有时这甚至是唯一申请渠道。你必须填写帖子链接中的 Google 表单,申请才算正式提交。关注你感兴趣公司里那些令你钦佩的人,别错过机会。
内推。有当然好,但不是必需品。在 DeepMind,我有两个岗位拿到了内推,第三个没有;最终,得到面试邀请的是一个有内推的岗位和一个没有内推的岗位。在 Anthropic,我起初毫无消息,直到发现一位前同事刚加入那里,于是请他帮我内推。因此,有机会就争取,但不要因为没有内推而放弃申请。
冷邮件。直接给招聘经理或团队成员发邮件(如果你知道他们是谁)通常会受到欢迎。别只是重复简历内容(简历可以作为附件),要利用邮件说明:为什么你适合这个特定团队,以及他们的工作有什么真正吸引你的地方。比如在 DeepMind,我给招聘经理发过邮件,他很高兴,也回复了我。
另一个岗位的招聘经理曾在 X 上明确鼓励大家给他发邮件……但我当时正忙着另一个团队的面试,实在懒得做这件事。尽管没发邮件,我最终还是得到了他们的面试。
求职信。它很少是硬性要求,但一旦要求,就值得认真写。拜托,看在我珍视的一切的份上,不要直接让 Claude、Gemini 或 ChatGPT 替你写。你完全可以先自己写,再让它们润色,这没问题;但请让你的个性与热情在信里显露出来。
公司选择:创业公司还是大厂
结论是:取决于你。任何我能写出的泛泛利弊表,都不如你的实际情况更有说服力。不过,以下是几个主要因素。
寻找创业公司更难,没有一个集中的搜索入口。问问实验室同学、朋友和前同事……口碑传播是找到你研究领域优质创业公司的最佳方式。同时,由于它们更难被发现,这些岗位的竞争通常也没那么激烈。
创业公司的面试流程差异更大。大厂有相当可预测的结构,创业公司则各有玩法。平均难度大致相当,但波动极大。留意面试流程透露出的公司信息:如果它显得过于简单,也许是在暗示你真正要做的工作并不复杂。和面试一样,我认为创业公司的工作质量与人员质量,比大厂有更大的方差。
工作本身两边都可能更好。在合适的创业公司,你做的研究可能比大实验室任何项目都更有趣、更有影响力;但它也可能带来更大压力、更多你原本没打算承担的工程与基础设施工作,以及经常变化的研究议程。面试时要提问:谁决定研究优先级?盈利路径是什么?竞争对手是谁?如果 OpenAI 明天醒来决定做同样的事,会怎样?
成长空间也不同。创业公司通常能让你更快成长、承担责任并塑造工作方向。在大实验室里你是许多人中的一个;在创业公司里,你会更显眼。这可能很重要(对我来说就是如此)。
简历的辨识度同样重要。简历上的 OpenAI 或 Anthropic,任何人一眼就懂;一家没人听过的隐身创业公司,则需要额外解释。这不是避开创业公司的理由(如果你有创业者气质,那完全是另一回事),但坦白说,值得纳入考量。
至于「稳定性」,我不打算用它作为论据。过去几年,大厂已经多次眼都不眨地大规模裁员;哪条路都不是百分之百安全。
薪酬说明:限制性股票单位(RSU)与期权
我花了尴尬地长的时间才弄懂这个问题,所以试着替你省掉困惑。这里谈的是英国法律和税务。
RSU(大厂较常见)是按归属时间表给你的真实公司股票。归属后,你可以卖出或持有。大约一半通常会立即卖出以缴纳所得税(没错,这会让 23 岁、第一次收到 Meta 股票的我大吃一惊:RSU 被算作收入)。
期权(创业公司较常见)则不是股票。它是以固定价格 X 买入股票的权利,不管当时市场价格 Y 是多少。若 Y 大于 X,太好了:你可以行权,以 X 买入、以 Y 卖出,赚取差价;若 Y 小于 X,期权就一文不值。
接下来更疯狂。期权通常会在你离职 90 天后到期。如果公司尚未上市,你买入后无法卖出股票,这意味着你可能不得不以现金支付 X × 期权数量来行权,却无法保证将来一定能卖掉。并且在英国,你一行权,即使一股也没卖、还没见到一分钱,也要就 Y−X 的差额缴纳所得税。
所以,如果你在一家创业公司工作两年后离开、决定行权,而公司尚未上市,那么你要先支付:买股票的成本(X × 期权数量),再加上账面收益的所得税((Y−X) × 期权数量 × 税率)。而你还没有赚到任何钱。
还有几点补充:多数公司提供无现金行权,你交回一部分期权,来支付其余期权的行权成本;许多公司也会有流动性事件,回购部分股票。但请记住,每一轮融资都会稀释你的股份;超过需缴所得税部分的收益还要再缴资本利得税(约 20%)。流动性事件给股票的估值通常也低于公司的官方估值。
总结:当招聘方报出一个包含创业公司股权的总薪酬数字时,礼貌地微笑,并在心里大幅打折。最可能的情形是:你明年不会退休。不过,祝你好运。
面试结构
多数公司的结构大体相同,只是各环节权重相差很大。
招聘方初筛。通常是一场轻松、风险很低的聊天。它让你展示自己的技能与职位相关,也证明你确实了解并能谈论署有自己名字的论文。
技术面试。这是流程主体,也是准备最重要的部分。根据公司不同,预计会有 3 至 8 轮:
- 编程:LeetCode 风格题目,通常为中等或困难难度。
- 机器学习编程与调试:实现注意力机制、写反向传播、找出训练循环中的 Bug。
- 机器学习知识:基础、理论、应用机器学习与系统设计。
行为面试。它分为两类:经典行为问题,如「说说你与人发生冲突的一次经历」「说说你收到反馈的一次经历」;以及研究风格面试,如「你对哪些议题感兴趣」「你认为领域会如何发展」。它们比技术面试随意,但千万别低估,也要认真反思并准备答案。
我如何准备:技术
一个对我有帮助的元策略是:我几乎不做泛泛的准备,绝大部分时间都针对下一场具体面试或公司。这让我专注,也让即将被问到的材料在脑中保持新鲜(这对像金鱼一样健忘的我至关重要)。到最后,你反正会覆盖大部分内容。但我也知道有人偏好其他策略,所以按适合你的方式来。
走完整个面试之旅后,我整理了一份相当全面的资源与策略目录,下面会分享。是的,内容很多。但机器学习研究科学家/工程师面试的现实是:你可能被问到任何东西,从过拟合这类基础概念,到 LeetCode,从零实现 Transformer,到相当现代的具体架构问题,例如 Griffin、TransformerXL、S4。这个列表反映的正是这样的跨度。
抽认卡
适用于机器学习基础、应用机器学习和研究讨论。我先试了 Anki,但不适应;实体抽认卡对我有效得多。更重要的是,亲手写卡的过程本身就是一半学习,不要只下载别人的卡组。文末会链接我完整的主题列表,供你作为起点。复习时要保持好奇:多问自己问题,并确保真正理解每个主题。
学习时,我多次问过自己一些问题,后来确实在面试中被问到。提前解决疑惑更好。
用大语言模型模拟面试(Claude/Gemini)
每场面试前,我都会把岗位、面试和公司的描述贴给当天最喜欢的大模型(通常是 Claude),让它来面试我。练习问题和真实面试问题之间的重合频率高得惊人。我建议每场面试都这么做。如果难度不对,就新开对话,更明确地说明你的水平与背景。
我认为 Claude 最适合学习,它的反馈通常也比较公正;Gemini 有点太会夸人了(「他们能面试你是他们的幸运」——Gemini 如是说)。
LeetCode / NeetCode
至少完成 Blind 75;如果有余力,再做 NeetCode 150,重点放在中等难度题。每道题都尽量得到最优解;TwoSum 的 O(N²) 解法不算真正解出来。不要在困难题上花太多时间。如果你以前没刷过 LeetCode:开始时会很难受,会觉得自己很笨,这是正常的,也会过去。到第 100 题时,你会自信得多。
务必掌握基础模式(DFS、BFS、图、回溯、动态规划、二分查找等),并确保自己能又快又有把握地实现它们。中等题目标是在 20 分钟或更短时间内完成。若卡住超过 15 分钟,就看解答、理解、标记为待复习,然后继续往下。广度比深度更重要!我总共做了约 150 道中等题。
书籍
- Chip Huyen 的《Designing Machine Learning Systems》:覆盖许多你会遇到的基础与应用机器学习问题。划重点并做笔记。
- 《JAX Scaling Book》:不幸的是我在面试后才发现它,但它很优秀;如果当时知道,我会大量使用。
- Sutton 与 Barto 的《Reinforcement Learning》:只推荐给强化学习新手;如果你已在这个领域工作,我觉得它有些过量。
课程
- 线性代数:Gilbert Strang 在 YouTube 上的课程。用 2 倍速可在一天内看完整套(我可能是经验之谈)。他是我本科线性代数能通过的唯一原因。愿他再活 91 年。
- 扩散/流匹配:MIT 和 Stanford 的课程都不错,但数学较重。如果你没有在这个方向积极做研究,问题很可能比较浅,因此掌握高层直觉并记住基础即可,例如扩散 SDE 与流匹配 ODE。
机器学习编程与调试
这是我找到优质资源最少的部分,也是实际经验最重要的部分。调试面试尤其难练,大模型在被要求时也无法稳定生成足够可信的 Bug 代码。复查你自己的代码库(或朋友的)或许是最佳方法。DeepML 有一些好题,但也有许多无用的题;我还发现 Tensor Puzzles 很有帮助。你应达到的基准是:
- 端到端实现一个 Transformer;
- 实现因果注意力、交叉注意力和自注意力;
- 实现 Flash Attention;
- 实现注意力的反向传播;
- 实现 MLP 的前向与反向传播;
- 用 PyTorch 或 JAX 实现一个采用 SGD 的简单训练循环。
如果能在时间压力下从零完成这些,你的状态就很好。
我如何准备:情绪
我不能代表所有人,但对我来说,这个流程几乎耗尽了我的韧性。我过去一直很擅长应对面试和考试,也没什么特别策略……这次不是。
先说实用层面
我最大的问题是睡眠:面试前一晚睡不好;当你一周有 10 场面试时,这会变成严重问题。我也吃不下东西,面试前看到食物就恶心。我的解决办法是灌下好几升可乐来补糖。我不声称这是最佳方案,但这是我当时能想到的最好办法。
除了生存,我建议:规律运动、固定的晚间流程,以及不要把自己与社交隔离。面试前跑步很帮我,它消耗了紧张能量,也让我重置思绪。(如果这样做,请放轻松并摄入足够碳水。)最艰难的几周里,我规定自己只要第二天早上没面试,晚上就和朋友吃饭。这对我很有帮助。
面试前仪式
我发现,固定的面试前仪式很能带来安慰。我会在视频背景里放上新鲜花朵(收到过不少称赞),化妆(把注意力放在别的事上一会儿,很放松——男性朋友也许可以试试护肤),再看几段固定的「安慰视频」。
我的轮播清单包括 Alysa Liu 的花样滑冰与人生感悟视频,以及经典的《指环王》片段。如果你还想要更多健康向上的视频推荐,可以邮件问我。
更难的部分
到某个阶段,焦虑对我的阻碍已经超过准备不足。面试中,我偶尔会突然大脑一片空白。我确实想过在过程中开始心理治疗,但还没来得及就没时间了。回头看,这种反思在开始前更有用:了解自己的触发点、自己与失败的关系、自己的价值感究竟系于何处。这样就不用像我一样,在战火中才发现这些问题。不推荐,哈哈。
但这也引向我最想说的一点:这些面试不会决定你作为一个人的价值。(我知道几个月前的我看到这句话会翻白眼,但它是真的!)这个过程本质上带有随机性,有时宇宙还很有幽默感。DeepMind 面试当天早上,我凌晨 5 点满身冷汗醒来,突然想起没复习主题 X。
我拿起手机,让 Claude 帮我总结主题 X,然后继续睡。早上 9 点进入面试时,面试官说:「你对主题 X 了解什么?」我不是说有神;但如果有,那天祂显然站在我这边。不过,你也可以有发挥不好的日子。在面试里没能解释为什么正向 KL 是均值覆盖、反向 KL 是众数寻求,并不会让你成为一个糟糕的机器学习研究者。
我曾在两篇不同论文中处理过正向与反向 KL,却恰恰把这个问题答砸,事后哭得很惨。你会搞砸,甚至会在自己明明懂的东西上搞砸;这没关系。
对我有帮助的书
以下书籍不专门针对面试焦虑,但有助于处理更底层的心态问题:
- 《The Now Habit》(Neil Fiore)
- 《The Gifts of Imperfection》(Brené Brown)
- 《Mindset》(Carol Dweck)
- 《The Tyranny of Merit》(Michael Sandel)
我如何准备:流程安排
一天一场面试。只要能做到,我更喜欢这样安排。它并不总是可行,但面试很耗人,你在一天第三场面试中的表现自然会变差。我的节奏是:早上完成面试,剩余时间准备下一场。这避免了我一天中不停切换上下文。
从没那么在意的公司开始。例如小型创业公司、你不太想去的地点、虽有意思却不是首选的岗位。你会借此了解流程长什么样、校准自信,并在为真正想要的 Offer 谈判前,对薪酬水平形成现实认识。
考虑时间安排。有的公司很快,有的极慢且难以预测。一旦流程启动,节奏往往会较可预测。因此,如果 A 公司发来一个你可以随时完成的测试链接以启动面试流程,而你还在等 B 公司回复……那就等 B 公司安排第一场面试后,再做 A 公司的测试。目标是让 Offer 大致落在同一个时间窗口,让你拥有真正的筹码与选择。
显然,这个过程依然充满随机性,所以实操中很难完全安排好。例如,我曾试图联系认识的 Anthropic 员工以加快进度,但最终没能在 DeepMind 截止日前启动 Anthropic 的流程。
告诉每家公司你正在进行的其他流程。我知道这会让一些人不自在,但它完全正常,也在预期之内。它能让时间线更清晰,促使流程顺畅推进;如果公司感兴趣,往往也会加速。我认为,知道多家公司都把你当作认真候选人后,公司也会更认真看待你。
谈判
我觉得 Haseeb Qureshi 的一篇博客很适合作为起点,但坦白说,我没有按它的建议做。那篇文章建议把谈判当成密封拍卖,不要透露竞争 Offer。对我无效:好几家公司明确要求看到其他 Offer 的证明,才愿意提高报价;其中一家甚至质疑我的截图(笑)。所谓「扑克脸」策略也就这样。
我学到几件事。只要公司真的想要你,它们可以显著调整数字,幅度超过我的预期。永远值得开口问。大多数公司都愿意谈。
截止期限从一周、两周,到模糊的「请在合理时间内决定」不等。以我的经验,公司不太愿意延长期限(不过它们对我一些朋友愿意!),所以要把这点纳入时间规划。
招聘人员很擅长读懂你。有几位只问了模糊问题,就看出了我的真实偏好;公平地说,我非常透明,可能也很好读。请小心,细小信号都会起作用:你提及某家公司的频率、谈论它们的方式,一切都会被记录。如果招聘方知道他们的公司已是你的首选,谈判会更难。
公司会追踪候选人选择的历史数据。如果你告诉 Anthropic,自己正在认真考虑 Peppers Burgers 的 Offer,它们掌握的数据会显示:同时拿到两家 Offer 的候选人,有多常选择后者。如果答案是「几乎从不」,你的虚张声势不会奏效。这也是为什么来自真正同级别公司的竞争 Offer,例如 OpenAI 或另一家顶尖实验室,具有实际分量,而其他 Offer 未必如此。不过,还是那句话,让这些流程同时推进非常困难。
决策过程
我无法替你判断处境,但就我个人而言,流程一开始我很缺乏安全感。因为害怕再也找不到其他工作,我曾想接受一些较早拿到的 Offer,而不是让它们到期并继续面试。我确实找到了更好的机会。当然,未来流程如何谁也无法预测,但相信你的直觉。
在 Offer 间选择时,每个人的权重不同:地点、薪酬、声望、工作类型、免费食物和可乐(最后两项对我很重要)。开始前,我有一个粗略偏好顺序;随着更多了解团队、文化和薪酬,它发生了变化。然后,当我爱上 Isomorphic Labs、DeepMind 又向我发 Offer 时,我那套极其「凭感觉」的排名系统彻底崩溃。
我的办法是和两家公司里几乎所有人都聊过。令人震惊的是,DeepMind 的每个人都说他们会选 DeepMind,Isomorphic 的每个人都说他们会选 Isomorphic。太有帮助了。最后真正有用的是,和真正了解我的人讨论(对我而言是我的男朋友),再从那里理清答案。
如果重来一次,我会做什么不同
即使整体结果不错,如果未来再经历一次这个过程,我仍会改变几件事。
保留一张电子表格。我曾确信自己能在脑中追踪一切。技术上确实能,但一张简单表格——列出要申请的公司、每个流程所处阶段、截止日期和联系人——本可以避免我忘记申请那些我真正感兴趣的地方。我知道,这不是什么高深学问。
准备情绪,不只是准备技术。面试流程很容易让人把它看作对研究能力的最终裁决,甚至是对博士是否有价值的裁决。这不是理性框架,但身处其中时很难避开。我处理得不好;我认为,在开始前做一些心理治疗,或者至少认真自省,而非进行中再做,会有很大帮助。
对忽略我的公司更主动。回头看,我应当给公司里的人发冷邮件,直接表达兴趣,真正让自己进入某个人的视野,而不是希望申请表替我做到这一点。如果你真想去某个地方却一直收不到回复,就采取行动。
技术主题
下面是我在开始面试前做的主题清单。就我个人而言,由于背景关系,我被问到许多大语言模型和强化学习问题。如果你有扩散模型背景,预计会被问到更多这方面问题。在至少一场面试中,我几乎被问到了自己学过的所有主题的某种形式。因此……务必熟悉所有内容!
营业执照公示信息