triplet loss 在深度學習中主要應用在什麼地方?有什麼明顯的優勢?


反對工業界softmax解決一切的說法

Triplet loss通常是在個體級別的細粒度識別上使用,傳統的分類是花鳥狗的大類別的識別,但是有些需求是要精確到個體級別,比如精確到哪個人的人臉識別,所以triplet loss的最主要應用也就是face identification,person re-identification,vehicle re-identification的各種identification識別問題上

  • 當然你可以把每個人當做一個類別來進行分類訓練,但是往往最後會造成softmax的維數遠大於feature的維數,想想resnet50 global ap出來一個2048的feature對應到一個幾萬,幾十萬的分類softmax就可怕。
  • 另外一個結論就是triplet loss通常能比classification得到更好的feature,我個人測試triplet loss至少比classification高10個點。
  • 還有一個優點就是triplet loss 可以卡閾值,triplet loss訓練的時候要設置一個margin,這個margin可以控制正負樣本的距離,當feature 進行normalization之後,可以更加方便的卡個閾值來判斷是不是同一個ID

當然triplet loss也有缺點,就是收斂慢,而且比classification更容易overfitting(此條待考究,並且即使過擬合了也比classification性能要好),此外需要對輸入的數據按照label進行特別的排列,非常重要的一點是沒有triplet loss的API,新手小白可能連十行代碼都不到的triplet loss都寫不出來,所以deep learning不只是調庫調參而已

現在triplet loss已經有很多改進版本了,可以搜索improved triplet loss, in defense of triplet loss,beyond triplet loss等論文


此類在分類上進行刻意的同類和異類區分的loss可以讓最後得到的特徵向量間同類間的距離儘可能小,異類間的距離儘可能大。


工業界暴力softmax解決一切


推薦閱讀:

人工智慧的自我提升是可能的嗎?目前有什麼不可破的技術障礙嗎?
人工智慧在哪些領域還落後於人類?
人工智慧四問?

TAG:機器學習 | 計算機視覺 | 人工智慧演算法 | 深度學習DeepLearning |