Logo
Section 1 / 5

简介

学习如何进行机器学习系统设计。

导入

简介

学习如何进行机器学习系统设计。

1. 机器学习面试中你会遇到什么?

  • 大多数主流公司,例如 Facebook、LinkedIn、Google、Amazon 和 Snapchat,都期望机器学习工程师具备扎实的工程基础和丰富的机器学习实战经验。因此,机器学习岗位的面试内容与传统软件工程岗位的面试有许多相似之处,通常包括算法题(类似 LeetCode 风格)、系统设计、机器学习知识以及机器学习系统设计能力的考察。

  • 机器学习的标准开发流程涵盖数据收集、问题定义、模型构建、模型实现以及模型优化。公司在面试过程中,会尽可能全面地评估候选人在这些环节中的实际能力。目前已有大量资源介绍如何训练和部署机器学习模型,但针对端到端的机器学习系统设计,尚缺乏统一的方法论指导。这正是我们设计本课程的重要原因之一。

2. 本课程将如何帮助你?

在本课程中,我们将学习如何从自上而下的视角来应对机器学习系统设计。候选人需要尽早意识到潜在挑战,并从系统架构层面进行应对。以下是典型的思考流程示例:

...
解决机器学习系统设计的6个基本步骤

问题定义

明确问题是关键。候选人需要理解系统设计的目标及其优化目的,并做出合理的假设,同时主动与面试官讨论这些假设。
例如,在 LinkedIn 动态流的设计面试中,面试官可能会提出一个宽泛的问题:

设计 LinkedIn 动态流排序系统。

提问是填补信息空白、明确目标的关键。候选人应首先通过追问来澄清问题,例如:

  • 动态流的内容是否按时间顺序展示?
  • 如何平衡普通内容与广告推荐的比例?

一旦明确了“设计动态流排序系统”这一问题,就可以进一步讨论相关指标,如用户满意度等。

确定评估指标

在开发阶段,我们需要使用离线指标快速评估模型性能。可以从常见的指标入手,例如二分类任务中的 logloss 和 AUC,或预测任务中的 RMSE 和 MAPE。

明确需求

  • 训练需求

    • 端到端训练模型涉及多个组件,包括数据采集、特征工程、特征选择和损失函数设计。
      例如,若要设计 YouTube 视频推荐模型,由于用户实际观看的推荐视频较少,会导致负样本数量远多于正样本。这就引出一个问题:

如何训练模型以应对类别不平衡问题?

模型上线后,我们将获得实时反馈。

如何监控并确保模型不会过时?

  • 推理需求

    模型部署后,要求推理延迟低(<100ms),并能扩展以支持数百万用户。

如何设计推理组件以实现高可用性和低延迟?

训练与评估模型

  • 通常包含三个核心部分:特征工程、特征选择和模型本身。我们将为每个部分应用现代主流技术。

  • 例如,在租房搜索排序中,我们会讨论是否应将 ListingID 作为嵌入特征;在预估外卖送达时间时,会探讨如何高效处理经纬度特征。

设计高层系统架构

此阶段需考虑系统的各个组件及其数据流动方式。目标是提出一个最小可行的设计方案,展示系统的基本运作逻辑。需要解释为何选择这些组件,以及它们各自的作用。

  • 例如,在设计视频推荐系统时,通常需要两个独立模块:视频候选生成服务和排序模型服务。

扩展系统设计

此阶段的关键在于识别系统瓶颈并提出解决方案。可以从以下几个问题入手:

  • 哪些组件可能成为性能瓶颈?
  • 如何对这些高负载组件进行扩展?
  • 系统能否支撑千万级用户的访问?
  • 当某些组件不可用时,应如何应对?

特征选择与特征工程