Multi-Similarity Loss
通用pair对加权方案
参数是如何更新的?
设\(x_i,x_j \in R^d\),分别表示两个样本的特征向量,且特征向量模长为1. 定义这两样本相似度为这两个特征的内积, 即\(S_{ij}=<x_i, x_j>\). 由于特征向量模长为1,因此内积便是余弦相似度。
考虑基于pair对的损失\(\mathcal{L}\), 是由相似度矩阵\(\mathbf{S}\)和标签\(\mathbf{y}\)所决定的.模型参数设为\(\theta\), 现在计算在t次迭代时(书写时省略t, 知道就行),损失\(\mathcal{L}\)关于参数\(\theta\)的梯度。
从这里可以看出梯度更新量中,\(\frac{\partial{\mathcal{L}}}{\partial{S_{ij}}}\)是参数\(\theta\)无关的,只有\(\frac{\partial{S_{ij}}}{\partial{\theta}}\) 才是参数\(\theta\)相关的。
- \(\frac{\partial{S_{ij}}}{\partial{\theta}}\) 是由模型和样本对本身决定的。在一次迭代过程中,是由样本本身所决定的。
- \(\frac{\partial{\mathcal{L}}}{\partial{S_{ij}}}\) 与参数无关相当于,权重系数
现在设想一下,如果上述权重系数都是1,那么会怎么样? 比如相似度很高的一个正样本与相似度很低的一个正样本对,都对参数更新产生相当的影响。这样合理吗?肯定是不合理。 因此需要设计一种权重方案,使得能通盘考虑所有样本的情况。容易的就降低权重,难得就加大权重。
难例挖掘
假设\(x_i\)是参考锚点
- 负样本对筛选依据:
就是找到与\(x_i\)同属同一类别样本对中相似度最小的那个,并且添加一个负的margin。然后从与\(x_i\)类别不同的样本中构建的负样本对中,找到大于刚才这个值的所有负样本对。这个集合用\(\mathcal{N_i}\)来表示。
- 正样本对筛选依据:
就是从与\(x_i\)类别不同的样本中构建的负样本对中,找到相似度最大的那个,并且添加一个正向的margin。再从与\(x_i\)同属相同类别正样本对,筛选出相似度比刚才值小的所有正样本对。这个集合用\(\mathcal{P_i}\)来表示。
梯度权重如何设计?
参考其它loss的设计,如下是一种权重设计方式。
负样本权重
而这个权重可以通过下面函数求导得到的
正样本权重
而这个权重可以通过下面函数求导得到的
需要注意两点:
- 关于指数部分,正样本权重有负号,负样本权重是正号。之所以如此是损失函数是求最小值,对于正样本相似度,是希望越大越好。反映在损失函数上是要添加一个负号。而负样本对则不需要这样。(不管是什么损失函数, \(\frac{\partial S_{ij}}{\partial \theta}\) 是一个梯度, 该梯度是朝着\(S_{ij}\)增加的方向走, 而目前计算框架,梯度更新默认是用负梯度更新,实现目标值下降。 但是对于正样本的相似度,我们是希望其不断增加的,因此添加一个符号来实现。对应负样本对则是相反,不需要添加一个符号)
- 关于难例挖掘。选择了难例挖掘,那么有些负样本对或者正样本对,就不参与梯度的优化。那么如果一些超参设置不合理,是不是可能会把一些有意义的样本对排除,一些没有意义或者错误标注的样本,过于关注呢?
其它问题:
- 超参如何设置,对效果又会产生多大影响吗?

浙公网安备 33010602011771号