最近,有几位朋友通过 Twitter 私信向我咨询如何成为机器学习工程师。虽然我不是 Andrej Karpathy 那样的顶级专家,但作为一名稳扎稳打的中级机器学习工程师,我有一些经验可以分享。我是通过有计划的努力才达到现在的水平,而且我从业余爱好者转变为专业人士的过程就发生在不久前。
如果你也想走这条路,我希望能为你提供一个切实可行的路线图和实用的资源,帮助你转型或为你的职业生涯打下基础。希望我的建议能给你一些启发。
在盲目遵循任何路线图之前,我们先来回答一个问题:什么是机器学习工程师?
机器学习及其相关领域的职位名称一直存在混淆。在本指南中,我们将机器学习工程师定义为:在组织中工作并运用机器学习解决商业问题的专业人士。他们的工作目标是创建或改进产品,或者提高组织的运营效率。这与机器学习研究员有所不同,后者主要致力于开发新的方法论,进行科学研究,而不直接解决即时的业务需求。
尽管这两个角色有很大的重叠,但由于我是以机器学习工程师的身份工作,所以我在这里主要讨论的是这个角色。
机器学习工程是一个跨学科的职业,你需要掌握不同领域的技能。主要包括软件工程、数据科学和数学,以及一些特定应用领域的知识。
软件工程
机器学习工程师不仅要会“编程”,还必须是优秀的软件工程师,原因主要有以下几点:
-
首先,机器学习的核心是从数据中发现模式,这就要求机器学习工程师能够处理大量数据,通常远超过人工处理能力的范围。
-
其次,机器学习工程师的工作成效是通过业务影响来衡量的。因此,他们需要具备部署模型并将其整合到产品整体框架中的能力。如果无法为用户提供实际可用的服务,那就意味着工作失败。
-
最后,深入理解计算机的工作原理和构建定制工具的能力可以大大提高开发效率。在设计模型时,直觉和领域知识确实能够提供很大帮助,但机器学习模型的构建过程本质上是一个反复试验的过程。机器学习工程师需要尝试多种基于经验的猜测,并探索哪种方法效果最好。这个过程越快,迭代速度越高,最终的成果就会越好。扎实的软件工程技能有助于实现自动化,加快迭代速度,并使每次实验更加高效和有效。
顺便说一下,不仅仅是我在强调这一点。让我们来听听更有资历的专家怎么说,比如 OpenAI 的首席技术官 Greg Brockman:
除了少数例外,人工智能领域最具影响力的人往往是那些既精通软件又精通机器学习的专家。虽然大多数人可能认为相反,但通常学习机器学习比学习软件工程要快得多。因此,优秀的软件工程师在人工智能领域往往拥有巨大的发展潜力。
— Greg Brockman (@gdb)
2023 年 8 月 19 日
归根结底,机器学习是计算机科学的一个分支,而软件工程则是将计算机科学理论转化为有效应用的关键途径。
数据科学
机器学习的核心是从数据中发现模式,因此机器学习工程师必须精通数据处理。他们需要具备处理现实世界中复杂混乱数据的能力,掌握数据收集和理解的方法,能够提取有用的特征,并准确解读模型输出的合理性。
在实际工作中,最棘手的问题往往不是那些明显的技术错误(如内存溢出),而是那些隐蔽的逻辑错误。例如,模型训练顺利完成,输出结果看似正确,但实际上却在某些关键但不易察觉的方面出现了偏差。经验丰富的数据科学家都深知,要构建优秀的模型,最有效的方法就是深入钻研数据本身。
此外,机器学习工程师还需要具备扎实的研究能力。他们要能够快速找到与当前问题相关的学术文献,并有能力复现这些研究成果,将其应用到自己的领域中。
数学与统计学
衡量机器学习工程师所需的数学技能水平并不容易。虽然在日常工作中,他们可能不会频繁地直接应用复杂的数学知识,但扎实的数学基础对于理解数据特性和算法原理至关重要。因此,数学能力实际上是机器学习工程师的必备技能。
那么,具体需要哪些数学知识呢?通常来说,机器学习工程师需要掌握实数微积分、线性代数和概率论的基础知识。这些知识有助于他们理解优化算法的原理、实现方法以及模型输出的含义。在处理大规模模型或海量数据集时,数值方法和优化理论的知识也会派上用场。此外,统计学知识对于深入理解数据特性也是不可或缺的。
应用领域
尽管机器学习可以被视为一个通用的工具箱,但机器学习工程师如果能够深入了解特定的应用领域,往往会取得更好的效果。这包括两个方面:首先,他们需要充分了解项目的具体用途、目标用户群体以及可用的数据资源。其次,他们还需要在处理特定类型的数据和选择适当的模型方面积累专业知识。
例如,在处理文本数据时,他们可能会专注于语言模型(Language Models);在处理图像数据时,卷积神经网络(CNN, Convolutional Neural Networks)可能是首选;而在分析时间序列数据时,循环神经网络(RNN, Recurrent Neural Networks)则可能更为适用。不同的数据类型和应用场景往往需要不同的专业知识和技术方法。
通常来说,成为机器学习工程师有两条主要路径:
1. 数据科学路径:首先掌握数学和数据处理技能,然后开始应用机器学习,最后学习必要的软件工程技能。
2. 软件工程路径:先成为一名优秀的软件工程师,然后逐步学习数学、数据处理和机器学习技能。
对于自学者而言,我更推荐第二条路径。原因在于,即使你的数据处理和机器学习技能还处于初级阶段,你也能为公司创造价值。很多商业问题其实并不复杂,一个简单但已经部署的模型就能产生实际效益。相比之下,一个非常出色但仅存在于 Jupyter notebook 中的模型,充其量只是一个有趣的玩具。当然,这并不意味着你可以无限期地推迟学习数学。要记住,不断提升自己才能避免停滞不前。
如果你正在大学攻读定量相关专业(如数学、统计学等),你可能会自然而然地走第一条路径。在这种情况下,建议你在学习期间或毕业后专门花些时间学习软件工程方面的知识。
理想情况下,如果条件允许,最佳选择是同时兼顾这两条路径:主修计算机科学,专攻机器学习,同时通过大量实习来学习业界水平的协作开发技能。这种方法能让你全面发展,为未来的职业生涯打下坚实基础。
下面我将为你推荐一系列结构化的课程,帮助你踏上机器学习工程师的职业道路。这些推荐主要是为了让你了解相关技能,而不是一个严格的课程表。你可以随时根据自己的兴趣和需求调整学习计划,使用你更喜欢的资源,或者直接通过实际项目来学习技能。毕竟,你最了解自己的学习方式。重要的是掌握路线图中的核心内容,而不是死板地遵循特定的学习方法。
既然我承诺给你一个可行的路线图和具体的资源,那就让我们开始吧!
学习编程基础
无论你选择哪条路径,成为机器学习工程师的第一步都是学习编程和计算机基础知识。考虑到机器学习和数据科学生态系统在 Python 中最为成熟,且有大量学习资源,选择 Python 作为入门语言是个不错的选择。
以下是一些推荐的学习资源:
1. 哈佛大学的 CS50 课程:这是一个优秀的编程和软件工程入门课程,涵盖了 Python 的基础知识。
2. 赫尔辛基大学的《编程基础》课程:如果你想更深入地学习 Python,这个课程是个不错的选择。如果你已经学过 CS50,可以跳过前几章。
3. 《Dead Simple Python》:虽然你不需要深入了解 Python 的内部工作原理就能将其用于数据科学和机器学习,但这些知识在未来会非常有帮助。建议你把这本书放在床头,每天睡前读一章。
记住,编程技能是你未来职业发展的基石,花时间打好基础是非常值得的。
学习基础机器学习
现在你已经掌握了编程基础,是时候开始学习机器学习了。建议你从基础机器学习(shallow ML)算法开始。这些算法比神经网络更直观,可以帮助你在不涉及过多复杂性的情况下培养数据处理技能。
推荐资源:Andrew Ng 的机器学习专业课程。这个课程一直是许多人进入人工智能领域的重要入口,内容全面且易于理解。
深度学习
掌握了机器学习的基础知识后,再进一步学习深度学习(deep learning)。深度学习是当前业界的主流技术,也是一个非常强大的工具箱。以下是一些推荐的学习资源:
1. 如果你喜欢 Andrew Ng 的教学风格,可以继续学习他的深度学习专业课程。
2. 对于偏好大学风格的课程,推荐 Yann LeCun 在纽约大学的深度学习讲座。
3. 如果你更喜欢实用性强的方法,可以尝试 fast.ai 的课程和配套书籍《Practical Deep Learning for Coders》。
这些资源也涵盖了一些必要的数学知识。如果你发现自己的数学基础还不够扎实,可以考虑学习 deeplearning.ai 提供的深度学习数学课程。
建立专业领域知识
掌握了深度学习的基础后,下一步是选择一个特定领域深入研究。如果你还不确定自己的兴趣方向,可以尝试 Huggingface 提供的一系列课程。这些课程虽然不够全面,但可以为你提供基础知识、背景信息和专业词汇,帮助你阅读相关研究论文并激发项目创意。
记住,无论是软件开发、编程还是机器学习,理论知识固然重要,但工程实践更为关键。你需要通过实际动手来学习和提高。相信你在学习过程中已经完成了不少课程练习和小项目,现在是时候挑战更有难度的项目了。开始自由探索你的兴趣领域,通过建立个人作品集,从新手逐步成长为专家。
正如 Andrej Karpathy 所说:
如何成为某个领域的专家:
1. 循序渐进地承担具体项目并深入完成它们,采用"按需学习"的方式(即不要自下而上地广泛学习)
2. 用自己的话教授或总结你学到的一切
3. 只与过去的自己比较,不要与他人比较
— Andrej Karpathy (@karpathy)
2020 年 11 月 7 日
通常来说,一两个令人印象深刻、架构良好且富有创新性的大项目,比许多基础项目更有价值。这不仅能让你学到更多,还能让你的简历更加出众。要成为一个优秀的求职者,重要的是要让这些项目变得具体和可见。你可以通过写博客或发推文来分享你的学习心得。但最能展示你实力的方式,是为你的项目构建一个前端界面,让其他人可以亲自体验你的作品。
学习软件工程
接下来我们来说说软件工程。Fullstackopen 课程是学习 Web 开发和分布式系统的一个很好的起点。虽然它不涉及机器学习,但涵盖了许多对机器学习工程师非常有价值的工具和实践,例如分布式系统的架构设计、数据库管理和容器化。这些知识对于部署你的模型并为用户提供界面非常宝贵。该课程使用 JavaScript,因为这是 Web 开发的主要语言。虽然乍一看可能会觉得很难,但你已经走了很长的路,现在值得咬紧牙关,将另一种语言添加到你的工具包中。
学习 MLOps
此外,还有一些专门针对机器学习的软件工程和开发实践(MLOps)。要学习如何在整个生命周期内管理和设计机器学习产品,fullstackdeeplearning 是一个很好的资源,可以帮助你全面了解这些实践。选择那些能让你的机器学习工程师生活更轻松的实践,并将它们应用到你的项目中。这样的努力是非常值得的。
到这里就结束了。如果你按照这份指南进行学习,我相信你可以成为一个有竞争力的入门级机器学习工程师。通过学习上述材料,你将具备必要的理论知识,而你的项目经验会让你在一些重点领域成为专家。
然而,找工作仅仅有技能是不够的。你还需要展示和表达你的技能。你可以通过参加实习、获得好的推荐信(或留任邀请)以及展示你的作品集来实现这一点。FreeCodeCamp 的创始人 Quincy Larson 曾写过一本关于他成为软件工程师历程的好书。尽管他的目标职位与机器学习工程师稍有不同,但其中的经历对你未来的道路非常有借鉴意义。
需要注意的是:尽管这个路线图看起来很简单,但实现起来并不容易。学习机器学习和软件工程确实不容易,但也不是不可能。别人已经做到了,如果你下定决心,你也可以做到。
根据你的起点,学习所需时间大致如下:
从零开始学习
如果你全职投入这份路线图,我估计大约需要 18 个月的时间从头开始学习。
如果你处在人生阶段,可以上大学并且能够负担得起,我认为这是最简单的途径。大学会为你提供一个社区、指导、课程、实习支持,并缓解父母或其他关心你的人对你未来发展的担忧。
如果你正在从一个不相关的行业转行,请确保利用你之前的经验。即使你想离开当前的行业,你的领域知识也是你的优势。一旦你获得了相关职位,你可以在工作中学习,并且跳槽会容易得多。
开发人员的职业转换
如果你已经是一个开发人员,你会很快变得有价值。在下班后花大约六个月的时间学习浅层和深层的机器学习以及你所缺乏的数学知识。你之前的软件工程经验非常宝贵,会受到雇主的高度重视。甚至可能不需要牺牲任何资历。一旦你转换角色,你就可以在工作中学习。
数据科学家的机器学习入门
如果你是一个数据科学家,你可能会因为缺乏软件工程能力而感到职业发展的天花板。至少我是这样。对于那些在数据科学领域的人来说,转向机器学习更多是一个自然的职业进展。如果你花额外的时间学习,可以加速你的职业发展。在你当前的角色中寻找机器学习项目或从上述资源中精选内容,花几个月时间学习,然后建立一个作品集以申请新的职位。
总结
通过遵循这份路线图,你可以成为一个有竞争力的入门级候选人:
1. 通过 CS50 和一个专门的 Python 资源学习计算机科学基础和 Python 编程
2. 学习经典(浅层)机器学习来建立基础并培养数据工作的直觉。
3. 通过特定课程学习深度学习,如 Yann LeCun 的 NYU 讲座、fast.ai 或 deeplearning.ai 的深度学习专项课程
4. 从 fullstackdeeplearning 学习 MLOps
5. 寻找你想工作的细分领域,并通过建立作品集发展专业知识。你可以从 Hugginface 课程找到起点,沿着你感兴趣的路径,构建一些有趣的项目和论文实现。
祝你好运!
原文:https://www.maxmynter.com/pages/blog/become-mle
本文为 CSDN 翻译。
纯分享,版权归全作者所有,有问题联系管理员删除。
|