停止感到迷茫-如何掌握机器学习系统设计
停止感到迷茫:如何掌握机器学习系统设计
towardsdatascience.com/stop-feeling-lost-how-to-master-ml-system-design-easy/
将 ML 想法转化为节省资金、增加收入和创造可衡量价值的生产系统,这决定了你的长期职业发展和你的薪水。
我构建的机器学习系统每年为公司节省超过 150 万美元,这些相同的技能也帮助我获得了超过 10 万美元的工作机会。
在本指南中,我将分解我是如何思考机器学习系统设计的,以便你可以做到同样的事情。
通用框架
下面是我如何设计机器学习系统的框架:
注意:这是在成熟科技公司中应用机器学习系统的最常见设计类型。还有其他更细致的情况,如基础设施设计和 AI/ML 研究实验设计。

框架图由作者设计。
让我们更详细地分解这些步骤。
业务问题
本步骤的目标是:
-
明确目标 — 你试图解决的业务或用户问题是什么,如何将其转化为机器学习解决方案?
-
定义指标 — 我们针对哪些指标:准确率、F1 分数、ROC-AUC、精确率/召回率、RMSE 等,以及这如何转化为业务绩效。
-
约束和范围 — 有多少计算资源可用,我们是否想要实时预测或批量推理,我们甚至是否需要机器学习?
-
高级设计 — 从数据到推理的大致架构将是什么样子?
数据
这一切都是关于收集和获取数据:
-
确定数据来源 — 数据库、API、日志或用户生成数据。
-
确定目标变量 — 目标变量是什么,我们如何获取它?
-
质量控制 — 数据处于什么状态?使用数据是否存在任何法律问题?
特征工程
从数据中创建新的特征来解决特定问题:
-
特征重要性 — 理解哪些特征可能推动目标变量。
-
数据清洗 — 处理缺失值、异常值和不一致的条目。
-
特征表示 — 独热编码、目标编码、嵌入和缩放数据。
-
采样和分割 — 考虑不平衡数据集、数据泄露,并正确分割训练集和测试集。
模型设计 & 选择
这是你展示你对机器学习模型理论知识的时刻:
-
基准—从一个简单的“愚蠢”模型或启发式方法开始,然后逐渐构建复杂性。
-
训练—交叉验证、超参数调整、早停。
-
权衡—考虑权衡因素,如训练速度、推理速度、延迟和可解释性。
服务与部署
理解在生产环境中最佳的服务和部署模型的方式。
-
基础设施—选择云/本地,设置 CI/CD 管道,并确保可扩展性。
-
服务—API 端点、边缘模型、批量预测与在线预测。
评估与监控
最后的部分是设置系统和框架以在生产环境中跟踪你的模型。
-
指标—与“在线”模型相比,“离线”模型需要跟踪哪些指标。
-
监控—设置仪表板、监控笔记本、Slack 警报。
-
实验—设计一个 A/B 实验。
要学习什么?
让我告诉你一个秘密:机器学习系统设计不是入门级面试或技能集。
这是因为机器学习系统设计在中级及以上水平进行测试。
到那时,你将在机器学习和软件工程方面拥有扎实的知识,并可能正在发展一个专业领域。
尽管如此,如果你想要一个全面但绝非详尽的列表,你需要学习以下内容。
机器学习理论
-
监督学习—分类(逻辑回归、支持向量机、决策树),回归(线性回归、决策树、梯度提升树)。
-
无监督学习—聚类(k-means、DBSCAN)、降维、潜在语义分析。
-
深度学习—神经网络、卷积神经网络和循环神经网络。
-
损失函数—准确率、F1 分数、NDCG、精确率/召回率、RMSE 等。
-
特征选择—如何识别关键特征,如相关性分析、递归特征消除、正则化、交叉验证和超参数调整。
-
统计学—贝叶斯统计、假设检验和 A/B 测试。
-
专业领域—时间序列、计算机视觉、运筹学、推荐系统、自然语言处理等。只需要 1-2 个。
系统设计与工程
-
容器化—Docker和Kubernetes。
-
系统设计—缓存、网络、量化、API 和存储。
-
版本控制—CircleCI、Jenkins、git、MLflow、Datadog、Weights and Biases。
-
**部署和编排框架 **— Argo,Metaflow,Databricks,Airflow 和 Kubeflow。
资源
-
动手学习机器学习:使用 Scikit-Learn、Keras 和 TensorFlow(推荐链接)** — **前往书籍学习所有机器学习理论。
-
实用 MLOps(推荐链接)— 我学习机器学习生产工程所有基础知识的书籍。
ML 系统设计面试
我计划稍后发布一个更详细的关于机器学习系统设计面试过程的视频,但到目前为止,我想提供一个高级概述和一些帮助你准备的建议。
机器学习系统设计面试通常针对中级和高级机器学习工程师。在这些面试中,你通常会面对一个广泛、开放式的问题,例如设计推荐系统或垃圾邮件过滤器。
如果你的角色涉及特定的专业领域,例如计算机视觉,面试问题通常会集中在该特定领域。
机器学习系统设计面试的最大挑战之一是其缺乏标准化。与遵循相对一致格式的软件工程面试不同,ML 设计面试的结构差异很大。还有许多内容需要涵盖:无数的概念、权衡和潜在的解决方案路径。
话虽如此,大多数招聘经理倾向于从几个关键维度评估候选人:
-
**问题翻译 — **你能将一个商业问题转化为机器学习解决方案吗?
-
**决策能力 — **你是否认识到权衡并合理地证明你的设计选择?
-
**广度和深度 — **你是否展示了你对 ML 理论、各种模型以及如何在现实场景中有效应用它们的扎实理解?
如何准备面试
在准备方面,我推荐一个关键事项。
解决过去的问题。
这里有一些资源可以帮助你找到这样的问题:
-
HelloInterview — 总体来说,这是一个练习所有类型面试的优秀平台。
-
机器学习系统设计面试 (推荐链接) —一本包含许多练习问题的优秀书籍。
-
机器学习面试在线书籍 — 奇普·胡尹的另一项优秀资源。
我还建议查看大型科技公司博客文章,了解更多关于机器学习算法如何大规模部署的信息:
之前,我讨论了系统设计面试不仅测试你的建模技能。
但他们真正测试的是哪些潜在的基本原理?
这正是我在之前的一篇文章中涵盖的内容,它将带你了解你需要知道的一切,以及最佳资源。
另一件事!
我提供一对一辅导电话,我们可以聊任何你需要的事情——无论是项目、职业建议,还是只是确定你的下一步。我在这里帮助你前进!
[与 Egor Howell 的一对一辅导电话]
职业指导、工作建议、项目帮助、简历审查topmate.io](https://topmate.io/egorhowell/1203300)

浙公网安备 33010602011771号