天天看點

知識蒸餾綜述: 知識的類型

知識蒸餾綜述: 知識的類型

【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層作為教師網絡的知識進行蒸餾,但知識的形式還可以是:激活、神經元、中間層特征、教師網絡參數等。可以将其歸類為下圖中三種類型。

知識蒸餾綜述: 知識的類型

基于響應的知識一般指的是神經元的響應,即教師模型的最後一層邏輯輸出。

響應知識的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中包含的知識,而并沒有用到中間層的監督,而中間層的監督資訊在表征學習中非常有用。

在深度卷積神經網絡中,網絡學習到的知識是分層的,從淺到深層對應的知識抽象程度越來越高。是以中間層的特征也可以作為知識的載體,供學生網絡進行學習。

基于特征的知識可以視為基于響應的知識的一個擴充。

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?如果容量相差過大,可能會導緻學習效果變差。

基于關系的知識進一步擴充了基于響應的知識以及基于特征的知識,更全面深入的探索了不同層、不同資料樣本之間的關系。

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}}\)代表教師網絡與學生網絡的關聯函數。

傳統的知識遷移通常隻關心個體知識蒸餾,但是通常知識不僅包括特征的資訊,還包括資料樣本之間的互作用關系。

<code>Knowledge distillation via instance relationship graph</code>提出了通過個體及關系圖進行知識蒸餾的方法,遷移的知識包括個體級别特征。

<code>Relational knowledge distillation</code>提出關系知識蒸餾,從個體關系中進行知識遷移

<code>Learning student networks via feature embedding</code>結合流型學習,學生網絡可以通過特征嵌入進行學習,進而保證教師網絡中間層特征的樣本相似度。

<code>Probabilistic Knowledge Transfer for Lightweight Deep Representation Learning</code>使用機率分布來模組化教師網絡和學生網絡的關系。

<code>Similarity-preserving knowledge distillation</code>提出相似性保留的知識,使得教師網絡和學生網絡根據相同的樣本對産生相似的激活。

<code>Correlation congruence for knowledge distillation</code>提出基于關系一緻的知識蒸餾方法,可以同時蒸餾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., &amp; Tao, D. (2021). Knowledge Distillation: A Survey. ArXiv, abs/2006.05525.

https://arxiv.org/pdf/2006.05525.pdf

代碼改變世界

上一篇: 開發平台
下一篇: PostgreSQL

繼續閱讀