概念
Triplet Loss是Ranking Loss的一种,Ranking Loss用来预测多个输入之间的相对距离,这种任务常称为metric learning。
Ranking Loss 主要是用于训练差异性小的样本,比如人脸,细粒度分类等;其次在训练目标是得到样本的embedding任务中,ranking loss 也经常使用,比如文本、图片的embedding。
Triplet Loss的目标是使得相同标签的特征在空间位置上尽量靠近,同时不同标签的特征在空间位置上尽量远离,同时为了不让样本的特征聚合到一个非常小的空间中,要求对于同一类的两个正例和一个负例,负例应该比正例的距离至少远margin。
原理
$$
L=\max(d(a,p)-d(a,n)+margin,0)
$$
- a:anchor,锚示例
- p:positive,与a是同一类别的样本
- n:negative,与a是不同类别的样本
- margin是一个大于0的常数。
样本可以分为三类:
Easy Triplets
$$
L=0,即d(a,p)+margin<d(a,n)
$$
这种情况不需要优化,a和p的距离很近,a和n的距离很远。
Hard Triplets
$$
L>margin,即d(a,n)<d(a,p)
$$
a和n的距离近,a和p的距离远,这种情况损失最大,需要优化。
Semi-hard Triplets
$$
L<margin,即d(a,p)<d(a,n)<d(a,p)+margin
$$
即a和p的距离比a和n的距离近,但是近的不够多,不满足margin,这种情况存在损失,但损失比hard triplets要小,也需要优化。
由于margin的存在,使得triplets loss多了一个参数,margin的大小需要调参。如果margin太大,则模型的损失会很大,而且学习到最后,loss也很难趋近于0,甚至导致网络不收敛,但是可以较有把握的区分较为相似的样本,即a和p更好区分;如果margin太小,loss很容易趋近于0,模型很好训练,但是较难区分a和p。
训练
使用negatives selection或triplet mining的方法
- negatives selection使用offline triplet mining,即在训练的一开始或者在每个epoch就定义好triplets集合
- triplet mining使用online triplet mining,即在每个batch的训练过程中定义triplets集合,这种方法被证实效果更好