外观
总体架构解剖
一个"机器学习项目"到底由什么组成?多数初学者的想象是"写模型、跑训练",但真实的生产级系统远不止于此。本文把一套完整 ML 系统拆成九个环节,每环节一句话讲清"干什么、为什么、坑在哪",并链接到全站对应页面。这一页是全站的地图——读完它,你对整个领域的骨架就有了。
一、全景图
text
┌──────────────────────────── 机器学习系统 ────────────────────────────┐
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────────┐ │
│ │ ①问题定义 │──▶│ ②数据管道 │──▶│ ③特征工程 │──▶│ ④模型选择 │ │
│ │ 业务→ML │ │ 采集/清洗 │ │ 编码/缩放 │ │ 算法与假设 │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────┬───────┘ │
│ ▼ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────────┐ │
│ │ ⑨监控与 │◀──│ ⑧部署上线 │◀──│ ⑦评估迭代 │◀──│ ⑤训练调优 │ │
│ │ 再训练 │ │ 服务化 │ │ 指标/验证 │ │ 损失/优化器 │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────────┘ │
│ │
│ ⑥ 工程底座:实验管理 / 特征存储 / 模型注册 / CI-CD(贯穿全部) │
└─────────────────────────────────────────────────────────────────────┘九环节不是瀑布式的(现实中会反复回跳),但每个环节都有独立的专业知识与常见陷阱。下面逐一解剖。
二、九大环节解剖
① 问题定义:业务问题 → 机器学习问题
一切 ML 项目的起点,也是最容易被跳过的一环。核心是回答四个问题:
- 这是不是 ML 问题? 规则能写就写规则,成本低一半。判断标准:规则难以手工编写、但样本容易获得。
- 输入输出是什么? 特征 X 是什么、目标 y 是什么、是分类/回归/排序/聚类中的哪种。
- 成功指标是什么? 离线指标(准确率、AUC)要和业务指标(转化率、成本节省)对齐。
- 数据可得吗? 没有数据,后面全是空中楼阁。
问题定义错了,后面越努力越错。典型反面:花三个月把"预测用户流失"的模型做到 AUC 0.95,最后发现业务上要的不是"预测谁流失"而是"干预谁不流失"。
② 数据管道:从原始数据到可用数据
- 采集:日志、数据库、第三方 API、公开数据集;
- 清洗:缺失值、异常值、重复值、格式统一(清洗的常见坑见数据与数据工程);
- 标注:监督学习需要标签,标注质量直接决定模型上限——"垃圾进,垃圾出"(GIGO)是这一环节最硬的规律;
- 划分:训练/验证/测试集,划分必须模拟真实预测场景(时间序列不能随机切)。
关键教训:数据泄露(data leakage)——测试集信息混入训练集,导致离线指标虚高、上线崩盘。这是 ML 工程头号事故源,详见模型评估与验证。
③ 特征工程:模型的"营养配方"
特征工程是"把原始数据变成模型能消化的数值特征":缺失值处理、类别编码(one-hot/目标编码)、数值缩放(标准化/归一化)、特征组合与业务特征。经典机器学习时代"特征工程决定上限",深度学习时代仍有一半场景依赖它。
注意两个极端:特征太少模型欠拟合,特征太多/太脏引入噪声甚至过拟合。原则是"先简单基线,再按证据加特征"——详见特征工程。
④ 模型选择:算法与假设
选模型不是"越新越好",而是匹配数据类型与问题规模:
| 数据类型 | 首选方案 | 原因 |
|---|---|---|
| 表格数据、样本量小 | 逻辑回归/树模型(XGBoost/LightGBM) | 稳、快、可解释、调参少 |
| 图像 | CNN(ResNet 系) | 局部性先验 |
| 文本/序列 | Transformer | 长程依赖建模 |
| 大规模无标注数据 | 预训练 + 微调 | 迁移学习 |
⑤ 训练与调优:损失、优化器与超参数
- 损失函数:回归用 MSE/MAE,分类用交叉熵——损失函数要与业务目标一致(比如预测价格,平方误差会对异常价过度敏感);
- 优化器:SGD、Adam、AdamW 的取舍(学习率、动量、权重衰减);
- 超参数:学习率、批大小、树深度/数量、网络层数——超参搜索见调参与超参数优化;
- 正则化:L1/L2、Dropout、早停、数据增强——对抗过拟合的武器库,见过拟合与正则化。
训练环节的经典失败:loss 不降、梯度消失/爆炸、过拟合而不自知——每个都有对应的排查清单(见常见陷阱与反模式)。
⑥ 工程底座:实验管理、特征存储、模型注册
生产级团队必备的三件基础设施,让九环节可复现、可回滚:
- 实验管理(MLflow、Weights & Biases):记录每次实验的数据版本、代码版本、超参数、指标——否则三个月后你根本不知道哪个实验的效果最好;
- 特征存储(Feast、Tecton):训练与推理共用一套特征,杜绝"训练特征与线上特征不一致";
- 模型注册(MLflow Model Registry):模型版本化、审批、灰度发布。
没有底座的小项目可以先用文件夹+Git 凑合,但从第一天起就要有实验记录习惯——这是设计原则的第一条。
⑦ 评估迭代:用数据说话,不是用感觉
- 指标:分类用准确率/精确率/召回率/F1/AUC,回归用 MSE/MAE/R²,排序用 NDCG——指标必须和业务目标对齐,类别不平衡时准确率是陷阱(99% 准确率的"垃圾模型");
- 验证:K 折交叉验证、留出验证、时间序列的滚动验证;
- 基线:永远先跑一个简单基线(多数类、线性模型),模型必须打败基线才有意义;
- 错误分析:看错例、按错误类型分组统计——迭代的正确姿势是"基于错误分析加特征/调参",而不是随机调参。
⑧ 部署上线:模型服务化
- 离线/在线:批预测(每日跑一遍)vs 实时 API(延迟敏感);
- 服务方式:在线推理 API(FastAPI/KServe)、流式预测、嵌入式(移动端/边缘);
- 性能:模型压缩(量化、蒸馏)、推理加速(ONNX、TensorRT);
- 规模:模型监控、AB 测试、金丝雀发布。
部署的完整工程面(含离线评估与在线表现的差异)见MLOps 与模型部署。
⑨ 监控与再训练:模型会"过期"
模型上线只是开始:数据分布会漂移(用户行为变了、季节变了),模型指标会随之下滑。监控三件事:
- 数据漂移(输入分布变化):PSI、KS 统计量检测;
- 概念漂移(x→y 的关系变了):如疫情期间"特征→流失"规律失效;
- 预测质量(有延迟标签时):点击率、转化率的线上回测。
漂移检测到阈值后触发再训练(定时重训或按需重训)。这一环是"ML 项目失败率高"的主因之一——很多模型不是死于训练,而是死于上线后没人管。
三、九环节的权重与技能地图
不同岗位在这九环上的精力分布差别很大,直接对应求职与 JD 分析的岗位版图:
| 环节 | 算法工程师 | 机器学习工程师 | 数据科学家 | 数据分析师 |
|---|---|---|---|---|
| ① 问题定义 | ★★ | ★★★ | ★★★★★ | ★★★★ |
| ② 数据管道 | ★★ | ★★★★ | ★★★★ | ★★★★ |
| ③ 特征工程 | ★★★ | ★★★★ | ★★★★ | ★★ |
| ④ 模型选择 | ★★★★★ | ★★★★ | ★★★ | ★ |
| ⑤ 训练调优 | ★★★★★ | ★★★★ | ★★ | — |
| ⑥ 工程底座 | ★★ | ★★★★★ | ★★ | — |
| ⑦ 评估迭代 | ★★★★ | ★★★★ | ★★★★ | ★★ |
| ⑧ 部署上线 | ★★ | ★★★★★ | ★ | — |
| ⑨ 监控再训练 | ★★ | ★★★★★ | ★★ | — |
给初学者的建议:① 和 ⑦ 是所有人都要精通的(问题定义 + 评估),③ ④ ⑤ 是算法功底,⑥ ⑧ ⑨ 是工程向的加分项。按学习路径的三条路线对号入座。
四、贯穿全站的四个视角
这一页怎么用
- 想快速建立全局观:通读本文即可;
- 想深入某一环:点链接进对应页面;
- 想动手:直接去从零构建一个 ML 项目,对照本文九环节看 demo 覆盖了哪些、缺了哪些——缺的正是你该补的。