机器学习:理解损失和损失函数

机器学习:理解损失和损失函数当你训练监督机器学习模型时 你经常会听到最小化的损失函数 必须选择的损失函数等等 术语 成本函数 也等效地使用

大家好,欢迎来到IT知识分享网。

机器学习:理解损失和损失函数

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

术语“成本函数”也等效地使用。

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

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

了解了这些内容后,我们将介绍损失。我们将回答这个问题:什么是损失?但是,我们不要忘记“什么是损失函数?”,我们甚至会研究一些常用的损失函数。

高级监督学习过程

在我们真正引入损失的概念之前,我们必须先了解一下高级监督机器学习过程。所有监督训练方法都属于这一过程,这意味着它对于深度神经网络(如 MLP 或ConvNets)和支持向量机都是一样的。

我们来看看这个训练过程,它本质上是循环的。

机器学习:理解损失和损失函数

前向传播

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

然后是测试数据。假设验证数据(本质上是统计样本)与它在统计方面描述的总体并不完全匹配。也就是说,样本不能完全代表总体,因此样本的均值和方差(希望)与实际总体均值和方差略有不同。因此,每次使用验证数据优化模型时,都会在模型中引入一点偏差。虽然它在预测能力方面可能仍然表现得很好,但它可能会失去泛化能力。在这种情况下,它将不再适用于从未见过的数据,例如来自不同样本的数据。测试数据用于在整个训练过程结束后(即仅在最后一个周期之后)测试模型,并允许我们了解机器学习模型的泛化能力。

训练数据在所谓的前向传播中被输入到机器学习模型中。这个名字的由来非常简单:数据只是被输入到网络中,这意味着它以正向的方式通过网络。最终结果是一组预测,每个样本一个预测。这意味着当我的训练集由 1000 个特征向量(或具有特征的行)组成,并伴随 1000 个目标时,我在前向传播后将有 1000 个预测。

损失

但是,您确实想知道模型相对于最初设定的目标的表现如何。表现良好的模型对于生产使用很有吸引力,而表现不佳的模型必须经过优化才能实际使用。

此时,损失的概念便进入了方程

一般而言,损失使我们能够比较一些实际目标和预测目标。如果预测偏离实际目标,则对每个预测施加“成本”(或使用不同的术语“损失”)。

从概念上来说,计算损失相对容易:我们就机器学习预测的一些成本达成一致,将 1000 个目标与 1000 个预测进行比较,计算 1000 个成本,然后将所有内容加在一起,得出整体损失。

训练机器学习模型时我们的目标是什么?

尽量减少损失。

原因很简单:损失越低,目标集和预测集就越相似。

它们越相似,机器学习模型的表现就越好。

如上图所示,机器学习过程中的箭头指向机器学习模型。它们的目标是:略微优化模型的内部结构,使其在下一个周期(或迭代,或称为时代)中表现更好。

反向传播

计算出损失后,必须改进模型。这是通过将误差反向传播到模型结构(例如模型的权重)来实现的。这关闭了向前馈送数据、生成预测和改进数据之间的学习周期——通过调整权重,模型可能会得到改进(有时改进很多,有时改进不多),因此学习就会发生

根据所用模型类型,有许多方法可以优化模型,即反向传播误差。在神经网络中,通常使用基于梯度下降的方法反向传播的组合:梯度下降等优化器用于计算梯度或优化方向,反向传播用于实际误差传播。

在其他模型类型中,例如支持向量机,严格来说,我们实际上并没有向后传播误差。但是,我们使用二次优化等方法来找到数学最优值,考虑到数据的线性可分性(无论是在常规空间还是核空间中),这个最优值必须存在。但是,将其可视化为“通过计算一些误差来调整权重”有助于理解。接下来 — 我们实际上可以用来计算误差的损失函数!

损失函数

在这里,我们将介绍各种各样的损失函数:其中一些用于回归,另一些用于分类。

回归的损失函数

监督学习问题主要有两种类型:分类回归。第一种情况下,你的目标是将样本归类到正确的类别中,例如归类到“糖尿病”或“非糖尿病”类别中。然而,在后一种情况下,你不是在分类,而是在估计某个实数。你试图做的是从一些输入数据中回归一个数学函数,因此这被称为回归。对于回归问题,有许多可用的损失函数。

平均绝对误差(L1 损失)

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

机器学习:理解损失和损失函数

不要担心数学,我们现在直观地介绍 MAE。

您在公式中看到的那个奇怪的 E 形符号就是所谓的 Sigma 符号,它总结了其背后的内容:|Ei|,在我们的例子中,Ei是误差(预测值和实际值之间的差异),并且 | 符号表示您正在取绝对值或者将 -3 转换为 3 且 3 仍为 3。

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

在多种回归场景中,MAE 的使用非常有可能(Rich,nd)。但是,如果您的平均误差非常小,则最好使用我们接下来将介绍的均方误差。

更重要的是,这一点很重要:当你在使用梯度下降的优化中使用 MAE 时,你会面临梯度持续增大的事实(Grover,2019)。由于当损失较低时也会发生这种情况(因此,你只需要移动一点点),这对学习不利——很容易连续超过最小值,找到次优模型。如果你遇到这个问题,请考虑Huber 损失(更多内容见下文)。如果你遇到更大的错误并且不关心(现在?)梯度的这个问题,或者你来这里是为了学习,让我们继续学习均方误差!

均方误差

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

机器学习:理解损失和损失函数

…但不要害怕。其实,理解 MSE 是什么以及它能做什么真的很容易!

我们将上述公式分为三个部分,这样我们就可以理解每个元素以及它们如何协同产生 MSE。

机器学习:理解损失和损失函数

MSE 的主要部分是中间部分,称为 Sigma 符号或求和符号。它的作用非常简单:从in计数,每次计数时执行其后面写的内容。在本例中,这是第三部分——(Yi — Y’i)的平方。

在我们的例子中,i从 1 开始,n尚未定义。相反,n是我们训练集中的样本数量,因此也是已做出的预测数量。在上面描述的场景中,n将是 1000。

然后是第三部分。它实际上是我们之前直观学到的数学符号:它是样本的实际目标(Yi)与预测目标(Y’i)之间的差值,其中后者从前者中减去。

有一个细微的差别:此计算的最终结果是平方。此属性在优化过程中带来了一些数学上的好处(Rich,nd)。特别是,MSE 是连续可微的,而 MAE 不是(在 x = 0 处)。这意味着优化 MSE 比优化 MAE 更容易。

此外,大误差带来的成本比小误差大得多(因为差值是平方的,大误差产生的平方比小误差大得多)。这既是好事也是坏事(Rich,nd)。当你的误差很小时,这是一个很好的特性,因为优化会随之推进(Quora,nd)。但是,使用 MSE 而不是 MAE 等会使你的 ML 模型容易受到异常值的影响,这会严重干扰训练(通过引入大误差)。

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

最后,当我们得到平方误差的总和时,我们将其除以 n——得到均方误差

平均绝对百分比误差

平均绝对百分比误差 (MAPE) 实际上与 MAE 类似,尽管公式看起来有些不同:

机器学习:理解损失和损失函数

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

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

现在只剩下将整体乘以 100%。我们为什么要这样做?很简单:因为我们计算出的误差是一个比率,而不是百分比。就像上面的例子一样,我们的误差是 0.2,我们不想找到比率,而是百分比。0.2 x 100% 是……不出所料……20%!因此,我们将平均比率误差乘以百分比以找到 MAPE!

如果也可以使用 MAE,为什么要使用 MAPE?

非常好的问题。

首先,这是一个非常直观的值。与绝对误差相反,当我们可以用百分比来表示误差时,我们可以了解模型的表现有多好或有多差。100 的误差可能看起来很大,但如果实际目标是 1,000,000,而估计值为 1,000,100,那么你明白我的意思了。

其次,它使我们能够比较不同数据集上回归模型的性能(Watson,2019)。假设我们的目标是在 NASDAQ ETF 和荷兰 AEX ETF 上训练回归模型。由于它们的绝对值相差很大,因此使用 MAE 对比较模型的性能没有太大帮助。另一方面,MAPE 以百分比的形式显示误差——无论将其应用于 NASDAQ 还是 AEX,百分比就是百分比。这样,就可以比较统计上不同的数据集中的模型性能。

均方根误差(L2 损失)

还记得 MSE 吗?

机器学习:理解损失和损失函数

还有一种称为 RMSE 的指标,即均方根误差或均方根偏差 (RMSD)。其含义如下:

机器学习:理解损失和损失函数

很简单,对吧?它只是 MSE,然后是它的平方根值。

这对我们有什么帮助?

MSE 的误差是平方的 — — 嘿,名字里有什么含义呢。

RMSE 或 RMSD 误差是平方平方根— — 因此回到了原始目标的尺度 (Dragos, 2018)。这让您对目标方面的误差有了更好的直觉。

Logcosh

“Log-cosh 是预测误差的双曲余弦的对数。”(Grover,2019)

好吧,作为开始,这怎么样?

这是数学公式:

机器学习:理解损失和损失函数

机器学习:理解损失和损失函数

以下是剧情:

机器学习:理解损失和损失函数

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

TensorFlow 文档对Logcosh 损失有如下描述:

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

嗯,这很棒。它似乎比 MSE 或 L2 损失有所改进。回想一下,如果您的数据集包含相当大的错误,MSE 比 MAE(L1 损失)有所改进,因为它可以更好地捕获这些错误。然而,这也意味着它比 MAE 对错误更敏感。Logcosh 有助于解决这个问题:

  • 对于相对较小的误差(即使误差相对较小但较大,这就是为什么 MSE 比 MAE 更适合解决 ML 问题的原因),它的输出大约等于 x² / 2 – 这与 MSE 的 x² 输出非常相等。
  • 对于较大的误差,即异常值,MSE 会产生极大的误差((10⁶)² = 10¹²),Logcosh 趋近于 |x| — log(2)。它类似于(也不同于)MAE,但随后被 稍微修正log

因此,如果您既有需要检测的较大错误,又有可能无法从数据集中删除的异常值,请考虑使用 Logcosh!它在许多框架中都可用,例如我们上面看到的 TensorFlow,但也可以在Keras中使用。

Huber los

让我们继续讨论 Huber 损失,我们已经在有关 MAE 的部分中暗示过它:

机器学习:理解损失和损失函数

或者,从视觉上看:

机器学习:理解损失和损失函数

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

  • 1/2 x (tp)²,当 |tp| ≤ δ 时。这听起来很复杂,但我们可以轻松地将其分解成几个部分。
  • ||tp| 是绝对误差:目标 t 和预测 p 之间的差异。
  • 我们将其平方并除以二。
  • 然而,只有当绝对误差小于或等于某个 δ(也称为 delta,您可以配置)时,我们才会这样做!接下来我们将看到为什么这很好。
  • 当绝对误差大于δ时,我们按如下方式计算误差:δ x |tp| — (δ²/2)。
  • 让我们再分解一下。我们将 delta 与绝对误差相乘,然后去掉 delta 平方的一半。

这些数学把戏的效果如何?

看一下上面的可视化效果。

对于相对较小的增量(在我们的例子中,δ = 0.25,你会看到损失函数变得相对平坦。即使预测越来越大,损失也需要相当长的时间才会增加。

对于较大的 delta,函数的斜率会增加。如你所见,delta 越大,斜率的增加越慢:最终,对于非常大的 δ,损失的斜率趋向于收敛到某个最大值。

如果仔细观察,您会注意到以下几点:

  • 当 δ 较小时,损失对较大的误差和异常值变得相对不敏感。如果你有这些,这可能是件好事,但如果平均而言你的误差较小,那就不好了。
  • 当 δ 较大时,损失对较大的误差和异常值会变得越来越敏感。如果误差较小,这可能是好事,但当数据集包含异常值时,就会遇到麻烦。

嘿,难道我们之前没见过吗?

是的:在我们关于 MAE(对较大误差不敏感)和 MSE(修复了这个问题,但面临对异常值的敏感性)的讨论中。

Grover(2019)对此进行了很好的描述:

当 ~ 0 时,Huber 损失接近 MAE,当 ~ ∞ (大数)时,Huber 损失接近 MSE。

这就是 δ 的作用!现在,您可以控制在损失函数中引入的 MAE 与 MSE 的“程度”。当您因异常值而面临较大误差时,您可以尝试使用较低的 δ[;如果您的误差太小而无法被 Huber 损失发现,您可以增加 delta。

还有一件事,我们在讨论 MAE 时也提到过:当你通过梯度下降优化模型时,即使你的误差很小,它也会产生很大的梯度(Grover,2019)。这对模型性能不利,因为你可能会超出模型的数学最优值。使用 MSE 时你不会遇到这个问题,因为它往往会向实际最小值下降(Grover,2019)。如果你从 MAE 切换到 Huber 损失,你可能会发现这是一个额外的好处。

原因如下:当接近数学最优值时,Huber 损失与 MSE 一样也会减小(Grover,2019)。这意味着您可以结合两全其美的优势:MAE 对较大误差的不敏感性与 MSE 的敏感性及其对梯度下降的适用性。Huber 损失万岁!与往常一样,当您使用 Keras 训练模型时它也可用。

那为什么这不是完美的损失函数呢?

因为 δ 的好处也成为了你的瓶颈(Grover,2019)。由于你必须手动配置它们(或者可能使用一些自动化工具),你将不得不花费时间和资源来为你的数据集找到最优化的 δ。这是一个迭代问题,在极端情况下,它可能会变得不切实际,在最坏的情况下代价高昂。然而,在大多数情况下,最好只是进行实验——也许,你会找到更好的结果!

概括

在本文中,我们研究了损失函数(也称为成本函数)的概念。我们通过说明高级机器学习过程以及(在高层次上)优化过程中发生的情况,说明了它们为何必不可少。此外,我们还介绍了各种回归损失函数。虽然我们介绍了一些数学知识,但我们也尝试直观地解释它们。

参考:

https://medium.com/thedeephub/understanding-loss-and-loss-functions-c1839f

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/93040.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信