深入解析损失与损失函数

2024年10月16日 由 alex 发表 51 0

当你训练监督机器学习模型时,你经常会听到最小化的、必须选择的损失函数等等。


但是损失是什么?损失函数又是什么?


我将在本文中回答这两个问题。我们将首先介绍高级监督学习过程,以奠定基础。这包括训练监督模型时训练、验证和测试数据的作用。


高级监督学习过程

在真正引入损失的概念之前,我们先来看看高级监督机器学习过程。所有有监督的训练方法都属于这一过程,这意味着它不仅适用于 MLP 或 ConvNets 等深度神经网络,也适用于支持向量机。


让我们来看看这个循环往复的训练过程。


2


前向传递

我们从特征和目标开始,这些特征和目标也被称为数据集。在训练过程开始前,数据集被分成三部分:训练数据、验证数据和测试数据。训练数据在训练过程中使用,更具体地说,是在前传过程中生成预测结果。然而,在每个训练周期之后,必须对模型的预测性能进行测试。这就是验证数据的用途--它有助于模型优化。


然后是测试数据。假设验证数据本质上是一个统计样本,但并不完全符合它所描述的统计人口。也就是说,样本不能完全代表总体,因此样本的平均值和方差(希望)与实际总体的平均值和方差略有不同。因此,每次使用验证数据对模型进行优化时,都会引入一点偏差。虽然就预测能力而言,该模型可能仍然非常有效,但它可能会失去概括能力。在这种情况下,它将不再适用于以前从未见过的数据,例如来自不同样本的数据。测试数据用于在整个训练过程结束后(即最后一个周期结束后)对模型进行测试,它可以让我们了解机器学习模型的泛化能力。


将训练数据输入机器学习模型的过程称为前向传递。这个名字的由来其实很简单:数据被简单地输入到网络中,这意味着数据以向前的方式通过网络。最终结果是一组预测,每个样本一个预测。这意味着,当我的训练集由 1000 个特征向量(或带特征的行)组成,并伴随着 1000 个目标时,我将在前向传递后得到 1000 个预测结果。


损失

不过,你确实想知道模型在最初设定的目标方面表现如何。一个表现良好的模型在生产使用时会很有趣,而一个表现不佳的模型则必须在实际使用前进行优化。


这就是损失概念的由来。


一般来说,损失允许我们对某些实际目标和预测目标进行比较。它通过对偏离实际目标的每个预测施加 “成本”(或使用另一个术语 “损失”)来实现。


从概念上计算损失相对容易:我们为机器学习预测商定一些成本,将 1000 个目标与 1000 个预测进行比较,计算出 1000 个成本,然后将所有成本相加,得出全局损失。


正如你在上文所描述的机器学习过程中看到的那样,箭头是向后流向机器学习模型的。它们的目标是:对模型的内部结构稍作优化,使其在下一个周期(或称迭代或历时)中表现更好。


逆向传递

计算损失时,必须改进模型。具体做法是将误差向后传播到模型结构,例如模型的权重。这就结束了向前输入数据、生成预测和改进数据之间的学习循环--通过调整权重,模型可能会得到改进(有时改进很大,有时改进很小),从而实现学习。


根据所使用的模型类型,优化模型(即向后传播误差)的方法有很多种。在神经网络中,通常会结合使用基于梯度下降的方法和反向传播方法:梯度下降类似于计算梯度或优化方向的优化器,反向传播则用于实际的误差传播。


在支持向量机等其他模型类型中,严格来说,我们实际上并不向后传播误差。不过,我们会使用二次优化等方法来找到数学最优值,而根据数据的线性可分性(无论是常规空间还是核空间),最优值是一定存在的。不过,将其形象化为 “通过计算误差来调整权重 ”有助于理解。


损失函数

这里,我们将介绍一系列损失函数:其中一些用于回归,另一些用于分类。


用于回归的损失函数

有两种主要的监督学习问题:分类和回归。在前者中,你的目标是将样本归入正确的类别,例如归入 “糖尿病 ”或 “无糖尿病 ”类别。但在后一种情况下,你并不是进行分类,而是估算某个有实际价值的数字。你要做的是从一些输入数据回归一个数学函数,因此称为回归。对于回归问题,有许多损失函数可用。


平均绝对误差(L1 损失)

平均绝对误差(MAE)就是其中之一。它看起来是这样的:


3


不用担心数学问题,我们现在将直观地介绍 MAE。


你在公式中看到的那个奇怪的类似 E 的符号就是所谓的西格玛符号,它概括了公式背后的含义: |Ei|,在我们的例子中,Ei 是误差(预测值与实际值之间的差值),| 符号表示取绝对值,或将 -3 转换为 3,3 仍然是 3。


在这种情况下,“求和 ”意味着我们对用于训练模型的所有 n 个样本的所有误差进行求和。因此,这样做之后,我们会得到一个非常大的数字。我们将这个数字除以 n,即所用样本的数量,得出平均值或平均绝对误差:即平均绝对误差或 MAE。


在多种回归情况下都可以使用 MAE(Rich,注)。不过,如果你的平均误差非常小,使用我们接下来要介绍的平均平方误差可能会更好。


均方误差

回归中常用的另一个损失函数是均方误差(MSE)。它听起来非常困难,尤其是当你看到公式时(Binieli,2018):


4


我们将上面的公式分成三个部分,这样就能了解每个元素,以及它们是如何共同作用产生 MSE 的。


5


MSE 的主要部分是中间部分,称为西格玛符号或求和符号。它的作用其实很简单:从 i 开始计数到 n,每计数一次,就执行一次后面写的内容。在本例中,这就是第三部分--(Yi - Y'i)的平方。


在我们的例子中,i 从 1 开始,n 尚未定义。相反,n 是我们训练集中的样本数,因此也是已经做出的预测数。在上述情况中,n 为 1000。


然后是第三部分。这实际上是我们之前已经直观了解到的数学符号:它是样本的实际目标(Yi)和预测目标(Y'i)之间的差值,后者是从前者中去除的。


但有一点不同:计算的最终结果是平方。这一特性在优化过程中带来了一些数学上的好处(Rich,注)。尤其是,MSE 是连续可变的,而 MAE 却不是(在 x = 0 时)。这意味着优化 MSE 比优化 MAE 更容易。


此外,大误差带来的成本要比小误差大得多(因为差值是平方,而大误差产生的平方要比小误差大得多)。这既是好事,同时也是坏事(Rich,注)。当误差较小时,这是一个很好的特性,因为此时优化工作就会提前进行(Quora, n.d.)。然而,使用 MSE 而不是 MAE 会让你的 ML 模型受到异常值的影响,这将严重干扰训练(通过引入大误差)。


尽管结论可能并不令人满意,但在 MAE 和 MSE 之间做出选择往往在很大程度上取决于你使用的数据集,因此在开始训练之前需要进行一些先验检查。


最后,当我们得到平方误差之和后,将其除以 n,就得到了平均平方误差。


平均绝对百分比误差

平均绝对百分比误差,或称 MAPE,实际上与 MAE 相似,尽管计算公式看起来有些不同:


6


使用 MAPE 时,我们计算的不是绝对误差,而是相对于实际值的平均误差百分比。也就是说,假设我的预测值是 12,而实际目标值是 10,那么这个预测值的 MAPE 就是 | (10-12 ) / 10 | = 0.2。


与 MAE 类似,我们将所有样本的误差相加,但随后会面临不同的计算: 100%/n. 这看起来很难,但我们可以再次将计算分成更容易理解的部分。更具体地说,我们可以将其写成 100% 和 1/n 的乘法。当将后者与总和相乘时,你会发现与除以 n 的结果相同,而我们在计算 MAE 时就是这样做的。


均方根误差(L2 损失)

还记得 MSE 吗?


7


还有一种叫 RMSE 的东西,也叫均方根误差或均方根偏差 (RMSD)。它是这样的:


8


它只是 MSE 的平方根值。


RMSE 或 RMSD 误差是平方的根平方,因此回到了原始目标的比例。这样就能更直观地了解目标的误差。


对数误差

“Log-cosh是预测误差的双曲余弦的对数"。


这就是数学公式:


9


10


这就是剧情:


11


好了,现在我们来介绍一些直观的解释。


TensorFlow 文档是这样写 Logcosh loss 的:

log(cosh(x))(x ** 2) / 2对于较小值x,近似等于;对于较大值,abs(x) - log(2)近似等于x。这意味着 'logcosh' 的工作原理与均方误差非常相似,但不会受到偶尔出现的严重错误预测的强烈影响。


它似乎比 MSE 或 L2 loss 有所改进。回想一下,如果数据集包含相当大的误差,MSE 会比 MAE(L1 损失)更好,因为它能更好地捕捉这些误差。不过,这也意味着 MSE 对误差的敏感度远高于 MAE。Logcosh 可以帮助解决这个问题:

  • 对于相对较小的误差(甚至是相对较小但较大的误差,这就是为什么 MSE 比 MAE 更适合你的 ML 问题),它的输出大约等于 x² / 2-,这与 MSE 的 x² 输出相当。
  • 对于较大的误差,即异常值,MSE 会产生极大的误差((10⁶)² = 10¹²),Logcosh 则接近 |x| - log(2)。它类似于(也不像)MAE,但经过对数修正。


因此,如果既有必须检测的较大误差,又有可能无法从数据集中移除的异常值,可以考虑使用 Logcosh!许多框架都可以使用 Logcosh,如上文提到的 TensorFlow,Keras 也可以使用。


Huber los

让我们继续讨论 Huber loss,我们已经在有关 MAE 的章节中提示过了:


12


或者说,视觉上:


13


在解释公式时,我们可以看到两个部分:

  • 1/2 x (t-p)²,当 |t-p| ≤ δ 时。这听起来很复杂,但我们可以很容易地将其分解成几个部分。
  • ||t-p| 是绝对误差:目标 t 与预测 p 之间的差值。
  • 我们将其平方后除以 2。
  • 不过,只有当绝对误差小于或等于某个 δ(也叫 delta,可以自行设置)时,我们才会这样做!接下来我们将看到为什么这样做很好。
  • 当绝对误差大于 δ 时,我们按以下方法计算误差: δ x |t-p| - (δ²/2)。
  • 让我们再次将其分解。我们将 delta 与绝对误差相乘,然后去掉 delta 平方的一半。


总结

在本文中,我们探讨了损失函数(也称成本函数)的概念。我们通过说明高层次的机器学习过程和(高层次的)优化过程中发生的事情,解释了为什么需要损失函数。

文章来源:https://medium.com/thedeephub/understanding-loss-and-loss-functions-c1839f110840
欢迎关注ATYUN官方公众号
商务合作及内容投稿请联系邮箱:bd@atyun.com
评论 登录
热门职位
Maluuba
20000~40000/月
Cisco
25000~30000/月 深圳市
PilotAILabs
30000~60000/年 深圳市
写评论取消
回复取消