常见的loss函数及pytorch代码

回归损失函数

MAE、MSE、Smooth l1loss

首先,是这三个函数的函数图:
常见的loss函数及pytorch代码
这边函数的理解部分参考博客:https://blog.****.net/qq_37002417/article/details/106198053

  1. MAE(mean absolute error)l1loss:
    f(x)=abs(x) f(x)=abs(x)
    1.1 函数特点:(1)0处不可微,求解效率低;(2)梯度稳定,但是在loss较低时,函数的梯度保持不变,因此不利于模型收敛;(3)相比于MSE,对异常值鲁邦,从导数可以看出。(4)使用不多,多用于结构风险最小化。
    1.2 pytorch代码:

常见的loss函数及pytorch代码
2 MSE(Mean square loss):
f(x)=x2 f(x)=x^{2}
2.1 函数特点:(1)处处可微,利于求解;(2)loss较小时,梯度也会较小,因此利于模型收敛;(3)训练初期,梯度较大,容易梯度爆炸;(4)异常值对loss的影响较大,因此从而降低正常值的预测效果??这句话感觉不理解。
2.2 pytorch:与l1几乎相同。
3 Smoothl1 loss
smoothL1(x)={0.5x2,x1x0.5,otherwise smooth_{L_{1}}(x)=\begin{cases}0.5x^{2}, &\left |x \right |\leq 1 \cr \left |x \right|-0.5, &otherwise\end{cases}
3.1 函数特点:从梯度上比较完美,(1)异常值过大,不至于梯度爆炸;(2)loss较小时,梯度较小,利于模型收敛。(3)后来在目标检测中,one-stage方法存在正负样本极端不平衡问题,因此后面出现了一些针对某种问题的loss函数。

其他常见的损失函数

  1. sofrtmax-cross entropy loss:
    softmax:
    q(x)=exiexi q(x)=\frac{e^{x_{i}}}{\sum e^{x_{i}}}
    cross entropy loss:
    loss=p(x)log(q(x)) loss=-\sum p(x)log(q(x))
    q表示预测值,p表示真实值。
    函数特点:用预测分布去逼近真实概率分布,增加softmax的意义是防止出现数值的上下溢。
  2. 针对正负样本不平衡问题的loss函数
    2.1 focal loss函数:
    Focalloss={(1q(x))γlog(q(x)),yi=1(q(x))γlog(1q(x)),otherwise Focalloss=\begin{cases} -(1-q(x))^{\gamma}*log(q(x)),&y_{i}=1 \cr -(q(x))^{\gamma}*log(1-q(x)),&otherwise\end{cases}
    在没有加样本平衡参数时,个人觉得类似于smoothl1的作用,不同的是该函数该函数学得是概率分布,而smoothl1学的是(忘记名词。。)。
    加入了样本平衡参数的focalloss:
    Focalloss={a(1q(x))γlog(q(x)),yi=1(1a)(q(x))γlog(1q(x)),otherwise Focalloss=\begin{cases} -a(1-q(x))^{\gamma}*log(q(x)),&y_{i}=1 \cr -(1-a)(q(x))^{\gamma}*log(1-q(x)),&otherwise\end{cases}
    这个权重影响的是梯度,这对于正样本较少的时候,可以使loss函数以较快的速率下降,学习速度更快。
    常见的loss函数及pytorch代码
  3. 针对类别的loss函数:
  4. 针对boxscale pred提出的IoU loss: