diff --git a/chapter-4.md b/chapter-4.md index 9afc0fcabb735bde04f54655dda15ee886668ac3..f128bc297379b30260329b1a995881206f27d1e9 100644 --- a/chapter-4.md +++ b/chapter-4.md @@ -1,15 +1,21 @@ # 第四章 MLOps中的数据部分 +在一个MLOps系统中,人工智能应用程序的成功不仅需要模型训练(以模型为中心),还需要优秀的数据工程(以数据为中心)。究竟什么是以数据为中心,以数据为中心的人工智能和与模型为中心的人工智能有什么区别,在MLOps中数据的生命周期是什么样子的,数据架构是如何演进的,在MLOps系统中主要的数据问题是什么,应该如何解决,这些问题都会在本章中有详细的讲解。 + ## 4.1 问题和挑战——从以模型为中心到以数据为中心 +机器学习的进步是模型带来的还是数据带来的,这可能是一个世纪辩题。著名的吴恩达博士对此的想法是,一个机器学习团队80%的工作应该放在数据准备上,确保数据质量是最重要的工作,每个人都知道应该如此做,但没人在乎。如果更多地强调以数据为中心而不是以模型为中心,那么机器学习的发展会更快。本节将介绍这两种模式的区别,以及要以数据为中心的原因。 + ### 4.1.1 以模型为中心的时代 -以模型为中心的人工智能时代已经一去不复返了。用著名的吴恩达博士的话来说,人工智能系统是由代码与数据组成的。代码是使用Python、C++、R等一些框架编程的模型。而且,全球所有研究实验室面临的挑战是,对于给定的基准数据集(例如COCO数据集),创建性能更好乃至最先进的模型架构。 +以模型为中心的人工智能时代已经一去不复返了。用吴恩达博士的话来说,人工智能系统是由代码与数据组成的。代码是使用Python、C++、R等一些框架编程的模型。而且,全球所有研究实验室面临的挑战是,对于给定的基准数据集(例如COCO数据集),创建性能更好乃至最先进的模型架构。 这被称为以模型为中心的方法——保持数据固定并迭代模型及其参数以提高性能。 ![以模型为中心的方法](images/chapter-4-1.png) +图4-1 以模型为中心的方法 + 当然,对于算法工程师来说,能够在代码托管平台(如Github)上轻松访问更新更好更强的模型并能够在此基础上创建自己的项目训练最好的模型真是太棒了。对于很多机器学习算法工程师来说,这种感觉是,在努力学习机器学习理论之后,终于可以应用并尝试创造一些强大的东西。 这一时期的特殊性在于,在当时,数据收集是一次性的任务,在项目开始时执行,目标可能是使数据集随着时间的推移而增长,但对其内在质量没有太多反映。 @@ -20,17 +26,21 @@ ### 4.1.2 以数据为中心的时代 -时代变了,该领域的一些有影响力的人,比如吴恩达博士,开始提出一些新的范式来处理机器学习系统,那便是关注数据。这种方法现在被称为以数据为中心——你可能在很多创业网站上看到过这些词,它们可以有不同的含义和应用,但本书将首先介绍这个概念。 +时代变了,该领域的一些有影响力的人,比如吴恩达博士,开始提出一些新的范式来处理机器学习系统,那便是关注数据。当系统运行不正常时,许多团队会本能地尝试改进代码,但是对于许多实际应用而言,集中精力改善数据会更有效。这种方法现在被称为以数据为中心——你可能在很多创业网站上看到过这些词,它们可以有不同的含义和应用,但本书将首先介绍这个概念。 许多人经常混淆以数据为中心和数据驱动的方法。数据驱动方法是一种从数据中收集、分析和提取见解的方法。它有时被称为“分析”。另一方面,以数据为中心的方法侧重于使用数据来定义您应该首先创建的内容。 ![以数据为中心和数据驱动的区别](images/chapter-4-2.png) +图4-2 以数据为中心和数据驱动的区别 + - 以数据为中心的架构是指一个系统,其中数据是主要和永久的资产,而程序会发生变化。 - 数据驱动的架构意味着通过摄取大量数据来创建技术、技能和环境。 以数据为中心的方法是您系统地更改或增强数据集以提高模型的性能。这意味着与以模型为中心的方法相反,这一次模型是固定的,你只需要改进数据。增强数据集可以有不同的含义。它可以包括注意标签的一致性,关注时序数据的穿越问题,对训练数据进行精细采样,以及明智地选择批次;并不总是意味着努力增加数据集的大小。 +表4-1 以模型为中心的机器学习与以数据为中心的机器学习的区别 + | 以模型为中心的机器学习 | 以数据为中心的机器学习 | | :---- | :---- | | 处理代码是中心目标 | 处理数据是中心目标 | @@ -43,6 +53,8 @@ ![以数据为中心的方法](images/chapter-4-3.png) +图4-3 以数据为中心的方法 + ## 4.2 MLOps中数据的生命周期 数据的生命周期由使用过程中的一系列阶段组成。每个阶段都由一组策略控制,这些策略可在每个生命周期阶段实现特征价值最大化。这种在数据输入到数据销毁的整个生命周期中管理数据的方法被称为数据生命周期管理。好的数据生命周期管理流程可以为MLOps的数据系统提供好的结构与组织,还可以实现流程中的关键目标,比如数据安全性与数据可用性。 @@ -89,11 +101,15 @@ Pentaho的CTO James Dixon在2011年提出了“数据湖”的概念。数据“ 借助元数据的管理,各个数据平台与服务中的数据,如Kafka,Iceberg,Hive等均可围绕机器学习进行统一管理,例如告知特征来自何处以及在数据源之上被应用的转换与算法等。 -![chapter-4-4.png](images/chapter-4-4.png) +![特征的流动](images/chapter-4-4.png) + +图4-4 特征的流动 开发人员以及算法科学家也可以方便地了解围绕着某一个机器学习模型的所有特征源的沿袭信息。 -![chapter-4-5.png](images/chapter-4-5.png) +![特征源的沿袭信息](images/chapter-4-5.png) + +图4-5 特征源的沿袭信息 ## 4.4 MLOps中主要的数据问题 @@ -127,6 +143,8 @@ Pentaho的CTO James Dixon在2011年提出了“数据湖”的概念。数据“ ![数据质量定义](images/chapter-4-6.png) +图4-6 数据质量定义 + 一般来说,保证数据质量的技术可以分为以下几类:缺失数据的填充、异常值的检测、数据的转换、数据的降维、交叉验证、Bootstrapping自助法算法。 接下来让我们来看看在面对不同的数据质量问题时我们应该如何提高数据的质量。 @@ -171,6 +189,8 @@ MLOps系统在利用时序数据解决实际问题时,有可能遇到与过拟 我们有针对于某一个用户的时序特征值如下表所示: +表4-2 某一个用户的时序特征值 + | timestamp | user_id | feature_value | | :----: | :----: | :----: | | 12:00 | 0001 | 5 | @@ -180,6 +200,8 @@ MLOps系统在利用时序数据解决实际问题时,有可能遇到与过拟 我们又有针对该用户的二分类训练样本: +表4-3 该用户的二分类训练样本 + | timestamp | user_id | label | | :----: | :----: | :----:| | 12:30 | 0001 | 0 | @@ -189,6 +211,8 @@ MLOps系统在利用时序数据解决实际问题时,有可能遇到与过拟 我们希望的是可以重现过去特定时间点的特征状态,也就是实现point-in-time join。如此一来,我们便可以避免时序特征穿越的问题。最终正确的训练数据如下表所示: +表4-4 正确的训练数据 + | timestamp | user_id | feature_value | label | | :----: | :----: | :----: | :----:| | 12:30 | 0001 | 5 | 0 | @@ -210,6 +234,8 @@ MLOps系统在利用时序数据解决实际问题时,有可能遇到与过拟 ![数据回填的工程实现](images/chapter-4-7.png) +图4-7 数据回填的工程实现 + - Redis中只保存最新版本的特征数据,提供给线上推理使用。 - Kakfa中的数据通过Flink写入数据仓库中,作为SDI(原始数据)层长期存储。 - 数据仓库中保存有样本数据。 @@ -234,6 +260,8 @@ MLOps系统在利用时序数据解决实际问题时,有可能遇到与过拟 ![快照的工程实现](images/chapter-4-8.png) +图4-8 快照的工程实现 + - Redis中只保存最新版本的特征数据,提供给线上推理使用。 - Kakfa中的数据通过Flink写入数据仓库中,作为SDI(原始数据)层长期存储。 - 数据仓库中保存有样本数据。 @@ -258,6 +286,8 @@ MLOps系统在利用时序数据解决实际问题时,有可能遇到与过拟 ![请求快照的工程实现](images/chapter-4-9.png) +图4-9 请求快照的工程实现 + - 线上推理时的特征值与请求相关信息一同保存。 - 天级Join生成训练集,训练模型。 @@ -273,6 +303,8 @@ MLOps系统在利用时序数据解决实际问题时,有可能遇到与过拟 ##### (4) 对比 +表4-5 解决时序数据的穿越问题的方案的对比 + | 方案 | 计算量 | 存储量 | 适用场景 | | :----: | :----: | :----: | :----: | | 数据回填 | 极大 | 小| 作为请求快照的补充,线下试验新特征 | @@ -299,6 +331,8 @@ MLOps系统在利用时序数据解决实际问题时,有可能遇到与过拟 ![分类学习的迭代过程](images/chapter-4-10.png) +图4-10 分类学习的迭代过程 + 第一步训练阶段:训练集经过特征抽取和训练产出了模型。 第二步评估阶段:使用训练产出的模型,输入未进入训练集的样本进行预估。评估模型的效果符合预期时,则该模型可以进行线上推理。 @@ -319,10 +353,12 @@ MLOps系统在利用时序数据解决实际问题时,有可能遇到与过拟 #### 2. 一致性问题的解决方案 -传统的方法是添加校验流,对上述三个关键指标进行一一验证。如下图所示,在线上推理阶段产生新的训练集T2之后,我们可以将E1替换为T2,作为附加的校验流。 +传统的方法是添加校验流,对上述三个关键指标进行一一验证。如下图所示,在线上推理阶段产生新的训练集T2之后,我们可以将E1替换为T2,作为附加的校验流。 ![附加校验流](images/chapter-4-11.png) +图4-11 附加校验流 + 此时,线上推理阶段的输入与校验的输入进行了统一,数据一致性问题的校验为: - 离线样本T2与在线样本P1的内容是否一致(T2应为P1的子集); diff --git a/images/chapter-4-1.png b/images/chapter-4-1.png index 69734e43a6b229a572a3d9f8168f0501160dad62..d779790189d6af39bc47b45984a9512a74bf20e9 100644 Binary files a/images/chapter-4-1.png and b/images/chapter-4-1.png differ diff --git a/images/chapter-4-2.png b/images/chapter-4-2.png index ac72cb474e54c1c6cf84ad511961fc3b35ba0e8e..6438c671f9dc5197bb65d63339cc93e19dd2f0da 100644 Binary files a/images/chapter-4-2.png and b/images/chapter-4-2.png differ diff --git a/images/chapter-4-3.png b/images/chapter-4-3.png index ba0b3a364dcc9161f3e2647d5ba81b03251ae7b7..1b5ef1350e41d530544ed25301f7661047373f6b 100644 Binary files a/images/chapter-4-3.png and b/images/chapter-4-3.png differ diff --git a/images/chapter-4-4.png b/images/chapter-4-4.png index 336e6fd83626d70938bb576086576557a9fac3a7..ddbc58c4f1f8f944a090b6b1c4ec3f616f81da60 100644 Binary files a/images/chapter-4-4.png and b/images/chapter-4-4.png differ diff --git a/images/chapter-4-5.png b/images/chapter-4-5.png index 6580e0981671043699af139185290c3b83dcd68e..6193fef6483b27e0cb12a23978a0046ecfd69d62 100644 Binary files a/images/chapter-4-5.png and b/images/chapter-4-5.png differ