三元组损失(Triplet Loss) 是一种用于衡量样本之间相对相似性的损失函数(Loss Function),广泛应用于度量学习(Metric Learning)任务中,尤其是在人脸识别、图像检索、文本匹配等问题中。它的主要目标是通过最小化正样本(positive example)和查询样本(anchor example)之间的距离,同时最大化负样本(negative example)与查询样本之间的距离,从而确保模型可以更好地区分相似样本与不相似样本。
1. 基本概念
三元组损失的核心在于三元组(Triplet) 这个概念,即每次训练时,模型会同时处理三个样本:
-
Anchor(锚点样本):代表待分类的样本,或是查询样本。例如,在人脸识别中,它可以是一张目标人脸图片。
-
Positive(正样本):与锚点样本相似的样本。例如,在人脸识别中,它可以是同一个人的另一张图片。
-
Negative(负样本):与锚点样本不相似的样本。例如,在人脸识别中,它可以是其他人的图片。
三元组损失的目标是:
- 拉近 锚点样本和正样本的距离,使它们在向量空间(vector space)中尽可能接近。
- 拉远 锚点样本和负样本的距离,使它们在向量空间(vector space)中尽可能远离。
2. 数学表达
设:
- a \mathbf{a} a 为锚点样本的嵌入向量,
- p \mathbf{p} p 为正样本的嵌入向量,
- n \mathbf{n} n 为负样本的嵌入向量。
三元组损失的定义为:
L ( a , p , n ) = max ( 0 , d ( a , p ) − d ( a ,