如何成为机器学习工程师
又到一年一度的毕业季。今年的毕业季有点不同,这是迎着 AI 爆发元年的毕业季,很多同学想投身 AI 和机器学习行业,向我咨询了很多如何成为一名机器学习工程师的问题。在此,我结合自身入行十年的经理,给大家一些方向和建议。
首先,先给大家泼一盆冷水。要想成为一名合格的机器学习工程师不是一件简单的事,需要在很多方面进行修炼,其中既包括专业知识技能,也包括诸多软能力。机器学习是一件复杂的系统性工程,从数据提起到生产,存在许多挑战,包括特征工程、建模、测试、部署和基础设施管理等。直到几年前,数据科学家们还试图独立应对所有这些挑战,但现实是一个人很难克服这些挑战。为了应对这些挑战,出现了数据工程、特征工程和机器学习 (ML) 工程等新领域。如果看到这里您依然对成为机器学习工程师心存向往,请继续阅读本文正文,我将向您介绍如何成为一名机器学习工程师。
文章目录
- 什么是机器学习工程
- 机器学习项目中的角色与分工
- 机器学习工程的生命周期
- 数据准备
- 模型构建
- 模型部署
- 机器学习工程师的7武器
- 编程能力
- 应用数学
- 机器学习算法
- 深度学习
- 机器学习框架
- MLOps
- 云计算
- 其他技能
- 总结
什么是机器学习工程
机器学习是一项旨在解决问题和任务自动化的现代技术。机器学习是人工智能的子集,其目的是让机器在没有明确指令的情况下自动学习并根据经验进行改进。
构建机器学习项目是一个复杂的过程,需要一系列技能,从建模到部署再到基础设施管理。机器学习工程的出现弥合了数据科学与软件工程之间的鸿沟。幸运的是,随着人工智能的发展,机器学习生态变得越来越完善,今天你可以使用很多成熟的库和平台(例如 Scikit-Learn、TensorFlow、PyTorch、HuggingFace、Comet等)轻松应对机器学习工程中的挑战。
机器学习项目中的角色与分工
机器学习项目中往往存在 3 个关键角色:数据工程师、数据科学家和机器学习工程师。 这 3 个角色分工如下:
- 数据工程师 创建系统和管道来收集原始数据并将其转化为信息。
- 数据科学家 从理论层面创建模型原型。
- 机器学习工程师 使用各种工具来创建模型并将它们部署到生产环境中。
比如公司想要执行情绪分析项目。数据工程师负责正确导出-加载-转换 (ETL) 构建模型所需的数据。如果数据有多个来源或数据是不断流式产生的,数据工程师还要构建数据管道,确保在正确的时间将所有信息传输到系统的正确部分,不会出现延迟或瓶颈。
有了数据,数据科学家会试图找到预测数据是正面、负面还是中性的最佳模型。机器学习工程师会负责构建适合数据的模型并在实际生产中部署该模型,并确保它能够执行。
机器学习工程的生命周期
机器学习生命周期是一个不断改进数据、优化模型、持续部署、监控效果的迭代循环。此生命周期包括三个主要阶段:数据准备、模型构建和模型部署。 下面详细看一下这3个阶段。
数据准备
真实世界的数据集往往并不”干净“。这些数据集需要通过数据预处理进行清理。“Garbage in, garbage out” 是计算机科学中的一个基本概念,这个概念同样也适用于机器学习工程;用干净的数据集来构建模型,往往可以获得一个更好的模型。
模型构建
有了干净整齐的数据集后,机器学习工程师会尝试构建最佳模型。在构建模型时,建议从回归等简单模型开始,然后再尝试神经网络等复杂模型。模型创建后,需要使用准确度、精确度、召回率或 F1 等各种统计指标来评估模型的质量和表现。
模型部署
获得最佳模型后,就要部署、监控和维护该模型。模型部署的目的是将模型投入生产。因此,生产中的模型可以检索数据并返回它们的预测。机器学习工程师还负责监控模型的性能并确保模型做出准确的预测。
机器学习工程师的7武器
成为机器学习工程师是一项挑战。在查看了 500 多个机器学习工程师职位发布后,365datascience 团队列出了机器学习工程师需要具备的技能:
从上图可以看到,成为机器学习工程师需要掌握很多技能。但我认为一个好的机器学习工程师需要具备下面的7项技能,我称之为”机器学习工程师的7武器“。
编程能力
要实施机器学习项目,必须了解一种编程语言。机器学习领域使用最多的语言是 Python 和 R。Python 在数据科学中使用较多,因为它是一种通用且易于学习的语言。 使用 Python,您可以完成从数据清理到模型部署的端到端机器项目。 此外,Pytorch、Scikit-Learn 和 PySpark 等许多重要的机器学习框架都是用 Python 编写的。
应用数学
数学是机器学习工程师的一项重要技能。机器学习涉及很多应用数学概念,例如统计学、线性代数、微积分、概率论和离散数学。在训练模型系数时需要用到很多数学公式。如果您熟悉这些公式,就可以选择正确的算法。大多数机器学习算法都是基于统计学的,所以如果你有扎实的数学和统计学基础,这些公式和原理就很容易理解。
机器学习算法
不存在一个万能的算法可以解决所有机器学习问题。你当然可以尝试所有的算法来建立一个好的模型,但这需要很多时间。熟悉所有常见的机器学习算法非常重要,这样你才能知道在什么地方使用什么算法。以下是机器学习工程师经常使用的一些关键算法:线性回归、朴素贝叶斯、KNN、决策树、支持向量机、随机森林、XGBoost、K-means 和 PCA。后面我会出系列教程逐个讲解。
深度学习
机器学习算法适用于中小型数据集。 然而,当涉及到大数据时,这些算法可能表现不佳。深度学习技术用于分析大数据。深度学习是机器学习的一个子集,是人工神经网络的延伸。 图像分类、语言到语言的翻译和无人驾驶汽车等问题可以通过 GPT-3 和基于 Transformer 的 BERT 等深度学习技术来解决。
深度学习适用于非结构化数据,不需要特征工程。另一方面,深度学习模型对人类来说是一个黑盒,我们很难知悉它们内部是如何工作的。此外,深度学习往往需要大量数据进行训练。以下是机器学习工程师应该了解的深度学习算法:多层感知器、卷积神经网络、递归神经网络、长短期记忆网络、生成对抗网络和 Transformer 模型。
机器学习框架
计算机科学中的 DRY (Don’t Repeat Yourself) 原则同样适用于机器学习领域。当我们构建机器学习模型时,没有必要从头重复发明轮子。机器学习领域已经存在很多非常棒的框架,这些框架可帮助你轻松地开展机器学习项目。 例如,你可以使用 Pandas 进行数据预处理,使用 Matplotlib 和 Seaborn 进行数据可视化,使用 Scikit-Learn 实现机器学习算法,使用 Tensorflow 和 Pytorch 进行深度学习分析,使用 Comet 进行模型优化。
MLOps
未部署到生产环境的机器学习项目是死项目。机器学习运维 (MLOps) 是机器学习工程的核心功能,旨在将机器学习模型投入生产,然后对其进行维护和监控。 换句话说,MLOps 是模型构建和将模型导出到生产环境之间的桥梁。MLOps 是一个相对较新但发展迅速的领域。它相当于机器学习的 DevOps。要执行 MLOps 步骤,您可以使用各种工具,如 MLflow、Kubeflow、MetaFlow 和 DataRobot。
云计算
机器学习项目需要大量的存储和算力。购买并配置机器学习设备是一件耗时耗力的工作。云计算可帮助你轻松配置起具有多个 GPU 的强大机器,在云计算平台上训练模型、部署模型是当下时间和经济成本最优的选择。云计算目前在数据科学和机器学习中的占比越来越重。最常用的机器学习云计算服务是 Amazon SageMaker、Microsoft Azure Machine Learning 和用于 ML 工程的 GCP Vertex AI。
其他技能
上面是我认为成为机器学习工程师必不可少的7项能力。掌握这些技能后,您就能胜任机器学习工程师一职。但如果你想在竞争中脱颖而出,那么最好还要具备一下技能:
- 数据可视化
- SQL数据库
- NoSQL数据库
- PySpark
- Hadoop
- Docker
- Kubernetes
- CI / CD
- Git / GitHub / HuggingFace
- FastAPI / Gradio / Streamlit
除了上述硬能力外,我认为最最重要的是 学习能力 和 沟通能力。
人工智能发展一日千里,每天都有新论文发表,都有新方法新技术诞生,没有持续学习的精神和快速学习的能力,将很快落伍被淘汰。另外,正如前面所讲,机器学习是一个复杂的任务,很难一个人解决所有问题,搞定所有挑战,优秀的机器学习项目都是团队协作,共同作战的,因此在团队合作中一定要有良好的合作精神和沟通能力。
学习能力和沟通能力这2项软能力我认为是比前面列举的所有硬能力都重要的元能力。
总结
机器学习工程师是一个综合要求很高的交叉学科岗位,要求从业者学习很多必要技能和工具,以应对实际项目中遇到的各种挑战。
机器学习和人工智能是最近兴起的快速增长、高薪且需求旺盛的领域。但这里我还是忠告各位应届生朋友,不要一味为了高薪而进入某个领域,如果你对数学、算法、数据和软件不感兴趣,那么进入机器学习领域将遭受地狱般的痛苦。如果你真的是有兴趣,有志向从事人工智能和机器学习领域的工作,那么希望本文能为你提供一个清晰的成长路线图。
最后,祝各位毕业生都能找到自己理想的工作