torch.nn中的22种loss函数简述

loss.py中能看到所有的loss函数,本文会简单对它们进行介绍

torch.nn中的22种loss函数简述_第1张图片

1.L1Loss

计算输入和目标之间的 L1(即绝对值)损失。这种损失函数会计算预测值和目标值之间差的绝对值的平均。

2.NLLLoss(负对数似然损失)

首先找到每个样本模型预测的概率分布中对应于真实标签的那个值,然后取这个值的负数,最后对所有样本的损失取平均。即loss(x,class)=−x[class]

3.NLLLoss2d(二维输入)

该函数专门用于处理二维数据,如图像数据中的像素级分类任务。

其预测输出张量的形状通常是 [batch_size, channels, height, width],其中 channels 表示类别数。目标标签张量的形状是 [batch_size, height, width],其中每个像素值对应于预测输出中的类别索引。

4.PoissonNLLLoss(泊松分布)

用于计算目标泊松分布的负对数似然损失,,神经网络的输出通常作为泊松分布的参数(通常是率参数λ。泊松分布是一种离散概率分布,常用于描述在固定时间或空间内某稀有事件发生的次数。

5.PoissonNLLLoss(高斯分布)

用于计算目标高斯分布的负对数似然损失,神经网络的输出通常作为高斯分布的均值和方差。

6.KLDivLoss

用于计算两个概率分布之间的 KL 散度,这是一种衡量两个概率分布之间差异的方法。常用于模型的训练中作为一种正则化方法,特别是在处理分类问题时,用于衡量模型预测分布与真实分布之间的差异。

7.MSELoss

用于计算均方误差损失。均方误差是衡量模型预测值与真实值之间差异的一种常用方法,特别是在回归问题中。它通过计算预测值与真实值之间差的平方的平均值来工作。

8.BCELoss

用于计算二元交叉熵损失。适用于二分类问题,其中目标值被编码为0(负类)或1(正类)。

9.BCEWithLogitsLoss

BCEWithLogitsLoss是二元交叉熵损失函数与Sigmoid激活函数的结合体。在神经网络中,它用于衡量模型预测结果与真实标签之间的差异,并通过反向传播算法优化模型参数。这种结合方式避免了在正向和反向传播过程中单独使用Sigmoid函数和BCE损失函数可能导致的数值不稳定和梯度消失/爆炸问题。

10.HingeEmbeddingLoss(合页损失函数)

通常用于支持向量机(SVM)等模型中,特别是在二分类问题中。它通过设置一个边界(margin)来判断模型的预测是否正确,并据此计算损失。如果模型的预测正确类别的分数与错误类别的最高分之间的差距大于或等于边界值,则不产生损失;否则,损失将随着差距的减小而线性增加。

11.MultiLabelMarginLoss

MultiLabelMarginLoss 是一种多标签分类的损失函数,适用于处理一个样本可能属于多个类别的情况。例如,在图像识别、文本分类等领域中,一个对象或文本可能同时包含多个属性或主题。

12.SmoothL1Loss

SmoothL1Loss是一种平滑的损失函数,它在一定程度上平衡了L1 Loss和L2 Loss的特性。当 ∣x−y∣ 小于 1 时,SmoothL1Loss 采用平方误差的形式,这使得损失函数在预测值接近真实值时更加平滑;而当 ∣x−y∣ 大于或等于 1 时,它采用线性误差的形式,这有助于减少异常值对损失函数的影响,有效平衡预测精度和模型鲁棒性。

13.HuberLoss

HuberLoss结合了均方误差(MSE)和绝对误差(MAE)的优点,对于异常值具有鲁棒性。当预测值和真实值之间的绝对差小于等于给定的阈值δ时,HuberLoss采用平方误差;当绝对差大于阈值δ时,采用绝对误差与阈值δ的线性组合。

14.SoftMarginLoss

SoftMarginLoss在处理非线性可分的数据集时表现出色,能够有效地帮助对数据进行分类。在二分类任务的损失函数,尤其在支持向量机(SVM)中,当目标是将数据分为两个类别时,SoftMarginLoss可以作为一种有效的损失函数来使用。

15.CrossEntropyLoss(交叉熵损失函数)

CrossEntropyLoss机器学习和深度学习中常用的一种损失函数,尤其在分类问题中发挥着重要作用,包括但不限于图像分类、文本分类、语音识别等。它用于衡量模型预测的概率分布与真实标签的概率分布之间的差异。

16.MultiLabelSoftMarginLoss

MultiLabelSoftMarginLoss用于处理在多标签分类中,每个样本可以同时属于多个类别的情况。它为每个类别独立地计算损失,并最终将这些损失加和。

17.CosineEmbeddingLoss

用于度量两个向量之间相似度的损失函数,其通过计算两个向量之间的余弦相似度,并基于该相似度和给定的标签来计算损失值。

18.MarginRankingLoss

用于对比学习(如Siamese网络)中。主要作用是训练模型来区分两个样本或实例之间的相似性或距离,从而推动模型在训练中使相似样本更接近,不相似样本更远。

19.MultiMarginLoss

MultiMarginLoss是一种多分类的合页损失函数(hinge loss),主要用于处理多分类问题,其中每个样本只能属于一个类别。主要目标是鼓励模型将正确类别的得分与错误类别的得分之间的间隔(差距)最大化,从而确保正确的类别获得高的分数,而错误的类别获得低的分数。

20.TripletMarginLoss

用于测量样本之间相对相似性的损失函数,适用于训练模型来学习将样本按照其相似性分成不同的类别。广泛应用于需要度量样本之间相似性的任务中,如:人脸识别,图像检索

21.TripletMarginWithDistanceLoss

TripletMarginWithDistanceLoss是一种与TripletMarginLoss相似但提供了更多灵活性的损失函数。二者适用领域相似,但TripletMarginWithDistanceLoss在需要自定义距离度量方式的场景中更加有用。例如,在某些特定的任务中,欧氏距离可能不是最佳的度量方式,此时可以使用它来指定更适合任务的距离函数。

22.CTCLoss

用于解决序列标注问题的损失函数,特别适用于输入和输出序列长度不一致或需要对齐的场景,如语音识别、手写识别、图像文本识别(OCR)等。CTCLoss会考虑所有可能的路径(即预测序列到真实标签序列的映射方式),并计算这些路径的概率之和,最后通过反向传播算法来更新模型的参数。

你可能感兴趣的:(人工智能,机器学习)