大家好,我是灸哥,前面已经给大家聊了 MLOps 的基础概念和方法论,今天我们一起聊聊机器学习项目的基础知识和全流程,这是学习和应用 MLOps 的基础。
本文主要灸哥会给大家主要介绍机器学习项目涉及的相关概念和问题,并以全局视角解读机器学习项目的全流程,探讨在这个过程中 MLOps 需要解决的痛点问题。
MLOps 的作用是围绕机器学习项目生命周期,帮助各个角色在一致的方法论和工具链支撑下规范、协同工作,通过自动化工具和集成平台简化工作,消除不必要的错误,加速机器学习项目的规模化落地。先来了解下机器学习的一些基础理论。
机器学习是人工智能领域的重要组成部分,本质就是从历史数据中寻找规律,然后基于规律预测未来。
机器解决问题和人类解决问题模式的对比:
前提:假设一个机器学习的预测过程抽象为下方函数,x、y 均是一组参数值:
机器学习的过程就是在已知 x、y(不一定明确)的情况下,求解合适的 f,并根据 f 来预测新的 y 的过程。
标签就是要预测的事物,函数中的 y,标签可以是一个 0 or 1 的布尔值,也可以是一个离散的枚举集合。
特征是模型预测的输入,函数中的 x,特征是判断标签的依据,标签就是结论。一定程度上,特征的丰富程度和质量决定了模型的效果。
根据特征数值特点可分为离散特征和连续特征
根据特征加工维度可分为原始特征和衍生特征
与时间相关的时序特征
样本是数据集(样本集)的一行。
根据有无标签分为有标签样本和无标签样本
根据组织形式分为结构化样本和非结构化样本
样本是机器学习模型训练的原材料,样本的多少和质量对模型预测效果影响很大,在实际项目执行过程中,如何收集有效的样本成本是项目成功的关键。
模型是特征到标签的映射观,函数中的 f。模型一般包括两个阶段:
训练阶段:通过已知样本进行训练得到模型
推理阶段:通过训练好的模型,针对新的无标签样本进行推理
参数是模型中可学习变量,通过训练数据进行学习和调整,模型和结构和参数的数量一般在训练前就确定好了。
超参数是在训练之前设置的,不是通过训练数据学习得到的,通常用于控制模型的复杂度、学习速率等,以及在训练之前需要手动调整的一些参数。
调参是一个耗时耗力、反复试验的过程,“调参如炼丹”,当前业内为了提升建模效率,有提供自动机器学习技术,可以降低数据科学家的准入门槛,对建模效率起到很重要的作用。
为了训练和评估模型,一般将数据集分为训练数据集、验证数据集、测试数据集。
拆分的原因是机器学习模型训练是一个迭代、尝试的过程。
训练数据集用来学习数据规律,要尽可能体现真实规律,避免样本不平衡导致训练效果差
验证数据集是为了验证每一次迭代模型质量的数据集,通过验证评估进一步指导参数和超参数的调整
测试数据集是为了验证模型的泛化能力,用来实际评估模型效果,它不能与训练数据集、验证数据集有重合,而且测试数据集要求尽量反映真实的数据情况,这样才能提升测试结果的准确性
基于数据样本情况对机器学习进行分类:
监督学习(Supervised Learning,SL):通过训练包含标签的样本,建立特征与标签的映射关系。需要特别考虑模型的记忆性(完全拟合特征与标签的关系)和泛化性(要求模型不仅仅预测历史样本熟悉,更要能预测无标签待测试样本的熟悉),根据标签类别不同,又可以分为分类(离散标签)和回归(连续标签)。监督学习的一个很大挑战就是样本收集和处理,样本的数量和质量决定模型效果,这也是 MLOps 重点关注的问题
无监督学习(Unsupervised Learning,UL):训练样本是没有标签的,在于呈现数据的自身规律。场景的问题就是聚类问题
半监督学习(Semi-Supervised Learning,SSL):介于监督学习和无监督学习之间,利用无标签样本,获得更好的模型效果。
强化学习(Reinforcement Learning,RL):最近很流行,Alpha Go 就是基于强化学习实现的。借鉴行为心理学理论,在对训练对象给予奖励或惩罚的刺激下,逐步形成对刺激的预期,产生能获得最大利益的习惯性行为。本质是通过环节给予的奖励对机器进行指引,这样机器能通过不断试错,学到最终的策略。(生活场景举例:为了提高高考成绩,设置月考、期中考,用来分阶段评价成绩,并制定阶段性奖励,以便于达成提升高考成绩的目标)
机器学习再强,他也是有边界的,那什么样的问题适合用机器学习来解决?
机器学习本质上是通过一些算法分析数据,从而总结其中的规律,然后加以利用。如果问题本身是随机的,不具备逻辑规律,那机器学习无法解决。
一些机器学习场景最初是通过编程解决,但当输入和规则越来越多时,编程会变得非常复杂,维护也非常困难,传统编程已经难以完成,而机器学习是不依赖人类经验,自主从大量历史数据中总结规律,形成模型加以利用。
机器学习需要从数据中挖掘规律,数据是关键。这里的“多”不只是数量多,而是要多且丰富,要能充分反映规律。如果数据太少,规律描述不足,就会出现欠拟合,如果数据很多,分布不均匀,大量同质化,训练的时候可能效果很好,但是泛化性不足,出现过拟合。(Rubbish in,Rubbish out)
衡量一个机器学习项目是否达到业务预期,一般包括以下三个维度:
效果分为模型效果和业务效果。
先来看一下有名的混淆矩阵:
TP,True Positive,真正,样本的真实类别是正样本,模型识别的结果也是正样本
FN,False Negative,假负,样本的真实类别是正样本,模型识别为负样本
FP,False Positive,假正,样本的真实类别是负样本,模型识别为正样本
TN,True Negative,真负,样本的真实类别是负样本,模型识别为负样本
基于混淆矩阵,场景度量指标计算如下:
准确率 = (TP+TN)/(TP+TN+FN+FP)
召回率 = TP/(TP+FN)
精确率 = TP/(TP+FP)
F1 Score = 2PR/(P+R)=2TP/(2TP+FN+FP),是模型准确率(P)和召回率(R)的一种调和平均数,最大值是 1,最小值是 0
机器学习的系统中,除了传统指标(SLA、QPS、延时等)还要关注与机器学习模型特点相关的质变,比如特征的正确性与实时性、训练时长与频率、推理服务的延时与吞吐。
机器学习涉及数据、算法、工程的系统工程,项目的成本投入和落地效率也需要重点关注,比如资源(人和机器)投入、数据接入和处理效率、模型调研和训练效率、业务对接模型服务的周期、性能问题出现频率及排查效率、外围配套系统构建效率等。基于这些因素,提供一套认知高度一致、开放可扩展的机器学习基础设施成为机器学习项目成功的关键,这就是 MLOps。
机器学习项目落地难是业内公认的,曾经有调查报告指出,多达 85% 的机器学习项目未能兑现。那机器学习项目和一般软件项目相比,难在哪里?
机器学习项目不仅要关注功能、性能,还需要关注效果。而效果作为业务目标的关键部分,如果没有达到预期,那功能和性能也无从谈起。效果目标的设定既需要体现专业性也需要体现领域业务性。正确地将业务目标转化为合适的效果指标是一个大挑战。
模型效果与数据相关,目标是基于当前数据给出的,而数据本身不是一成不变的,容易出现概念漂移和数据漂移现象,要避免这个现象的发生就要加速调研和投产。
机器学习项目以数据课学习为核心,由业务专家、数据工程师、机器学习工程师、DevOps 工程师等多角色协同完成,在这个过程中,面临着数据科学家稀缺,多角色协调困难的问题
机器学习项目要想成功落地,需要一套完整的基础设施支撑。它不仅要保证 AI 科学家与 AI 工程师借助平台工程能力完成项目工作,还要让各角色协同工作,尽可能减少错误,提高开发和排错效率,为了达到这个目的,工程上面临很多挑战。
工具繁杂、流程复杂且难定制
部署复杂与弹性扩展
效果重现难
监管与合规难
机器学习项目的一个突出特征就是与数据相关,有统计表明,在机器学习项目落地的工作量中,数据相关的工作占比超过 80%。
数据复杂性一般体现在:
多种数据源以及多种数据形式:多源异构数据,在数据接入和存储方面有很大挑战,需要花费时间和精力
复杂多变的数据处理流程以及数据版本:机器学习项目要对接上下游数据,而这一过程往往需要结合既有系统加以适配。有的企业通过数据流水线来完成从原始数据到可以用来训练模型的特征过程中存在的数据对接、清洗、加工、特征构造等多个环节工作,让工程师将大部分时间花费在构建数据流管道工作中。随着数据流转的复杂度提升以及建模方案的迭代,数据管理、数据版本管理、数据血缘的诉求随之而来,这提高了数据处理和管理的复杂度
线上/线下效果不一致:机器学习包含训练和预估阶段。由于离线和生产环境不同,工程架构上也有很大差异。举个例子,训练时数据来自数据仓库等,处理是批量的,强调大吞吐,一般采用Hive、Spark等大数据计算引擎,然而在预估时,数据来自业务系统,样本少,强调低延时,这就存在一个很大的差距,如特征计算时,数据本身来源不同,并且无法采用同一套模式处理数据,这就有可能引入不一致问题,进而导致效果问题出现。目前,业内在这方面也期望通过统一数据、统一处理、与业务系统形成闭环的方式,尽可能避免这一过程带来的问题,保证预估结果正确性。
如下图,机器学习项目生命周期分为两个大的阶段:
方案调研阶段
方案投产阶段
以数据科学家为核心的调研阶段,需要结合业务实际情况进行必要的业务分析,制定项目优化目标,并通过反复试验寻找合适的解决方案并固化。
业务专家和数据科学家等角色结合实际业务进行分析,辨别机器学习是否可以被应用在场景中,明确业务问题是不是一个机器学习问题以及优化目标是什么
业务专家和数据科学家等角色进一步结合业务和系统现状进行分析,利用机器学习解决问题,明确需要什么数据应该以什么方式获取并标记
业务专家和数据科学家等角色需要考虑机器学习模型如何集成到现有的业务系统中
业务专家和数据科学家等角色评估最终模型效果是否达到预期,分析业务稳定性
最耗时、耗力,并且直接影响模型开发和优化,痛点:如何加速数据处理,避免数据问题给下一阶段带来问题
流程阶段
数据收集:一般从历史数据中获取,但对于一些数据积累不够的场景,需要通过一些手段生成数据
数据探索与验证:在不改动数据本身的前提下分析数据,通用可视化的方式呈现数据中隐含的规律,主要关注数据质量、数据特征
数据清洗和转换:基于数据探索与验证的信息,以及模型训练的样本要求,对数据进行清洗和转换处理。数据处理需要在数据管理、数据版本化、大数据任务编排和管理方面有工具的支撑
把数据处理后的原始样本转变成特征的过程
数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已
经历以下阶段:特征预处理、特征生成、特征选择
以工程师为中心,将调研方案转换为生产可用方案后完成投产,并持续监控各项指标是否符合预期。
数据科学家在阶段一的模型方案一般不能直接投产使用,主要因为:
如何正确、可靠地接入上游海量数据,并通过数据转换周期性地稳定训练并产出模型?
如何在保证性能和正确性的前提下将 模型部署到生产环境,并稳定接入大规模流量?
如何及时观察模型的线上性能和效果表现,并及时收集反馈数据,形成数据闭环,不断迭代?
工程师拿到阶段一获取的特征和模型方案,需要分析原始数据及目标数据的特点、原始数据到目标数据的处理逻辑并制定开发计划以及模型训练计划,这个过程需要关注:
管道:借助管道打通从数据接入、处理到特征工程、模型训练,再到评估的全过程。如何更好地编排和管理底层的框架工具,为 AI 工程师提供友好开发体验,提高生产效率,是业界要解决的关键问题。常用开源工具 Airflow、Azkaban 等
存储:机器学习涉及数据类型很多,数据表、特征、样本、模型、脚本等,不仅容量大,还有版本区别,有很强的血缘关联性,怎样更好地管理这些元数据以及业务数据至关重要。业内比较流行的 MetaServer、FeatureDB 等
聚焦如何将模型变成服务,并将服务与业务系统对接,然后逐步接入真实流量、稳定服务,一般需要进行以下工作:
部署改造:结合模型大小预估匹配流量,选择合适的部署模式和资源规模,要结合性能测试来判定服务是否满足需求
切流发布:切流一般发生在最初投产阶段和新老模型切换阶段,一般会引入 A/B 测试能力
服务上线后,还需要日常运维、监控服务的稳定性和性能
随着时间推移、数据的变化、业务的变化会导致模型效果衰退,需要定期更新模型方案,为了实现不断迭代的闭环,还需要进行数据回流
从数据输入到数据销毁的整个生命周期管理的方法被称为数据生命周期管理。
这个阶段,数据来源丰富,如何聚合多样化的数据来源以及多样化的数据格式成为 MLOps 中数据系统面临的问题和挑战。
数据的组织形式的多样化,影响着 MLOps 系统的数据存储类型,在数据存储的过程中,还需要考虑数据处理流程以及数据版本、数据血缘等。而且还要关注数据安全性,可以通过数据加密和数据转换等方式避免恶意行为侵害,同时还要确保敏感数据符合 GDPR 等政策要求。
数据提供给 MLOps 系统,在数据的接入和处理面临众多挑战:
数据来源、数据类型众多,需要统一管理,不然 MLOps 系统接入压力巨大(管道)
从原始数据到特征数据之间有巨大差异,要经过清洗、加工、特征构造等多个流程,数据使用成本巨大
MLOps 系统对数据的时效性有很高要求,一段时间后,不再使用的数据需要归档保存,但维护归档数据的成本高,而且,必要的时候,可以还需要把归档数据恢复到生产环境。
清除数据记录和安全销毁。
原文作者:灸哥漫谈;如有侵权,请联系管理员删除。