转行成为一名机器学习工程师,可行吗?
国外一位成功转行的Max Mynter告诉我们——完全可以!
收到了多条X私信后,他决定把自己的成功经验写下来。
他强调说:我不是Karpathy,但我可以算一名扎实的中级机器学习工程师。
他是通过刻意的努力,才成为一名工程师的。而且,就是在最近,他刚刚从业余爱好者转成了一名专业人士。
以前,Mynter从事的是社会学和物理学
因此,他写下来这篇博文,希望为有类似愿望的人们提供可行的路线图和资源,从而为职业生涯奠定基础。
什么是机器学习工程师?
在开始,Mynter给我们提了一个问题:什么是机器学习工程师?
因为机器学习以及相关职位名称及其混乱,Mynter特意和人合写了一份34页的白皮书。
在指南中,机器学习工程师指的是在组织中工作,并使用机器学习来解决业务案例的人,这就意味着创建、改进产品,或让组织更高效地工作。
注意,机器学习研究人员与之不同。他们强调的是在科研中开发新颖的方法,但并不需要解决眼前的业务需求。
机器学习工程师的必备技能
机器学习工程是一个跨学科的职业,我们需要掌握软件工程、数据科学和数学等不同领域的技能,以及应用领域的一些知识。
软件工程
当然,一个合格的机器学习工程师必须会写代码,但最重要的是,你需要是一位有能力的软件工程师。原因如下——
首先,由于机器学习是在数据中发现模式,因此机器学习工程师必须能够处理足够数量的数据。通常这意味着数据量超出了手动处理的量。
其次,由于机器学习工程师的绩效是通过业务反映的,因此这个岗位就需要能部署模型,并且将其集成到更大的产品环境中。
可以说,如果没有为用户提供任服务,那一个工程师的工作就是失败的。
最后,如果了解计算机的内部工作原理,以及构建定制工具的能力,你的开发速度就会大大提高。
直觉和专业知识确实可以极大地帮助你设计模型,但在实验过程中构建机器学习模型,始终是必要的。
在这个过程中,机器学习工程师需要尝试大量有根据的猜测,并且探究怎样会让效果更好。
这个过程迭代得越快,最终的输出就越好。而软件工程技能有助于更快地自动化和迭代,并且使得各个实验更加高效。
作者还援引了OpenAI联创Greg Brockman的观点。
Brockman曾表示:学习机器学习其实比学习软件快得多,优秀的软件工程师潜力巨大
可以说,机器学习最终是一门计算机科学的学科,而软件工程,就是让计算机科学成为有效应用的方式。
数据科学
由于ML是从数据中学习模式,因此ML工程师需要具备处理数据的能力。
他们需要能够处理混乱的现实世界数据记录,知道如何收集、理解这些数据,还要能设计出有用的特征,并且解释模型输出的敏感性。
最棘手的错误并不是内存不足,而是当训练循环运行后,模型输出了看似正确但其实是错误的结果时。
数据科学家一次又一次地尝到惨痛的教训:想要构建一个优秀的模型,最优秀的方法就是花大量时间处理数据。
ML工程师还需要的一个技能就是做研究。
你需要识别与你手头问题相关的论文,并且能够复刻这些方法,应用到自己的领域。
数学与统计学
机器学习工程师需要掌握什么样的数学技能?这个问题很难量化。
在大多数情况下,你在日常中不会明确地需要用到它们。
然而它总是隐性地被需要。
因为了解正确的数学知识,对于理解当前问题的数据、选择合适的算法来说至关重要。
为此,机器学习工程师需要具备实数微积分、线性代数和概率论的基础。这些是用于构建和训练许多机器学习模型的核心数学理论。
而在训练LLM或处理大型数据集时,你会从数值方法和优化理论的知识中受益。
最后,为了理解特定问题的数据,你还需要掌握统计知识。
应用领域
虽然ML更像是一个通用工具箱,但ML工程师却可以从特定领域知识中受益匪浅。
一方面,它们会帮你更了解你的用例、用户和可用数据。
另一方面,他们发展了处理特定类型数据和合适模型的专业知识。
例如,用于文本的语言模型、用于视觉的CNN或用于时间序列的RNN。
成为机器学习工程师,有哪些途径
通常,进入机器学习工程有两种途径——
- 数据科学路线。首先,你需要精通数学和数据工作,开始使用机器学习,然后学习必要的软件工程技能。
- 软件工程路线。当你成为一名有能力的软件工程师,可以在职业生涯的某个时候转向学习数学、数据和机器学习技能。
在作者看来,对于自学者来说,2是更好的路线。
这是因为,即使拥有基本的数据和机器学习技能,你对公司也是有用的。
许多业务问题相对简单,只要部署简单模型,就已经可以产生价值,而困在Jupyter笔记本中的出色模型,只是一个玩具而已(尽管非常有趣)。
当然,这并不意味着你可以放弃数学了——永远不要保平庸!
如果你碰巧在大学攻读定量学位,那在默认情况下,你上的课会或多或少遵循路线1。
在这种情况下,请在上学期间或学期结束后,花一些时间来学习软件工程知识。
学习计算机科学并专门研究机器学习,同时进行大量实习,以学习行业级的协作开发,这两条路可以同时进行。
对于路线1,这可能是最佳选择。
实用资源
以下是一系列帮助你进入ML工程的结构化课程。
它们更多是为你提供相关技能的建议,而不是明确的课程。
你可以随时进行切换,使用你更喜欢的资源,或者通过直接做项目来掌握所需技能。
你肯定最清楚如何最有效地学习。涵盖本路线图的内容,比如何涵盖它更重要。
学习编码
上述两条路线的基础,都是学习编程,使用计算机。
由于Python的机器学习和数据科学生态系统最为强大,且拥有最多的可用资源,因此是一个安全的选择。
哈佛的CS50课程,涵盖了Python的基础知识,对编程和软件工程做了精彩的介绍。
如果想更深入了解一下,可以去看赫尔辛基大学的《编程基础》。对于已经学过CS50的人,可以浏览一下前几章。
虽然你并不需要了解Python的内部工作原理,就可以将其用于数据科学和机器学习,但这些东西在以后会非常有用。
请将《Dead Simple Python》之类的书放在床头柜上,并时不时地阅读一章。
学习浅层机器学习
学会了编码,你就可以开始学习机器学习了。
你应该从浅层的学习算法开始。它们比神经网络更直观,你可以藉此培养处理数据的技能,无需增加复杂性。
吴恩达的《机器学习专业化》是一个很好的资源,它一直是许多人进入AI的门户。
学习深度学习
了解了ML的基础知识后,接下来你就可以转向深度学习、当前的行业标准和强大的工具箱。
如果你喜欢吴恩达的教学风格,就可以继续学习深度学习专业课程。
如果你喜欢更具大学风格的课程,我推荐Yann LeCun在纽约大学的深度学习讲座。
如果你需要更实用的方法,fast.ai和随附的《程序员实用深度学习》一书可以帮你。
这些资源还涵盖了一些必要的数学知识。如果你发现自己的知识缺乏,deeplearning.ai有深度学习数学课程。
这本书让我受益匪浅。它的章节和实际示例既可以用作教学,也可以作为参考。
建立领域专业知识
一旦掌握了深度学习的基础,就该选择一个领域进行深入研究了。
如果你还不确定选择哪个领域,Huggingface上就有大量课程。
这些课程本身当然不够,但它们是很好的入门读物,可以为您提供研究出论文的基础、背景和词汇,并为你可以构建的项目提出想法。
如果想要开始做项目呢?
软件、编码、机器学习——对于所有这些项目,一些理论知识都是必要的,但工程其实是一种实践,你可以通过实践来学习。
如果你已经完成了课程练习,构建了一些项目,就可以做一些更具野心的事情。
通过建立作品集,你可以更自由地探索自己的兴趣,由新手升级为专家。
一般来说,拥有一个或几个令人印象深刻、架构良好、值得花费一个月时间的创新性项目,比拥有许多基本项目要更好。
而且,它会让你学到更多。
想要申请成功,让这些项目变得切实可行就变得非常重要。
你可能需要写一篇博客或推文,来介绍自己的学习成果。
但你能做的最令人印象深刻的事,就是构建一个前端,以便其他人可以尝试。
学习软件工程
Fullstackopen课程是Web开发和分布式系统的很好的切入点。
它不涉及机器学习,但涵盖了许多工具和实践,它们对于机器学习工程师来说非常有价值,例如构建分布式系统、数据库和容器化。
通过这些知识,你就可以部署模型,为用户提供界面。
本课程使用的是JavaScript,因为它是网络语言。
虽然这一开始可能令人畏惧,但竟然你已经走了这么长一段路,此时硬着头皮给自己的工具包添加另一种语言,也是值得的。
学习MLOps
还有特定于ML的软件工程和开发实践 (MLOps)。
要了解如何在整个生命周期中管理和设计ML产品,fullstackdeeplearning 是一个很好的资源,可以让你了解一个大概。
选择让你的ML工程师生活更轻松的实践,应用到你的项目中,这些努力都是值得的。
结束语
作者表示,如果你遵循本指南,一定可以成为入门级ML工程职位有竞争力的候选人。
因为你既掌握了必要的理论知识,做过的项目也使你成为了几个重点领域的专家。
然而,要成功找到工作,拥有技能只是做到了一半。
你还需要与人交流,展示你的技能。
你可以通过选择实习获得良好的推荐,或者留下来,另外还可以试着获得投资。
FreeCodeCamp的创始人Quincy Larson,就写了一本很棒的书,关于他成为软件工程师的旅程。
尽管他的目标角色略有不同,但这些经历会非常适合你前半段的旅程。
FreeCodeCamp播客上有这本书前100集的有声读物,比如在Spotify上。
需要注意的是:路线图看起来很简单,但实践起来并不容易。
学习机器学习和软件工程很困难,但这不是巫术。
其他人在你之前就已经做到了,如果你下决心,就可以做到(这里有另一篇文章,指导你如何有效地学习困难的东西)。
为了给您一个粗略的了解,这是我预计需要多长时间,具体取决于您的起点。
从零开始学习
如果您全职致力于此路线图,预计需要大约18月的时间,从0开始学习所有内容。
如果你可以上大学,这是最简单的途径。大学可以为你提供所需的社区、指导、课程、实习资源。
如果你想从不相干的行业转行,请一定要利用起之前的经验。即使想要离开,你的专业知识也会让你与众不同。
作为开发转行
如果你已经是一名开发人员,你将很快变得有价值。
下班后,你可以花大约六个月的时间,学习浅层和深层的机器学习,以及你缺乏的数学知识。
你此前的软件工程经验非常有价值,会受到雇主的高度重视。
甚至你会更加幸运,不需要做出任何牺牲。
一旦转行成功,你就可以在工作中学习,并获得报酬。
作为数据科学家进入机器学习领域
如果你是一名数据科学家,你大概率迟早会因为缺乏软件工程能力,而触到职业天花板。
作者直言:自己就是如此。
对于数据科学领域的从业者来说,转向机器学习或多或少是一种自然的职业发展轨道。
如果投入额外的时间来学习,就可以加速你的职业生涯。
你可以在当前的工作资源中寻找ML项目,花几个月时间来完成它们,然后构建一个组合,来让自己转型。
概括
总的来说,你需要做到以下这些事——
- 学习计算机科学基础知识以及编程,通过CS50课程和专用Python资源
- 学习经典(浅层)的机器学习,为数据工作奠定基础,培养直觉
2.1) 建立微积分、线性代数和概率论的数学基础(数值和优化会更加分)
- 按照特定课程学习深度学习,例如Yann LeCun的NYU讲座、fast.ai或deeplearning.ai的深度学习专业课程
- 从fullstackdeeplearning中学习MLOps
4.1) 如果有必要,可以通过fullstackopen来学习软件工程,比如学习Web开发以及分布式系统、DevOps和关系数据库的基础知识
- 寻找您想要从事的领域,通过建立你的作品集来发展专业知识。你可以从Hugginface课程中找到一个起点,跟随你感兴趣的兔子洞,通过论文实现构建一些有趣的项目。
做完这些,你就可以去投简历了。
祝你好运!