論文題目:Curriculum Temperature for Knowledge Distillation
論文(AAAI 2023):https://arxiv.org/abs/2211.16231
開源代碼(歡迎star):
https://github.com/zhengli97/CTKD
一句話概括:
相對于靜態溫度超參蒸餾,本文提出了簡單且高效的動態溫度超參蒸餾新方法。
背景問題:
目前已有的蒸餾方法中,都會采用帶有溫度超參的KL Divergence Loss進行計算,從而在教師模型和學生模型之間進行蒸餾,公式如下:
而現有工作普遍的方式都是采用固定的溫度超參,一般會設定成4。
方法 |
FitNet (ICLR 15') |
AT (ICLR 17') |
SP (ICCV 19') |
Snapshot (CVPR 19') |
SSKD (ECCV 20') |
FRSKD (CVPR 21') |
---|---|---|---|---|---|---|
τ的設定 | 3 | 4 | 4 | 2 or 3 | 4 | 4 |
那么這就帶來了兩個問題:
1. 不同的教師學生模型在KD過程中最優超參不一定是4。如果要找到這個最佳超參,需要進行暴力搜索,會帶來大量的計算,整個過程非常低效。
2. 一直保持靜態固定的溫度超參對學生模型來說不是最優的。基于課程學習的思想,人類在學習過程中都是由簡單到困難的學習知識。那么在蒸餾的過程中,我們也會希望模型一開始蒸餾是讓學生容易學習的,然后難度再增加。難度是一直動態變化的。
于是一個自然而然的想法就冒了出來:
在蒸餾任務里,能不能讓網絡自己學習一個適合的動態溫度超參進行蒸餾,并且參考課程學習,形成一個蒸餾難度由易到難的情況?
于是我們就提出了CTKD來實現這個想法。
方法:
既然溫度超參τ可以在蒸餾里決定兩個分布之間的KL Divergence,進而影響模型的學習,那我們就可以通過讓網絡自動學習一個合適的τ來達到以上的目的。
于是以上具體問題就直接可以轉化成以下的核心思想:
在蒸餾過程里,學生網絡被訓練去最小化KL loss的情況下,τ作為一個可學習的參數,要被訓練去最大化KL loss,從而發揮對抗(Adversarial)的作用,增加訓練的難度。隨著訓練的進行,對抗的作用要不斷增加,達到課程學習的效果。
以上的實現可以直接利用一個非常簡單的操作:利用梯度反向層GRL (Gradient Reversal Layer )來去反向可學習超參τ的梯度,就可以非常直接達到對抗的效果,同時隨著訓練的進行,不斷增加反向梯度的權重λ,進而增加學習的難度。
CTKD的論文的結構圖如下:
Fig.1 CTKD網絡結構圖
CTKD方法可以簡單分為左右兩個部分:
對抗溫度超參τ的學習部分。
這里只包含兩個小模塊,一個是梯度反向層GRL,用于反向經過溫度超參τ的梯度,另一個是可學習超參溫度τ。
其中對于溫度超參τ,有兩種實現方式,第一種是全局方案 (Global Temperature),只會產生一個τ,代碼實現非常簡單,就一句話:
self.global_T = nn.Parameter(torch.ones(1), requires_grad=True)
第二種是實例級別方案(Instance-wise Temperature),即對每個單獨的樣本都產生一個τ。代碼實現也很簡單,就是兩層conv組成的MLP。
Fig.2 兩種不同的可學習溫度超參實現。
2. 難度逐漸增加的課程學習部分。
隨著訓練的進行,不斷增加GRL的權重λ,達到增加學習難度的效果。
在論文的實現里,我們直接采用Cos的方式,讓反向權重λ從0增加到1。
以上就是CTKD的全部實現,非常的簡單有效。
CTKD總共包含兩個模塊,GRL和溫度生成模塊,都非常的輕量化,
CTKD方法可以作為即插即用的插件應用在現有的SOTA的蒸餾方法中,取得廣泛的提升。
實驗結果
三個數據集:CIFAR-100,ImageNet和MS-COCO。
CIFAR-100上,CTKD的實驗結果:
作為一個即插即用的插件,應用在已有的SOTA方法上:
在ImageNet上的實驗:
在MS-COCO的detection實驗上:
溫度超參的整體學習過程可視化:
由以上圖可以看到,CTKD整體的動態學習τ的過程。
將CTKD應用在多種現有的蒸餾方案上,可以取得廣泛的提升效果。
審核編輯 :李倩
-
模型
+關注
關注
1文章
3313瀏覽量
49231 -
代碼
+關注
關注
30文章
4828瀏覽量
69055
原文標題:AAAI 2023 | 南開/南理工/曠視提出CTKD:動態溫度超參蒸餾新方法
文章出處:【微信號:CVer,微信公眾號:CVer】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論