损失函数
损失函数用来评价模型的预测值和真实值不一样的程度,损失函数越好,通常模型的性能越好。不同的模型用的损失函数一般也不一样。
损失函数分为经验风险损失函数和结构风险损失函数。经验风险损失函数指预测结果和实际结果的差别,结构风险损失函数指经验风险损失函数加上正则项。
分类损失
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,目标检测边框回归的损失函数一览