Pytorch损失函数篇

点击关注我哦

一篇文章带你了解pytorch中常用的损失函数

Q:什么是损失函数?

训练神经网络类似于人类的学习方式。我们将数据提供给模型,它可以预测某些内容,并告诉其预测是否正确。然后,模型纠正其错误。该模型会重复执行此操作,直到达到我们确定的特定精度水平为止。告诉模型预测错误是正确学习的关键。这是损失函数出现的地方。它告诉模型其估计与实际值相差多远。与人交流虽然比较容易,但要告诉机器,我们需要一种媒介。本篇文章主要介绍常用的几种“媒介”的原理、含义及使用场景。

1.L1范数损失

torch.nn.L1Loss,用来测量平均绝对误差。

其中x是实际值,y是预测值。

含义:

它测量估计值和实际值之间的绝对值,也是错误度量的最简单形式。该误差的值越低,模型越好。我们不能期望它的值为零,因为它可能实际上没有用。总体比较适合处理简单的问题。

使用场景:

+回归问题

+简化模型

+由于神经网络通常用于处理复杂问题,因此很少使用此功能。

2. 均方误差损失 MSELoss

torch.nn.MSELoss,用来测量均方误差(平方L2范数)。

其中x是实际值,y是预测值。

含义:

预测值与实际值之差的平方,换个方式理解:模型会放大较大的损失,并且激励较小的损失。例如:如果分类器的实际差值为200,则错误为40000;如果分类器实际差值为0.1,则错误为0.01。

使用场景:

+回归问题。

+数值特征不大。

+问题不是很高的尺寸。

3. 平滑版L1损失 SmoothL1Loss

torch.nn.SmoothL1Loss,也称为Huber 损失函数,由下式给出:

含义:

如果绝对误差低于1,则使用平方项,否则使用绝对项。它对离群值的敏感性不如均方误差损失,并且在某些情况下可以防止爆炸梯度。在均方误差损失中,我们对差进行平方,得出的差值远大于原始差值。这些高值导致爆炸的梯度。此处避免这种情况,因为对于大于1的数字,数字不平方。

使用场景:

+回归。

+当 要素具有较大的值时。

+非常适合大多数问题。

4. 负对数似然损失 NLLLoss

torch.nn.NLLLoss

负对数似然损失:

含义:

它使数据的整体概率最大化。当它以较小的概率预测正确的类别时,会对模型进行惩罚,而在以较高的概率进行预测时,则对模型进行激励。对数在这里起到惩罚作用。概率越小,对数越高。这里使用负号是因为概率在[0,1]范围内,并且该范围内的值的对数是负数。因此,它使损失值是正的。

使用场景:

+ 分类。

+更快,更小的培训。

+简单的任务。

5. 交叉熵损失 CrossEntropyLoss

torch.nn.CrossEntropyLoss,用来测量预测值和实际值之间的交叉熵。

其中x是真实标签的概率,y是预测标签的概率。

含义:

使用交叉熵作为损失函数可以用来学习数据的概率分布。虽然其他损失函数(如平方损失)会惩罚错误的预测,但是当以高置信度预测错误的预测时,交叉熵会带来更大的损失。与负对数似然损失的区别在于:交叉熵还会惩罚错误但可信的预测以及正确但不太可信的预测,而负对数损失不会根据预测的可信度进行惩罚。

使用场景:

+分类任务

+为了建立自信的模型,即模型不仅可以准确预测,而且还可以更高的概率进行预测。

+获得更高的精度/召回值。

6. Kullback-Leibler散度损失 KLDivLoss

torch.nn.KLDivLoss,其给出了两个概率分布如何彼此不同的度量。

其中x是真实标签的概率,y是预测标签的概率。

含义:

这与交叉熵损失非常相似。区别是预测概率与实际概率之间的差异。这将在模型训练中添加有关信息丢失的数据。预测概率分布离真实概率分布越远,损失越大。它不会像交叉熵损失那样基于预测的置信度对模型进行惩罚,但是预测与地面真实情况有何不同。它通常优于均方误差,尤其是在数据不是正态分布的情况下。交叉熵得到更广泛使用的原因是可以将其分解为交叉熵的函数。最小化交叉熵与最小化KL散度相同。

KL = — xlog(y / x)= xlog(x)— xlog(y)=熵—交叉熵

使用场景:

+ 分类

+交叉熵可以通过较少的计算来实现,因此请避免使用。

7. MarginRankingLoss

torch.nn.MarginRankingLoss,它测量给定输入x1,x2和带有值(1或-1)的标签张量y的损耗。如果y == 1,则假定第一个输入的排名应高于第二个输入,反之亦然。

含义:

分类器的预测y基于输入x1和x2的排名。假设余量的默认值为0,如果y和(x1-x2)具有相同的符号,则损失将为零。这意味着x1 / x2的排名更高(对于y = 1 / -1),正如数据所期望的那样。如果y和(x1-x2)具有相反的符号,则损耗将是y *(x1-x2)给出的非零值。尽管在Pytorch中使用它的方式尚不清楚,但与其他损失函数相比,还没有太多的开源实现和示例。

使用场景:

+ GAN。

+排名任务。

8. HingeEmbeddingLoss

torch.nn.HingeEmbeddingLoss,在输入张量x和包含值(1或-1)的标签张量y的情况下测量损耗。它用于测量两个输入是否相似。

Pytorch损失函数篇_第1张图片

含义:

分类器的预测y基于输入x的值。假设裕度的默认值为1,如果y = -1,那么损失将最大为0和(1 — x)。如果x > 0损耗将是x本身(较高的值),如果0 < x <1损耗将是1 — x(较小的值),并且如果x <0损耗将是0(最小值)。对于y = 1,损耗与x的值一样高。

使用场景:

+学习非线性嵌入

+半监督学习

+要测量两个输入的相似性或相异性。

9. cosine 损失 CosineEmbeddingLoss

torch.nn.CosineEmbeddingLoss,它测量给定输入x1,x2和包含值(1或-1)的标签张量y的损耗。它用于测量两个输入是否相似。

含义:

分类器的预测y基于输入x1和x2的余弦距离。余弦距离是指两点之间的角度。通过使用点乘积可以很容易地找到它:

由于余弦介于-1和+ 1之间,损耗值较小。这有助于计算。假设margin为默认值0,如果y = 1,则损失为(1-cos(x1,x2))。对于y = -1,则损耗将最大为0和cos (x1,x2)。如果cos (x1,x2) > 0,则损耗将是cos (x1,x2)本身(较高的值),如果cos (x1,x2) <0,则损耗将为0(最小值)。

使用场景:

+学习非线性嵌入

+半监督学习

+要测量两个输入的相似性或相异性。

·  END  ·

HAPPY LIFE

你可能感兴趣的:(深度学习,人工智能,机器学习,python,神经网络)