知識蒸餾是什麼?一份入門隨筆

2021-02-25 極市平臺
0. 寫在前面

有人說過:「神經網絡用剩的logits不要扔,沾上雞蛋液,裹上麵包糠...」 這兩天對知識蒸餾(Knowledge Distillation)萌生了一點興趣,正好寫一篇文章分享一下。這篇文章姑且算是一篇小科普。

前排小廣告:如果覺得文章對你有幫助,歡迎點讚、關注我的小專欄ML4NLP。

1. 從模型壓縮開始

各種模型算法,最終目的都是要為某個應用服務。在買賣中,我們需要控制收入和支出。類似地,在工業應用中,除了要求模型要有好的預測(收入)以外,往往還希望它的「支出」要足夠小。具體來說,我們一般希望部署到應用中的模型使用較少的計算資源(存儲空間、計算單元等),產生較低的時延。

在深度學習的背景下,為了達到更好的預測,常常會有兩種方案:1. 使用過參數化的深度神經網絡,這類網絡學習能力非常強,因此往往加上一定的正則化策略(如dropout);2. 集成模型(ensemble),將許多弱的模型集成起來,往往可以實現較好的預測。這兩種方案無疑都有較大的「支出」,需要的計算量和計算資源很大,對部署非常不利。這也就是模型壓縮的動機:我們希望有一個規模較小的模型,能達到和大模型一樣或相當的結果。當然,從頭訓練一個小模型,從經驗上看是很難達到上述效果的,也許我們能先訓練一個大而強的模型,然後將其包含的知識轉移給小的模型呢?如何做到呢?

* 下文統一將要訓練的小模型稱為新模型,將以及訓練的大模型稱為原模型。

Rich Caruana等人在[1]中指出,可以讓新模型近似(approximate)原模型(模型即函數)。注意到,在機器學習中,我們常常假定輸入到輸出有一個潛在的函數關係,這個函數是未知的:從頭學習一個新模型就是從有限的數據中近似一個未知的函數。如果讓新模型近似原模型,因為原模型的函數是已知的,我們可以使用很多非訓練集內的偽數據來訓練新模型,這顯然要更可行。

這樣,原來我們需要讓新模型的softmax分布與真實標籤匹配,現在只需要讓新模型與原模型在給定輸入下的softmax分布匹配了。直觀來看,後者比前者具有這樣一個優勢:經過訓練後的原模型,其softmax分布包含有一定的知識——真實標籤只能告訴我們,某個圖像樣本是一輛寶馬,不是一輛垃圾車,也不是一顆蘿蔔;而經過訓練的softmax可能會告訴我們,它最可能是一輛寶馬,不大可能是一輛垃圾車,但絕不可能是一顆蘿蔔[2]。

2. 為什麼叫「蒸餾」?

接續前面的討論,我們的目標是讓新模型與原模型的softmax輸出的分布充分接近。直接這樣做是有問題的:在一般的softmax函數中,自然指數

一種方法是直接比較logits來避免這個問題。具體地,對於每一條數據,記原模型產生的某個logits是

文獻[2]提出了更通用的一種做法。考慮一個廣義的softmax函數

其中

在化學中,蒸餾是一個有效的分離沸點不同的組分的方法,大致步驟是先升溫使低沸點的組分汽化,然後降溫冷凝,達到分離出目標物質的目的。在前面提到的這個過程中,我們先讓溫度 升高,然後在測試階段恢復「低溫」,從而將原模型中的知識提取出來,因此將其稱為是蒸餾,實在是妙。

當然,如果轉移時使用的是有標籤的數據,那麼也可以將標籤與新模型softmax分布的交叉熵加入到損失函數中去。這裡需要將式

3. 與直接優化logits差異相比

由公式

由於 等價無窮小(

假設所有logits對每個樣本都是零均值化的,即

所以,如果:1.

4. 實驗與結論

Hinton等人做了三組實驗,其中兩組都驗證了知識蒸餾方法的有效性。在MNIST數據集上的實驗表明,即便有部分類別的樣本缺失,新模型也可以表現得很不錯,只需要修改相應的偏置項,就可以與原模型表現相當。在語音任務的實驗也表明,蒸餾得到的模型比從頭訓練的模型捕捉了更多數據集中的有效信息,表現僅比集成模型低了0.3個百分點。總體來說知識蒸餾是一個簡單而有效的模型壓縮/訓練方法。這大體上是因為原模型的softmax提供了比one-hot標籤更多的監督信號[3]。

知識蒸餾在後續也有很多延伸工作。在NLP方面比較有名的有Yoon Kim等人的Sequence-Level Knowledge Distillation 等。總的來說,對一些比較臃腫、不便部署的模型,可以將其「知識」轉移到小的模型上。比如,在機器翻譯中,一般的模型需要有較大的容量(capacity)才可能獲得較好的結果;現在非常流行的BERT及其變種,規模都非常大;更不用提,一些情形下我們需要將這些本身就很大的深度模型集成為一個ensemble,這時候,可以用知識蒸餾壓縮出一個較小的、「便宜」的模型。

文章地址:https://arxiv.org/abs/1606.07947

另外,在多任務的情境下,使用一般的策略訓練一個多任務模型,可能達不到比單任務更好的效果,文獻[3]探索了使用知識蒸餾,利用單任務的模型來指導訓練多任務模型的方法,很值得參考。

補充

鑑於評論區有知友對公式

* 這部分有一點繁瑣,能接受公式

由鏈式法則,有

注意到

後一項

前一項

注意上面右側加方框部分,可以進一步展開

這樣,代入公式

左側方框內偏導可以分類討論得到

帶入式

所以

代入式

所以有公式

參考

[1] Caruana et al., Model Compression, 2006

[2] Hinton et al., Distilling the Knowledge in a Neural Network, 2015

[3] Kevin Clark et al., BAM! Born-Again Multi-Task Networks for Natural Language Understanding

相關焦點

  • 【模型蒸餾】從入門到放棄:深度學習中的模型蒸餾技術
    模型蒸餾在自然語言處理、計算機視覺和語音識別等領域均有廣泛研究,這篇閱讀筆記只包括與計算機視覺相關的部分論文。模型壓縮和加速四個技術是設計高效小型網絡、剪枝、量化和蒸餾[2]。蒸餾,就是知識蒸餾,將教師網絡(teacher network)的知識遷移到學生網絡(student network)上,使得學生網絡的性能表現如教師網絡一般。
  • 知識蒸餾Knowledge Distillation
    知識蒸餾!那麼問題來了。如果我們有了一個大模型,泛化能力很好,我們怎麼才能讓一個小模型去學習它的泛化能力呢?換句話說,怎麼讓大模型的泛化能力轉移到小模型身上去呢?這裡就用到了論文裡面介紹的方法:知識蒸餾。簡單地說,知識蒸餾就是把大模型對樣本輸出的概率向量作為軟目標「soft targets」,去讓小模型的輸出儘量去和這個軟目標靠(原來是和One-hot編碼上靠)。
  • 【知識蒸餾】知識蒸餾(Knowledge Distillation)簡述(一)
    來自 | 知乎地址 | https://zhuanlan.zhihu.com/p/81467832作者 | Ivan Yan編輯 | 機器學習算法與自然語言處理公眾號本文僅作學術分享,若侵權,請聯繫後臺刪文處理最新在看知識蒸餾的文章
  • 深度學習中的知識蒸餾技術(上)
    知識蒸餾介紹1.1 什麼是知識蒸餾?在化學中,蒸餾是一種有效的分離不同沸點組分的方法,大致步驟是先升溫使低沸點的組分汽化,然後降溫冷凝,達到分離出目標物質的目的。化學蒸餾條件:(1)蒸餾的液體是混合物;(2)各組分沸點不同。
  • 模型壓縮 | 知識蒸餾經典解讀
    寫在前面知識蒸餾是一種模型壓縮方法,是一種基於「教師-學生網絡思想」的訓練方法,由於其簡單,有效,在工業界被廣泛應用。在本文中,我們將從背景和動機講起,然後著重介紹「知識蒸餾」的方法,最後我會討論「溫度「這個名詞:「溫度」: 我們都知道「蒸餾」需要在高溫下進行,那麼這個「蒸餾」的溫度代表了什麼,又是如何選取合適的溫度?
  • 心法利器[1] | NLP知識蒸餾思考
    知識蒸餾本就不是什麼比較新的知識,早在2015年,Hinton就已經提出了蒸餾學習,並成功使用在特定的任務上,近期在NLP領域重提,其實是因為各種預訓練語言模型的體積越來越大而無法落地實施,而要嘗試把這些好東西落地實施,一方面是硬體和引擎能夠過關,另一方面則是算法要自食其力,自己嘗試讓這個好東西能被使用,除了剪枝、壓縮等對模型能力更高的方法外
  • 知識蒸餾(Knowledge Distillation) 經典之作,論文筆記
    在本文中,我們將從背景和動機講起,然後著重介紹「知識蒸餾」的方法,下面我會討論「溫度「這個名詞:溫度: 我們都知道「蒸餾」需要在高溫下進行,那麼這個「蒸餾」的溫度代表了什麼,又是如何選取合適的溫度?Teacher Model和Student Model知識蒸餾使用的是Teacher—Student模型,其中teacher是「知識」的輸出者,student是「知識」的接受者。
  • 【經典簡讀】知識蒸餾(Knowledge Distillation) 經典之作
    在本文中,我們將從背景和動機講起,然後著重介紹「知識蒸餾」的方法,最後我會討論「溫度「這個名詞:本文的內容由以下幾個部分組成介紹知識蒸餾的理論依據知識蒸餾的具體方法通用的知識蒸餾方法一種特殊情形: 直接match logits關於"溫度"的討論參考1. 介紹1.1.
  • 說說知識蒸餾與增量學習那些事兒
    本期AI論道想跟大家分享幾篇關於知識蒸餾和增量學習相結合的論文,按發表先後順序對領域發展脈絡進行梳理和介紹,希望對想深入了解和研究增量學習的小夥伴們有幫助和借鑑意義。知識蒸餾(Knowledge Distillation)最早是在Hinton的《Distilling the Knowledge in a Neural Network》一文中提出,並迅速在其他領域廣泛應用開來。
  • 最新《知識蒸餾》2020綜述論文,30頁pdf,雪梨大學
    知識蒸餾是一種典型的模型壓縮和加速方法,旨在從大教師模型中學習小學生模型,越來越受到社會的關注。本文從知識分類、訓練方案、知識提取算法以及應用等方面對知識提取進行了綜述。此外,我們簡要回顧了知識提煉的挑戰,並對未來的研究課題提供了一些見解。
  • 簡評 | 知識蒸餾(Knowledge Distillation)最新進展(一)
    ,用於模型壓縮指的是在teacher-student框架中,將複雜、學習能力強的網絡學到的特徵表示「知識」蒸餾出來,傳遞給參數量小、學習能力弱的網絡。蒸餾可以提供student在one-shot label上學不到的soft label信息,這些裡面包含了類別間信息,以及student小網絡學不到而teacher網絡可以學到的特徵表示『知識』,所以一般可以提高student網絡的精度。
  • 簡評 | 知識蒸餾(Knowledge Distillation)最新進展(二)
    Mutual Learning & Born Again NN兩篇不以模型壓縮為目的應用知識蒸餾的文章Deep Mutual Learning VS Knowledge DistillationDeep Mutual Learning(DML)與用於模型壓縮的一般知識蒸餾不同的地方在於知識蒸餾是將預訓練好的、不進行反向傳播的「靜態」
  • 模型壓縮中知識蒸餾技術原理及其發展現狀和展望
    知識蒸餾是非常經典的基於遷移學習的模型壓縮技術,在學術界的研究非常活躍,工業界也有許多的應用和較大的潛力,本文給大家梳理知識蒸餾的核心技術,發展現狀,未來展望以及學習資源推薦。1.1 什麼是知識蒸餾一般地,大模型往往是單個複雜網絡或者是若干網絡的集合,擁有良好的性能和泛化能力,而小模型因為網絡規模較小,表達能力有限。
  • Java入門需要學習什麼知識?該怎麼準備?
    > IT網際網路/資訊熱點/技能幹貨點左上方藍字關注小U有禮物送~想要找一份滿意的
  • 雜談|當前知識蒸餾與遷移學習有哪些可用的開源工具?
    作者&編輯 | 言有三【導讀】知識蒸餾與遷移學習不僅僅屬於模型優化的重要技術之一,也是提升模型跨領域泛化能力的重要技術,那麼當前有哪些可用的知識蒸餾和遷移學習開源工具呢?>https://github.com/apache/incubator-mxnet/tree/master/example/bayesian-methods4 非官方Pytorch項目Knowledge-Distillation-Zoo是GitHub用戶AberHu蒸餾的知識蒸餾項目
  • LRC-BERT:對比學習潛在語義知識蒸餾|AAAI 2021
    Hinton的文章"Distilling the Knowledge in a Neural Network"首次提出了知識蒸餾的概念,將teacher知識壓縮到student網絡,student網絡與teacher網絡具有相同的預測能力但擁有更快的推理速度,極大節省了計算資源。
  • 什麼是蒸餾、分餾、乾餾?
    蒸餾、分餾、乾餾(有人稱之為化學實驗的「三餾」)是用於不同目的實驗操作。
  • [預訓練語言模型專題] MT-DNN(KD) : 預訓練、多任務、知識蒸餾的結合
    Improving Multi-Task Deep Neural Networks via Knowledge Distillation for Natural Language Understanding(2019)這篇文章是上一篇文章的延續,主要改進部分是加入了知識蒸餾, 被稱為MT-DNN(KD
  • Knowledge Distillation(知識蒸餾)Review--20篇paper回顧
    Bucilua et al. (2006) [1]首次提出通過知識蒸餾壓縮模型的思想,但是沒有實際的工作闡述。大多數方法隨機選擇intermediate layers,可解釋性不夠特徵的蒸餾位置手動選擇或基於任務選擇Applications-NLP-BERT因為Bert本身參數量大,當前對Bert瘦身有三個思路,分別是Distillation(蒸餾)、Quantization(量化)和Pruning(剪枝)。其中蒸餾效果最好。
  • 無需tricks,知識蒸餾提升ResNet50在ImageNet上準確度至80%+
    知識蒸餾是將一個已經訓練好的網絡遷移到另外一個新網絡,常採用teacher-student學習策略,已經被廣泛應用在模型壓縮和遷移學習中。這裡要介紹的MEAL V2是通過知識蒸餾提升ResNet50在ImageNet上的分類準確度,MEAL V2不需要修改網絡結構,也不需要其他特殊的訓練策略和數據增強就可以使原始ResNet50的Top-1準確度提升至80%+,這是一個非常nice的work。