PyTorch 常用损失函数
参考:
分类损失函数
一般有 CrossEntropy Loss
、NLL Loss
、KLDiv Loss
、BCE Loss
、BCE With Logits Loss
、Margin Ranking Loss
、Hinge Embedding Loss
、Huber Loss
等。
CrossEntropy Loss
交叉熵损失 CrossEntropyLoss
代码
1 |
|
当训练有多个类别的分类问题时很有效。
在多分类任务中,经常采用 softmax 激活函数+交叉熵损失函数,因为交叉熵描述了两个概率分布的差异,然而神经网络输出的是向量,并不是概率分布的形式。所以需要 softmax 激活函数将一个向量进行“归一化”成概率分布的形式,再采用交叉熵损失函数计算 loss。
回归损失函数
一般有 L1 Loss
、L2 Loss
、Smooth L1 Loss
等。
L1 Loss
L1 Loss 即平均绝对误差(Mean Absolute Error, MAE)
代码:
1 |
|
什么时候使用?
- 简单的模型
- 由于神经网络通常是解决复杂问题,所以很少使用。
L2 Loss
L2 Loss 即均方差(Mean Squred Error, MSE)
代码:
1 |
|
什么时候使用?
- 数值特征不大
- 问题维度不高
两者区别
- L1 Loss。0 处导数不连续,收敛速度慢。 对异常值不敏感,因为是求平均,会忽略掉异常值的作用,一般可用于有少许数据错误的值,这样就可以忽略掉这些错误的离群值;
- L2 Loss。收敛速度快,对异常值敏感,如果是需要进行异常检测,就不能忽略掉离群值。
假如数据集多数为 1000,少数为 10,那么 L1 会偏向 1000(因为更偏向于平均),L2 则会偏向于 10,因为对离群值更敏感,所以实际中这两种都不太可取,所以 Smooth L1 Loss 可以同时利用两者的优点。
Smooth L1 Loss
平滑的 L1 损失(Smooth L1 Loss, SLL)
代码:
1 |
|
Smooth L1 Loss 的优点:
- 结合了 L1 Loss 对离群点、异常值不敏感的优点;
- 结合了 L2 Loss 在 0 处可导数,收敛速度快、训练不容易跑飞的优点。
PyTorch 常用损失函数
https://wonderhoi.com/2024/09/24/PyTorch-常用损失函数/