【前言】
最近,learning to rank 的思想逐漸被應用到很多領域,比如google用來做人臉識別(facenet),微軟jingdong wang 用來做 person-reid 等等。learning to rank中其中重要的乙個步驟就是找到乙個好的similarity function,而triplet loss是用的非常廣泛的一種。
如上圖所示,triplet是乙個三元組,這個三元組是這樣構成的:從訓練資料集中隨機選乙個樣本,該樣本稱為anchor,然後再隨機選取乙個和anchor (記為x_a)屬於同一類的樣本和不同類的樣本,這兩個樣本對應的稱為positive (記為x_p)和negative (記為x_n),由此構成乙個(anchor,positive,negative)三元組。
有了上面的triplet的概念, triplet loss就好理解了。針對三元組中的每個元素(樣本),訓練乙個引數共享或者不共享的網路,得到三個元素的特徵表達,分別記為:
對應的目標函式也就很清楚了:
這裡距離用歐式距離度量,+表示[ ]內的值大於零的時候,取該值為損失,小於零的時候,損失為零。
由目標函式可以看出:
當x_a與x_n之間的距離 < x_a與x_p之間的距離加α時,[ ]內的值大於零,就會產生損失。
當x_a與x_n之間的距離 >= x_a與x_p之間的距離加α時,損失為零。
或者這樣表示更明顯:
上述目標函式記為l。則當第i個triplet損失大於零的時候,僅就上述公式而言,有:
【演算法實現時候的提示】
可以看到,對x_p和x_n特徵表達的梯度剛好利用了求損失時候的中間結果,給的啟示就是,如果在cnn中實現 triplet loss layer, 如果能夠在前向傳播中儲存著兩個中間結果,反向傳播的時候就能避免重複計算。這僅僅是演算法實現時候的乙個trick。
參考:
triplet loss 原理以及梯度推導
前言 最近,learning to rank 的思想逐漸被應用到很多領域,比如google用來做人臉識別 facenet 微軟jingdong wang 用來做 person reid 等等。learning to rank中其中重要的乙個步驟就是找到乙個好的similarity function,...
triplet loss 原理以及梯度推導
最近,learning to rank 的思想逐漸被應用到很多領域,比如google用來做人臉識別 facenet 微軟jingdong wang 用來做 person reid 等等。learning to rank中其中重要的乙個步驟就是找到乙個好的similarity function,而tr...
人臉識別 如何訓練tripletloss
本篇 來自獵戶星空這家公司 位址 google的facenet採用800萬人,2億資料,每個batchsize為1800進行訓練。然而有用如此資料的公司少之又少。下圖展示了乙個當每一類人數與準確率的關係。可見當資料量缺乏的情況下,使用tripletloss不但不會提高,還會降低。如上圖所示 trip...