不同于cross entry loss或者MSE等等,他们的目标去表征模型的输出与实际的输出差距是多少。但是ranking loss实际上是一种metric learning,他们学习的相对距离,而不在乎实际的值。由于在不同场景有不同的名字,包括 Contrastive Loss, Margin Loss, Hinge Loss or Triplet Loss.
ranking loss 应用十分广泛,包括是二分类,例如人脸识别,是一个人不是一个人。
ranking loss 有非常多的叫法,但是他们的公式实际上非常一致的。大概有两类,一类是输入pair 对,另外一种是输入3塔结构。
Pairwise Ranking Loss
对于负样本,如果negative和anchor的具体大于m,那么就可不用管了,直接=0,不用再费劲去优化了;正样本就是postive和anchor的距离。
如果就是二分类,那么也可以如下形式
Triplet Ranking Loss
- easy triplets(简单三元组): triplet对应的损失为0的三元组,形式化定义为d(a,n)>d(a,p)+margin,也就是负样本的距离远大于正样本的距离。
- hard triplets(困难三元组): negative example 与anchor距离小于anchor与positive example的距离,形式化定义为d(a,n)<d(a,p),也就是负样本的距离远小于正样本的距离,意味着是易混淆的case。
- semi-hard triplets(一般三元组): negative example 与anchor距离大于anchor与positive example的距离,但还不至于使得loss为0,即d(a,p)<d(a,n)<d(a,p)+margin,依旧是介于能区分与容易区分之间,有差距但是差距不够大。
接下来的问题就是怎么构造负样本。
在triplet loss 中有如下的方式
Offline triplet mining
离线方式的triplet mining将所有的训练数据喂给神经网络,得到每一个训练样本的编码,根据编码计算得到negative example与anchor和positive example之间的距离,根据这个距离判断semi-hard triplets,hard triplets还是easy triplets。offline triplet mining 仅仅选择select hard or semi-hard triplets,因为easy triplet太容易了,没有必要训练
Online triplet mining
-batch all: 计算所有的valid triplet,对6hard 和 semi-hard triplets上的loss进行平均。
- 不考虑easy triplets,因为easy triplets的损失为0,平均会把整体损失缩小
- 将会产生PK(K-1)(PK-K)个triplet,即PK个anchor,对于每个anchor有k-1个可能的positive example,PK-K个可能的negative examples
- batch hard: 对于每一个anchor,选择hardest positive example(距离anchor最大的positive example)和hardest negative(距离anchor最小的negative example),
- 由此产生PK个triplet
- 这些triplet是最难分的
一些别名
在不同场景有不同的名字
- Ranking loss: 这个名字主要是在搜索场景用,希望模型能能够以一定顺序rank item。
- Margin Loss: 这个则是希望用margin去代表距离 。
- Contrastive Loss:
- Triplet Loss: 通常是3塔结构
- Hinge loss: 也是max-margin objective. 也是SVM 分类的损失函数。max{0,margin-(S(Q,D+)-S(Q,D-))}
- WRGP loss 这个主要原理是认为随机抽样1000个
https://zhuanlan.zhihu.com/p/101143469
https://gombru.github.io/2019/04/03/ranking_loss/