最近学习 pytorch,将其损失函数大致使用场景做了一下汇总,多参考网上大家的文章,或直接引用,文后附有原文链接,如有不对,欢迎指正
一、L1Loss
L1 Loss,它有几个别称:
- L1 范数损失
- 最小绝对值偏差(LAD)
- 最小绝对值误差(LAE)
最常看到的 MAE 也是指L1 Loss损失函数
它是把目标值 g 与模型输出(估计值) y 做绝对值得到的误差 。
什么时候用?
- 回归任务
- 简单的模型
- 由于神经网络通常是解决复杂问题,所以很少使用。
二、MSELoss
也就是L2 Loss了,它有几个别称:
- L2 范数损失
- 最小均方值偏差(LSD)
- 最小均方值误差(LSE)
最常看到的 MSE 也是指L2 Loss损失函数,PyTorch中也将其命名为torch.nn.MSELoss
它是把目标值 g 与模型输出(估计值) y 做差然后平方得到的误差
什么时候使用?
- 回归任务
- 数值特征不大
- 问题维度不高
三、SmoothL1Loss
简单来说就是平滑版的L1 Loss。
原理
当预测值和ground truth差别较小的时候(绝对值差小于1),其实使用的是L2 Loss;而当差别大的时候,是L1 Loss的平移。
SmoothL1Loss其实是L2Loss和L1Loss的结合 ,它同时拥有L2 Loss和L1 Loss的部分优点。
- 当预测值和ground truth差别较小的时候(绝对值差小于1),梯度不至于太大。(损失函数相较L1 Loss比较圆滑)
- 当差别大的时候,梯度值足够小(较稳定,不容易梯度爆炸)。
什么时候使用?
- 回归
- 当特征中有较大的数值
- 适合大多数问题
四、交叉熵损失 CrossEntropyLoss
原理
交叉熵损失函数图形(分类情况):
单个样本的交叉熵损失函数:
当 y = 1 时:
这时候,L 与预测输出的关系如下图所示:
看了 L 的图形,简单明了!横坐标是预测输出,纵坐标是交叉熵损失函数 L。显然,预测输出越接近真实样本标签 1,损失函数 L 越小;预测输出越接近 0,L 越大。因此,函数的变化趋势完全符合实际需要的情况。
当 y = 0 时: