损失函数
损失函数用来评价模型的预测值和真实值不一样的程度,损失函数越好,通常模型的性能越好。不同的模型用的损失函数一般也不一样。
损失函数分为经验风险损失函数和结构风险损失函数。经验风险损失函数指预测结果和实际结果的差别,结构风险损失函数指经验风险损失函数加上正则项。
分类损失
0-1损失函数(zero-one loss)
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)
特点:
- 0-1损失函数直接对应分类判断错误的个数,但是它是一个非凸函数,不太实用
- 感知机就是用的这种损失函数。但是相等这个条件太过严格,因此可以放宽条件,即满足 ∣ Y − f ( x ) ∣ < T |Y-f(x)| < T ∣Y−f(x)∣<T 时认为相等
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)∣
指数损失函数(exponential loss)
指数损失函数的标准形式如下:
L e x p = exp ( − y ⋅ y ^ ) L_{exp} = \exp(-y \cdot \hat{y}) Lexp=exp(−y⋅y^)
特点:
- 对离群点、噪声非常敏感。经常用在 AdaBoost 算法中
Hinge 损失函数
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^)
特点:
- hinge 损失函数表示如果被分类正确,损失为 0,否则损失就为 1 − y f ( x ) 1-yf(x) 1−yf(x) 。SVM模型的损失函数本质上就是 Hinge Loss + L2 正则化
- 一般的 f ( x ) f(x) f(x) 是预测值,在 -1 到 1 之间, y y y 是目标值(-1 或 1)。其含义是, f ( x ) f(x) f(x) 的值在 -1 和 +1 之间就可以了,并不鼓励 ∣ f ( x ) ∣ > 1 |f(x)| > 1 ∣f(x)∣>1 ,即并不鼓励分类器过度自信,让某个正确分类的样本距离分割线超过1并不会有任何奖励,从而使分类器可以更专注于整体的误差。
- 健壮性相对较高,对异常点、噪声不敏感,但它没太好的概率解释
感知损失函数(perceptron)
感知器损失函数的标准形式如下:
L ( y , f ( x ) ) = max ( 0 , − f ( x ) ) L(y, f(x)) = \max(0, -f(x)) L(y,f(x))=max(0,−f(x))
特点:
- 是 Hinge 损失函数的一个变种,Hinge Loss 对判定边界附近的点(正确端)惩罚力度很高。而 perceptron loss 只要样本的判定类别正确的话,它就满意,不管其判定边界的距离,它比 Hinge Loss 简单,因为不是 max-margin boundary ,所以模型的泛化能力没 hinge loss 强。
交叉熵损失函数(Cross-entropy loss function)
交叉熵损失函数的标准形式如下:
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 作为激活函数的时候,常用交叉熵损失函数而不用均方差损失函数,因此它可以完美解决平方损失函数权重更新过慢的问题,具有“误差大的时候,权重更新快;误差小的时候,权重更新慢”的良好性质
权重交叉熵损失函数(Weighted cross-entropy loss function)
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
需要认为调整困难样本的权重,增加调参难度
Focal Loss
为了解决正负样本严重失衡的问题,由 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 变得大,从而加强对正样本的关注度。可以改善目标不均衡的现象,对此情况比交叉熵要好很多。
回归损失
点回归损失
均方差损失 Mean Squared Error 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
平均绝对误差损失 Mean Absolute Error Loss
平均绝对误差是另一类常用的损失函数,也称为 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 损失对于异常值更加健壮,即更加不易受到异常值影响。
- MSE 通常比 MAE 可以更快地收敛。当使用梯度下降算法时,MSE 损失的梯度为 − y ^ i -\hat{y}_i −y^i,而 MAE 损失的梯度为 ± 1 \pm1 ±1 ,即 MSE 的梯度的尺度会随误差大小变换,而 MAE 的梯度的尺度则一直保持为1,即便在绝对误差 ∣ y i − y ^ i ∣ |y_i - \hat{y}_i| ∣yi−y^i∣ 很小的时候 MAE 的梯度尺度也同样为 1,这实际上是非常不利于模型的训练的。当然你可以通过在训练过程中动态调整学习率缓解这个问题,但是总的来说,损失函数梯度之间的差异导致了 MSE 在大部分时候比 MAE 收敛地更快。这个也是 MSE 更为流行的原因
- MAE 对于异常值更加健壮。
- 第一个角度是直观理解,由于 MAE 损失与绝对误差之间是线性关系,MSE 损失与误差是平方关系,当误差非常大的时候,MSE 损失会远远大于 MAE 损失。因此当数据中出现一个误差非常大的异常值时,MSE 会产生一个非常大的损失,对模型的训练会产生较大的影响。
- 第二个角度是从两个损失函数的假设出发,MSE 假设了误差服从高斯分布,MAE 假设了误差服从拉普拉斯分布。拉普拉斯本身对于异常值更加健壮。当出现了异常值时,拉普拉斯分布相比于高斯分布收到的影响要小很多。因此以 拉普拉斯分布为假设的 MAE 对异常值比高斯分布为假设的 MSE 更加健壮。
Huber Loss
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。
分位数损失 Quantile Loss
分位数回归是一类在实际应用中非常有用的回归算法,通常的回归算法是拟合目标值的期望或者中位数,而分位数回归可以通过给定不同的分为点,拟合目标值的不同分位数。
分位数回归是通过使用分位数损失来实现这一点的,分位数损失形式如下,式中的 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∣
边框回归损失
IoU Loss
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 的缺点
缺点:
- 当预测框和目标狂不想交,即 I o U ( b b o x 1 , b b o x 2 ) = 0 IoU(bbox1, bbox2) = 0 IoU(bbox1,bbox2)=0 时,不能反映两个框距离的远近,此时损失函数不可导,IoU Loss 无法优化两个框不想交的情况
- 假设预测狂和目标框的大小都确定,只要两个框的相交值是确定的,其 IoU 值是相同的,IoU 值不能反映两个框是如何相交的
GIoU Loss
由于 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 取值范围为 [-1, 1],在两框重合时取最大值 1,在两框无限远时取最小值 -1
- 与 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,无法区分其相对位置关系。
DIoU Loss
针对 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 没有包含长宽比因素
CIoU Loss
在 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
EIoU Loss
为了解决 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-EIoU Loss
为了解决不平衡的问题(具有小回归误差的高质量边框的数量比低质量的少得多)
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
一文理解Ranking Loss/Margin Loss/Triplet Loss
参考文章
从L1 loss到EIoU loss,目标检测边框回归的损失函数一览