趣味深度學習系列(一):深度學習技術中的 「教師」與「學生」

  • 2019 年 10 月 4 日
  • 筆記

老師,

您辛苦了

「師者,所以傳道受業解惑也。」

教師,是神聖而偉大的職業,傾其所能,教書育人,桃李遍開花。

今天是教師節,首先祝所有的老師們節日快樂!

(圖片源於網路)

提到深度學習、老師這兩個關鍵詞,第一時間是不是想到的是站在講台上,寫著複雜的損失函數和資訊理論的授課講師,亦或是教學影片裡面,帶你劈哩叭啦一行一行敲程式碼的實踐老師?

感謝恩師之餘,你是否知道,在深度學習的技術中,有這樣一個有趣的演算法竟然也包含著teacher和student的奧義?

不賣關子,它就是:

知識蒸餾(Distill)

一種既可以認為是遷移學習也可以認為是模型壓縮的演算法,最早由 Hinton 在 2015 年提出,不知道是不是也是受他多年教學生涯的啟發呢。

化學課上的蒸餾,是不是又想起了高中的化學老師

深度學習技術里的模型蒸餾,雖然不是化學裡面的概念,但其實也是一個非常形象的過程,在詳細的技術介紹之前,我們先通俗的理解一下這個概念。

模型蒸餾,是指將一個複雜模型(teacher)所學習到的有效資訊提取出來,遷移到一個更簡單的模型(student)中去,這裡就涉及到了「師」與「生」【知識傳授】的概念。

我們都知道,對神經網路來說,模型結構越複雜,參數越多,網路能學習到的知識就越豐富,效果也越好。但是過於複雜的神經網路,它的運算量和資源消耗都是非常大的,不便於在移動端的部署。

我們將複雜網路類比成是teacher,teacher耗費大量的時間和精力,終於習得了大量的知識。此時,偉大的teacher將畢生所學中最精華的部分「蒸餾」和提煉出來,毫無保留地傳授給student網路,能夠讓student 網路用很簡單的結構,就掌握teacher網路中最精華最有價值的知識,從而達到逼近teacher的模型效果,可謂是「濃縮的都是精華」。

這就是對模型蒸餾最通俗的解釋。

經模型蒸餾而得到的student網路,兼具結構簡單、準確率高、運算量和資源消耗小等優點。模型蒸餾一般被歸類到模型壓縮演算法中,算是眾多模型壓縮演算法中的一個,在具體了解模型蒸餾之前,我們一起來看看它的大家族模型壓縮工具集吧。

01

飛槳模型壓縮工具集PaddleSlim

除模型蒸餾外,PaddleSlim還提供了模型剪裁、量化訓練、輕量神經網路結構自動搜索等功能,並且支援多種壓縮策略的組合使用,幫助您的模型減肥瘦身!

我們以MobileNetV1模型為Baseline,在ImageNet 1000類分類任務上對PaddleSlim的壓縮效果進行了實測:

  • 採用【ResNet50蒸餾訓練+量化】的策略,模型大小由17.0M壓縮至4.8M,實現了71.76%的壓縮,精度不但沒有損失反而提升了1.38%(top5)和1.06%(top1)。
  • 採用【剪裁-50% FLOPS+量化】的策略,模型大小由17.0M壓縮至2.3M,實現了86.47%的壓縮,精度損失只有0.43%(top5)和1.71%(top1)。

詳細數據如下:

以MobileNet v2為Baseline,基於模擬退火的自動剪枝策略和輕量級模型結構自動搜索功能Light-NAS在精度幾乎無損的情況下,FLOPS 減少了17%。詳細數據如下:

02

PaddleSlim壓縮演算法介紹

PaddleSlim提供了模型蒸餾、模型剪裁、量化訓練、輕量神經網路結構自動搜索等多種壓縮演算法,下面我們逐一地進行介紹。

2.1 模型蒸餾

在PaddleSlim工具包中,支援兩種模型蒸餾的方法。

(1) 傳統的蒸餾方法

模型蒸餾的概念,最早由Hinton 在 2015 年提出,核心思想是用一個或多個訓練好的 teacher(大模型)指導 student(小模型)進行訓練,在論文「Distilling the Knowledge in a Neural Network」中,對於分類任務要學習的目標,將圖片實際的類別概率資訊稱為 hard target(只有真實類別對應的概率為 1,其他為 0),而模型輸出的類別概率資訊稱為 soft target(各個類別概率都為一個大於 0 的值)。

由於類別之間具有相關性,softtarget 相比 hard target 具有更高的資訊熵,比如一張貓的圖片,在 soft target 中,其分到狗的概率一般會大於分到汽車的概率,而不是 hardtarget 中將它們都設置為 0,導致沒有區別。

使用大模型產生 softtarget 代替 hard target 能獲得更多的資訊和更小的梯度方差,可以達到更好的性能。一般模型蒸餾的流程如下,先訓好一個大模型,讓後讓小模型去擬合大模型產生的 soft target,在蒸餾結束後,一般還會使用真實的 label 資訊進行 fine-tuning,如下圖所示:

另外,為了使 softtarget 中各個類別的概率值更加平滑,文章中還引入了一個溫度係數 T 的概念,對大模型輸出的概率值做一個平滑處理,具體公式如下:

T 一般被設置成一個大於 1 的數,T值越大,輸出的概率值越平滑。

(2) 基於FSP的蒸餾方法

相比傳統的蒸餾方法直接用小模型去擬合大模型產生的soft target,論文「A Gift from Knowledge Distillation: FastOptimization, Network Minimization and Transfer Learning」嘗試用小模型去擬合大模型不同層特徵之間的轉換關係(flow of the solution procedure),用一個 FSP 矩陣(特徵的內積)來表示不同層特徵之間的關係,計算公式如下:

大模型和小模型不同層之間分別獲得多個 FSP 矩陣,對於 Resnet 網路結構,每個 stage 可產生一個 FSP 矩陣,然後使用 L2 loss 讓小模型的對應層 FSP 矩陣和大模型對應層的 FSP 矩陣盡量一致,具體公式如下:

基於FSP的蒸餾全過程如下圖:

FSP蒸餾方法的效果是優於傳統蒸餾方法的。

通俗一點的解釋是,蒸餾的過程其實就是teacher(大模型)教 student(小模型)解決問題的過程。在教學的過程中,傳統蒸餾方法是teacher直接告訴student這道問題的答案,讓小模型記住;而FSP蒸餾方法則是讓student學習teacher在解決問題時的中間過程和方法。

正所謂「授人以魚不如授人以漁」,FSP蒸餾方法自然能取得更優的效果。

除了模型蒸餾之外,PaddleSlim還提供了多種模型壓縮演算法

2.2 模型剪裁

  • 支援通道均勻模型剪裁(uniform pruning)、基於敏感度的模型剪裁、基於進化演算法的自動模型剪裁三種方式
  • 支援VGG、ResNet、MobileNet等各種類型的網路
  • 支援用戶自定義剪裁範圍

2.3 量化訓練

a:支援動態和靜態兩種量化訓練方式

  • 動態策略: 在推理過程中,動態統計激活的量化參數。
  • 靜態策略: 在推理過程中,對不同的輸入,採用相同的從訓練數據中統計得到的量化參數。

b:支援對權重全局量化和Channel-Wise量化

c:支援以兼容Paddle Mobile的格式保存模型

2.4 輕量神經網路結構自動搜索

  • 支援基於進化演算法的輕量神經網路結構自動搜索(Light-NAS)

2.5 其它功能

  • 支援配置文件管理壓縮任務超參數
  • 支援多種壓縮策略組合使用
  • 蒸餾和模型剪裁壓縮過程支援checkpoints功能

03

傳送門

PaddleSlim實戰教程:

https://github.com/PaddlePaddle/models/blob/v1.5.1/PaddleSlim/docs/usage.md

想與更多的深度學習開發者交流,請加入飛槳官方QQ群:796771754。

如果您想詳細了解更多飛槳PaddlePaddle的相關內容,請參閱以下文檔。

官網地址:https://www.paddlepaddle.org.cn

項目地址:

https://github.com/PaddlePaddle/models/tree/v1.5.1/PaddleSlim

Tags: