有哪些深度學習分類演算法能夠處理類別數(10w類)巨大的分類任務?

時間 2021-05-05 18:19:46

1樓:車輪大斧

10萬類直接用softmax CE loss是沒問題的,甚至不用做什麼優化。基於softmax的變種如arcface, circle loss等等全都可以用。

如果類別數再增長幾個數量級,比如工業人臉識別中常見百萬,千萬,甚至上億的ID,基於分類的loss會遇到GPU memory的瓶頸(簡單的資料並行放不下fc的權重)。這時最簡單有效的辦法是資料並行(fc之前的model)+模型並行(fc層),也就是說把最後的fc權重平均分布在所有GPU上。

目前有一些工作還可以從演算法上加速超大規模的分類,比如softmax dissection,以及商湯的HF SOFTMAX,尤其是softmax dissection,方法非常簡潔,值得一試。

2樓:ChronousZ

相對於小類別分類網路,大類別(如10w)分類網路會遇到更嚴峻的挑戰。由於softmax損失監督本身是在做角分類,可以理解為把空間等分為C份(C是類別數),我們希望所有屬於i類的樣本都落在這C份中的某乙份中,但如果C很大的話,每乙份所佔的這個角度可以說相當小,應該是360/C……吧,如下圖所示:

以AB所在角空間為例,乙個樣本如果提取的特徵在B點,那恭喜你,它大概率不會被錯誤分類為CD所在角空間,但如果很不幸特徵落在了A點,那它們C點隔的很近,可能帶了一點雜訊就會被分類到CD所在角空間,也就是另乙個類別了。這種現象在C越大時越明顯,利於C=10w時可能要到很遠很遠的地方才能找到能不錯誤分類的BD點,但容易誤分的概率就大大增加了,於是就可能會出現不收斂甚至發散的情況,而這種情況下加入更多的資料也許並不能得到解決。於是就有了樓上提出度量學習的方法,因為目前度量和分類在很多情況下是可以混在一起做的,主要原因分類類別數相對還是比較小的,以reid為例,目前都是softmax(分類)+triplet(度量)聯調,但其本質因是乙個度量問題也就是樓上說的reid可能存在非常多的類別。

對於這種現象,center loss等度量損失就能很好的緩解(樓上提到了一篇文章裡面有詳細解釋),因為他們更care的是空間歐式距離而不是角距離,就緩解了上圖的AC這種容易分類到一起的現象,將空間分類任務轉換為下圖(也就是center loss中提到的那個mnist實驗的例子):

通過實現乙個類內更緊湊,類間push開的乙個效果做乙個變相的分類問題。而不同度量損失的差別就集中在怎麼pull類內,push類間。例如對比損失就是通過一對樣本來完成,同類pull異類push;triplet損失則是一次輸入三個樣本a,p,n,避免了對比損失裡ap和an分開優化;center loss則通過設定中心進行優化;四元組損失通過在triplet的基礎上將n擴充為強推n和弱推n等等,所以大家做的都是在怎麼更合理的pull同類和push異類。

總結:類別數太多softmax會崩,得用度量,經典度量問題就是樓上提到的人臉,reid,細粒度檢索等任務,它們一方面類別多,另一方面是open-set。

基於深度學習的聚類演算法有哪些?

Coral Gajic 大致分為三類 AE based,VAE based,GAN based 詳細演算法介紹可以參看 隨筆分類 Deep Learning 凱魯嘎吉 部落格園 Deep Learning 隨筆分類 凱魯嘎吉 部落格園 rucinier 基於bottom up的例項分割,訓練使用類似...

用深度學習來做物體分類和場景分類,有什麼區別,兩者分別應該選擇怎樣的網路,哪個問題更難?

迪天才 物體分類 你看到貓就是貓,你看到狗就是狗 輸出你看到啥,非常直觀。場景分類 你看到貓可能是在家裡看到的,可能是在寵物店看到的,也可能是大街上看到的 同樣看到是貓,需要判斷是在何種場景下,這是乙個更難的問題。 Wayne 最近讀了一些場景分類的文獻,說一些個人的看法。之前一直從細粒度影象分類的...

學深度學習有沒必要把傳統機器學習演算法原理都學一遍?

沒有必要。推薦使用deep learning for computer vision with python,一本書完成從入門到精通。即使少量地方需要ml的知識,臨時補都可以。各個學科有交叉的時候,只需要補充交叉部分,多了的不要去管,快速達成目標最重要。即使就業導向,需要補ml以應對面試,那也與dl...