PyTorch 常用损失函数

参考:

  1. pytorch模型构建(四)——常用的回归损失函数
  2. 几种常见的计算机视觉中的损失函数原理理解&分析
  3. PyTorch中的损失函数大致使用场景

分类损失函数

一般有 CrossEntropy LossNLL LossKLDiv LossBCE LossBCE With Logits LossMargin Ranking LossHinge Embedding LossHuber Loss 等。

CrossEntropy Loss

交叉熵损失 CrossEntropyLoss

代码

1
torch.nn.CrossEntropyLoss(weight=None,ignore_index=-100, reduction='mean')

当训练有多个类别的分类问题时很有效。
在多分类任务中,经常采用 softmax 激活函数+交叉熵损失函数,因为交叉熵描述了两个概率分布的差异,然而神经网络输出的是向量,并不是概率分布的形式。所以需要 softmax 激活函数将一个向量进行“归一化”成概率分布的形式,再采用交叉熵损失函数计算 loss。

回归损失函数

一般有 L1 LossL2 LossSmooth L1 Loss 等。

L1 Loss

L1 Loss 即平均绝对误差(Mean Absolute Error, MAE)

代码:

1
torch.nn.L1Loss(size_average=None, reduce=None, reduction='mean')

什么时候使用?

  1. 简单的模型
  2. 由于神经网络通常是解决复杂问题,所以很少使用。

L2 Loss

L2 Loss 即均方差(Mean Squred Error, MSE)

代码:

1
torch.nn.MSELoss(size_average=None, reduce=None, reduction='mean')

什么时候使用?

  1. 数值特征不大
  2. 问题维度不高

两者区别

  1. L1 Loss。0 处导数不连续,收敛速度慢。 对异常值不敏感,因为是求平均,会忽略掉异常值的作用,一般可用于有少许数据错误的值,这样就可以忽略掉这些错误的离群值;
  2. L2 Loss。收敛速度快,对异常值敏感,如果是需要进行异常检测,就不能忽略掉离群值。

假如数据集多数为 1000,少数为 10,那么 L1 会偏向 1000(因为更偏向于平均),L2 则会偏向于 10,因为对离群值更敏感,所以实际中这两种都不太可取,所以 Smooth L1 Loss 可以同时利用两者的优点。

Smooth L1 Loss

平滑的 L1 损失(Smooth L1 Loss, SLL)

代码:

1
torch.nn.SmoothL1Loss(size_average=None, reduce=None, reduction='mean', beta=1.0)

Smooth L1 Loss 的优点:

  1. 结合了 L1 Loss 对离群点、异常值不敏感的优点;
  2. 结合了 L2 Loss 在 0 处可导数,收敛速度快、训练不容易跑飞的优点。

PyTorch 常用损失函数
https://wonderhoi.com/2024/09/24/PyTorch-常用损失函数/
作者
wonderhoi
发布于
2024年9月24日
许可协议