机器学习(ML,machine learning)是数据科学(data science)和人工智能(AI,artificial intelligence)的一个子集(subset),也是实现人工智能的途径之一,机器学习并不是某种具体的算法,而是存在非常多的实现方式、框架、算法,具有多种不同的学习范式(learning paradigms),其在现代具有非常广泛的应用且综合性非常强,是一门跨越多领域、多学科的科际整合 / 跨学科(interdisciplinarity)。
标签、特征与模型
标签(label)、特征(feature)和模型(model)是在机器学习中普遍存在的三个基础概念,同时也是核心概念。
标签为预测(prediction)所得到的目标(target)值,这里以监督学习(SL,supervised learning)常见的分类任务(classification)和回归任务(regression)来看,它们所得到的分别是定性(qualitative)输出和定量(quantitative)输出。对于分类问题,标签可能是某些离散(discrete)的类别,也就是对输入进行定性,比如说,使用某个模型对图片进行物体分类检测,并预测出图片中的物体是一只“小狗”。对于回归问题,标签可能是某些连续(continuous)的数值,可理解为在某一范围内任意的一个确切值,比如说,根据最近的天气情况,来预测明天的“气温”。以上的小狗和气温,分别就是对应的分类任务和回归任务根据输入所预测出的目标(标签)。
特征是从原始数据中通过特征工程所提取出来的,为数据自身的固有属性,例如:某个人的年纪、性别、出生地等信息;某字体文字图像根据特定算法计算出某文字的特征值等。数据中可能包含着大量的特征信息(如例子中的个人信息就包含了多个特征值),现实数量可能成百上千,甚至百万以上都有可能,这些特征组成了数据的特征集(feature set),每个特征可使用权重(weight)来表明其对模型输出结构的贡献程度,或者说特征的重要程度。如果特征数量太多,有些特征可能是不必要的,通常会使用特征选择来对原始特征集进行精简,得到一个特征子集(feature subset)。
标签和特征可以是任何东西,也可以有任意数量,并没有什么硬性的规定,而是根据实际需求而定。
模型是通过机器学习训练出来的,特征和标签是构建这些模型的基础,而模型定义了特征与标签之间的映射关系(mapping),根据要解决的问题的不同,模型的种类有很多。模型通常都具有泛化能力(generalization),即具有能够对未知(新)数据进行有效预测的能力,对于多数简单的情况,在实际应用模型时,通常可以将特征视为模型的输入,而将标签视为模型的输出。
数据集
机器学习中的数据集(dataset)也可称为样本集(sample set),如果以任意方式对数据集进行观测,可将每一次观测到的任意内容定义为一个数据点(data point),这在统计学中也称为观测值(observation),数据点的定义非常灵活,假设每个样本(sample)为一行,而每行样本中有多列信息(如特征),那么一个数据点可以是一个样本的整行数据,也可以是样本部分列的组合。机器学习的通常做法是将数据集中的每个样本视为一个数据点,而每个数据点为一个基本单位,因此,样本和数据点这两个概念一般可以互换使用。
数据集可以是结构化数据集(structured dataset),其每个样本可包含多个特征和标签,不包含标签的样本是无标签数据(unlabeled data),携带标签的则是有标签数据(labeled data),这两种数据适合于不同的情景。一般可根据实际情况,在开发机器学习模型的预处理阶段(preprocessing stage),执行数据标记(data labeling)或数据注释(data annotation)处理,即识别原始数据,并为数据添加一个或多个标签,以为模型指定其上下文,从而使机器学习模型做出准确的预测。
数据集也可以是非结构化数据集(unstructured dataset),比如在深度学习中,通常更适合使用图像、音频文件、视频文件等类型的数据,不过这通常需要高度的抽象化才能够提取特征。
数据集中的样本数据,根据实际情况,可能需要进行不同程度的人为干预,添加一些额外信息(如标签)以帮助模型更好地(或者说更准确地)理解数据。
数据集理论上是越大越好,为了获得更稳定的结果和对未知数据上预测能力的精度评估,通常会采用交叉验证(CV,cross validation)的做法,最基本的方式是 k 折交叉验证(k-fold cross validation)。将整个数据集拆分为多个子集,这种拆分是有必要的,最起码需要分出两种,一般可分出三种数据集:训练集(training dataset)、验证集(validation dataset)和测试集(test dataset),简单来说,训练集用于拟合模型(或者说训练模型),验证集对模型的泛化能力进行评估,同时调整超参数,使模型处于最好的状态,测试集则是对调整后的模型进行最终评估,详细可看:Training, validation, and test data sets。
基本工作方式
基准真相 / 真实值(ground-truth):通过直接观测或测量得到的真实信息
观测者(observation / observed value):通过观测得到,比如数据集中的样本,观测值也可能属于真实值
预测值(predicted value):模型通过推理(inference)所得到的预测信息
所有的机器学习,本质上都是为了减少人工干预(human intervention),使某些任务能够让机器尽可能的自主完成。
其基本思路(或者说普遍任务)是把现实中的问题抽象成数学模型,同时还需要向适合的模型算法提供大量高质量的训练集(training dataset),并给定合适的超参数(hyperparameter)以指定学习过程的细节,其学习过程称之为训练(training),在训练期间,算法会自动分析出数据中的规律,得出已知输入特征和输出之间的映射关系,并推广到未知的数据,以此构建出模型。
模型需要进行评估(model evaluation),即评估模型的准确度(accuracy)、精度(precision)、泛化能力、模型与数据集中的数据点(data points)之间的拟合程度(fitness)等指标,如果发现存在任何问题或者不满足标准,将会根据反馈对模型进行优化(model optimization),算法会自主调整参数(如权重),并再次训练,机器学习算法将重复评估与优化这种迭代过程,直到达到精度阈值为止,并最终形成有效的模型,过程期间可能会涉及到不同的数据集(如训练集、验证集、测试集)以进行交叉验证。
模型在部署(model deployment)之后,根据实际应用,可用于数据模式识别(pattern recognition)、对未知数据输入自动生成或预测输出等情景,随着机器学习摄取更多的新数据,算法会不断的得到改进,也变得更为准确。
可见,机器学习的过程与人类学习的过程非常相似,先由别人传授知识,自己从中掌握规律并推广到相似的其它情景中,同时还要对知识的掌握程度进行验证并不断完善。
训练误差与泛化误差
奥卡姆剃刀原理(Occam's razor)是一种解决问题的原则,其基本解释为“如无必要,勿增加实体”,强调在复杂情况下,优先采用更简单的方法(公式或理论等)来解释和解决问题,该原则可更通俗地解释为“最简单的解释通常是最好的解释”。
这个原则也被运用到了机器学习领域中,比如说,在所有可选择的模型中,能够很好地解释已知数据且更为简单的模型,就是最好且更应该被选择的模型。
训练误差(training error)指的是模型在已知训练集(已知样本)上所表现出的误差,这体现了模型与训练集之间的拟合程度(fitness)。可通过损失函数(loss function)来量化目标的真实值(基准真相)与预测值之间的差距,损失函数根据模型参数进行定义并取决于数据集,该函数通常是衡量单个数据点(样本)的误差,但也可以用于整个训练集。成本函数(cost function)与损失函数类似,不过其通常衡量的是整个训练集,还可能包含一些额外项,如约束(constraints)或惩罚(penalties)等正则化项。虽然这两种函数并不一样,但在机器学习中通常会将它们视为相同概念,有时它们会被称为误差函数(error function)。
泛化指的是模型对未知数据的预测能力,泛化误差(generalization error)指的则是模型在对未知的新数据进行预测时所表现出的误差,由于未知数据本应该输出的真实值(基准真相)通常也是未知的,因此这种误差通常无法直接计算,不过可以使用测试集来进行评估,因为测试集中的样本是事先准备好的,所以其真实值是已知的。
拟合程度、训练误差和泛化误差是评估机器学习模型性能的重要因素,它们通常都是相关的,需要综合评估从而达到较为平衡的状态,使机器学习模型做出更准确的预测。
当模型对训练集学习得太好时,拟合程度会很高,表现为训练误差很小,但泛化误差可能会比较大,换句话来说就是,模型在训练集上表现良好,而在未知的新数据上表现较差,这种情况为过拟合(overfitting),也称为过训练(overtraining),这主要是因为训练集众多样本中可能存在着噪音(noise),模型复杂度过高且过于依赖训练集,可理解为,模型是在尝试“记住”训练集,而不是“学习”其中的规律。
反之,当模型对训练集学习得不够好时,将不能很好的拟合训练集,无法准确地捕捉输入与输出变量之间的关系,这种情况就是欠拟合(underfitting),也称为欠训练(undertraining),此时训练误差会较大,这可能是由于模型过于简单、特征提取不足或者正则化过多等因素导致的。
此外,还有一种情况是,模型不收敛(non-convergence),其误差不能趋近于稳定,表现为预测准度飘忽不定,波动较大。
机器学习能够自主从经验中学习来提升自身,可定义一个与模型表现相关的目标函数(objective function)用于量化和评估模型的性能(或者说好坏),这是一种比损失函数和成本函数更为宽泛的函数类型,其被设计成是“可优化”的,可包含优化目标,如何找到最佳参数来求解,使目标函数最小化(minimize)或最大化(maximum),就是机器学习中的优化问题(optimization problem)。
目标函数一般可以是一个合适的损失函数,那么最小化损失函数,也就是使训练误差最小化,因此优化的目标就是减少训练误差。不过,由于还存在着泛化误差这一因素,还得考虑拟合程度,这某种程度体现了模型的泛化能力,过拟合和欠拟合等不良情况都应该要避免,一般不会出现欠拟合的情况,所以实际需要考虑的一般是过拟合。
为此,通常需要进行正则化(regularization),其可理解为将问题的答案转换为更简单的答案的过程,这符合奥卡姆剃刀原则,正则化可以防止过拟合,从而减少泛化误差,其基本做法是往目标函数中添加正则化项(regularization term),如先验(priors)、约束(constraints)或惩罚(penalties)等,它们通常是以人为设定的超参数的形式添加入目标函数中,由于添加了额外项,所以目标函数可看作为损失函数(或成本函数)加上正则化项。
可认为,优化本身的目标是为了减少训练误差,而正则化则是在优化的基础上防止过拟合进而减少泛化误差,不过,除了正则化外,还有其它一些做法可防止过拟合,比如提前停止(early stopping)、剪枝(pruning)等。
假设绿色小球代表小狗、紫色星星代表小猫
from: What is underfitting?
绿色线为过拟合、黑色线为较优拟合状态
from: Overfitting - Wiki
MLOps
机器学习运维(MLOps)是结合了 DevOps 和 GitOps 原则的一组工作流最佳实践,并演化为一种独立的机器学习生命周期管理方法,其旨在简化机器学习模型的部署和维护过程。
深度学习
深度学习(DL,deep learning)为机器学习和神经网络(NN,neural network)的一个子集,是更为先进的一种机器学习,其基于人工神经网络(ANN,artifical neural network)架构,这是一种从神经生物学(neuroscience)中汲取灵感、受动物大脑中神经网络的结构和功能“启发”的机器学习模型,可理解为对大脑思考和学习等工作方式,以及大脑神经元(neuron)之间的连接和信息传递的“模拟”,不过当前的神经网络并不是打算模拟生物体的大脑功能(目前也无法做到),所以说是“启发”比“模拟”更为合适。人工神经网络衍生出了非常多类型,如卷积神经网络(CNN)。
深度学习中的神经网络采用的通常都是多层神经网络( multi-layered neural networks),即由多个节点层(node layer)所组成的神经网络,节点指的是人工神经元(artificial neuron),多个人工神经元堆叠成一个节点层,通常会由输入层(input layer)、输出层(output layer)以及多个隐藏层(hidden layer)构成一个神经网络,隐藏层是位于输入层和输出层之间的中间层,其通常不直接接受外界信号,也不直接向外界发送信号,所以可看作是一个黑匣子(black box),如果像下图这样存在两个或以上的隐藏层,可被视为深层神经网络,仅包含三层的只是基本的神经网络。
每个层包含的节点(或人工神经元)可将输入数据转换为信息,供下一层用于特定的预测任务,这种多层次的工作方式使深度学习具有深度性,这也是为什么称之为“深度”学习的原因,得益于这种结构,机器也可以通过自身的数据处理进行学习。
从训练集上看,传统机器学习一般采用结构化数据集(structured dataset),通常需要先执行特征工程来预处理数据集,即从原始数据中手动选择和提取特征并为其分配权重,而且可能还会为样本分配标签。而深度学习一般采用非结构化数据集(unstructured dataset),如图像或音频等,相比于传统机器学习,深度学习只需要更少的人工干预即可执行特征工程,其可以从数据中自动习得高级特征,并自行创建新的特征,以区分不同类别的数据,通常还可使用已知错误的反馈进行自主学习(self-taught learning),可将深度学习视为“可拓展的机器学习”。
传统机器学习更适合较为简单且数据量较小的任务,而深度学习的学习能力更强,更适合较为复杂的任务,其通常需要更长的训练时间、更大的数据量,并依赖于更高端的硬件设备,语音识别(speech recognition)、图像识别(image recognition)、生成式人工智能(AIGC,AI-generated content)等都是深度学习的典型案例。
涉及知识
以下列举机器学习可能或必定涉及到的一些学科、理论或算法:
- 线性代数(linear algebra)
- 微积分(calculus)
- 概率论(probability theory)
- 统计学(statistics)
- 决策论(decision theory)
- 逼近理论(approximation theory)
- 优化理论(optimization)
- 数据降维(dimensionality reduction)
- 主成分分析(PCA,principal components analysis)
- 支持向量机(SVM,support vector machine)
- 特征提取(feature extraction)
- 特征选择(feature selection)
- 元学习(meta learning)
- 强化学习(RL,reinforcement learning)
- 分布式训练(distributed training)
- 迁移学习(TL,transfer learning)
- 感知器(perceptron)
- 计算复杂性理论(computational complexity theory)
- 计算学习理论(computational learning theory)
- 计算神经科学(computational neuroscience)
- 神经网络(NN,neural network)
- etc.