日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

悉尼大学 伦敦大学联合出品:知识蒸馏最新综述

發(fā)布時間:2024/10/8 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 悉尼大学 伦敦大学联合出品:知识蒸馏最新综述 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?作者 | 夏勁松

學校 | 哈爾濱理工大學

研究方向 | 知識蒸餾、圖神經網絡


摘要

深度學習通過參數量巨大的模型,近幾年中在多個領域取得了較好的效果,但是往往因為模型體積過大(模型的體積指的就是模型的大小,比如 ResNet18 體積為 44.6MB 等)、計算耗時等因素,無法部署在一些資源受限的移動設備或者嵌入式設備中。因此人們提出了多種對模型體積進行壓縮,或者加速模型計算的方法。

在這些方法中,知識蒸餾利用一個體積小的模型(在知識蒸餾中稱為學生神經網絡,Student)從一個體積較大的模型中學習知識(在知識蒸餾中稱為教師神經網絡, Teacher),進行模型壓縮,得到了學術界的關注。

這篇文章從以下幾方面提供給讀者一個對知識蒸餾清晰的認識:

  • 知識蒸餾中的知識都有哪些?

  • 知識蒸餾的訓練過程是什么樣的?

  • 知識蒸餾中教師神經網絡,學生神經網絡的組成結構是什么樣的?

  • 知識蒸餾都有哪些方法?

  • 知識蒸餾的應用

最后簡要地論述了未來知識蒸餾的研究方向。

論文標題:

Knowledge Distillation: A Survey

論文鏈接:

https://arxiv.org/abs/2006.05525


引言

近幾年隨著一些訓練深層神經網絡方法的提出,比如殘差連接,Batch Normalization(BN),和算力的提升,使得訓練一些深層的神經網絡已經不像以前那么困難了,而且這些具有更深層的神經網絡被證明在許多任務上是有效的。但是還是存在一個問題——那就是無法有效的將這些體積巨大的模型部署在一些資源受限的設備中。

關于如何訓練更深的網絡結構,普遍從以下幾方面入手:

1. 設計更有效的 blocks,(blocks 的意思是作為一個深度學習神經網絡中的基本層,然后我們可以像搭積木一樣重疊 blocks,以此來構建更深層的網絡結構)。比如 MobileNets 中深度可分離卷積的設計。

2. 利用模型壓縮、加速的技巧。

這些模型壓縮、加速的方法大致可以分為:

1. Parameter pruning and sharing:這種方法的核心思想是刪除掉神經網絡中那些對于最終模型效果沒有指導作用的參數,壓縮模型的體積。方法包括——Model Quantization(原先用 float 存儲,轉換為用 int 存儲),Model Binarization(二級制存儲),Structural Matrices, Parameter sharing.

2. Low-rank factorization:分解參數矩陣;

3. Transferred compact convolutional filter:壓縮卷積核中的無用參數;

4. Konwledge distillation(KD):本文要介紹的知識蒸餾。

知識蒸餾的主要思路是利用一個預先在數據集上進行過訓練的教師神經網絡(一般體積較大),去指導、監(jiān)督一個學生神經網絡的訓練(一般體積較教師神經網絡要小很多)。

面臨的主要問題就是如何遷移教師神經網絡中學習到的知識到學生神經網絡中

一個知識蒸餾系統的必要組成是:知識的發(fā)掘、蒸餾方法、教師,學生結構的設計。如圖所示:

結合上面這個圖說一下普通的知識蒸餾流程。

首先利用數據集訓練一個教師神經網絡 [最左邊],教師神經網絡會通過訓練過程逐漸學習到隱藏在數據集上的知識。

然后我們要發(fā)掘出教師神經網絡都學習到了那些知識 [中間].

通過 Distill 和 Transforer,將這些已經學習到的知識,遷移到學生神經網絡中。

學生神經網絡同樣是在數據集上進行訓練,只不過相比于教師神經網絡,它有額外的來自于教師神經網絡的知識,輔助訓練。

但是知識蒸餾存在一個問題:沒有嚴格的理論支撐。大多都是來自于訓練過程中的經驗,一些研究人員做了一些理論層面的研究(最近在讀這方面的論文)

模仿人類學習的過程,知識蒸餾逐漸發(fā)展出:teacher-student learning(普通的知識蒸餾過程。訓練完的教師神經網絡指導學生神經網絡的訓練)、mutual learning(互相學習,在多教師或者多學生知識蒸餾過程中有體現,相當于一種模型集成方法)、assistant teachering,lifelong learning,self-learning(教師和學生模型是同一個,也叫 self-distillation,自蒸餾)

知識蒸餾不僅可以作為一種模型壓縮的方法,它也被用作一種遷移學習的方法應用在不同領域中(個人感覺遷移學習這個角度應用知識蒸餾比較重要,上一篇論文的創(chuàng)新點壓在了這里)。


Knowledge

上面我們一直在說‘知識’,那么知識蒸餾中的知識具體都有哪些呢。

可以簡單理解為所謂的教師神經網絡中包含的知識就是各個網絡層的輸出或者其包含的參數。Response-Based Knowledge 是教師神經網絡最后的輸出,也叫 Logits,注意這個 Logits 是沒經過 Softmax 計算的網絡輸出。

具體可以看:

https://zhuanlan.zhihu.com/p/51431626

Feature-Based Konwledge 指的是教師神經網絡中間層的輸出,比如卷積神經網絡中卷積層輸出的 Feature Map,循環(huán)神經網絡中的 hidden state,Transformer 中的注意力矩陣等。Relation-Based Knowledge 可以理解為是教師神經網絡所有中間輸出結果之間的一種關系捕獲,所有知識之間的關系。

先有一個認識,下面再看會更好理解一點。

最初的知識蒸餾(Hinton 他們)使用的是教師神經網絡的 Logits 作為知識。后來開始用中間層的一些輸出作為知識進行蒸餾。不同知識之間的關系也可以看做一種知識用來進行知識蒸餾。在這篇文章中,我們稱以上三種知識為:response-based konwledge,feature-based knowledge,relation-based knowledge。下面分別介紹。

2.1 Response-Based Knowledge

Response-Based Knowledge 指的是教師神經網絡最后的輸出(未經過Softmax,一般叫 Logits)。利用這種知識的蒸餾思想是直接讓學生神經網絡模仿教師神經網絡的預測。

蒸餾損失函數(知識蒸餾中提出的一個附加在原始損失函數后面的函數,用來刻畫在蒸餾的過程中有多少教師神經網絡中的知識被蒸丟了。)定義為:

其中 是教師神經網絡,學生神經網絡的 Logits, 是一個能夠衡量相似性的函數。一般不直接計算上面的損失函數,而是先將 利用一個溫度參數(知識蒸餾的命名來源于此操作)進行平滑處理,計算公式為

那么帶入公式 2 到 1 中,蒸餾損失函數變?yōu)?/p>

基于這種知識的知識蒸餾過程如圖所示:

解釋一下。

首先注意 Teacher 已經在 Data 上訓練過了,然后在利用 Data 訓練 Student 的時候,同樣將 Data 輸入到 teacher 中。因為我們想獲取 Teacher 中的知識,而知識我們上面說過可以簡單的理解為就是 teacher 的輸出,要想獲得輸出你得首先有個輸入吧,所以在知識蒸餾的過程中還是要將 Data 輸入到 teacher 中的。

前向傳遞,獲取到 teacher 的 Logits,student 的 Logits,計算我們上面定義的蒸餾損失,還有關于 Data 自身的損失函數,比如如果 Data 是圖像分類,那么可能就是計算一個交叉熵損失。

計算完損失之后,反向傳播,更新 Student 中的參數。注意在普通的知識蒸餾中 Teacher 是不隨著更新的。

2.2 Feature-Based Knowledge

把中間層的輸出作為一種知識,進行知識蒸餾,蒸餾損失函數定義為:

其中 分別是教師神經網絡,學生神經網絡的中間層輸出,也就是 Feature-Based Knowledge,外面的 是當兩個網絡中間層輸出維度不一樣時使用的維度變換函數(也叫知識嵌入,中間層知識蒸餾重點就在于設計這個 ), 是一個能夠衡量相似性的函數。

這個表中,第一列是中間層知識蒸餾方法名,第二列是那種中間層知識進行蒸餾,第三列是知識的來源,也就是網絡中哪一層的輸出,最后一列表明使用的衡量相似性的函數是什么。

中間層知識蒸餾過程如圖所示:

首先還是 Teacher 是在 Data 上進行過訓練的模型,然后對于中間層知識蒸餾,我們事先要指定對于 Teacher 和 Student 的哪個中間層進行知識蒸餾,然后分別獲取這個指定中間層的輸出,計算中間層知識蒸餾損失,反向傳播,更新學生網絡。


2.3 Relation-Based Knowledge

利用知識之間的關系進行知識蒸餾,知識可以是網絡的輸出,也可以是中間層的輸出,重點在于它們之間的關系,利用這個關系進行知識蒸餾,蒸餾損失函數為:

符號含義沒有變化,但是為什么里面是兩個 f 呢,因為我們想要獲取的是知識之間的關系,只有兩個以上的物體才可以談得上具有關系,所以里面是兩個 f,其實也不一定是兩個,多少個都行,這個是你自己定義的,你用三個中間層的輸出建立關系,那自然里面就是三個啦。

一般的基于關系的知識蒸餾過程為:

還是首先 Teacher 要進行在 Data 上的預訓練,然后獲取我們想要發(fā)現它們之間關系的知識,圖中標虛線的那里,用提取出來的關系進行知識蒸餾。我跑過幾個這種類型的知識蒸餾實驗,有基于圖捕獲知識之間關系的,有知識之間算一個關系矩陣的,個人感覺,訓練明顯比前兩個耗時而且準確率提升的效果一般。

不同基于關系的知識蒸餾方法總結表:


Distillation Schemes

本節(jié)介紹知識蒸餾中教師、學生網絡的訓練方式,根據教師神經網絡是否隨著學生神經網絡的更新而更新,可以分為:

  • offline distillation (教師網絡不更新)

  • online distillation(教師網絡更新)

  • self-distillation(教師和學生是同一個網絡)

3.1 Offine Distillation

這是最原始的知識蒸餾訓練方式:先在數據集(可以是與學生神經網絡相同的數據集,不同的但是任務相同的也可以)上預訓練教師神經網絡,然后提取教師神經網絡中的知識指導學生神經網絡的訓練。

3.2 Online Distillation

這種方式的知識蒸餾中教師神經網絡會隨著學生神經網絡的更新進行更新(可以把學生神經網絡的損失作為一種反饋信號,教師神經網絡利用這個反饋信號提升自己,以便更好的指導學生),另外一種方式常見于多教師知識蒸餾中,這種方法中教師神經網絡的結構是動態(tài)變化的。

3.3 Self-Distillation

教師神經網絡和學生神經網絡是同一個結構。可以把網絡深層的輸出作為一種知識指導網絡淺層的訓練(神經網絡中更深層的網絡層,學習到的更多是與數據無關的、較高層次的抽象知識,可以聯想卷積神經網絡,卷積神經網絡最后面那些深層的卷積學習到的是圖片中的語義層面的知識,淺層是圖像的邊緣,點什么的信息)。


Teacher-Student Architecture

這節(jié)講知識蒸餾中教師、學生神經網絡的結構如何設計。

教師神經網絡的結構一般沒啥要求,根據教師神經網絡我們有以下幾種方式設計學生神經網絡的結構:

1. Simplified Stucture:比如教師神經網絡是 ResNet101,學生神經網絡是ResNet18;

2. Quantized Structrue:比如 float 存儲轉為 int 存儲;

3. Same Structure;

4. Small Sturcture:原先 6 個卷積層,學生可以選 3 個卷積層。



Distillation Alorithms

在上面介紹的知識蒸餾方法基礎上介紹一些其它的知識蒸餾方法。


5.1 Adversarial Distillation?

融入生成對抗的思想進行知識蒸餾。

5.2 Multi-Teacher Distillation?

這種方式研究的比較多,利用多個教師指導一個學生,相當于一種模型集成方法。

5.3 Cross-Modal Distillation

將在 A 模態(tài)數據集上訓練的教師神經網絡中的知識遷移到 B 模態(tài)數據集上訓練學生神經網絡:

不同方法的總結如表所示

5.4 Grpaph-Based Distillation

將知識之間的關系組織成圖,然后利用圖結構指導學生神經網絡的訓練:

5.5 Attention-Based Distillation

在中間層知識嵌入中引入注意力機制。

5.6 Data-Free Distillation

結合小樣本學習的知識蒸餾。

5.7 Quantized Distillation

5.8 Lifelong Distillation

將知識蒸餾作為一種遷移學習任務,用于增量學習,小樣本學習等領域。

5.9 NAS-Based Distillation

結合 NAS 進行知識蒸餾。


Performance Comparison

比較了知識蒸餾方法在 CIFAR-10,CIFAR-100 上的準確率提升:


特別鳴謝

感謝 TCCI 天橋腦科學研究院對于 PaperWeekly 的支持。TCCI 關注大腦探知、大腦功能和大腦健康。

更多閱讀

#投 稿?通 道#

?讓你的文字被更多人看到?

如何才能讓更多的優(yōu)質內容以更短路徑到達讀者群體,縮短讀者尋找優(yōu)質內容的成本呢?答案就是:你不認識的人。

總有一些你不認識的人,知道你想知道的東西。PaperWeekly 或許可以成為一座橋梁,促使不同背景、不同方向的學者和學術靈感相互碰撞,迸發(fā)出更多的可能性。?

PaperWeekly 鼓勵高校實驗室或個人,在我們的平臺上分享各類優(yōu)質內容,可以是最新論文解讀,也可以是學術熱點剖析科研心得競賽經驗講解等。我們的目的只有一個,讓知識真正流動起來。

📝?稿件基本要求:

? 文章確系個人原創(chuàng)作品,未曾在公開渠道發(fā)表,如為其他平臺已發(fā)表或待發(fā)表的文章,請明確標注?

? 稿件建議以?markdown?格式撰寫,文中配圖以附件形式發(fā)送,要求圖片清晰,無版權問題

? PaperWeekly 尊重原作者署名權,并將為每篇被采納的原創(chuàng)首發(fā)稿件,提供業(yè)內具有競爭力稿酬,具體依據文章閱讀量和文章質量階梯制結算

📬?投稿通道:

? 投稿郵箱:hr@paperweekly.site?

? 來稿請備注即時聯系方式(微信),以便我們在稿件選用的第一時間聯系作者

? 您也可以直接添加小編微信(pwbot02)快速投稿,備注:姓名-投稿

△長按添加PaperWeekly小編

🔍

現在,在「知乎」也能找到我們了

進入知乎首頁搜索「PaperWeekly」

點擊「關注」訂閱我們的專欄吧

·

總結

以上是生活随笔為你收集整理的悉尼大学 伦敦大学联合出品:知识蒸馏最新综述的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。