度量学习DML之Contrastive Loss及其变种_程大海的博客-CSDN博客
度量学习DML之Triplet Loss_程大海的博客-CSDN博客
度量学习DML之Lifted Structure Loss_程大海的博客-CSDN博客
度量学习DML之Circle Loss_程大海的博客-CSDN博客
度量学习DML之Cross-Batch Memory_程大海的博客-CSDN博客
数据增强之SpecAugment_程大海的博客-CSDN博客
基于pytorch-metric-learning实现的度量学习模板代码:pytorch-metric-learning-template
度量学习的目标:
- 相似的或者属于同一类的样本提取到的embedding向量之间具有更高的相似度,或者具有更小的空间距离
- 对于out-of samples的样本,也就是未见过的样本,希望也能提取到有效的embedding,也就是模型的泛化能力更好
Triplet Loss(三元组损失)
论文:《FaceNet:A Unified Embedding for Face Recognition and Clustering》
三元组损失顾名思义,一次输入的样本数量有三个:
Anchor:随机选择一个样本,假设
所属的类别为A
Positive:在所有类别为A的训练样本中,选择一个正样本
Negative:在其余类别中选择一个训练样本作为负样本
优化目标:在特征向量空间中,与
之间的距离要小于
与
之间的距离,并且距离的差值还要满足限制条件
通过上图可以看到,期初在向量空间中,Anchor与Negative的距离比Anchor与Positive的距离近,通过学习优化之后,Anchor与Negative的距离比Anchor与Positive的距离远,函数表示形式如下:
一组三元组样本的损失表示如下:
三元组整体损失函数表示如下:
对于min-batch中的样本,Triplet Loss一次也只是使用一个anchor,一个positive和一个negative。
参考:GitHub - KevinMusgrave/pytorch-metric-learning: The easiest way to use deep metric learning in your application. Modular, flexible, and extensible. Written in PyTorch. 参考:PyTorch Metric Learning