损失函数用来评价模型的预测值和真实值不一样的程度,损失函数越好,通常模型的性能越好。不同的模型用的损失函数一般也不一样。
损失函数分为经验风险损失函数和结构风险损失函数。经验风险损失函数指预测结果和实际结果的差别,结构风险损失函数指经验风险损失函数加上正则项。
0-1损失函数是指预测值和目标值不相等为1,否则为0
L ( Y , f ( X ) ) = { 1 , Y ≠ f ( X ) 0 , Y = f ( X ) L(Y,f(X)) = \begin{cases} 1, & Y \neq f(X) \\ 0, & Y = f(X) \end{cases} L(Y,f(X))={1,0,Y=f(X)Y=f(X)
特点:
L ( Y , f ( X ) ) = { 1 , ∣ Y − f ( X ) ∣ ≥ T 0 , ∣ Y − f ( X ) ∣ < T L(Y,f(X)) = \begin{cases} 1, & |Y - f(X)| \geq T \\ 0, & |Y - f(X)| < T \end{cases} L(Y,f(X))={1,0,∣Y−f(X)∣≥T∣Y−f(X)∣<T
绝对值损失函数是计算预测值与目标值的差的绝对值:
L ( Y , f ( X ) ) = ∣ Y − f ( x ) ∣ L(Y,f(X)) = |Y - f(x)| L(Y,f(X))=∣Y−f(x)∣
指数损失函数的标准形式如下:
L e x p = exp ( − y ⋅ y ^ ) L_{exp} = \exp(-y \cdot \hat{y}) Lexp=exp(−y⋅y^)
特点:
Hinge 损失函数标准形式如下:
L h i n g e = max ( 0 , 1 − y ⋅ y ^ ) L_{hinge} = \max(0, 1- y \cdot \hat{y}) Lhinge=max(0,1−y⋅y^)
特点:
感知器损失函数的标准形式如下:
L ( y , f ( x ) ) = max ( 0 , − f ( x ) ) L(y, f(x)) = \max(0, -f(x)) L(y,f(x))=max(0,−f(x))
特点:
交叉熵损失函数的标准形式如下:
L C E = − 1 N ∑ i N [ y i log y ^ i + ( 1 − y i ) log ( 1 − y ^ i ) ] L_{CE}= - \frac{1}{N}\sum_{i}^N [y_i\log \hat{y}_i + (1 - y_i)\log(1-\hat{y}_i)] LCE=−N1i∑N[yilogy^i+(1−yi)log(1−y^i)]
特点:
本质上也是一种对数似然函数,可用于二分类和多分类任务中
二分类中的 loss 函数(输入数据是 softmax 或者 sigmoid 函数的输出):
L C E = − 1 N ∑ i N [ y i log y ^ i + ( 1 − y i ) log ( 1 − y ^ i ) ] L_{CE}= - \frac{1}{N}\sum_{i}^N [y_i\log \hat{y}_i + (1 - y_i)\log(1-\hat{y}_i)] LCE=−N1i∑N[yilogy^i+(1−yi)log(1−y^i)]
多分类问题中的 loss 函数(输入数据是 softmax 或者 sigmoid 函数的输出):
L C E = − 1 N ∑ i y i log y ^ i L_{CE} = -\frac{1}{N} \sum_i y_i\log \hat{y}_i LCE=−N1i∑yilogy^i
当使用 sigmoid 作为激活函数的时候,常用交叉熵损失函数而不用均方差损失函数,因此它可以完美解决平方损失函数权重更新过慢的问题,具有“误差大的时候,权重更新快;误差小的时候,权重更新慢”的良好性质
L W C E = − 1 N ∑ n = 1 N ( w y i log ( y ^ i ) + ( 1 − y i ) log ( 1 − y ^ i ) ) L_{WCE} = -\frac{1}{N}\sum_{n=1}^N (w y_i\log(\hat{y}_i) + (1-y_i)\log(1-\hat{y}_i)) LWCE=−N1n=1∑N(wyilog(y^i)+(1−yi)log(1−y^i))
w w w 为权重,
w = N − ∑ n y ^ i ∑ n y ^ i w = \frac{N - \sum_n\hat{y}_i}{\sum_n \hat{y}_i} w=∑ny^iN−∑ny^i
需要认为调整困难样本的权重,增加调参难度
为了解决正负样本严重失衡的问题,由 log loss 改进而来
L F L = − 1 n ∑ i N [ α y i ( 1 − y ^ i ) γ log y ^ i + ( 1 − α ) ( 1 − y i ) y ^ i γ log ( 1 − y ^ i ) ] L_{FL}= - \frac{1}{n}\sum_{i}^N [\alpha y_i (1 - \hat{y}_i)^\gamma \log \hat{y}_i + (1-\alpha)(1 - y_i) \hat{y}_i^\gamma \log(1-\hat{y}_i)] LFL=−n1i∑N[αyi(1−y^i)γlogy^i+(1−α)(1−yi)y^iγlog(1−y^i)]
其基本思想就是,对于类别极度不平衡的情况下,网络如果在 log loss 下会倾向于之预测负样本,并且负样本的预测概率 y ^ i \hat{y}_i y^i 也会非常的高,回传的梯度也很大。但是如果添加 ( 1 − y ^ i ) γ (1 - \hat{y}_i)^\gamma (1−y^i)γ 则会使预测概率大的样本得到的 loss 变小,而预测概率小的样本,loss 变得大,从而加强对正样本的关注度。可以改善目标不均衡的现象,对此情况比交叉熵要好很多。
均方差损失是机器学习、深度学习回归任务中最常用的一种损失函数,也称为 L2 Loss,其基本形式如下:
L M S E = 1 N ∑ i = 1 N ( y i − y ^ i ) 2 L_{MSE} = \frac{1}{N} \sum_{i=1}^N (y_i - \hat{y}_i)^2 LMSE=N1i=1∑N(yi−y^i)2
平均绝对误差是另一类常用的损失函数,也称为 L1 Loss,其基本形式如下:
L M A E = 1 N ∑ i = 1 N ∣ y i − y ^ i ∣ L_{MAE} = \frac{1}{N}\sum_{i=1}^N |y_i - \hat{y}_i| LMAE=N1i=1∑N∣yi−y^i∣
MAE 与 MSE 的区别:MAE 和 MSE 作为损失函数的主要区别是:MSE 损失相比于 MAE 通常可以更快的收敛,但 MAE 损失对于异常值更加健壮,即更加不易受到异常值影响。
Huber Loss 是一种将 MSE 与 MAE 结合起来,取两者优点的损失函数,也被称作 Smooth Mean Absolute Error Loss(Smooth L1 损失)。其原理很简单,就是在误差接近 0 时使用 MSE,误差较大时使用 MAE,公式为
L h u b e r = 1 N ∑ i = 1 N I ∣ y i − y ^ i ∣ ≤ δ ( y i − y i ^ ) 2 2 + I ∣ y i − y ^ i ∣ > δ ( δ ∣ y i − y ^ i ∣ − 1 2 δ 2 ) L_{huber} = \frac{1}{N}\sum_{i=1}^{N} \mathbb{I}_{|y_i - \hat{y}_i| \leq \delta} \frac{(y_i - \hat{y_i})^2}{2} + \mathbb{I}_{|y_i - \hat{y}_i| > \delta} (\delta|y_i - \hat{y}_i| - \frac{1}{2}\delta^2) Lhuber=N1i=1∑NI∣yi−y^i∣≤δ2(yi−yi^)2+I∣yi−y^i∣>δ(δ∣yi−y^i∣−21δ2)
一般使用的 Smooth L1 Loss 为( δ = 1 \delta = 1 δ=1):
Smooth L 1 ( x ) = { 0.5 ( y i − y i ^ ) 2 i f ∣ y i − y i ^ ∣ < 1 ∣ ( y i − y i ^ ) ∣ − 0.5 o t h e r w i s e \text{Smooth}L_1(x) = \begin{cases} 0.5 (y_i - \hat{y_i})^2 & if \; |y_i - \hat{y_i}| < 1 \\ |(y_i - \hat{y_i})|-0.5 & otherwise \end{cases} SmoothL1(x)={0.5(yi−yi^)2∣(yi−yi^)∣−0.5if∣yi−yi^∣<1otherwise
上式中 δ \delta δ 是 Huber Loss 的一个超参数, δ \delta δ 的值是 MSE 和 MAE 两个损失连接的位置。上式等号右边第一项是 MSE 的部分,第二项是 MAE 部分,在 MAE 的部分公式为 δ ∣ y i − y ^ i ∣ − 1 2 δ 2 \delta|y_i - \hat{y}_i| - \frac{1}{2}\delta^2 δ∣yi−y^i∣−21δ2 是为了保证误差 ∣ y − y ^ ∣ = ± δ |y-\hat{y}| = \pm\delta ∣y−y^∣=±δ 时 MAE 和 MSE 的取值一致,进而保证 Huber Loss 损失连续可导。
特点:Huber Loss 结合了 MSE 和 MAE 损失,在误差接近 0 时使用 MSE,使损失函数可导并且梯度更加稳定;在误差较大时使用 MAE 可以降低异常值的影响,使训练对异常值更加健壮。
缺点: L 1 / L 2 / s m o o t h L 1 L_1/L_2/smooth_{L_1} L1/L2/smoothL1 在计算目标检测的 bbox loss 时,都是独立的求出四个点的 loss,然后相加得到最终的 bbox loss。这种做法默认 4 个点是相互独立的,与实际不符。举个例子,当 (x, y) 为右下角时,w h 其实只能取 0。
分位数回归是一类在实际应用中非常有用的回归算法,通常的回归算法是拟合目标值的期望或者中位数,而分位数回归可以通过给定不同的分为点,拟合目标值的不同分位数。
分位数回归是通过使用分位数损失来实现这一点的,分位数损失形式如下,式中的 r r r 分位数系数
L q u a n t = 1 N ∑ i = 1 N I y ^ i ≥ y i ( 1 − r ) ∣ y i − y ^ i ∣ + I y ^ i < y i r ∣ y i − y ^ i ∣ L_{quant} = \frac{1}{N} \sum_{i=1}^N \mathbb{I}_{\hat{y}_i \geq y_i} (1 - r) |y_i - \hat{y}_i| + \mathbb{I}_{\hat{y}_i < y_i}r|y_i - \hat{y}_i| Lquant=N1i=1∑NIy^i≥yi(1−r)∣yi−y^i∣+Iy^i<yir∣yi−y^i∣
这个损失函数是一个分段的函数,将 y ^ i ≥ y i \hat{y}_i \geq y_i y^i≥yi (高估)和 y ^ i < y i \hat{y}_i < y_i y^i<yi (低估)两种情况分开来,并分别给予不同的系数。当 r > 0.5 r > 0.5 r>0.5 时,低估的损失要比高估的损失更大,反过来当 r < 0.5 r < 0.5 r<0.5 时,高估的损失比低估的损失大;分位数损失实现了分别用不同的系数控制高估和低估的损失,进而实现分位数回归。特别地,当 r = 0.5 r=0.5 r=0.5 时,分位数损失退化为 MAE 损失,从这里可以看出 MAE 损失实际上是分位数损失的一个特例——中位数回归(这也可以解释为什么 MAE 损失对异常值更健壮:MSE 回归期望值,MAE 回归中位数,通常异常值对中位数的影响比对期望值的影响小)
L q u a n t r = 0.5 = 1 N ∑ i = 1 N ∣ y i − y ^ i ∣ L_{quant}^{r=0.5} = \frac{1}{N}\sum_{i=1}^N |y_i - \hat{y}_i| Lquantr=0.5=N1i=1∑N∣yi−y^i∣
L I o U = 1 − I o U ( b b o x g t , b b o x p r e d ) L_{IoU} = 1 - IoU(bbox_{gt}, bbox_{pred}) LIoU=1−IoU(bboxgt,bboxpred)
IoU 计算让x,y,w,h 相互关联,同时具备了尺度不变性,克服了 s m o o t h L 1 L o s s smooth_{L_1} Loss smoothL1Loss 的缺点
缺点:
由于 IoU 不能区分一些相交的情况,所以提出 GIoU 作为度量指标:
G I o U = I o U − ∣ C − ( A ∪ B ) ∣ ∣ C ∣ GIoU = IoU - \frac{|C - (A\cup B)|}{|C|} GIoU=IoU−∣C∣∣C−(A∪B)∣
其中 C 为 A 和 B 的外接矩形。用 C 减去 A 和 B 的并集除以 C 得到一个数值,然后再用 A 和 B 的 IoU 减去这个数值即可得到 GIoU 的值。可以看出:
GIoU Loss 定义:
L G I o U = 1 − G I o U L_{GIoU} = 1 - GIoU LGIoU=1−GIoU
缺点:当目标框完全包裹预测框的时候, IoU 和 GIoU 的值都一样,此时 GIoU 退化为 IoU,无法区分其相对位置关系。
针对 IoU 和 GIoU 的缺点,提出了边框回归的三个重要几何因素:重叠面积、中心点距离和长宽比,提出 DIoU 和 CIoU
DIoU 为:
D I o U = I o U − R I o U DIoU = IoU - R_{IoU} DIoU=IoU−RIoU
R I o U R_{IoU} RIoU 表示预测框与真实框的惩罚项,将惩罚项设置为:
R D I o U = ρ 2 ( b p r e d , b g t ) c 2 R_{DIoU} = \frac{\rho^2(b_{pred}, b_{gt})}{c^2} RDIoU=c2ρ2(bpred,bgt)
其中 b p r e d , b g t b_{pred}, b_{gt} bpred,bgt 表示框的中心点, ρ \rho ρ 表示欧氏距离, c c c 表示最小外接矩形的对角线距离,故 DIoU Loss 定义:
L D I o U = 1 − I o U + R D I o U L_{DIoU} = 1 - IoU + R_{DIoU} LDIoU=1−IoU+RDIoU
边框回归的三个重要几何因素:重叠面积、中心点距离和长宽比,DIoU 没有包含长宽比因素
在 DIoU 的基础上,增加了长宽比影响因子 α v \alpha v αv,合并到惩罚项:
R C I o U = ρ 2 ( b p r e d , b g t ) c 2 + α v R_{CIoU} = \frac{\rho^2(b_{pred}, b_{gt})}{c^2} + \alpha v RCIoU=c2ρ2(bpred,bgt)+αv
其中 v v v 用于衡量长宽比的一致性, α \alpha α 用于平衡 v v v 的值,设为:
α = v ( 1 − I o U ) + v v = 2 π 2 ( arctan w g t h g t − arctan w h ) 2 \begin{aligned} & \alpha = \frac{v}{(1-IoU) + v} \\ & v = \frac{2}{\pi^2}(\arctan\frac{w^{gt}}{h^{gt}} - \arctan\frac{w}{h})^2 \end{aligned} α=(1−IoU)+vvv=π22(arctanhgtwgt−arctanhw)2
CIoU Loss 定义:
L C I o U = 1 − I o U + R C I o U L_{CIoU} = 1 - IoU + R_{CIoU} LCIoU=1−IoU+RCIoU
缺点,在 CIoU 的定义中,衡量长宽比的 v v v 过于复杂,从两个方面减缓了收敛速度
长宽比不能取代单独的长宽,比如 w = k w g t , h = k h g t w = kw^{gt}, h=kh^{gt} w=kwgt,h=khgt 都会导致 v = 0 v = 0 v=0
从 v v v 的导数可以得到 ∂ v ∂ w = − h w ∂ v ∂ h \frac{\partial v}{\partial w} = -\frac{h}{w} \frac{\partial v}{\partial h} ∂w∂v=−wh∂h∂v ,这说明 ∂ v ∂ w \frac{\partial v}{\partial w} ∂w∂v 和 ∂ v ∂ h \frac{\partial v}{\partial h} ∂h∂v 在优化意义相反,因此,在任何时候,如果这两个变量(w或h)中的一个增大,则另一个将减小。
∂ v ∂ w = 8 π 2 ( arctan w g t h g t − arctan w h ) ∗ h w 2 + h 2 ∂ v ∂ h = − 8 π 2 ( arctan w g t h g t − arctan w h ) ∗ w w 2 + h 2 \begin{aligned} & \frac{\partial v}{\partial w} = \frac{8}{\pi^2}(\arctan\frac{w^{gt}}{h^{gt}} - \arctan\frac{w}{h}) * \frac{h}{w^2 + h^2} \\ & \frac{\partial v}{\partial h} = -\frac{8}{\pi^2}(\arctan\frac{w^{gt}}{h^{gt}} - \arctan\frac{w}{h}) * \frac{w}{w^2 + h^2} \end{aligned} ∂w∂v=π28(arctanhgtwgt−arctanhw)∗w2+h2h∂h∂v=−π28(arctanhgtwgt−arctanhw)∗w2+h2w
为了解决 w 和 h 不能一起增大或减小的问题,提出了 EIoU Loss:
L E I o U = L I o U + L d i s + L a s p = 1 − I o U + ρ 2 ( b p r e d , b g t ) c 2 + ρ 2 ( w p r e d , w g t ) C w 2 + ρ 2 ( h p r e d , h g t ) C h 2 \begin{aligned} L_{EIoU} & = L_{IoU} + L_{dis} + L_{asp} \\ & = 1 - IoU + \frac{\rho^2(b_{pred}, b_{gt})}{c^2} + \frac{\rho^2(w_{pred}, w_{gt})}{C_w^2} + \frac{\rho^2(h_{pred}, h_{gt})}{C_h^2} \end{aligned} LEIoU=LIoU+Ldis+Lasp=1−IoU+c2ρ2(bpred,bgt)+Cw2ρ2(wpred,wgt)+Ch2ρ2(hpred,hgt)
其中 C w , C h C_w, C_h Cw,Ch 是最小外接矩形的宽和高。可以直接同时优化宽和高。
为了解决不平衡的问题(具有小回归误差的高质量边框的数量比低质量的少得多)
focal loss 可以理解为对损失加权,常见的 Focal loss 为 F L ( p t ) = − ( 1 − p t ) γ log ( p t ) FL(p_t) = - (1 - p_t)^\gamma \log(p_t) FL(pt)=−(1−pt)γlog(pt)。
Focal-EIoU loss 定义
L F o c a l − E I o U = I o U γ L E I o U L_{Focal-EIoU} = IoU^\gamma L_{EIoU} LFocal−EIoU=IoUγLEIoU
一文理解Ranking Loss/Margin Loss/Triplet Loss
参考文章
常见的损失函数(loss function)总结
机器学习常用损失函数小结
从L1 loss到EIoU loss,目标检测边框回归的损失函数一览
一文理解Ranking Loss/Margin Loss/Triplet Loss
从loss处理图像分割中类别极度不均衡的状况—keras