Motivation:
深度度量學習的目標是學習一個嵌入空間來從數據點中捕捉語義信息。現有的成對或者三元組方法隨着模型迭代過程會出現大量的平凡組導致收斂緩慢。針對這個問題,一些基於排序結構的損失取得了不錯的結果,本文主要是針對排序loss存在的兩個不足做的改進。
- 不足一:給定一個query,只利用了小部分的數據點來構建相似度結構,導致一些有用信息被忽略。本文給出的解決方案是把樣本划分為正例集和負例集,目標是使得query離正例集比負例集近一個間隔。
- 不足二:此前方法都是在嵌入空間盡可能推進正樣本的距離忽略了類內差異,作者使用一個超參來保留類內分布。
作者先是回顧了目前存在的一些loss, 從上圖可以看到,ranked list loss也就是本文提出的方法,在訓練中充分利用了輸入樣本信息。
本文的想法是把正例樣本與負例樣本以$m$隔開,類內樣本允許存在$\alpha-m$的分布差異,如下圖所示:
成對約束:
其基於成對損失,上圖可以表示為:$L_{\mathrm{m}}\left(\mathbf{x}_{i}, \mathbf{x}_{j} ; f\right)=\left(1-y_{i j}\right)\left[\alpha-d_{i j}\right]_{+}+y_{i j}\left[d_{i j}-(\alpha-m)\right]_{+}$。其中${x}_{i}$為query,$d_{i j}=\left\|f\left(\mathbf{x}_{i}\right)-f\left(\mathbf{x}_{j}\right)\right\|_{2}$為樣本間歐式距離,當$y_{i}=y_{j}$時,$y_{i j}=1$,反之為0。
對於每個query $\mathbf{x}_{i}^{c}$,我們對gallery使用距離排序得到列表,其中存在$N_{c}-1$個正例點與$\sum_{k \neq c} N_{k}$個負例點。可以分別表示為$\mathbf{P}_{c, i}=\left\{\mathbf{x}_{j}^{c} | j \neq i\right\},\left|\mathbf{P}_{c, i}\right|=N_{c}-1$與$\mathbf{N}_{c, i}=\left\{\mathbf{x}_{j}^{k} | k \neq c\right\},\left|\mathbf{N}_{c, i}\right|=\sum_{k \neq c} N_{k}$。
難樣本挖掘:
難樣本挖掘因為收斂速度快,性能好被廣泛使用,所謂難樣本就是那些違反成對約束,loss值不為0的點。沒有使用難樣本挖掘在梯度融合時,這些信息量比較大的樣本的貢獻將被那些梯度為0的樣本對削弱。所以我們先找出有貢獻的樣本。也就是:$\mathbf{P}_{c, i}^{*}=\left\{\mathbf{x}_{j}^{c} | j \neq i, d_{i j}>(\alpha-m)\right\}$與$\mathbf{N}_{c, i}^{*}=\left\{\mathbf{x}_{j}^{k} | k \neq c, d_{i j}<\alpha\right\}$。
基於損失的負樣本挖掘:
對於每個query $\mathbf{x}_{i}^{c}$,存在大量困難負樣本,它們具有不同的損失值。為了更好的利用它們,作者提出基於損失值來加權負樣本,也就是每個負樣本違反約束的程度。加權策略可以公式化為:
$w_{i j}=\exp \left(T \cdot\left(\alpha-d_{i j}\right)\right), \mathbf{x}_{j}^{k} \in \mathbf{N}_{c, i}^{*}$
作者注意到前面成對損失相對每個嵌入的梯度都是1.也就是:
$\left\|\frac{\partial L_{\mathrm{m}}\left(\mathbf{x}_{i}, \mathbf{x}_{j} ; f\right)}{\partial f\left(\mathbf{x}_{j}\right)}\right\|_{2}=\left\|\frac{f\left(\mathbf{x}_{i}\right)-f\left(\mathbf{x}_{j}\right)}{\left\|f\left(\mathbf{x}_{i}\right)-f\left(\mathbf{x}_{j}\right)\right\|_{2}}\right\|_{2}=1$
相對而言,作者提出來的則會被$w_{i j}$加權。$T$是一個溫度因子,當T等於0時,就會退化為無困難負樣本挖掘,當T趨近於無窮大,就會變成最困難負樣本挖掘。
優化目標:
對於每個query $\mathbf{x}_{i}^{c}$,優化的目標是讓他離正例集合$\mathbf{P}_{c, i}$比負例集合$\mathbf{N}_{c, i}$的距離近$m$。同時,強迫所有的負樣本離query的距離大於$\alpha$。這樣一來,其實所有的正例也被約束在離query距離$\alpha-m$的范圍內。對於正例集的約束如下:
$L_{\mathrm{P}}\left(\mathbf{x}_{i}^{c} ; f\right)=\frac{1}{\left|\mathbf{P}_{c, i}^{*}\right|} \sum_{\mathbf{x}_{j}^{c} \in \mathbf{P}_{c, i}^{*}} L_{\mathrm{m}}\left(\mathbf{x}_{i}^{c}, \mathbf{x}_{j}^{c} ; f\right)$
可以看到作者沒有對正例進行加權,這是因為正樣本很少。對困難負例的約束為:
$L_{\mathrm{N}}\left(\mathrm{x}_{i}^{c} ; f\right)=\sum_{\mathbf{x}_{j}^{k} \in\left[\mathrm{N}_{c, i}^{*}\right]} \frac{w_{i j}}{\sum_{\mathbf{x}_{j}^{k} \in\left[\mathrm{N}_{c, i}^{*}\right]}^{w_{i j}} L_{\mathrm{m}}\left(\mathbf{x}_{i}^{c}, \mathbf{x}_{j}^{k} ; f\right)}$
總體的損失便是兩者的相加:$L_{\mathrm{RLL}}\left(\mathbf{x}_{i}^{c} ; f\right)=L_{\mathrm{P}}\left(\mathbf{x}_{i}^{c} ; f\right)+\lambda L_{\mathrm{N}}\left(\mathbf{x}_{i}^{c} ; f\right)$。在$\mathbf{x}_{i}^{c}$的列表中,我們把其他樣本的特征當作固定值,只有$f(\mathbf{x}_{i}^{c})$會通過其他樣本影響的加權和進行更新。
學習過程:
首先同樣通過$P*K$的采樣方式,也就是每批由$P$個人物,每個人物的$K$張圖片組成。然后每張圖片都被輪流當作query,剩下的就被當成gallery。可以公式化為:
$L_{\mathrm{RLL}}(\mathbf{X} ; f)=\frac{1}{N} \sum_{\forall c, \forall i} L_{\mathrm{RLL}}\left(\mathbf{x}_{i}^{c} ; f\right)$
其中$N$為批大小,算法流程如下: