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號