本文经AI新媒体量子位(公众号ID:QbitAI)授权转载,转载请联系出处。
这两天,DeepMind研究工程师小哥Aleksa Gordić的个人经验贴在Twitter上火了一把。不到半天时间,点赞达431。
重点是,这位小哥啥机器学习(ML)学科背景都没有,但在接触ML仅3年后,顺利入职DeepMind。
他强调自己不是一个有“计算天赋”的人,全靠对机器学习的热情,在不耽误正职的前提下,疯狂摄入ML知识,同时保持对知识的自我消化和向外输出,最终成功上岸。
他在评论中表示,这篇博文对许多DeepMinder找工作都很有帮助。
让我们一起来看看这位非科班AI小哥,具体做了哪些努力和准备。
非科班出身
本科阶段,小哥学习的是电子工程专业,和计算机科学方面的课程交集不大。
2016年底,本科快毕业时,他惊觉自己想转到软件行业。
和硬件行业相比,他认为软件行业更加开放,有各种黑客马拉松和数据马拉松,还拥有更为可观的薪资待遇。
说干就干。次年初,小哥开始自学Android,并于暑期在Telocate (一家德国小型创业公司)实习,担任Android开发。
也在这时候,小哥和曾在MSFT、Facebook、Jane Street等公司实习过的软件工程师朋友聊天。
对他的一些朋友们来说,算法和结构数据已经是第二天性般的存在;
而对小哥来说,大型科技公司并不太在意他在EE方面的技能和知识积累,算法和数据结构才是硬通货。
一番交流下来,小哥意识到自己和“软件工程师”之间的鸿沟。对于时年23岁的他来说,一个16岁且缺乏大量基础工程知识的孩子都遥遥领先。
△小哥幽默地告诉朋友自己落后了(实际那时候他非常绝望),朋友鼓励他慢慢来
这种糟心的滋味,促使小哥下定决心飞速追赶。
实习结束,本科毕业后的他虽然申请了电子工程硕士学位,但依然对大型科技公司的工作机会心向往之。
为此,小哥动手制定了一份软件工程学习计划,还旁听了本科算法课程。
小哥一边开启他的疯狂学习之旅,一边申请大型科技公司岗位。
过程并非一帆风顺,经历2017年年底的Facebook面试、2018年3月和5月的两次微软面试,小哥都未能成功入职。
好在2018年2月时小哥通过为期3天的入学考试,顺利申上微软ML暑期培训班。
△微软ML暑期培训班的录取通知
微软ML培训班里,他所在组最终项目被评为内部最佳项目。
8月上旬,小哥远赴巴西实习。
三天后,小哥接到了意想不到的电话,微软告诉他,他被举办暑期培训班的团队“HoloLens团队”录用了!
没有犹豫,小哥接下了offer,离开巴西,在9月顺利入职微软,担任软件工程师。
至此,小哥开始了自己的SE以及ML职业生涯。
不得不提的是,自从参加了暑期培训班,“要去DeepMind”这个挑战就在小哥潜意识里扎了根。
入职DeepMind对当时的他来说仿佛天方夜谭:他在培训班接触的DeepMinder都毕业于牛津和剑桥。
但转念一想,对于曾经的他来说,微软同样遥不可及,挑战DeepMind又何尝不可呢?
2018年至2019年在职微软期间,小哥尽力学习SE,阅读很多Scott Meyers 撰写的 C++等编程书籍;工作之余,则学习ML。
2018年年底之前,小哥学完了 Coursera 上吴恩达的所有课程,还参加了内部的ML黑客马拉松、ML培训班,并开始阅读相关研究论文。
随着学习进程的加深,小哥对ML领域越来越得心应手。
2019年初,小哥第一次分享了关于ML的博文。
2019年底,小哥调岗到机器学习工程师,被派参加ICCV2019大会。
△ICCV2019大会上,小哥在微软展台演示HoloLens 2
机器学习课程
从ICCV2019回来,小哥被要求利用PyTorch从零开始实现一篇论文。
那时候,他对PyTorch一无所知。好在通过完成这个任务,小哥再一次飞速成长。
其它方面的学习进程,小哥制定了一个学习框架。经过大致规划,一个“一年内学习AI各个子领域”+“每3个月学习一个子领域”的计划诞生了。
万事开头难。所学习的第一个AI子领域,神经风格迁移(NST),耗费时间超过了3个月。
借此,小哥对学习计划进行了优化,即在每3个月学习一个子领域的学习周期大框架下,穿插微学习周期。
微学习周期有两种类型:
1、输入模式:大量摄入信息。这一模式的目标是通过博客、视频等对子领域的结构有一个深度理解,或是通过研究论文、书籍对某个主题深入了解。
2、输出模式:分享所学知识。制作YouTube视频、建立GitHub项目或撰写博文、更新Linkedln、分享相关内容到Twitter和Discord。
主业当然不能落下。在如何平衡工作和学习这个问题上,小哥展现了自己的强大意志力。
他一直保持着一种近乎“疯狂”的节奏:起床后,写2小时代码,然后散会儿步;散步归来,投入微软工作;工作结束,小憩30分钟;睡前再工作2-3小时。
小哥把这部分的经验总结为3点,分别是强大的毅力,正确的心态,以及小憩是金。
授人以渔,小哥详细介绍了他学习NST、GAN等ML详细知识的方法论。
keep learning
阅读书籍和前沿论文是最直接获取ML相关知识的途径。
学习神经风格迁移(NST)、DeepDream、生成式对抗网络(GAN)、NLP & Transformers、强化学习(RL)等知识的过程中,小哥都阅读了大量的前沿和小众论文,其中,Transformers相关论文为小哥用PyTorch做出一个流行的GAT提供了部分灵感。
△Graph ML
因对初学者友好,这一GAT大受欢迎,并成为剑桥大学GNN讲座的推荐内容。
除了沿着学习“主线”前进,早在2020年初,小哥就意识到自己在数学方面有所欠缺。因此,他花时间阅读了《Learning How to Learn》《Python Data Science Handbook》《Deep Learning》等,来加速他的学习进度。
与此同时,对相关知识进行学习和巩固是非常有必要的。
补充CNN及其优化知识,实现vanilla GAN、cGAN(条件GAN)和 DCGAN 模型……旧知识的查漏补缺和新知识的不断加瓦,不断夯实小哥的知识库。
这是他学习GAN后,所训练的DCGAN模型输出的图片:
△由男人演变为女人(角度和肤色也会改变)
在这个过程中,根据知识要点的难易程度,结合实际情况,小哥还会改进和完善学习策划。
比如调整学习时长。因为倍感有趣,小哥花费在NST领域的学习时间,就比原定计划的3个月要长。
或者进行提炼总结。而在学习GAN时,他开始在每篇学习大框架下的末尾写一篇博文,来总结所学到的知识。
抑或选择先熟悉、后陌生的学习流程。RL是DeepMind取得突破性发展的领域,它不仅与其它ML子领域有所不同,其间亟待了解的论文和项目更是不可计数,如如AlphaGo、DQN、OpenAI机械手等。
面对这个难题,小哥从自己最感兴趣的部分——计算机视觉(CV)——切入,而后再朝不那么熟悉的课题进发。
在做这些的时候,小哥没有闭门造车,而是与Graph ML领域最优秀的研究人员之一、DeepMind研究员Petar Veličković等人定期聊天,或是博文读者等进行交流,受益匪浅。
消化后的向外输出
小哥提到,他在微软300多名同事面前做了一次演讲,这对他来说是一次跳出舒适圈的操作。
△在300+微软同事面前演讲
跳出舒适圈的尝试还有很多。保持知识输入之后,他也在消化知识,并向外输出。
他开启了自己的YouTube频道,做了NST、GNN等多个系列的视频,与网友分享他的ML学习之旅,在帮助自己深入思考的同时,也帮助别人。
看这张图,它是使用小哥编写的代码合成的NST图像,你可以使用他的的 GitHub 项目创建它。
关于BERT和GPT系列模型的知识也在小哥的学习范围内,Transformer可以帮助了解它们。
他从零开始阅读NLP & transformers相关论文。因为会英语和德语,他又创建了一个英德机翻系统。
小哥主要用OneNote记录着学习旅程。
△摘自小哥的OneNote
工作和学习双线推进,微软这边,小哥从事着各种SE和ML项目,如开发了HoloLens 2上眼动追踪子系统的一个眼镜检测算法,使用视频编码为各种VR/MR设备添加注视点渲染功能等。
DeepMind向他敞开大门
2021年4月,经由Petar的介绍,小哥结识了一位猎头。在浏览了小哥的YouTube视频、GitHub代码库和LinkedIn后,小哥获得猎头推荐,顺利接到了DeepMind的面试通知。
写到这里,小哥强调了人际关系对于找工作重要性,应该和志同道合的人建立高质量的联系。
△小哥申请DeepMind的简历,但他在博文中对这份简历提出了优化建议
DeepMind共有两个团队:
1、核心研发团队。偏向于纯粹的研究,项目例子是AlphaFold、AlphaGo等。在这个团队中,研究工程师从事的其它项目可能涉及与研究科学家合作实现某些研究思路。
2、应用团队。所做的一些项目包括数据中心节能项目、改进Google应用商店的推荐系统、WaveNet、Android 节能。
小哥申请的岗位是研究工程师。能入职DeepMind意味着这个人要有扎实过硬的相关知识储备。
因为没有发表过任何论文,如果没有之前的项目和工作经验,小哥不见得能有这次DeepMind的面试机会。他告诉大家,再优秀的人也有可能被科技巨头公司拒绝,所以不用给自己太大压力。
小哥分享了一些自己准备的面试技巧。
1、认真研究每一位面试官。了解他们的职业背景,有可能的话看看他们的论文(至少阅读被援引次数最多的那一篇),这样有利于提出相关问题。
2、了解透简历中提及的每一个项目。以便于你能和面试官深入探讨他们。
3、模拟面试。
围绕DeepMind的调性,小哥还认真研究了一番AGI,阅读了相关前沿论文。
面DeepMind研究工程师这个岗,一共有首次沟通、访谈、测验、编程考核、领导面等步骤。准备这些建议早做打算,因为小哥没来得及抱完佛脚,面试日就到来了。
第六面中,小哥被遗憾pass了。好在技术过硬,他又被安排参加了一次孵化/应用部门的面试。又一次充足准备后,offer到手。
值得欣慰的是,后来的这次面试让小哥意识到,孵化团队的工作更适合他。
在7月30日的Twitter评论区中,小哥将整个分享博文做了精简的概括,帮助读者快速抓取有效信息点。
当然,原始博文中,小哥还还附加了很多他积累的ML相关课程链接,以及当前ML(如 GNN)的最新研究进展,感兴趣的话,不妨进原文深度阅读一下。