常用简单损失函数汇总
损失函数的作用:简单来说损失函数就是用来**衡量模型模型预测的好坏。**损失函数可以很好得反映模型与实际数据差距的工具,真实值与预测值差别越大,Loss越大,我们的优化的目标就是减小Loss。
1.Cross Entropy Loss(CE、交叉熵损失,常用于分类任务中)
(16条消息) Pytorch 的损失函数Loss function使用详解_Wanderer001的博客-CSDN博客
(16条消息) 交叉熵损失函数原理详解_Cigar-CSDN博客_交叉熵损失函数
交叉熵损失,也叫Log Loss(两者等价,标签为{-1, 1}时为log loss, 标签为{0, 1}时为交叉熵)
信息量:某事件发生的概率越大,所包含的信息量越小,比如”太阳从东边升起“,这句话就更废话一样没什么信息量。反之不确定性因素越大,信息量也越大,比如”2022年中国队成功进入世界杯“,这句话包含的信息量就比较大。计算公式:
I
(
X
)
=
−
l
o
g
(
P
(
x
)
)
I(X)=-log(P(x))
I(X)=−log(P(x))
这里$I(x)
表
示
信
息
量
,
表示信息量,
表示信息量,P(X)$表示事件发生的概率。
信息熵:表示所有信息量的期望
H
(
x
)
=
−
∑
i
=
1
n
P
(
x
1
)
l
o
g
(
P
(
x
1
)
)
H(x)=-\sum_{i=1}^{n}P(x_{1})log(P(x_1))
H(x)=−i=1∑nP(x1)log(P(x1))
对于只有两种可能的事件比如掷硬币,二分类问题熵的计算方式:
H
(
x
)
=
−
∑
i
=
1
n
P
(
x
1
)
l
o
g
(
P
(
x
1
)
)
=
−
P
(
X
)
l
o
g
(
P
(
X
)
)
−
(
1
−
P
(
X
)
l
o
g
(
1
−
P
(
x
)
)
H(x)=-\sum_{i=1}^{n}P(x_{1})log(P(x_1))=-P(X)log(P(X))-(1-P(X)log(1-P(x))
H(x)=−i=1∑nP(x1)log(P(x1))=−P(X)log(P(X))−(1−P(X)log(1−P(x))
相对熵(KL散度):描述两个概率分布之间的差异
D
K
L
(
p
∣
∣
q
)
=
∑
i
=
1
n
p
(
x
i
)
l
o
g
(
p
(
x
i
)
/
q
(
x
i
)
)
D_{KL}(p||q)=\sum_{i=1}^{n}p(x_i)log(p(x_i)/q(x_i))
DKL(p∣∣q)=i=1∑np(xi)log(p(xi)/q(xi))
交叉熵
将相对熵中
l
o
g
(
p
(
x
i
)
/
q
(
x
i
)
)
log(p(x_i)/q(x_i))
log(p(xi)/q(xi))拆开为:
l
o
g
(
p
(
x
i
)
)
−
l
o
g
(
q
(
x
i
)
)
log(p(x_i))-log(q(x_i))
log(p(xi))−log(q(xi))
D
K
L
(
p
∣
∣
q
)
=
∑
i
=
1
n
p
(
x
i
)
l
o
g
(
p
(
x
i
)
/
q
(
x
i
)
)
D_{KL}(p||q)=\sum_{i=1}^{n}p(x_i)log(p(x_i)/q(x_i))
DKL(p∣∣q)=i=1∑np(xi)log(p(xi)/q(xi))
= ∑ i = 1 n p ( x i ) l o g ( p ( x i ) ) − ∑ i = 1 n p ( x i ) l o g ( q ( x i ) ) =\sum_{i=1}^{n}p(x_i)log(p(x_i))-\sum_{i=1}^{n}p(x_i)log(q(x_i)) =i=1∑np(xi)log(p(xi))−i=1∑np(xi)log(q(xi))
= − H ( p ( x ) ) + [ − ∑ i = 1 n p ( x i ) l o g ( q ( x i ) ) ] =-H(p(x))+[-\sum_{i=1}^{n}p(x_i)log(q(x_i))] =−H(p(x))+[−i=1∑np(xi)log(q(xi))]
不难看出前者为信息熵,后者为交叉熵。KL散度 = 交叉熵 - 信息熵
交叉熵公式:
H
(
p
,
q
)
=
[
−
∑
i
=
1
n
p
(
x
i
)
l
o
g
(
q
(
x
i
)
)
]
H(p,q)=[-\sum_{i=1}^{n}p(x_i)log(q(x_i))]
H(p,q)=[−i=1∑np(xi)log(q(xi))]
在机器学习训练网络时,输入数据与标签常常已经确定,那么真实概率分布 P ( x ) P ( x ) P(x)也就确定下来了,所以信息熵在这里就是一个常量。由于KL散度的值表示真实概率分布$P ( x ) 与 预 测 概 率 分 布 与预测概率分布 与预测概率分布Q ( x ) $之间的差异,值越小表示预测的结果越好,所以需要最小化KL散度,而交叉熵等于KL散度加上一个常量(信息熵),且公式相比KL散度更加容易计算,所以在机器学习中常常使用交叉熵损失函数来计算loss就行了。
2.Contrastive Loss(对比损失)
(16条消息) 深度学习方法(十九):一文理解Contrastive Loss,Triplet Loss,Focal Loss_Bin 的专栏-CSDN博客
增大类间差异并且减小类内差异。
这种损失函数可以有效的处理孪生神经网络中的paired data的关系。
欧氏距离:欧式距离表示两个文本向量在空间之间的距离,如果距离很小说明样本相似;反过来,两个文本越相似,那么它们之间的欧式距离越小;以三维空间为例
A
(
x
1
,
y
1
,
z
1
)
、
B
(
x
2
,
y
2
,
z
3
)
的
欧
氏
距
离
d
为
:
A(x_1,y_1,z_1)、B(x_2,y_2,z_3)的欧氏距离d为:
A(x1,y1,z1)、B(x2,y2,z3)的欧氏距离d为:
d = ( x 2 − x 1 ) 2 + ( y 2 − y 1 ) 2 + ( z 2 − z 1 ) 2 d=\sqrt{(x_2-x_1)^2+(y_2-y_1)^2+(z_2-z_1)^2} d=(x2−x1)2+(y2−y1)2+(z2−z1)2
对比损失表达式:
L
=
1
/
2
N
∑
n
=
1
N
y
d
2
+
(
1
−
y
)
[
m
a
x
(
m
a
r
g
i
n
−
d
,
0
)
]
2
L=1/2N\sum_{n=1}^{N}yd^2+(1-y)[max(margin-d,0)]^2
L=1/2Nn=1∑Nyd2+(1−y)[max(margin−d,0)]2
当y=1(即样本相似)时,损失函数只剩下
L
=
1
/
2
N
∑
n
=
1
N
y
d
2
L=1/2N\sum_{n=1}^{N}yd^2
L=1/2N∑n=1Nyd2,即原本相似的样本,如果在特征空间的欧式距离d较大,则说明当前的模型不好,计算出损失L大。而当y=0时(即样本不相似)时,损失函数为
(
1
−
y
)
[
m
a
x
(
m
a
r
g
i
n
−
d
,
0
)
]
2
(1-y)[max(margin-d,0)]^2
(1−y)[max(margin−d,0)]2,即当样本不相似时,其特征空间的欧式距离反而小的话,模型不好,计算出损失值L大;这也正好符号我们的要求即模型不好时损失L要大。其中margin是一个超参,相当于是给loss定了一个上届(margin平方),如果d大于等于margin,那么说明已经优化的很好了,loss=0了。
3.Mean Squared Error(均方误差损失)
均方差损失函数是预测数据和原始数据对应点误差的平方和的均值。
M S E = 1 / N ( y ′ − y ) 2 MSE=1/N(y'-y)^2 MSE=1/N(y′−y)2
一般不配合sigmoid函数使用,而交叉熵损失函数一般可以配合sigmoid和softmax函数使用。
4.Mean Absolute Error(平均绝对误差)
M
A
E
=
1
/
N
∑
i
=
1
N
∣
y
i
−
f
(
x
i
)
∣
MAE=1/N\sum_{i=1}^{N}|y^i-f(x^i)|
MAE=1/Ni=1∑N∣yi−f(xi)∣
平均绝对误差常用于回归任务中。