损失函数约束类间不一致性及类内一致性
参考书籍:Python深度学习-基于PyTorch
交叉熵损失函数对不同类之间的距离的区分性较小。原因:softmax具备分类能力但是不具备度量学习的特征,没法压缩同一类别。因此,研究者们提出了几种损失函数。
(1)三元组损失Triplet loss
三元组损失属于度量学习,通过计算两张图象之间的相似度,使得输入图像被归入到相似度大的图像类别中去。
L t = ∑ [ ∥ f ( x i a ) − f ( x i p ) ∥ 2 2 − ∥ f ( x i a ) − f ( x i n ) ∥ 2 2 + α ] + L_t=\sum [\left \| f(x_{i}^{a}) -f(x_{i}^{p}) \right \|_{2}^{2}-\left \| f(x_{i}^{a}) -f(x_{i}^{n}) \right \|_{2}^{2}+\alpha ]_{+}L
t
=∑[∥f(x
i
a
)−f(x
i
p
)∥
2
2
−∥f(x
i
a
)−f(x
i
n
)∥
2
2
+α]
+
∑ \sum∑表示一个batch内所有图像的损失和,x i a 、 x i p 、 x i n x_{i}^{a}、x_{i}^{p}、x_{i}^{n}x
i
a
、x
i
p
、x
i
n
为每次从训练数据中去除的3张图像,前两项为同一类,第三项为不同类。||表示欧式距离。[ ] + []_{+}[]
+
表示当括号内值大于0时,为括号内值,否则取0。
优点:使用量化学习解决特征表示的类别间距问题;缺点:在训练过程中,对元组的选择的要求的技巧较高,而且要求数据集比较大。
(2)中心损失Center Loss
Center Loss用于压缩同一类别,为每个类别提供一个类别中心,最小化每个样本与其类别中心的距离。
L c = ∑ ∥ x i − c y i ∥ 2 2 L_c=\sum\|x_i-c_{y_i}\|_2^2L
c
=∑∥x
i
−c
y
i
∥
2
2
。其中,x i x_ix
i
为一个样本,y i y_iy
i
为对应样本类别,c y i c_{y_i}c
y
i
为该类别中心。该损失函数可较好的解决类间内聚性。利用中心损失的同时,一般还会加上softmax损失以保证类间的可分性。所以,最终的损失函数包括softmax损失和中心损失。L = λ × L c + L s o f t m a x L=\lambda \times L_c+L_{softmax}L=λ×L
c
+L
softmax
.其中,λ \lambdaλ用于平衡两种损失函数,该权重越大,生成的特征就会越具有内聚性。优点:训练得到的特征具有内聚性;缺点:当类别数目较多时(>10000)时,内存消耗大,对GPU的要求非常高。
(3)ArcFace损失additive angular margin loss该损失函数使用归一化的网络权重和偏差来计算损失函数,对原输出ω y i T x i + b y i \omega_{y_i}^Tx_i+b_{y_i}ω
y
i
T
x
i
+b
y
i
可转化为∣ ω y i ∣ ⋅ ∣ x i ∣ ⋅ c o s ( θ ) |\omega_{y_i}|\cdot|x_i|\cdot cos(\theta)∣ω
y
i
∣⋅∣x
i
∣⋅cos(θ),θ \thetaθ 为ω y i , x i \omega_{y_i},x_iω
y
i
,x
i
之间的角度。对输出归一化为s ⋅ ( c o s ( θ y i ) + m ) s\cdot(cos(\theta_{y_i})+m)s⋅(cos(θ
y
i
)+m)得到新的损失函数为
优点:不仅对权重进行了正则化,对特征也进行了正则化。
————————————————
版权声明:本文为CSDN博主「lovely_smile」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/lovely_smile/article/details/109404895
损失函数约束类间不一致性
最新推荐文章于 2024-06-19 22:08:28 发布
本文介绍了深度学习中三种关键的损失函数:三元组损失、中心损失和ArcFace损失。三元组损失通过度量学习增强类间区分性;中心损失通过定义类别中心提升类内一致性;ArcFace损失通过角度边距改进了分类效果。
摘要由CSDN通过智能技术生成