1.2 ML相关符号及术语定义
由于ML从业者的背景和专业领域不尽相同,不同背景的从业者在术语的使用上可能存在细微的差异。接下来,我们对常用的数据术语进行定义,以方便后面内容的介绍,如原始数据、输入数据、特征和特征工程,以及与ML相关的术语,如参数、超参数、管道(Pipeline)等。
1.2.1 原始数据、输入数据、特征与特征工程
数据是任何ML项目的核心“源材料”,原始数据指的是从业务系统直接或间接获取的信息,数值属性的原始数据通常可以直接输入ML模型,但很多时候原始数据在输入模型之前需要进行某种数据预处理,比如原始数据为图片、文本等时。这里的数据预处理属于特征工程的范畴,特征工程是对原始数据或中间特征进行一系列工程化的处理,目标是找到将原始数据或中间数据(已被预处理过的数据)映射为一个更适合建模的新的表示形式,以降低原始数据的噪声和冗余,在提炼出原始数据中,尽可能多信息的同时还能更高效地刻画原始数据与目标的关系。
最终用于模型训练的数据被称为输入数据,输入数据的集合被称为输入空间,通常每个具体的输入称为一个实例,称实例的表示为特征向量,所有特征向量的集合存在于一个空间,即特征空间,特征空间的每一维就是一个特征。
在本书中,我们将使用输入数据来表示输入模型中的真实数据,比如,从业务系统收集到的时间戳,用特征来表示模型实际操作的转化数据(比如,一周中的某一天或者一周发生某件事的次数)。针对中间特征的特征工程的目标则是,进一步提高模型训练的性能,这里的性能可以是准确性。考虑到生产应用场景,有时候为了降低中间计算的复杂度,也需要使用特征工程的方法对中间数据进行处理,以满足部署后业务方调用的工程性能要求,比如降维。
1.2.2 训练样本及预留样本
我们谈论的样本集,通常是指在进行监督学习模型构建时用于训练、验证和测试ML模型的数据。其中用于训练模型的样本被称作训练样本,用于验证和测试模型的样本被统称为预留样本。在实际操作中,通常会将大部分数据随机地分配给训练样本:在训练过程中输入模型数据,用于在训练过程中生成模型参数。验证数据用于评估模型在该数据上的表现,根据模型在验证数据上的性能来决定何时停止训练运行,以及选择合适的超参数。测试数据是完全没有在训练过程中使用过的数据,用于评估训练后模型的泛化能力。
原则上,ML模型性能的离线评估必须在独立的测试数据上计算,而不是在训练或验证集上。同样重要的是,三个样本集(训练集、验证集和测试集)都需要是同分布的,且使用相同的特征及特征工程逻辑。
1.2.3 参数与超参数
参数通常表示为学习算法所训练的模型各变量的权重。参数是由学习算法根据训练数据直接拟合而成的。学习的目标是找到这样的参数值,使模型在一定意义上达到最优。比如,线性回归方程y=wx+b中的w和b,在这个方程中,x是模型的输入,y是输出(预测),模型是否具有固定或可变数量的参数决定了它是“参数化”还是“非参数化”的。模型参数的一些示例如下。
● 人工神经网络中的权重。
● 支持向量机中的支持向量。
● 线性回归或逻辑回归中的系数。
超参数则是学习算法或管道的输入,会影响模型的性能,但不属于训练数据,不能从训练数据中学习。例如,决策树学习算法中的树的最大深度,支持向量机中的误分类的惩罚系数,k-最近邻算法中的k,以及降维算法中的目标维度等都属于超参数的范畴。模型的超参数通常又被称为模型的外部参数,模型超参数的一些示例如下。
● 训练神经网络的学习率。
● 支持向量机的C和sigma超参数。
● k-最近邻算法中的k。
对于初学者来说,经常会将模型超参数与模型参数混淆,这里提供一个简单的判断方法:如果一个参数是从业者必须手动指定的,那么它可能就是模型超参数。
1.2.4 参数模型、非参数模型、极大似然估计
前面定义的数据、特征、参数等概念都是学习的组成部分,学习的本质是找到一个输入到输出之间的映射,这里的映射通常用模型来表示,学习就是要训练出最优模型,训练的过程通常被称为拟合,模型拟合本身是一个优化问题,所以我们需要指定一个要优化的目标函数(也被称作损失函数)。在定义目标函数之前,需要设计模型框架,设计模型框架要考虑的因素之一是选择参数化或非参数化的方法。
参数化方法,即参数模型的假设是,数据分布具有一定的函数形式,数据由固定数量的参数的分布生成。此时模型的拟合即为分布的估计,也就是指定或选择模型的参数θ,使得该分布模型可以最佳地拟合观测到的数据。
非参数化方法,即非参数模型的假设是参数的数量可以动态变化。在一些方法中,每一个数据点都可以看作一个参数,最常用的非参数化方法之一是k-最近邻(k-Nearest Neighbors,KNN)算法,其思想是,根据特征空间中距离最近的数据样本所对应的响应值来估计特征向量的响应变量的值。k-最近邻算法是最基础的监督学习方法之一,在互联网行业中被广泛应用于推荐系统。非参数化方法的缺点是,数据维度越大数据空间就越稀疏,每次预测的时候都需要对局部观测值进行计算,不能像参数模型那样通过训练集来概括观测到的模式,接下来介绍的极大似然估计主要针对的是参数模型。
在统计学领域,包含概率论和数理统计两大主题,极大似然估计是数理统计的核心环节,也是ML的核心概念。在图1-3中,我们假设观测到的数据独立同分布于数据分布pdata(x,y),每个数据样本(xi,yi)都可以被解释为因素xi导致输出yi的产生,目标函数则可以被定义为给定参数向量时的概率密度函数,观测到的响应变量的概率是已知的:L(θ)=pmodel(y|x,θ)。
图1-3 极大似然估计过程
L(θ)函数被称为似然函数,它是在假设数据来自参数为θ的模型所指定的分布的情况下观察到数据的概率。在实际应用中,通常为了方便分析和计算,会对似然函数取对数,记作对数似然(Log-Likehood)估计,简称LL(θ)。具体的公式如(式1-1)所示。
极大似然估计的目标是找到能使(式1-1)最大化的参数向量,如(式1-2)所示。
1.2.5 ML管道
首先,让我们明确管道的概念,本书后续章节中会多次使用管道来定义不同的工作流程。在软件开发领域,“管道”一词源于CI/CD的DevOps原则,它是一组自动化流程,允许开发人员和DevOps专业人员将他们的代码可靠、高效地编译和部署到生产计算平台。可以认为这些流程是模块化和可组合的代码块,在整个预制的序列中执行特定的任务。
数据工程的核心概念之一是数据管道,数据管道是应用于其输入和目标之间的一系列数据转换。它们通常被定义为一个图,其中每个节点都是一个转换,边代表依赖关系和执行顺序。有许多专门的工具可以帮助创建、管理和运行这些管道。有时候,也可以称数据管道为ETL(提取、转换和加载)管道。
ML模型通常需要进行一系列不同类型的数据转换,这些转换一般是通过脚本甚至Jupyter中的单元来实现的,这使得它们难以进行可靠的管理和运行。而适当的数据管道方案在代码复用、运行时可见性、可管理性及可扩展性等方面都表现出了优势。
同样,ML管道是一种对ML的工作流程进行编码和自动化的技术,以生成用于生产的ML模型,本质上ML管道涉及的内容也属于数据转换的范畴。很多数据管道中也会使用ML模型进行转换,但最终都服务于ML任务。大多数ML模型都需要两个版本的管道:一个用于训练,另一个用于服务。这是因为用于训练和用于服务的数据格式、访问方式及运行时都有差别,特别是对于实时请求中提供服务的模型。
ML管道是一个纯代码的工件或脚本,独立于特定的数据实例。这意味着可以在源代码控制中跟踪其版本并使用常规的CI/CD进行管道的自动部署,这也是MLOps的核心实践,这让我们能够以结构化和自动化的方式连接代码和数据平面,具体如图1-4所示。
图1-4 使用ML管道连接数据、模型和代码以生成模型与预测
需要注意的是,这里把ML管道分成了训练和服务两个相对独立的管道。它们的共同点是,需要使用相同的逻辑执行数据转换以生成可用特征,但它们的具体实现方式可能是非常不同的。例如,训练管道通常运行在包含所有特征的批处理文件上或从数据库中导出的数据框上,而服务管道通常是在线运行的并接收实时请求的特征,其余的离线特征从数据库中检索。
在实际应用中,不同模型的ML管道所涉及的节点具有相似性,因此应尽可能对管道中涉及的节点进行抽象,尝试复用代码和数据。例如:
● 特征存储:统一提供用于训练管道的历史特征和用于服务管道的实时特征。
● 训练过程各节点模块化:将模型训练过程中涉及的节点进行模块化,有利于训练管道的快速组合。
● 模型即服务:将服务管道封装成通用的模型服务接口,并能够一键生成模型服务。
ML管道的概念给ML工作带来的转变是,建模团队不再只负责构建和维护ML模型,而是要将整个管道作为产品进行集中化开发和维护,这确保了迭代周期的完成效率并提供了更高的扩展性。
1.2.6 模型选择与性能权衡
ML创建的模型本身可以视为一个程序,模型创建的过程会涉及以下常用概念。
模型选择:我们可以将配置和训练模型视为模型选择的过程,甚至ML算法的选择也是模型选择过程的一部分,每次迭代都会产生一个新模型,对于迭代出来的这些模型,我们可以选择使用或继续迭代。当选择了要使用的模型时,该模型相对应的训练样本和算法配置也随之确定。
归纳偏差:偏差是对所选模型施加的限制,所有模型都会有偏差,偏差会在模型中引入错误,并且根据定义,所有模型都可能有错误(因为模型是对观测值的概括)。ML方法可以创建具有低偏差或高偏差的模型,并且可以使用策略来降低模型的偏差。
模型方差:方差体现了模型对训练数据的敏感程度,在数据集上创建模型时,ML方法可以具有高方差或低方差。降低模型方差的一种策略是,在具有不同初始条件的数据集上多次运行模型训练过程,并将平均准确率作为模型性能。
偏差与方差权衡:模型选择本质上可以被认为是对偏差和方差进行权衡的过程。低偏差模型将具有高方差,需要经过长时间或多次训练才能获得可用模型。高偏差模型将具有低方差并且可以快速训练,但模型性能通常不佳。