社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

监督机器学习导论

CreateAMind • 1 月前 • 107 次点击  

监督机器学习导论

AN INTRODUCTION TO SUPERVISED MACHINELEARNING

https://math.mcgill.ca/gsams/drp/papers/papers2024/Alexandre-St-Aubin.pdf


摘要

本文作为机器学习(ML)领域中监督学习的入门指南,面向具备数学基础(主要是微积分和统计学)的读者。重点聚焦于神经网络(NN),深入探讨其关键组成部分和学习方法。我们首先概述神经网络,详细介绍单层感知机、神经元和前馈神经网络的架构与功能。讨论延伸至层的结构要素以及激活函数的关键作用。随后,我们通过反向传播和梯度下降优化技术探讨神经网络的学习机制。不同损失函数——对于评估模型性能至关重要——也予以探讨。最后,我们讨论过拟合与欠拟合的挑战,并提出实现最优拟合的策略。

关键词:机器学习,监督学习,神经网络,多层感知机,激活函数,反向传播,损失函数,梯度下降,过拟合,欠拟合。


1 引言

机器学习(ML)最近因其能够通过从数据中提取知识并自主学习来解决复杂问题而人气激增。2022年,ML的一个分支——生成式人工智能领域,在OpenAI推出ChatGPT时经历了重大突破,这是一个很快被广泛采用的大型语言模型。不久之后,OpenAI推出了Dalle-3,一个设计用于从文本描述生成图像的模型。更最近,人工智能领域出现了一种发布特定任务模型的趋势,例如数学方程求解器、复述器、调度器以及其他各种模型。

与传统方法不同,ML不仅关注理解数据,还关注从中推断,允许模型泛化知识并对未见数据做出预测。这种对推断的强调使机器学习超越了仅仅理解信息,允许ML在许多不同领域促进创新和进步。本质上,推断的能力增强了ML的实际应用和影响,导致跨多样领域的显著发展。

有几种类型的ML算法。主要类别分为监督学习、无监督学习、半监督学习和强化学习。图1描绘了ML的主要类别以及每个类别的一些流行模型。值得注意的是,由于ML是一个不断发展的领域,其组织成子领域可能有些混乱。因此,一些领域,例如模仿学习,未包含在图中,甚至最新的机器学习方法调查也往往缺乏全面性。此外,每年都有新技术被引入,重塑我们接近ML的方式。例如,随着现在著名的论文“Attention Is All You Need” [Vaswani et al., 2017]引入transformers,彻底改变了该领域,而更最近,像Mamba [Gu and Dao, 2024]这样的模型正在被开发,可能最终取代transformers。虽然这些主题超出了本文的范围,但它们可能引起读者的兴趣。

监督学习允许机器通过示例学习。机器学习算法的任务是开发实现给定某些输入时指定输出的策略。为此,提供一个已知数据集,其中包含一组输入和相关的目标输出,形式为((x, t)),其中(x)是模型的输入,(t)是目标输出,即标签。算法在数据中找到模式并调整其参数,以更准确地预测未来的输入。这种机器学习算法需要开发者准确地标记训练数据。

广义而言,监督学习解决的两个主要问题是分类和回归。前者包括将对象分类到其适当的类别中。一个众所周知的例子操作在MNIST数据集上,该数据集是一组代表手写数字0到9的图像。分类ML算法将在训练阶段分析数据集的每个点((x, t)),其中(x)是图像,(t)是它代表的数字。然后,给定一个未见过的图像作为输入,算法应预测它代表的数字。

回归旨在预测连续输出变量,而不是离散变量(如在分类中)。一个例子是给定一组由房屋特征及其对应价格组成的训练数据,预测房屋的成本。然而,我们注意到,监督学习也可以涵盖更复杂的任务,例如图像分割和对象检测(例如,YOLO with bounding boxes),其中模型从数据中学到的不仅仅是标签。

无监督学习算法在没有预定义标签的情况下辨别数据中的模式。算法识别数据集内的相关性和结构。这个过程的关键步骤包括聚类,它将相似的数据集分组,以及降维,它简化变量以提取基本信息。

半监督学习作用于包含标记和未标记数据的数据集。通常,标记数据很少,而未标记数据占集合的大部分。半监督学习算法的目标是通过从标记数据推断来分类未标记数据。

强化学习涉及一种结构化方法,其中算法被提供动作、参数和目标。这些算法探索各种选项,从试错中学习,并根据过去的经验调整其策略以优化结果 [Wakefield]。

在本文中,我们旨在提供一个简洁而全面的监督学习介绍,聚焦于神经网络方法。我们希望本报告能作为关键概念的参考,根据需要提供对定义和可靠参考文献的快速访问。我们讨论的大多数基本概念,例如神经元、反向传播和过拟合,都适用于机器学习的各个领域。

我们注意到,在整篇文章中,一些术语会在被定义之前引入,或者可能仅通过说明性示例来阐明。我们选择这种方法来传达思想,是因为机器学习的广泛性质。在某些情况下,术语可以给出精确定义,而其他重要术语则像在普通语言中那样更灵活地使用。所使用的图表和示例取自该领域可信来源,并附有引用。

在开始之前,我们想强调,ML虽然与统计学密切相关,但与它不同。两个领域共享共同的方法和术语,但它们的目标不同。统计学主要关注分析和解释现有数据,而ML旨在从新数据中进行预测和推断。像偏差和方差这样的术语在ML中可能有不同的含义。在ML中,偏差指的是用简化模型近似现实世界问题所引入的误差,而方差衡量模型预测随不同训练数据变化的程度。理解和管理偏差与方差之间的权衡对于开发稳健的ML模型至关重要,正如我们将在第4节中学到的。


2 神经网络

神经网络是机器学习的一个子集,构成了监督学习的核心,其灵感来源于人脑。它们由输入层、隐藏层和输出层组成,并由相互连接的神经元构成,这些神经元具有相关的权重和偏置。被激活的节点通过出边将数据传递到下一层。

2.1 单层感知机

最简单的神经网络被称为单层感知机(见图2)。这种神经网络包含一个单一的输入层和一个输出节点 [Aggarwal, 2018a]。

为了优化损失函数,感知机将使用梯度下降方法,我们稍后会看到。

2.2 神经元

神经元是神经网络中最小的计算单元。上一节描述的单层感知机正是一个神经元,见图3。

定义 2.1(神经元)。神经元由4个元素组成:

  1. 输入,被视为节点,由输入层(2.4节)或神经网络前一层的输出组成。

  2. 权重(定义2.2)和偏置(定义2.3),被视为边,将在前一个神经元的输出到达神经元的输入函数之前对其起作用。

  3. 输入函数取加权输入的求和。

  4. 激活函数(2.5节)作用于输入函数,并将结果输出到后续层。

神经元输出激活的一个简单数学模型是 [Russel and Norvig, 2010]

在谈论神经网络和一般ML模型时,“参数”这个词经常出现。例如,OpenAI喜欢吹嘘他们最新的语言模型有多少参数(GPT-4有1.76万亿)。参数是神经网络中模型从训练数据中学到的元素。这些参数正是上面定义的权重和偏置。参见图4,了解流行大型语言模型在参数数量上的比较。

2.3 前馈神经网络

定义了神经元——神经网络的构建模块之后,我们现在可以给出后者的严格定义。前馈神经网络(FFN)仅在一个方向上具有连接——也就是说,它形成一个有向无环图。每个节点从“上游”节点接收输入,并向“下游”节点传递输出;没有环路 [Russel and Norvig, 2010]。

整个网络是函数复合和矩阵乘法的组合:

其中 L 是层数(2.4节),W是权重矩阵,f是激活函数(2.5节)。

定义 2.4(前馈神经网络)。神经网络是一个计算有向无环图,其中计算单元是神经元。图中的每条有向边代表一个函数,将一层中节点的加权输出传递到下一层中的节点。

人工神经网络通常被称为多层感知机(MLPs),原因很简单:你可以将神经网络视为多个感知机的复合。在这种情况下,感知机将是神经元的同义词,因此是神经网络的最小计算单元,它例如执行其输入的线性组合,随后应用激活函数,激活函数可以是sigmoid、tanh、ReLU、恒等函数或任何其他可微函数,如果你计划用梯度下降训练神经网络的话。


2.4 层

FFN通常按层排列,使得每个单元仅从前一层中的单元接收输入。层分为3组:输入层、隐藏层和输出层。层是一个通用术语,指在神经网络中协同作用的一组神经元,如图5所示。

神经网络中的第一层是输入层,它从外部世界接收网络的初始数据。神经网络的“入口点”。然后是隐藏层,这是神经网络中发生奇迹的地方。每一层都试图通过最小化成本函数来学习数据的不同方面。理解这些层最直观的方式是在图像识别(例如人脸)的背景下。第一层可能学习边缘检测,第二层可能检测眼睛,第三层检测鼻子,等等 [cdeterman]。神经网络中的最后一层是输出层。这一层负责保存问题的最终结果或输出。输入,例如原始图像,被馈送到输入层,而输出层产生相应的结果。


2.5 激活函数

神经网络中的激活函数是一种平滑函数,应用于层中每个神经元的输出。它向网络引入非线性,使其能够学习数据中的复杂模式和关系。

激活函数基于其输入的加权和来决定一个神经元是否应该被激活。换句话说,它定义了给定一组输入时神经元的输出。如果没有激活函数,神经网络将局限于线性变换,并且无法捕捉许多现实世界数据集中存在的非线性。


激活函数的理想特性[Jagtap and Karniadakis, 2022]

选择最佳激活函数没有普遍规则,但有一些特性值得关注,即

  1. 非线性是激活函数最基本的特性之一。非线性显著提高了网络学习和建模数据中复杂非线性关系的能力。如果仅使用线性激活函数,无论层数多少,整个网络将等价于对输入的单一线性变换。这将严重限制网络解决复杂问题的能力。

  2. 激活函数必须计算成本低,以降低训练成本。

  3. 它必须是有界的,因为当激活函数的范围有限时,基于梯度的训练方法更加稳定。

  4. 使用基于梯度优化方法最理想的特性是连续可微的激活函数。这确保了反向传播算法正常工作。

注 2.5(梯度消失和梯度爆炸问题)。某些激活函数(如逻辑函数(Sigmoid))的输入和输出可能变化很大。这些函数将大的输入空间压缩到 [0,1] 之间较小的输出范围。这可能导致反向传播算法几乎没有梯度可以反向传播通过网络,并且任何剩余的梯度在向下穿过各层时都会减弱。这使得初始隐藏层几乎没有或完全没有梯度信息。使用非饱和激活函数,例如 ReLU,是解决此问题的一种方法。

我们介绍一些在 [Jagtap and Karniadakis, 2022] 中讨论的常用激活函数。


图6总结了上述描述的信息。


3 学习

机器学习的核心在于学习本身这门艺术。但计算机程序如何“学习”?答案在于将基于数据的学习视为一个优化问题。本质上,模型的目标是最小化预测输出与实际期望输出之间的误差。

在实践中,给定许多数据点,模型通过迭代调整其参数来学习。每次迭代都涉及微调模型的参数,以减少其预测值与真实值之间的误差。这个过程持续进行,直到模型达到所需的准确度水平。

在本节中,我们深入探讨推动这一过程前进的基本组成部分:梯度下降、反向传播和损失函数。

梯度下降是实现学习的主要概念。其目标是沿着损失函数的梯度下降,损失函数量化了预测输出与实际输出之间的差异,引导学习轨迹走向收敛。这种优化技术迭代地调整模型的参数以最小化误差。

为实现这一点,梯度下降依赖于梯度的计算,这对于理解模型参数应该更新的方向和速率至关重要。这正是反向传播发挥作用的地方。反向传播充当神经网络中的学习引擎,将误差从输出层通过网络传播回第一个隐藏层。这个过程使得能够计算损失函数相对于权重的梯度,允许模型以减少总体误差的方式更新其参数。通过不断应用这些更新,模型逐渐提高其性能。

3.1 反向传播

反向传播是一种用于自动微分的算法,它计算神经网络中参数的梯度。梯度估计被优化算法(如随机梯度下降(3.3.2节))用于计算网络权重更新。因此,当我们说一个神经网络在学习时,意味着反向传播正在计算一个最小化损失函数的梯度下降,并使用权重更新规则(3.2节)更新权重。反向传播是一种计算损失函数相对于网络权重的偏导数的方法;我们在梯度下降中使用这些导数。让我们首先回顾一下,神经网络评估的是在各个节点上计算的函数的复合。将神经网络视为输入的函数 (h_w(x)),由权重参数化。

即使对于这么小的网络,我们也能看到计算 a5 关于 w 的导数会有多么笨拙。

比上述例子更大的问题出现在我们思考如何计算隐藏层中的损失函数时。在输出层,误差 y − hw 是清晰的,但隐藏层的误差似乎很神秘,因为训练数据并未说明隐藏节点应该具有什么值。请注意,这里 y 是目标输出,而 hw 是网络计算出的值。因此,我们需要某种迭代方法来计算导数,以及一种将误差从输出层反向传播到隐藏层的方法。由此产生的迭代方法使用动态规划,而权重更新规则是微分学中的链式法则 [Aggarwal, 2018b]。

我们注意到,反向传播可以通过在每个神经元处使用激活前或激活后的值来实现。这里,我们将聚焦于作用于激活前值的方法,如图8所示。为简单起见,我们将神经网络视为一个有向无环图(G),其中

3.2 权重更新规则

我们声称这个更新规则会减少损失 L,并请读者参考 [Hagan et al., 2014] 第4.15节以获取证明,该证明相当冗长。

3.3 梯度下降

在神经网络的背景下,目标函数将是损失函数,为了找到梯度,人们将使用反向传播。开发者常说他们使用反向传播训练了他们的模型,但严格来说,这是不正确的。反向传播不是一种优化算法,不能单独用于训练模型。反向传播一词常被误解为多层神经网络的整个学习算法。实际上,反向传播仅指梯度计算方法,而另一种算法,如 SGD,使用这些梯度执行学习 [Goodfellow et al., 2016]。在探索不同的梯度下降算法之前,我们定义一些来自 [Brownlee, 2022] 的术语。

定义 3.3(样本)。样本是包含算法输入和用于误差计算的输出的单行数据。训练数据集由许多样本组成,也称为实例、观测、输入向量或特征向量。

术语特征向量可能更适合描述一行数据,因为特征指的是给定现象的特定、可测量的属性或特性。选择信息丰富的特征对于算法在模式识别、分类和回归等任务中的成功至关重要。虽然特征通常是数值的,但它们也可以是结构性的,例如字符串和图。特征的概念类似于线性回归等统计方法中的解释变量。为简单起见,在本文的剩余部分我们将使用术语样本。


定义 3.4(批次)。批次大小是一个超参数,定义了在更新模型参数之前处理的样本数量。一个批次遍历样本,进行预测,计算误差,并更新模型。

常见的迷你批次大小是32、64和128。如果数据集大小不能被批次大小整除,最后一批将具有较少的样本。

定义 3.5(轮次)。轮次是一个超参数,定义了整个训练数据集被处理的次数。每个轮次确保所有样本都有机会更新模型参数。一个轮次由一个或多个批次组成。

轮次的数量通常很大,常常在数百或数千,以充分最小化模型误差。运行过多的轮次可能导致过拟合,正如我们将在4.1节中看到的。

3.3.1 普通梯度下降

普通梯度下降计算损失函数关于参数(即权重和偏置)对整个训练集的梯度。换句话说,批次大小是整个训练集的大小。因此,对于每个参数 θ,更新将是,

由于为整个数据集计算梯度以执行单次更新可能非常慢,普通梯度下降对于大型数据集是不切实际的。普通梯度下降的代码可能看起来像这样 [Ruder, 2017]:

对于预定义数量的轮次,我们首先使用例如反向传播,计算整个数据集的损失函数关于我们的参数向量 params的梯度向量 params_grad。

然后我们沿梯度方向更新我们的参数,学习率决定每次更新的大小。批次梯度下降保证对凸误差曲面收敛到全局最小值,对非凸曲面收敛到局部最小值 [Ruder, 2017]。

3.3.2 随机梯度下降

近年来数据量增长如此之大,以至于可用的处理能力不足以通过在每个轮次对整个训练集执行梯度下降来训练神经网络。因此,神经网络采用随机梯度下降(SGD),这减少了机器计算时间。

注意,数据在每次迭代之前都会被打乱。这样做是为了防止如果数据按特定顺序训练时可能出现的偏差。SGD的一个缺点是它不像普通梯度下降那样确定地收敛到参数初始化所在的“盆地”的最小值。事实上,由于SGD在单个样本上每次梯度计算后都更新参数,它会剧烈波动,如图9所示。这可能导致它跳到新的局部最小值。研究表明,通过使用学习率调度逐渐降低学习率,SGD表现出与普通梯度下降相似的收敛行为,几乎总是收敛到非凸函数的局部最小值和凸函数的全局最小值 [Ruder, 2017]。

3.3.3 迷你批次梯度下降

最后,迷你批次是SGD和普通梯度下降之间的中间地带。我们不是在一个样本或整个数据集上计算梯度,而是在固定数量 (n) 的样本上计算它,

这种方法降低了参数更新的方差,导致更稳定的收敛,并利用了现代深度学习库中高度优化的矩阵运算,使得使用迷你批次的梯度计算非常高效。常见的迷你批次大小范围从50到256,尽管它们可能因应用而异。迷你批次梯度下降通常是训练神经网络的首选算法,即使采用了迷你批次,术语SGD也经常被使用 [Ruder, 2017]。批次大小为50的迷你批次梯度下降代码将是,

注意,数据在每次迭代之前都会被打乱。这样做是为了防止如果数据按特定顺序训练时可能出现的偏差。SGD的一个缺点是它不像普通梯度下降那样确定地收敛到参数初始化所在的“盆地”的最小值。事实上,由于SGD在单个样本上每次梯度计算后都更新参数,它会剧烈波动,如图9所示。这可能导致它跳到新的局部最小值。研究表明,通过使用学习率调度逐渐降低学习率,SGD表现出与普通梯度下降相似的收敛行为,几乎总是收敛到非凸函数的局部最小值和凸函数的全局最小值 [Ruder, 2017]。

3.3.3 迷你批次梯度下降

最后,迷你批次是SGD和普通梯度下降之间的中间地带。我们不是在一个样本或整个数据集上计算梯度,而是在固定数量 (n) 的样本上计算它,

这种方法降低了参数更新的方差,导致更稳定的收敛,并利用了现代深度学习库中高度优化的矩阵运算,使得使用迷你批次的梯度计算非常高效。常见的迷你批次大小范围从50到256,尽管它们可能因应用而异。迷你批次梯度下降通常是训练神经网络的首选算法,即使采用了迷你批次,术语SGD也经常被使用 [Ruder, 2017]。批次大小为50的迷你批次梯度下降代码将是,

现在,存在更多得多的梯度下降算法,例如Nesterov加速梯度、Adagrad、Adadelta、Adam等等。关于该主题的更多信息,我们将读者引向 [Ruder, 2017]。

3.4 损失函数

细心的读者会注意到,监督机器学习围绕着优化损失函数的输出。这也适用于广泛的其它机器学习策略。因此,定义一个好的损失函数至关重要。我们概述了各种用途中最广泛使用的损失函数,从回归损失开始。

3.4.1 回归损失函数

  1. 平均偏差误差损失 [连续,可微]。平均偏差误差损失(MBE)是最基本的损失函数,它由下式给出,

它衡量预测中的平均偏差,但由于正误差能够抵消负误差并产生不正确的参数估计,它很少被用作训练回归模型的损失函数。然而,它作为后续损失函数的基础,并经常被用于评估模型的性能 [Ciampiconi et al., 2023]。

2. 平均绝对误差损失(L1)[Lipschitz连续,凸]。平均绝对误差损失是回归中最基本的损失函数之一;它衡量预测中绝对偏差的平均值。绝对值克服了MBE的问题,确保正误差不会抵消负误差。它定义为,

注意,误差的贡献遵循线性行为,这意味着许多小误差与一个大误差具有同样的影响。这意味着梯度大小不依赖于误差大小,因此当误差很小时会导致收敛问题。一个训练以最小化MAE的模型,当以输入为条件的目标数据是对称的时,表现良好 [Ciampiconi et al., 2023]。

3. 均方误差损失(L2)[连续,可微,凸]。均方误差损失是回归中一个众所周知且简单的损失函数。它由下式给出

平方项使所有偏差变为正值,并放大了异常值所做的贡献,使其更适合观测中的噪声服从正态分布的问题。对异常值的敏感性是其主要缺点 [Ciampiconi et al., 2023]。

4. 均方根误差损失 [连续,可微,凸]。均方根误差损失除了平方根项外,与MSE相同。其主要好处是损失与相关变量具有相同的单位和尺度。最小化过程收敛到与MSE相同的最优值。然而,RMSE可能根据所采用的优化方法采取不同的梯度步长 [Ciampiconi et al., 2023]。它定义为,

  1. Huber损失 [Lipschitz连续,可微,严格凸]。Huber损失是MAE和MSE的混合。当残差足够小时,它从MAE过渡到MSE。它由 δ参数化,δ表示MAE和MSE过渡的点。这使其能够结合MAE和MSE的优点。当模型的输出与预测之间存在显著差异时,Huber损失由于误差是线性的而对异常值不那么敏感。另一方面,如果误差很小,它遵循MSE,这加速收敛并使其在0处可微。一个关键决策是使用哪个 δ,这可能在训练过程中经常根据什么构成异常值而修改 [Ciampiconi et al., 2023]。Huber损失由下式给出,

  1. Log-cosh损失 [连续,可微]。Log-cosh损失由实际值 y与预测值 f(yi)之间残差的双曲余弦的对数给出。它比Huber损失计算量更大,但它提供了所有相同的好处,而无需建立超参数。Log-cosh损失具有二阶可微的优点,使其适用于需要计算Hessian矩阵的算法。它也被认为是一种稳健估计器,意味着它对数据集中的异常值具有容忍性 [Ciampiconi et al., 2023]。它定义为,

7. 均方根对数误差损失 [连续,可微,凸]。均方根对数误差(RMSLE)损失由下式给出,

当谈到RMSE时,唯一的区别是对观测值和预期值都使用了对数。对数加一项允许取零值。由于对数的原因,RMSLE对异常值更具弹性,同时也考虑了预期值与实际值之间的相对不准确性。特别是,RMSLE的大小不会与误差的幅度成比例增加。相反,当预期值和实际值都很高时,具有大残差的数据点不会受到那么严重的惩罚。因此,对于目标具有指数关系的问题,或者当希望比高估更严重地惩罚低估时,RMSLE是一个可行的选择。然而,这种损失不适用于允许负值的问题 [Ciampiconi et al., 2023]。

3.4.2 分类损失函数

监督ML的第二个子集——分类,也有其自己的一套损失函数。以下包含最常用的基于间隔的分类损失。

其他基于信息论的损失函数,例如交叉熵损失和Kullback-Leibler散度,广泛用于分类问题,我们将读者引向 [Ciampiconi et al., 2023] 以获取更多信息。


4 拟合模型

在追求学习的过程中,潜伏着过拟合和欠拟合的陷阱。过拟合发生在模型变得过度迎合训练数据时,而欠拟合则导致过度简化的表示。在泛化性和复杂性之间找到正确的平衡至关重要,这通过正则化和交叉验证等技术来实现。

机器学习的主要困难在于,我们必须能够从新的、未知的输入以及我们模型训练过的输入中学习。模型在未见数据上表现良好的能力称为泛化。在训练模型时,我们希望预期输出和预测输出之间的误差在训练数据上尽可能低。这被称为训练误差。我们可以就此停止,那样我们就有一个 优化问题了。但这正是与机器学习的区别所在,我们要求我们的模型也能以低误差预测新的、未见的数据。我们称这个误差为测试误差。在确定ML算法的质量时,我们主要看以下两个属性,

  1. 训练误差有多低?   
  2. 测试误差和训练误差之间的差距有多小?

这些分别对应于机器学习中的两个主要挑战:欠拟合和过拟合[Goodfellow et al., 2016]。

4.1 过拟合

过拟合指的是产生与给定数据集过于密切匹配的分析的过程,这可能在尝试拟合新数据或对未来事件做出可靠预测时导致问题。也就是说,当一个数学模型开始记忆数据而不是从中学习时,它就开始过拟合了。

在机器学习的话题中,如果我们选择太大的网络,它将对训练时所用的数据表现得像查找表,但不会很好地泛化到新数据。换句话说,当神经网络拥有过多的参数时,它可以过拟合,就像任何其他统计模型一样 [Russel and Norvig, 2010]。

正如上面所暗示的,过拟合的程度受所提供数据量以及模型复杂性的影响。模型的复杂性由神经网络拥有的底层参数数量决定。更多的参数会带来额外的自由度,这些自由度可以被用来解释某些训练数据点,而不会对新数据产生强大的泛化能力 [Aggarwal, 2018c]。

例 4.1。假设我们有5个训练对((x, t))可用。那么,可以证明存在一个4次多项式能够以零误差精确拟合这5个训练点。然而,这并不意味着该多项式将以零误差近似未见数据。

如图11所示,过拟合模型在训练数据上将具有低偏差,但高方差。然而,正如Burnham和Anderson [2002]所解释的,过拟合模型将

“具有不必要的大的估计(和实际)抽样方差(估计器的精度很差,相对于用更简约的模型本可以实现的精度而言)[...]。最佳近似模型是通过适当平衡欠拟合和过拟合的误差来实现的。”

注4.2。在机器学习模型中,当学习进行过久,或训练数据集很小时,过拟合更可能发生。

4.2 欠拟合

欠拟合本质上是过拟合的反面。它发生在一个模型过于基础,缺乏解释数据中模式的复杂性(即参数数量)时。欠拟合模型在训练数据上将具有高偏差和低方差,这与过拟合模型正好相反。换句话说,欠拟合是未能从训练集中学习到足够的东西。例如,当将线性模型拟合到非线性数据时,就会发生欠拟合。这样的模型预测能力在训练数据和测试数据上都将平平无奇。

欠拟合不像过拟合那样被广泛讨论,因为它可以通过评估模型在训练数据上的表现来轻松检测。

4.3 掌握拟合

现在我们已经展示了机器学习算法可能有多糟糕,我们将展示如何修复它。通过改变模型的容量,我们可以改变它过拟合或欠拟合的可能性。

定义 4.3(容量)。我们将模型的容量定义为其拟合各种函数的能力。低容量的模型可能难以拟合训练集,而高容量的模型可能通过记忆训练集的属性来过拟合,而这些属性在测试集上对它们没有好处。模型的容量是衡量其复杂性的一种方式。

在改变模型的容量之前,必须评估模型是过拟合还是欠拟合。这可以借助交叉验证来完成,我们将在下一章讨论。

偏差-方差权衡是机器学习中的一个基本概念,涉及模型偏差与其方差之间的权衡。偏差指的是用简化模型近似现实世界问题所引入的误差,通常导致欠拟合。另一方面,方差反映了模型对训练数据中微小波动的敏感性,可能导致过拟合。平衡偏差和方差对于实现最优预测性能至关重要:减少偏差通常会增加方差,反之亦然。找到正确的平衡涉及选择适当的模型复杂度和正则化技术,以最小化这两个误差来源。图12展示了容量的最优点。

只要训练误差低,在不改变容量的情况下增加正则化的一种方法是增加训练数据量。如果这不可能,我们可以调整许多组件以控制模型的容量,例如 [Brownlee, 2020],   

  1. 每层的节点数(宽度)
  2. 层数(深度)

增加这些将增加容量是合理的,因为它们明显增加了模型的复杂性,而我们知道这与它的容量密切相关。然而,应该注意,增加模型中的节点数和层数也会增加其运行时间和内存使用。

以最优方式调整模型的其他方法是机器学习中称为正则化的子集的一部分,我们将在后续章节中介绍。

4.4 交叉验证

交叉验证是一种旨在测试ML模型在未见数据上测试能力的技术。这有助于识别如上所述的过拟合等问题,或选择偏差,后者是以非随机方式选择训练数据且不能恰当代表总体的结果。交叉验证提供了关于模型将如何泛化到不同数据集的洞察。

最常用的技术是k折交叉验证,它允许在各种随机选择的训练数据子集上反复训练和测试模型k次。然后可以使用k次试验的平均测试误差来估计测试误差。在第i次试验中,数据的第i个子集被用作测试集,其余数据被用作训练集 [Goodfellow et al., 2016]。参见算法1了解k折交叉验证算法的伪代码。

4.5 正则化技术

正则化指的是我们对学习算法所做的任何改变,其目标是降低其泛化误差,但不降低其训练误差。它是解决过拟合(4.1节)的关键技术,也是ML领域的主要关注点之一,其重要性仅次于优化 [Goodfellow et al., 2016]。寻找有效的正则化方法是该领域的热门研究领域。

机器学习的很大一部分涉及创建各种模型和适合它们的算法。诸如交叉验证之类的技术帮助我们凭经验确定最适合我们特定问题的方法。然而,并不存在一个普遍适用的“最佳”模型,这个概念通常被称为“没有免费午餐定理”。该定理背后的理由在于,在一个领域有效的假设在另一个领域可能表现不佳 [Murphy, 2012]。

鉴于这一定理,开发多样化的模型以适应广泛现实世界数据变得势在必行。此外,对于每个模型,都存在大量算法,在速度、准确性和复杂性之间提供不同的权衡 [Murphy, 2012]。

4.5.1 L2 参数范数惩罚(权重衰减)

现实世界的数据拥有复杂的属性,需要同样复杂的模型来处理它们。虽然减少参数是减轻模型复杂性的一种方法,但它仍然是一种相当受限的策略,因为我们的模型拥有的参数越多,神经网络内部的相互连接就越多,从而非线性程度就越高,这对于表示复杂数据至关重要。

然而,我们必须谨慎行事,防止这些相互连接失控。因此,惩罚复杂性的概念作为解决方案出现了。通过采用权重衰减,我们保留许多参数,同时施加约束以防止模型过度复杂。

对复杂性施加惩罚的一种方法是将所有参数(权重)加入我们的损失函数。然而,由于正负参数混合,直接相加并不可行。因此,我们求助于将这些参数的平方加入损失函数。虽然有效,但这种方法可能将损失膨胀到最优解将意味着将所有参数设置为零的程度。为了避免这种情况,我们用一个较小的因子来缩放平方和,这个因子称为权重衰减 [Vasani, 2019]。权重衰减是训练众多前沿深度网络时广泛采用的技术,包括像GPT-3这样的著名模型 [Andriushchenko et al., 2023]。

4.5.2 数据增强

虽然权重衰减是一种专注于改变模型的正则化方法,我们现在看到一种改为改变数据以获得类似结果的技术。优化机器学习模型的泛化能力通常最好通过在其上训练更大的数据集来实现。然而,实际限制限制了可用数据量。为了解决这个限制,一种策略涉及用“假”数据增强训练集。这种方法对于分类任务来说是直接的,通过变换训练集中现有的输入数据生成新的 ((x, y)) 对,我们可以有效地扩展数据集。

数据集增强已在某些分类任务中表现出特别的功效,尤其是物体识别。图像作为高维数据,包含广泛的变异因素,其中许多可以很容易地模拟。诸如平移、旋转或缩放图像之类的操作已被证明是有益的,即使模型通过卷积和池化技术被设计为具有部分平移不变性。

在对数据应用变换时要小心,这一点很重要。例如,在光学字符识别任务中,正确识别像 'b' 与 'd' 以及 '6' 与 '9' 之间的区别至关重要。因此,像水平翻转这样的变换在这些情况下不适合用于增强数据集,这一点很清楚 [Goodfellow et al., 2016]。

4.5.3 早停

当训练具有极大复杂性的大型模型时,通常会观察到一种现象,即训练误差随时间稳步下降,而验证集误差开始再次上升,如图13所示。因此,通过回退到验证集误差最低时的参数设置,有可能获得一个具有改进的验证集误差(理想情况下,更好的测试集误差)的模型。为实现这一点,每次验证集误差改善时,我们保存一份模型参数的副本。在训练算法终止时,我们返回这些参数而不是最新的参数。当在指定数量的迭代中,没有参数显示出相对于记录的最佳验证误差有所改善时,算法结束 [Goodfellow et al., 2016]。

4.5.4 Dropout

Dropout是解决正则化问题的另一种技术。其核心概念是在训练期间随机停用神经网络内的单元及其连接。这防止单元变得过度相互依赖。在整个训练过程中,dropout从一系列“稀疏化”网络中采样。在测试阶段,可以通过利用一个权重缩减的单一未稀疏化网络来近似这些稀疏化网络的集成效果。这种方法显著减轻了过拟合,并超越了其他正则化技术。Dropout已在各种监督学习任务中证明了其提升神经网络性能的功效,包括视觉、语音识别、文档分类和计算生物学。值得注意的是,它在众多基准数据集上取得了最先进的结果 [Srivastava et al., 2014]。


5 结论

当我们穿越监督机器学习这一奇妙领域时,我们已经看到了它有多么强大。通过简单的数学和神经网络的精确工程,监督学习算法可以从标记数据中提取信息,以对未见数据进行推断,表现得像一个智能存在。这正是机器学习与统计学分歧之处,统计学通常侧重于从观测数据进行推断,而ML则有意构建用于对未见数据进行推断。在整个过程中,我们涵盖了神经网络的基础概念及其构建,进而深入到反向传播和梯度下降等更高级的技术。我们提供了激活函数和损失函数的简要综述,供读者参考。我们还讨论了机器学习中的关键挑战,例如过拟合和欠拟合,以及缓解它们的技术。

监督学习对当今世界有着重大影响。它驱动着许多不同的应用,包括自然语言处理、自动驾驶汽车和医疗诊断。从标记数据中学习的能力使得创建能够以惊人准确度识别语音、翻译语言、检测欺诈和推荐产品的系统成为可能。

然而,显而易见的是,监督学习对精心标记数据集的依赖构成了一个重大限制。对大量高质量数据以及相应输入和期望输出的需求,在现实世界场景中可能具有限制性且常常不切实际。当面对复杂任务时,这种限制变得尤为明显,在这些任务中定义期望输出可能具有挑战性甚至不可能。

这正是强化学习(RL)力量的基础,RL是一种直接从与环境交互中学习的方法,超越了监督学习的限制。在RL中,智能体在一组选项中移动,通过犯错并以奖励形式获得反馈来学习最佳方法。由于其自学习机制,RL现在可以解决显式监督不切实际的问题,为传统机器学习技术提供了通往先前未知领域的途径。RL领域可能会引起读者的极大兴趣,我们推荐Sutton和Barto [2018]的教科书以供进一步阅读。

在本文中,我们聚焦于ML的科学视角,但关于其哲学影响也有很多可以说的。监督学习的概念代表了我们对智能和知识看法的转变。有些人曾经认为智能是人类独有的品质,通过理解、推理和基于经验的学习能力来体现。可以说,监督学习通过证明机器也能表现出这些能力,挑战了这一观念。这凸显了一个新范式,其中知识从算法与数据的交互中涌现。然而,也可以说社交网络、经济和进化系统都以一种可被视为智能的方式运作。这提出了谁定义智能的问题。许多系统,如AI,是优化问题的均衡,有些人认为一切,甚至生命本身,都可以被视为一个优化问题。鉴于生命的复杂性,我们声称它实际上是一个NP难优化问题,并将证明留给读者。


原文链接:https://math.mcgill.ca/gsams/drp/papers/papers2024/Alexandre-St-Aubin.pdf

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/201406