烛夜
烛夜
发布于 2026-09-12 / 5 阅读
0
0

机器学习笔记 Day 3 —— 优化算法与评价指标

在 Day 2 中,我们学习了机器学习算法的一般学习准则。今天继续学习优化算法与评价指标。


1. 优化算法

现在我们确定了训练集 𝒟 、假设空间 ℱ 以及学习准则,我们要做的是找到最优的模型 𝑓(𝒙;𝜃*) 。这是一个最优化问题。机器学习的训练过程本质上就是最优化问题的求解过程。

参数与超参数

在机器学习中,优化通常可以分为参数优化和超参数优化

  • 参数优化:模型 𝑓(𝒙;𝜃) 中的 𝜃 称为模型参数,可以通过优化算法直接学习。

  • 超参数优化:一类用于定义模型结构或优化策略的参数,如正则化系数、学习率、网络层数、聚类类别数等。超参数一般需要结合验证集表现进行选择。一种比较经典的超参数优化策略是超参数搜索(如随机搜索、网格搜索、贝叶斯搜索)+ 交叉验证。当然,有时候人工经验设定是一种省时省力的方法。

梯度下降法

为了充分利用最优化理论中一些高效、成熟的方法,很多机器学习方法都会选择合适的模型和损失函数,以构造便于优化的目标函数。在机器学习中,最简单且最常用的优化算法是梯度下降法。梯度 ∇𝜃ℛ(𝜃) 指向函数值增大最快的方向,因此沿负梯度方向移动可以局部最快地降低损失。设参数的初值为 𝜃0 ,则第 𝑡 次迭代的更新公式为:

其中 𝜃𝑡 为第 𝑡 次迭代时的参数值,𝛼 为步长(在机器学习中通常被称为学习率)。

补充说明:上式的第二步利用了偏导运算的线性性质,这使得我们不需要将所有样本的损失函数加在一起再算梯度,而是可以单独对每个样本的损失函数计算梯度再求和。这有时候在工程实现上是有利的。

提前停止

在 Day 2 中初步学习到了一种缓解过拟合的方式:在损失函数中显式添加复杂度惩罚项。事实上,还可以通过提前停止(早停,Early Stopping)的方式来缓解过拟合。其基本思想是:随着训练轮次增加,模型在训练集上的损失通常会持续下降,但验证集上的误差可能先下降后上升。因此,在验证集性能不再提升时终止训练,往往可以获得更好的泛化能力

下图展示了提前停止的一个示例:

随机梯度下降法

我们回到之前学习的梯度下降法。按照定义,它应当利用整个训练集来计算梯度。这种方式也被称为批量梯度下降法(Batch Gradient Descent,BGD)。然而,对于规模较大的训练集,这种训练方式时空开销非常大。

于是我们想:能否将一个样本的损失梯度视为真实梯度的随机近似?于是就得到了著名的随机梯度下降法(Stochastic Gradient Descent,SGD)。SGD 每次仅利用一个训练样本更新参数,因此单次迭代代价较低,并且在非凸优化中常常更容易跳出较差的局部区域当经过足够次数的迭代时,随机梯度下降也可以收敛到局部最优解。

有关随机梯度下降法收敛性的相关理论,可以参考这篇文章

以下算法描述了 SGD 的算法流程:

小批量梯度下降

事实上,现在大规模机器学习与深度学习中最主流的优化方法是小批量梯度下降(Mini-batch GD)方法它每次从训练集中随机取一小批样本(如 32、64、128 个)来计算梯度并更新参数,是批量梯度下降(用全部样本)和随机梯度下降(用 1 个样本)的折中方案。‌‌这一算法的好处在于,它兼顾了计算效率与优化稳定性,还能利用 GPU 的并行计算能力。‌‌

第 𝑡 次迭代时,随机选取一个包含 𝐾 个样本的子集 𝒮𝑡 ,计算该子集上的平均梯度并更新参数:

2. 评价指标

经过数据集的选取、模型假设空间的先验设定、学习准则的确定、优化算法的实施,现在我们已经得到了一个训练好的机器学习模型。我们最后需要做的事情是,给定一个测试集,用模型对测试集中的每一个样本进行预测,并根据预测结果计算评价分数

对于分类问题,常见的评价标准有准确率、精确率、召回率和F值等。

形式化地来讲,给定一个测试集

假设标签 𝑦(𝑛) ∈ {1, ⋯ , 𝐶},用学习好的模型 𝑓(𝒙;𝜃*) 对测试集中的每一个样本进行预测,结果为 { ̂𝑦(1), ⋯ , ̂𝑦(𝑁)} 。

准确率与错误率

准确率(acc)是最常用的评价指标,计算方式如下:

与之相对的就是错误率:

精确率、召回率和 F 值

准确率是所有类别整体性能的平均,因此对于一些类别不均衡的情况下,可能出现一些问题。例如,考虑一个垃圾邮件分类系统。我们构建的测试集中有 99% 是正常邮件,剩下 1% 是垃圾邮件。如果这个分类系统做的事情是,对所有接收到的邮件都判定为 “不是垃圾邮件” ,那么系统在测试集上的准确率依然高达 99% 。但这并不能说明这个系统是一个好的系统。相反,它在实际应用中可能非常糟糕。

这个时候,引入精确率(Precision)召回率(Recall)这两个指标就非常有必要。

对于类别 𝑐 来说,模型在测试集上的结果可以分为以下四种情况:

真正例(True Positive,TP):一个样本的真实类别为 𝑐 并且模型正确地预测为类别 𝑐 。这类样本数量记为:

假负例(False Negative,FN):一个样本的真实类别为 𝑐,模型错误地预测为其他类。这类样本数量记为:

假正例(False Positive,FP):一个样本的真实类别为其他类,模型错误地预测为类别 𝑐 。这类样本数量记为:

真负例(True Negative,TN):一个样本的真实类别为其他类,模型也预测为其他类。这类样本数量记为 𝑇𝑁𝑐 。对于类别 𝑐 来说,这种情况一般不需要关注。

这四种情况的关系可以用如下的混淆矩阵来表示:

于是可以定义精确率、召回率和 F 值:

精确率(Precision):所有预测为类别 𝑐 的样本中预测正确的样本比例。

召回率(Recall):真实属于类别 𝑐 的样本中,正确预测的样本比例。

补充说明:这里需要区分精确率和召回率在含义上的区别。

精确率指的是,在模型所有预测为正例的结果中,有多少预测对了。

召回率指的是,实际上存在于测试集中的所有正例,有多少真的被模型找出来了(成功召回)。

因此,精确率也被称为查准率,召回率也被称为查全率。

F值(F Measure):一个综合指标,为精确率和召回率的平均。

其中 𝛽 用于平衡精确率和召回率的重要性,一般取值为 1 。𝛽 = 1 时的 F 值称为 F1 值,是精确率和召回率的调和平均。

宏平均和微平均

精确率、召回率和 F1 值这三个指标都是针对某一个特定类别 𝑐 而言的。为了计算分类算法在所有类别上的总体精确率、召回率和 F1 值,经常使用两种平均方法,分别称为宏平均和微平均。

宏平均是先分别计算每一类的指标,再对各类做算术平均:

这里需要注意,有些文献中,宏平均 F1 也定义为:

两种写法都较常见,因此在比较结果时需要留意具体定义。

微平均是先在所有类别上汇总统计量,再计算整体指标。对于单标签多分类任务,精确率、召回率和 F1 值的微平均往往相同,且与准确率关系密切。当不同类别的样本数量不均衡时,宏平均通常更能反映小类别上的性能,而微平均更容易受到大类别的影响。

这一段话的具体解读,参见本笔记最后一小节。

在实际应用中,还存在许多其他更全面的评价指标,例如 AUC(Area Under Curve)、ROC(Receiver Operating Characteristic)曲线、PR(Precision-Recall)曲线等。此外,很多任务还有自己专门的评价方式, 比如 Top-N 准确率。

概率校准与不确定性

上述指标主要评价模型的预测标签是否正确,或者评价在不同阈值下正确率和错误率如何变化。但在很多实际场景中,我们还希望知 道模型给出的预测概率是否可信。例如,一个分类模型如果经常给出 0.9 的预测概率,就说明模型认为在这些预测中大约应有 90% 是正确的;若实际正确率只有 60%, 虽然看上去模型拥有较高的准确率,但它的置信度明显偏高。这类问题称为概率校准

概率校准和不确定性估计密切相关。一个模型的不确定性通常来自两方面:一是数据本身存在噪声或类别边界模糊,即使有无限数据也难以完全消除;二是训练数据有限或分布变化导致模型对某些区域了解不足。前者常称为数据不确定性,后者常称为模型不确定性。在医疗诊断、金融风控、自动驾驶等高风险任务中,模型不仅要给出预测结果,还应尽可能给出可靠的置信度,并在不确定性较高时交给人工复核或采取更保守的决策策略。

3. 训练-推理流程

机器学习的过程分为模型训练和模型评价(又叫模型测试、模型推理、模型评估)两个阶段。

  • 模型训练阶段需要用到训练集、验证集、待学习的模型、损失函数、优化算法,输出学习到的模型

  • 模型评价阶段需要用到测试集、学习到的模型、评价指标,得到模型的性能评价

4. 我的扩展思考

F𝛽 值中 𝛽 的偏好方向

在前文中介绍 F 值时,曾提到 “𝛽 用于平衡精确率和召回率的重要性” 。那么,𝛽 到底对哪个指标更看重?

考虑 F 值的数学定义:

可以发现:

  • 𝛽 > 1 时,更看重召回率(Recall):典型应用为癌症筛查、地震预警、反洗钱初筛 —— 宁可误报(低 Precision),绝不可漏报(高 Recall)。

  • 𝛽 < 1 时,更看重精确率(Precision):典型应用为垃圾邮件过滤、内容推荐系统 —— 宁可少推,不能错推打扰用户。

  • 𝛽 = 1 时,即为标准的 F1 值,精确率与召回率权重等同(均为 1)。

多分类评估中两个经典的结论

如何理解 “对于单标签多分类任务,精确率、召回率和 F1 值的微平均往往相同,且与准确率关系密切” ?

在单标签多分类任务中,每个样本有且仅有一个真实类别,且模型对每个样本有且仅预测一个类别。

设类别总数为 C ,样本总数为N 。对任意类别 c ,定义混淆矩阵的基本量:

  • TPc :真实为类别 c ,且预测为类别 c 的样本数。

  • FPc :真实不是类别 c ,但被模型预测为类别 c 的样本数。

  • FNc :真实类别 c ,但被模型预测为其他类的样本数。

考虑对所有类别做总量求和,

  • 所有类别的 TPc 总和:即所有类别中“预测正确”的样本总数,记为 Ncorrect

  • 所有类别的 FPc 总和:每一个被预测错的样本,必然在那个预测的类别上贡献了 1 次 FP 。因此,所有类别的 FPc 总和等于测试集上全部预测错误的总样本数

  • 所有类别的 FNc 总和:每一个被预测错的样本,必然在那个真实的类别上贡献了 1 次 FN 。因此,所有类别的 FNc 总和等于测试集上全部预测错误的总样本数

由此可得一个必然成立的恒等式:

下面代入微平均公式。微平均(Micro-average)的计算方式是先将各类的分子分母分别汇总,再做除法

微精确率(Micro-Precision)

微召回率(Micro-Recall)

微 F1 值(Micro-F1)

注意:上述结论只对于 “单标签分类” 情形下成立。对于多标签分类(一个样本可同时属于多个类别,或者不属于任何类别),一个样本预测错误可能导致多个 FPFN ,则上面的结论未必成立。

如何理解 “当不同类别的样本数量不均衡时,宏平均通常更能反映小类别上的性能,而微平均更容易受到大类别的影响” ?

宏平均与微平均的核心分歧在于:是以“类别”为平等基准,还是以“每个样本”为平等基准?

评估维度

宏平均(Macro-average)

微平均(Micro-average)

计算方式

先算各类指标,再作算术平均。

先汇总全量样本混淆量,再计算比值

平等单位

类别平等(每个类别的权重恒为 1 / C)

样本平等(每个样本的权重恒为 1 / N)

性质

更能反映小类别上的性能

容易受到大类别的影响(大类样本占绝大多数)


评论