精品伊人久久大香线蕉,开心久久婷婷综合中文字幕,杏田冲梨,人妻无码aⅴ不卡中文字幕

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
【AI不惑境】模型壓縮中知識蒸餾技術原理及其發展現狀和展望

大家好,這是專欄《AI不惑境》的第十一篇文章,講述知識蒸餾相關的內容。

進入到不惑境界,就是向高手邁進的開始了,在這個境界需要自己獨立思考。如果說學習是一個從模仿,到追隨,到創造的過程,那么到這個階段,應該躍過了模仿和追隨的階段,進入了創造的階段。從這個境界開始,講述的問題可能不再有答案,更多的是激發大家一起來思考。

作者&編輯 | 言有三

知識蒸餾是非常經典的基于遷移學習的模型壓縮技術,在學術界的研究非常活躍,工業界也有許多的應用和較大的潛力,本文給大家梳理知識蒸餾的核心技術,發展現狀,未來展望以及學習資源推薦。

1 知識蒸餾基礎

1.1 什么是知識蒸餾

一般地,大模型往往是單個復雜網絡或者是若干網絡的集合,擁有良好的性能和泛化能力,而小模型因為網絡規模較小,表達能力有限。利用大模型學習到的知識去指導小模型訓練,使得小模型具有與大模型相當的性能,但是參數數量大幅降低,從而可以實現模型壓縮與加速,就是知識蒸餾與遷移學習在模型優化中的應用。

Hinton等人最早在文章“Distilling the knowledge in a neural network”[1]中提出了知識蒸餾這個概念,其核心思想是一旦復雜網絡模型訓練完成,便可以用另一種訓練方法從復雜模型中提取出來更小的模型,因此知識蒸餾框架通常包含了一個大模型(被稱為teacher模型),和一個小模型(被稱為student模型)

1.2 為什么要進行知識蒸餾

以計算機視覺模型的訓練為例,我們經常用在ImageNet上訓練的模型作為預訓練模型,之所以可以這樣做,是因為深度學習模型在網絡淺層學習的知識是圖像的色彩和邊緣等底層信息,某一個數據集學習到的信息也可以應用于其他領域。

那實際上知識蒸餾或者說遷移學習的必要性在哪里?

(1) 數據分布差異。深度學習模型的訓練場景和測試場景往往有分布差異,以自動駕駛領域為例,大部分數據集的采集都是基于白天,光照良好的天氣條件下,在這樣的數據集上訓練的模型,當將其用于黑夜,風雪等場景時,很有可能會無法正常工作,從而使得模型的實用性能非常受限。因此,必須考慮模型從源域到目標域的遷移能力。

(2) 受限的數據規模。數據的標注成本是非常高的,導致很多任務只能用少量的標注進行模型的訓練。以醫學領域為典型代表,數據集的規模并不大,因此在真正專用的模型訓練之前往往需要先在通用任務上進行預訓練。

(3) 通用與垂直領域。雖然我們可以訓練許多通用的模型,但是真實需求是非常垂直或者說個性化的,比如ImageNet存在1000類,但是我們可能只需要用到其中若干類。此時就可以基于1000類ImageNet模型進行知識遷移,而不需要完全從頭開始訓練。

因此,在工業界對知識蒸餾和遷移學習也有著非常強烈的需求,接下來我們講解其中的主要算法。

2 知識蒸餾主要算法

知識蒸餾是對模型的能力進行遷移,根據遷移的方法不同可以簡單分為基于目標驅動的算法,基于特征匹配的算法兩個大的方向,下面我們對其進行介紹。

2.1 知識蒸餾基本框架

Hinton最早在文章“Distilling the knowledge in a neural network”中提出了知識蒸餾的概念,即knowledge distilling,對后續的許多算法都產生了影響,其框架示意圖如下:

從上圖中可以看出,包括一個teacher model和一個student model,teacher model需要預先訓練好,使用的就是標準分類softmax損失,但是它的輸出使用帶溫度參數T的softmax函數進行映射,如下:

當T=1時,就是softmax本身。當T>1,稱之為soft softmax,T越大,因為輸入zk產生的概率f(zk)差異就會越小。

之所以要這么做,其背后的思想是當訓練好一個模型之后,模型為所有的誤標簽都分配了很小的概率。然而實際上對于不同的錯誤標簽,其被分配的概率仍然可能存在數個量級的懸殊差距。這個差距,在softmax中直接就被忽略了,但這其實是一部分有用的信息。

訓練的時候小模型有兩個損失,一個是與真實標簽的softmax損失,一個是與teacher model的蒸餾損失,定義為KL散度。

當teacher model和student model各自的預測概率為pi,qi時,其蒸餾損失部分梯度傳播如下:

可以看出形式非常的簡單,梯度為兩者預測概率之差,這就是最簡單的知識蒸餾框架。

2.2 優化目標驅動的知識蒸餾框架

Hinton等人提出的框架是在模型最后的預測端,讓student模型學習到與teacher模型的知識,這可以稱之為直接使用優化目標進行驅動的框架,類似的還有ProjectionNet[2]。

PrjojectNet同時訓練一個大模型和一個小模型,兩者的輸入都是樣本,其中大模型就是普通的CNN網絡,而小模型會對輸入首先進行特征投影。每一個投影矩陣P都對應了一個映射,由一個d-bit長的向量表示,其中每一個bit為0或者1,這是一個更加稀疏的表達。特征用這種方法簡化后自然就可以使用更加輕量的網絡的結構進行訓練。

那么怎么完成這個過程呢?文中使用的是locality sensitive hashing(LSH)算法,這是一種聚類任務中常用的降維的算法。

優化目標包含了3部分,分別是大模型的損失,投影損失,以及大模型和小模型的預測損失,全部使用交叉熵,各自定義如下:

基于優化目標驅動的方法其思想是非常直觀,就是結果導向型,中間怎么實現的不關心,對它進行改進的一個有趣方向是GAN的運用。

2.3 特征匹配的知識蒸餾框架

結果導向型的知識蒸餾框架的具體細節是難以控制的,會讓訓練變得不穩定且緩慢。一種更直觀的方式是將teacher模型和student模型的特征進行約束,從而保證student模型確實繼承了teacher模型的知識,其中一個典型代表就是FitNets[3],FitNets將比較淺而寬的Teacher模型的知識遷移到更窄更深的Student模型上,框架如下:

FitNets背后的思想是,用網絡的中間層的特征進行匹配,不僅僅是在輸出端。

它的訓練包含了兩個階段:

第一階段就是根據Teacher模型的損失來指導預訓練Student模型。記Teacher網絡的某一中間層的權值Wt為Whint,意為指導的意思。Student網絡的某一中間層的權值Ws為Wguided,即被指導的意思,在訓練之初Student網絡進行隨機初始化。

我們需要學習一個映射函數Wr使得Wguided的維度匹配Whint,得到Ws',并最小化兩者網絡輸出的MSE差異作為損失,如下:

第二個訓練階段,就是對整個網絡進行知識蒸餾訓練,與上述Hinton等人提出的策略一致。

不過FitNet直接將特征值進行了匹配,先驗約束太強,有的框架對激活值進行了歸一化[4]。

基于特征空間進行匹配的方法其實是知識蒸餾的主流,類似的方法非常多,包括注意力機制的使用[5],類似于風格遷移算法的特征匹配[6]等。

3 知識蒸餾算法的展望

上一節我們介紹了知識蒸餾的基本方法,當然知識蒸餾還有非常多有意思的研究方向,這里我們介紹其中幾個。

3.1 不壓縮模型

機器學習模型要解決的問題如下,其中y是預測值,x是輸入,L是優化目標,θ1是優化參數。

因為深度學習模型沒有解析解,往往無法得到最優解,我們經常會通過添加一些正則項來促使模型達到更好的性能。

Born Again Neural Networks[7]框架思想是通過增加同樣的模型架構,并且重新進行優化,以增加一個模型為例,要解決的問題如下:

具體的流程就是:

(1) 訓練一個教師模型使其收斂到較好的局部值。

(2) 對與教師模型結構相同的學生模型進行初始化,其優化目標包含兩部分,一部分是要匹配教師模型的輸出分布,比如采用KL散度,另一部分就是與教師模型訓練時同樣的目標,即數據集的預測真值。

然后通過下面這樣的流程,一步一步往下傳,所以被形象地命名為“born again”。

類似的框架還有Net2Net,network morphism等。

3.2 去掉teacher模型

一般知識蒸餾框架都需要包括一個Teacher模型和一個Student模型,而Deep mutual learning[8]則沒有Teacher模型,它通過多個小模型進行協同訓練,框架示意圖如下。

Deep mutual learning在訓練的過程中讓兩個學生網絡相互學習,每一個網絡都有兩個損失。一個是任務本身的損失,另外一個就是KL散度。由于KL散度是非對稱的,所以兩個網絡的散度會不同。

相比單獨訓練,每一個模型可以取得更高的精度。值得注意的是,就算是兩個結構完全一樣的模型,也會學習到不同的特征表達。

3.3 與其他框架的結合

在進行知識蒸餾時,我們通常假設teacher模型有更好的性能,而student模型是一個壓縮版的模型,這不就是模型壓縮嗎?與模型剪枝,量化前后的模型對比是一樣的。所以知識蒸餾也被用于與相關技術進行結合,apprentice[9]框架是一個代表。

網絡結構如上圖所示,Teacher模型是一個全精度模型,Apprentice模型是一個低精度模型。

當然模型蒸餾還有一些其他方向,以及對其中每一個方向的深入解讀。對模型蒸餾感興趣的同學,歡迎到有三AI知識星球的網絡結構1000變-模型壓縮-模型蒸餾板塊進行學習,數十期內容定能滿足你的求知欲。

掃碼即可加入,了解有三AI知識星球詳情請閱讀以下文章。

【雜談】有三AI知識星球一周年了!為什么公眾號+星球才是完整的?

參考文獻

[1] Hinton G, Vinyals O, Dean J. Distilling the knowledge in a neural network[J]. arXiv preprint arXiv:1503.02531, 2015.

[2] Ravi S. ProjectionNet: Learning Efficient On-Device Deep Networks Using Neural Projections[J]. arXiv: Learning, 2017.

[3] Romero A, Ballas N, Kahou S E, et al. Fitnets: Hints for thin deep nets[J]. arXiv preprint arXiv:1412.6550, 2014.

[4] Huang Z, Wang N. Like What You Like: Knowledge Distill via Neuron Selectivity Transfer.[J]. arXiv: Computer Vision and Pattern Recognition, 2017.

[5] Zagoruyko S, Komodakis N. Paying More Attention to Attention: Improving the Performance of Convolutional Neural Networks via Attention Transfer[C]. international conference on learning representations, 2017.

[6] Yim J, Joo D, Bae J, et al. A Gift from Knowledge Distillation: Fast Optimization, Network Minimization and Transfer Learning[C]. computer vision and pattern recognition, 2017: 7130-7138.

[7] Furlanello T, Lipton Z C, Tschannen M, et al. Born Again Neural Networks[C]. international conference on machine learning, 2018: 1602-1611.

[8] Zhang Y, Xiang T, Hospedales T M, et al. Deep Mutual Learning[C]. computer vision and pattern recognition, 2018: 4320-4328.

[9] Mishra A K, Marr D. Apprentice: Using Knowledge Distillation Techniques To Improve Low-Precision Network Accuracy[C]. international conference on learning representations, 2018.

總結

本次我們總結了模型蒸餾的核心技術,并對其重要方向進行了展望,推薦了相關的學習資源,下一期我們將介紹AutoML在模型優化上的進展。

有三AI秋季劃-模型優化組

如果你想系統性地學習模型優化相關的理論和實踐,并獲得持續的指導,歡迎加入有三AI秋季劃-模型優化組,系統性地學習數據使用,模型使用和調參,模型性能分析,緊湊模型設計,模型剪枝,模型量化,模型部署,NAS等內容

本站僅提供存儲服務,所有內容均由用戶發布,如發現有害或侵權內容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
自動化AutoML工具Pluto在OPPO的典型應用
解讀人工智能的2021:回顧那些激動人心的重大突破
中美科研突圍!文心大模型3.5全球評測7滿分 重頭戲:唯一算法滿分
大模型創新中心落戶上海!助推AI框架生態共建進入加速道
首次開源這一強大算法,我們向Meta致敬
騰訊混元大模型正式亮相,我們搶先試了試它的生產力
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯系客服!

聯系客服

主站蜘蛛池模板: 乐山市| 广丰县| 兖州市| 乌兰察布市| 常州市| 商城县| 溧水县| 镇沅| 海伦市| 枞阳县| 德州市| 公主岭市| 西和县| 固原市| 长汀县| 灵丘县| 新丰县| 丹东市| 城口县| 陵川县| 郸城县| 定边县| 榆树市| 佛冈县| 霍城县| 开化县| 南木林县| 广安市| 苏尼特右旗| 嵊州市| 江北区| 固原市| 昌吉市| 芜湖市| 祁阳县| 镇沅| 和硕县| 石家庄市| 梁山县| 濉溪县| 湖口县|