1. 程式人生 > 其它 >知識蒸餾綜述:網路結構搜尋應用

知識蒸餾綜述:網路結構搜尋應用

【GiantPandaCV導語】知識蒸餾將教師網路中的知識遷移到學生網路,而NAS中天然的存在大量的網路,使用KD有助於提升超網整體效能。兩者結合出現了許多工作,本文收集了部分代表性工作,並進行總結。

1. 引言

知識蒸餾可以看做教師網路通過提供soft label的方式將知識傳遞到學生網路中,可以被視為一種更高階的label smooth方法。soft label與hard label相比具有以下優點:

  • 模型泛化能力更強
  • 降低過擬合的風險
  • 一定程度上降低了學生網路學習的難度。
  • 對噪聲更加魯棒。
  • 具有更多的資訊量。

那麼知識蒸餾在網路結構搜尋中有什麼作用呢?總結如下:

  • 降低子網路收斂難度
    ,在權重共享的NAS中,子網之間引數耦合,如果單純用hard label訓練,會導致互相沖突,導致子網路訓練不足的情況。
  • 如果引入額外的教師網路,可以帶來更多的監督資訊,加快網路的收斂速度
  • 一些工作通過知識蒸餾引入評判子網的指標 ,比如與教師網路越接近的,認為其效能越好。

知識蒸餾在很多工作中作為訓練技巧來使用,比如OFA中使用漸進收縮訓練策略,使用最大的網路指導小網路的學習,採用inplace distillation進行蒸餾。BigNAS中則使用三明治法則,讓最大的網路指導剩下網路的蒸餾。

2. KD+NAS

目標:解決教師網路和學生網路的匹配問題(知識蒸餾中教師網路和學生網路匹配的情況下效果更好)。

在知識蒸餾中,選擇不同的教師網路、不同的學生網路的情況下,最終學生網路的效能千差萬別。如果學生網路和教師網路的容量相差過多,會導致學生難以學習的情況。Cream這篇文章就是為了解決兩者匹配問題。

普通的SPOS方法如左圖所示,通過取樣單路徑子網路進行訓練。右圖則是結合了知識蒸餾的方法,Cream提出了兩個模組:

  • Prioritized Path Board : 這個模組中維護了一組優先路徑,所謂優先路徑就是效能表現較好的子網路,Cream將優先路徑Board中的網路作為教師網路,引導知識的蒸餾。
  • Meta Network: 這個模組是一個匹配模組,每當取樣一個子網路,就會從優先路徑Board中計算一個最匹配的網路作為教師網路,完成蒸餾的過程。

Cream中心思想是,子網路可以在整個訓練過程中協作學習並相互教導,目的是提高單個模型的收斂性。

消融實驗如下:

2.2 DNA : Block-wisely Supervised Neural Architecture Search with Knowledge Distillation

目標:通過教師引導各個block特徵層的學習,根據loss大小評判各子網的效能。

這是一篇將NAS和KD融合的非常深的一個工作,被CVPR20接收。之前寫過一篇文章進行講解,這裡簡單回顧一下。

DNA是兩階段的one-shot NAS方法,因此其引入蒸餾也是為了取代普通的acc指標,提出了使用子網路與教師網路接近程度作為衡量子網效能的指標。

在訓練的過程中,進行了分塊蒸餾,學生網路某一層的輸入來自教師網路上一層的輸出,並強制學生網路這一層的輸出與教師網路輸出一致(使用MSELoss)。在搜尋過程結束後,通過計算各子網路與教師網路的接近程度來衡量子網路。

2.3 AlphaNet :Improved Training of Supernet with Alpha-Divergence

目標:通過改進KL divergence防止學生over estimate或者under estimate教師網路。

上圖展示了OFA,BigNAS等搜尋演算法中常用到的蒸餾方法,子網使用的是KL divergence進行衡量,文中分析了KL 散度存在的侷限性:即避零性以及零強制性。如下公式所示,p是教師的邏輯層輸出,q是學生邏輯層輸出。

\[\mathrm{KL}(p \| q)=\mathbb{E}_{p}[\log (p / q)] \]
  • 避零性:zero avoiding 當p>0的時候,為了保證KL為正,q必須大於0。如果p=0的時候,q大於0也不會被懲罰。會導致下圖所示的過估計問題over estimate。
  • 零強制性:zero forcing 當p=0的時候,會強制q=0,因為如果q>0會導致KL divergence趨於無窮。會導致下圖所示的低估問題under-estimate

AlphaNet提出了一個新的散度衡量損失函式,防止出現過估計或者低估的問題。如下所示,引入了\(\alpha\)

\[D_{\alpha}(p \| q)=\frac{1}{\alpha(\alpha-1)} \sum_{i=1}^{m} q_{i}\left[\left(\frac{p_{i}}{q_{i}}\right)^{\alpha}-1\right] \]

其中\(\alpha\)不為0或者1,這樣如下圖所示:

藍色線對應example 2表示,當\(\alpha\)為負值,如果q過估計了p中的不確定性,\(D_\alpha(p||q)\)的值會變大。

紫色線對應example 1表示,當$\alpha
\(為正數,如果q低估了p中的不確定性,\)D_\alpha(p||q)$的值會變大

同時考慮兩種情況,取兩者中最大值作為散度:

\[D_{\alpha_{+}, \alpha_{-}}(p \| q)=\max \{\underbrace{D_{\alpha_{-}}(p \| q)}_{\begin{array}{c} \text { penalizing } \\ \text { over-estimation } \end{array}}, \underbrace{D_{\alpha_{+}}(p \| q)}_{\begin{array}{c} \text { penalizing } \\ \text { under-estimation } \end{array}}\} \]

目標:提出了衡量學生網路和教師網路內部啟用相似度 衡量指標,通過表徵匹配可以用來加速網路結構搜尋。

這部分其實是屬於知識蒸餾分類中基於關係的知識,構建的知識由不同樣本之間的互作用構成。

具體的指標構成如上圖所示,是一個bsxbs大小的矩陣,這個在文中被稱為Representational Dissmilarity Matrix,其功能是構建了啟用層內部的表徵,可以通過評估RDM的相似度通過計算上三角矩陣的關係係數,比如皮爾遜係數。

該文章實際上也是構建了一個指標P+TG來衡量子網的效能,挑選出最優子網路。

  • TG代表Teacher Guidance 計算的物件時所有RDM的均值。
  • P代表Performance 也就是傳統的準確率

如上圖所示,RDM的計算是通過衡量教師網路的feature以及學生網路的feature的相似度,並選擇選取其中最高的RDM相似度。通過構建了一組指標,隨著epoch的進行,排序一致性很快就可以提高。

2.5 Search for Better Students to Learn Distilled Knowledge

目標:固定教師網路,搜尋最合適的學生網路。

對於相同的教師網路來說,不同的架構的學生網路,即便具有相同的flops或者引數,其泛化能力也有所區別。在這個工作中選擇固定教師網路,通過網路搜尋的方法找到最優的學生網路,使用L1 Norm優化基礎上,選擇出與教師網路KL散度差距最小的學生網路。

  • 學生網路結構搜尋 :類似模型剪枝的方法,優化scale factor,然後剪枝的時候將該值較小的通道刪除。
  • 損失函式構建 :下面與KD的區別是增加了對scale factor g的L1 Norm約束。
\[\min _{\mathbf{w}, \mathbf{g}} \frac{1}{N} \sum_{i=1}^{N} K L\left(f_{s}\left(\mathbf{x}_{\mathbf{i}}, \mathbf{w}, \mathbf{g}\right), f_{t}\left(\mathbf{x}_{\mathbf{i}}\right)\right)+\lambda_{1}\|\mathbf{w}\|_{2}+\lambda_{2} \sum_{j=1}^{M} \alpha_{j}\left\|g_{j}\right\|_{1} \]

2.6 Search to Distill: Pearls are Everywhere but not the Eyes

目標:在給定教師網路情況下,搜尋最合適的學生網路。

神經網路中的知識不僅蘊含於引數,還受到網路結構影響。KD普遍方法是將教師網路知識提煉到學生網路中,本文提出了一種架構感知的知識蒸餾方法Architecture-Aware KD (AKD),能夠找到最合適提煉給特定教師模型的學生網路。

Motivation: 先做了一組實驗,發現不同的教師網路會傾向於不同的學生網路,因此在NAS中,使用不同的教師網路會導致模型傾向於選擇不同的網路結構。

AKD做法是選擇使用強化學習的方法指導搜尋過程, 使用的是ENAS那種通過RNN取樣的方法。

2.7 Towards Oracle Knowledge Distillation with NAS

目標:從整合的教師網路中學習,並使用NAS調整學生網路模型的容量。NAS+KD+整合。

這篇文章之前也進行了講解,是網路結構搜尋,知識蒸餾,模型整合的大雜燴。

  • 網路結構搜尋 可以說佔非常小的比重,因為搜尋空間幾乎屬於微調,並不是從頭搜尋,而是大部分的結構都固定下來,只調整某些層的引數,用於控制模型容量。
  • 知識蒸餾+模型整合 :提出了動態選擇待整合的模型,選擇對應的教師網路進行蒸餾。

詳見: https://blog.csdn.net/DD_PP_JJ/article/details/121268840

2.8 AdaNAS: Improving neural architecture search image classifiers via ensemble learning

這篇文章比較有意思,使用上一步中得到的多個子網路進行整合,可以得到教師網路,然後使用知識蒸餾的方法來引導新的子網路的學習。關注重點在於:

  • 使用整合的模型效能是否會提升
  • 通過先前整合的模型指導模型蒸餾能否生效
  • 能否得到一種自動化的整合模型的方式。

AdaNAS受Born Again Network(BAN)啟發, 提出Adaptive Knowledge Distillation(AKD)的方法以輔助子網路的訓練。

整合模型選擇

從左到右代表四次迭代,每個迭代中從搜尋空間中選擇三個模型。綠色線框出的模型代表每個迭代中最優的模型,AdaNAS選擇將每個迭代中最優subnet作為整合的物件。

最終整合的時候還添加了額外的weight引數w1-w4:

最終輸出邏輯層如下所示:(這個w權重也會被訓練,此時各個整合網路的權重是固定的,只優化w)

\[f_{i}=\sum_{k=1}^{i} w_{k} \cdot h_{k} \]

2.9 Differentiable Feature Aggregation Search for

Knowledge Distillation

目標:解決知識蒸餾的效率和有效性,通過使用特徵聚合來引導教師網路與學生網路的學習,網路結構搜尋則是體現在特徵聚合的過程,使用了類似darts的方法進行自適應調整放縮係數。ECCV20

文章總結了幾種蒸餾正規化:

最後一種是本文提出的方法,普通的特徵蒸餾都是每個block的最後feature map進行互相蒸餾,本文認為可以讓教師網路的整個block都引導學生網路。

具體如何將教師網路整個block中所有feature map進行聚合,本文使用的是darts的方法進行動態聚合資訊。(a) 圖展示的是對group i進行的可微分搜尋過程。(b)表示從教師到學生的路徑loss構建,使用的是CE loss。(c)表示從學生到教師網路的路徑loss構建,使用的是L2 Loss。其中connector實際上是一個1x1 卷積層。

(ps: connector讓人想到VID這個工作)

程式碼改變世界