知識蒸餾綜述: 知識的型別
知識蒸餾綜述: 知識的型別
【GiantPandCV引言】簡單總結一篇綜述《Knowledge Distillation A Survey》中的內容,提取關鍵部分以及感興趣部分進行彙總。這篇是知識蒸餾綜述的第一篇,主要內容為知識蒸餾中知識的分類,包括基於響應的知識、基於特徵的知識和基於關係的知識。
知識蒸餾簡介
定義:知識蒸餾代表將知識從大模型向小模型傳輸的過程。
作用:可以用於模型壓縮和訓練加速 手段。
綜述梳理思路:
-
知識蒸餾的種類
-
訓練機制
-
教師-學生 架構
-
蒸餾演算法
-
效能比較
-
實際應用
典型的知識蒸餾KD是Hinton於15年發表的paper,明確了知識蒸餾的想法是讓學生模型通過模仿教師模型來取得具有競爭性的效能,甚至可以取得超越教師網路的效能。
知識蒸餾的核心研究:如何將知識從大模型傳遞給小模型。
知識蒸餾系統的三個核心元件:
-
知識 knowledge
-
蒸餾演算法 distillation algorithm
-
教師學生架構 teacher-student architecture
知識蒸餾相關的擴充套件方向:
-
teacher - student learning
-
mutual learning
-
assistant teaching
-
life long learning
-
self learning
在知識蒸餾中,我們主要關心:知識種類、蒸餾策略、教師學生架構
最原始的蒸餾方法是使用大模型的logits層作為教師網路的知識進行蒸餾,但知識的形式還可以是:啟用、神經元、中間層特徵、教師網路引數等。可以將其歸類為下圖中三種類型。
基於響應的知識(Response-Based Knowledge)
基於響應的知識一般指的是神經元的響應,即教師模型的最後一層邏輯輸出。
響應知識的loss:
\[L_{R e s D}\left(z_{t}, z_{s}\right)=\mathcal{L}_{R}\left(z_{t}, z_{s}\right) \]其核心想法是讓學生模型模仿教師網路的輸出,這是最經典、最簡單、也最有效的處理方法
Hinton提出的KD是將teacher的logits層作為soft label.
\[p\left(z_{i}, T\right)=\frac{\exp \left(z_{i} / T\right)}{\sum_{j} \exp \left(z_{j} / T\right)} \]T是用於控制soft target重要程度的超引數。
那麼整體蒸餾loss可以寫作:
\[L_{\operatorname{Res} D}\left(p\left(z_{t}, T\right), p\left(z_{s}, T\right)\right)=\mathcal{L}_{R}\left(p\left(z_{t}, T\right), p\left(z_{s}, T\right)\right) \]一般來講使用KL散度來衡量兩者分佈差異,通過優化以上loss可以使得學生網路的logits輸出儘可能和教師網路的logits輸出相似,從而達到學習的目的。
KD中除了蒸餾的一項通常還會使用交叉熵損失函式令學生網路學習真實標籤(也稱hard label),兩項聯合起來進行訓練。
KD通常的解釋是學生網路可以從教師網路中學習到額外的隱形知識(dark knowledge), 而這種知識要比通過標籤學習的知識更容易理解。
KD其他角度的解釋還包括:KD可以生成類似label smooth的soft target;KD可以視為一種正則化方法;
基於響應的知識只用到了模型最後一層logits中包含的知識,而並沒有用到中間層的監督,而中間層的監督資訊在表徵學習中非常有用。
基於特徵的知識(Feature-Based Knowledge)
在深度卷積神經網路中,網路學習到的知識是分層的,從淺到深層對應的知識抽象程度越來越高。因此中間層的特徵也可以作為知識的載體,供學生網路進行學習。
基於特徵的知識可以視為基於響應的知識的一個擴充套件。
FitNets是第一個引入中間層表徵的,教師網路的中間層可以作為學生網路對應層的提示(Hints層)從而提升學生網路模型的效能。其核心是期望學生能夠直接模仿教師網路的特徵啟用值。
以FitNets為基礎擴展出幾篇工作:
-
Paying more attention to attention: 提出去學習從原先特徵圖中派生得到的注意力圖(Attention map)
-
Like what you like: Knowledge distill via neuron selectivity transfer: 認為神經元是有選擇性的,而這種選擇性與任務是相關的,提出神經元選擇性遷移,將教師與學生這種神經元的選擇模式分佈對齊。通過引入了MMD Matching Loss進行實現。
-
Learning deep representation with probabilistic knowledge transfer: 通過匹配特徵空間的概率分佈遷移知識。
-
paraphrasing complex network: Network Compression via factor transfer:引入factor作為一種中間層表徵的可理解形式。
-
Knowledge distillation via route constrained optimization: 致力於降低教師網路和學生網路的gap,提出使用路線約束的暗示學習(Hints learning)。
-
Knowledge transfer via distillation of activation boundaries formed by hidden neurons: 提出使用隱層神經元的啟用邊界進行知識遷移。
-
Cross-Layer Distillation with Sematic Calibration: 為了匹配教師網路和學生網路的語義資訊,提出通過attention allocation自適應為學生層分配合適的教師層, 實現跨層的知識蒸餾。
基於特徵的知識遷移可以建模為:
\[L_{F e a D}\left(f_{t}(x), f_{s}(x)\right)=\mathcal{L}_{F}\left(\Phi_{t}\left(f_{t}(x)\right), \Phi_{s}\left(f_{s}(x)\right)\right) \]其中$\Phi \(表示一個轉換函式,因為教師網路和學生網路的特徵層可能出現尺寸不匹配的情況,所以需要轉換。\)\mathcal{L}_F$表示用於匹配教師網路和學生網路的相似度計算函式。
下圖總結了各個基於特徵的知識的匹配型別:
一般而言,在基於特徵的知識遷移中,研究的物件包括了:
-
如何需選擇知識型別?特徵圖、注意力圖、gram矩陣或其他
-
如何選擇教師層和學生層?簡單的一對一匹配,自適應通過注意力匹配。
-
如何彌補教師網路與學生網路之間的GAP?如果容量相差過大,可能會導致學習效果變差。
基於關係的知識(Relation-Based Knowledge)
基於關係的知識進一步擴充套件了基於響應的知識以及基於特徵的知識,更全面深入的探索了不同層、不同資料樣本之間的關係。
不同層之間的關係建模
-
A gift from knowledgedistillation:fast optimization, network minimization and transfer learning: (FSP) 提出了Flow of solution process(FSP)的方法,定義了兩個層之間的Gram矩陣,從而可以總結特徵圖不同對之間的關係。https://github.com/yoshitomo-matsubara/torchdistill/blob/5377be466c9460e0125892aa0d92aeb86418c752/torchdistill/losses/single.py L110行有具體實現。
-
self-supervised knowledge distillation using singular value decompostion: 提出利用特徵圖之間的相關性進行蒸餾,使用奇異值分解的方式來提取特徵圖中關鍵資訊。
-
Better and faster: knowledge transfer from multiple self-supervieds learning tasks via graph distillation for video classification: 為了使用多個教師網路的知識,構建了使用logits層和特徵圖作為節點的兩個graph。
-
Graph-based knowledge distillation by multi-head attention network: 提出使用Multi head graph-based 知識蒸餾方法,通過使用graph建模兩兩feature map之間的關係。
-
Heterogeneous Knowledge Distillation using information flow modeling: 提出讓學生模仿教師網路資訊流動過程來得到知識。
基於關係的知識通常可以建模為:
\[L_{\operatorname{RelD}}\left(f_{t}, f_{s}\right)=\mathcal{L}_{R^{1}}\left(\Psi_{t}\left(\hat{f}_{t}, \check{f}_{t}\right), \Psi_{s}\left(\hat{f}_{s}, \check{f}_{s}\right)\right) \]\(\Psi_{s}\left(\hat{f}_{s}, \check{f}_{s}\right)\)表示學生網路內成對的特徵圖,\(\Psi_{s},\Psi_{t}\)代表相似度函式,\(\mathcal{L}_{R^{1}}\)代表教師網路與學生網路的關聯函式。
不同樣本之間的關係建模
傳統的知識遷移通常只關心個體知識蒸餾,但是通常知識不僅包括特徵的資訊,還包括資料樣本之間的互作用關係。
-
Knowledge distillation via instance relationship graph
提出了通過個體及關係圖進行知識蒸餾的方法,遷移的知識包括個體級別特徵。 -
Relational knowledge distillation
提出關係知識蒸餾,從個體關係中進行知識遷移 -
Learning student networks via feature embedding
結合流型學習,學生網路可以通過特徵嵌入進行學習,從而保證教師網路中間層特徵的樣本相似度。 -
Probabilistic Knowledge Transfer for Lightweight Deep Representation Learning
使用概率分佈來建模教師網路和學生網路的關係。 -
Similarity-preserving knowledge distillation
提出相似性保留的知識,使得教師網路和學生網路根據相同的樣本對產生相似的啟用。 -
Correlation congruence for knowledge distillation
提出基於關係一致的知識蒸餾方法,可以同時蒸餾instance-level的資訊以及between instance的資訊。
instance relation的建模如下:
\[L_{R e l D}\left(F_{t}, F_{s}\right)=\mathcal{L}_{R^{2}}\left(\psi_{t}\left(t_{i}, t_{j}\right), \psi_{s}\left(s_{i}, s_{j}\right)\right) \]與不同層之間建模不同的是,上邊的公式衡量的物件是層與層的關係即:\(\Psi_{s}\left(\hat{f}_{s}, \check{f}_{s}\right)\), 而此處衡量的是樣本與樣本之間的關係(如上圖所示),即\(\psi_{t}\left(t_{i}, t_{j}\right)\)
下表對蒸餾知識從不同角度進行分類,比如資料的結構化知識、輸入特徵的專有知識等。
參考
Gou, J., Yu, B., Maybank, S.J., & Tao, D. (2021). Knowledge Distillation: A Survey. ArXiv, abs/2006.05525.
程式碼改變世界