前言
? ? ? ??模型部署優(yōu)化這個(gè)方向其實(shí)比較寬泛。從模型完成訓(xùn)練,到最終將模型部署到實(shí)際硬件上,整個(gè)流程中會(huì)涉及到很多不同層面的工作,每一個(gè)環(huán)節(jié)對(duì)技術(shù)點(diǎn)的要求也不盡相同。但本質(zhì)的工作無疑是通過減小模型大小,提高推理速度等,使得模型能夠成功部署在各個(gè)硬件之中去并且實(shí)時(shí)有效的運(yùn)作。那么模型的部署優(yōu)化有哪些方式呢?顯而易見答案就在標(biāo)題之中。
【深度學(xué)習(xí)之模型優(yōu)化】模型剪枝、模型量化、知識(shí)蒸餾概述
模型剪枝技術(shù)概述
1. 什么是模型剪枝
2. 模型剪枝的必要性
模型量化技術(shù)概述
1. 什么是模型量化
2. 模型量化的優(yōu)勢
模型壓縮中知識(shí)蒸餾技術(shù)概述
1. 什么是知識(shí)蒸餾
2.?為什么要進(jìn)行知識(shí)蒸餾
模型剪枝技術(shù)概述
1. 什么是模型剪枝
????????深度學(xué)習(xí)網(wǎng)絡(luò)模型從卷積層到全連接層存在著大量冗余的參數(shù),大量神經(jīng)元激活值趨近于0,將這些神經(jīng)元去除后可以表現(xiàn)出同樣的模型表達(dá)能力,這種情況被稱為過參數(shù)化,而對(duì)應(yīng)的技術(shù)則被稱為模型剪枝。
????????模型剪枝是一個(gè)新概念嗎?并不是,其實(shí)我們從學(xué)習(xí)深度學(xué)習(xí)的第一天起就接觸過,Dropout和DropConnect代表著非常經(jīng)典的模型剪枝技術(shù),看下圖。
Dropout中隨機(jī)的將一些神經(jīng)元的輸出置零,這就是神經(jīng)元剪枝。DropConnect則隨機(jī)的將一些神經(jīng)元之間的連接置零,使得權(quán)重連接矩陣變得稀疏,這便是權(quán)重連接剪枝。它們就是最細(xì)粒度的剪枝技術(shù),只是這個(gè)操作僅僅發(fā)生在訓(xùn)練中,對(duì)最終的模型不產(chǎn)生影響,因此沒有被稱為模型剪枝技術(shù)。
當(dāng)然,模型剪枝不僅僅只有對(duì)神經(jīng)元的剪枝和對(duì)權(quán)重連接的剪枝,根據(jù)粒度的不同,至少可以粗分為4個(gè)粒度。
細(xì)粒度剪枝(fine-grained):即對(duì)連接或者神經(jīng)元進(jìn)行剪枝,它是粒度最小的剪枝。
向量剪枝(vector-level):它相對(duì)于細(xì)粒度剪枝粒度更大,屬于對(duì)卷積核內(nèi)部(intra-kernel)的剪枝。
核剪枝(kernel-level):即去除某個(gè)卷積核,它將丟棄對(duì)輸入通道中對(duì)應(yīng)計(jì)算通道的響應(yīng)。
濾波器剪枝(Filter-level):對(duì)整個(gè)卷積核組進(jìn)行剪枝,會(huì)造成推理過程中輸出特征通道數(shù)的改變。
細(xì)粒度剪枝(fine-grained),向量剪枝(vector-level),核剪枝(kernel-level)方法在參數(shù)量與模型性能之間取得了一定的平衡,但是網(wǎng)絡(luò)的拓?fù)浣Y(jié)構(gòu)本身發(fā)生了變化,需要專門的算法設(shè)計(jì)來支持這種稀疏的運(yùn)算,被稱之為非結(jié)構(gòu)化剪枝。
而濾波器剪枝(Filter-level)只改變了網(wǎng)絡(luò)中的濾波器組和特征通道數(shù)目,所獲得的模型不需要專門的算法設(shè)計(jì)就能夠運(yùn)行,被稱為結(jié)構(gòu)化剪枝。除此之外還有對(duì)整個(gè)網(wǎng)絡(luò)層的剪枝,它可以被看作是濾波器剪枝(Filter-level)的變種,即所有的濾波器都丟棄。
2. 模型剪枝的必要性
????????既然冗余性是存在的,那么剪枝自然有它的必要性,下面以Google的研究來說明這個(gè)問題。
Google在《To prune, or not to prune: exploring the efficacy of pruning for model compression》[1]中探討了具有同等參數(shù)量的稀疏大模型和稠密小模型的性能對(duì)比,在圖像和語音任務(wù)上表明稀疏大模型普遍有更好的性能。
它們對(duì)Inception V3模型進(jìn)行了實(shí)驗(yàn),在參數(shù)的稀疏性分別為0%,50%,75%,87.5%時(shí),模型中非零參數(shù)分別是原始模型的1,0.5,0.25,0.128倍進(jìn)行了實(shí)驗(yàn)。實(shí)驗(yàn)結(jié)果表明在稀疏性為50%時(shí),Inception V3模型的性能幾乎不變。稀疏性為87.5%時(shí),在ImageNet上的分類指標(biāo)下降為2%。
因此,我們完全可以相信,模型剪枝是有效的而且是必要的,剩下的問題就是怎么去找到冗余的參數(shù)進(jìn)行剪枝。
模型量化技術(shù)概述
1. 什么是模型量化
????????我們知道為了保證較高的精度,大部分的科學(xué)運(yùn)算都是采用浮點(diǎn)型進(jìn)行計(jì)算,常見的是32位浮點(diǎn)型和64位浮點(diǎn)型,即float32和double64。
對(duì)于深度學(xué)習(xí)模型來說,乘加計(jì)算量是非常大的,往往需要GPU等專用的計(jì)算平臺(tái)才能實(shí)現(xiàn)實(shí)時(shí)運(yùn)算,這對(duì)于端上產(chǎn)品來說是不可接受的,而模型量化是一個(gè)有效降低計(jì)算量的方法。
量化,即將網(wǎng)絡(luò)的權(quán)值,激活值等從高精度轉(zhuǎn)化成低精度的操作過程,例如將32位浮點(diǎn)數(shù)轉(zhuǎn)化成8位整型數(shù)int8,同時(shí)我們期望轉(zhuǎn)換后的模型準(zhǔn)確率與轉(zhuǎn)化前相近。
2. 模型量化的優(yōu)勢
模型量化可以帶來幾方面的優(yōu)勢,如下。
(1)?更小的模型尺寸。以8bit量化為例,與32bit浮點(diǎn)數(shù)相比,我們可以將模型的體積降低為原來的四分之一,這對(duì)于模型的存儲(chǔ)和更新來說都更有優(yōu)勢。
(2)?更低的功耗。移動(dòng)8bit數(shù)據(jù)與移動(dòng)32bit浮點(diǎn)型數(shù)據(jù)相比,前者比后者高4倍的效率,而在一定程度上內(nèi)存的使用量與功耗是成正比的。
(3)?更快的計(jì)算速度。相對(duì)于浮點(diǎn)數(shù),大多數(shù)處理器都支持8bit數(shù)據(jù)的更快處理,如果是二值量化,則更有優(yōu)勢。
上圖展示的是一個(gè)二值權(quán)重和激活值矩陣的運(yùn)算,卷積過程中的乘加都可以轉(zhuǎn)換為異或操作,并行程度更高,運(yùn)算速度因此也更快。
因此,在工業(yè)界對(duì)模型量化有著非常強(qiáng)烈的需求。
模型壓縮中知識(shí)蒸餾技術(shù)概述
1. 什么是知識(shí)蒸餾
????????一般地,大模型往往是單個(gè)復(fù)雜網(wǎng)絡(luò)或者是若干網(wǎng)絡(luò)的集合,擁有良好的性能和泛化能力,而小模型因?yàn)榫W(wǎng)絡(luò)規(guī)模較小,表達(dá)能力有限。利用大模型學(xué)習(xí)到的知識(shí)去指導(dǎo)小模型訓(xùn)練,使得小模型具有與大模型相當(dāng)?shù)男阅?,但是參?shù)數(shù)量大幅降低,從而可以實(shí)現(xiàn)模型壓縮與加速,就是知識(shí)蒸餾與遷移學(xué)習(xí)在模型優(yōu)化中的應(yīng)用。
????????Hinton等人最早在文章“Distilling the knowledge in a neural network”[1]中提出了知識(shí)蒸餾這個(gè)概念,其核心思想是一旦復(fù)雜網(wǎng)絡(luò)模型訓(xùn)練完成,便可以用另一種訓(xùn)練方法從復(fù)雜模型中提取出來更小的模型,因此知識(shí)蒸餾框架通常包含了一個(gè)大模型(被稱為teacher模型),和一個(gè)小模型(被稱為student模型)。
2.?為什么要進(jìn)行知識(shí)蒸餾
????????以計(jì)算機(jī)視覺模型的訓(xùn)練為例,我們經(jīng)常用在ImageNet上訓(xùn)練的模型作為預(yù)訓(xùn)練模型,之所以可以這樣做,是因?yàn)樯疃葘W(xué)習(xí)模型在網(wǎng)絡(luò)淺層學(xué)習(xí)的知識(shí)是圖像的色彩和邊緣等底層信息,某一個(gè)數(shù)據(jù)集學(xué)習(xí)到的信息也可以應(yīng)用于其他領(lǐng)域。
那實(shí)際上知識(shí)蒸餾或者說遷移學(xué)習(xí)的必要性在哪里?
(1)?數(shù)據(jù)分布差異。深度學(xué)習(xí)模型的訓(xùn)練場景和測試場景往往有分布差異,以自動(dòng)駕駛領(lǐng)域?yàn)槔蟛糠謹(jǐn)?shù)據(jù)集的采集都是基于白天,光照良好的天氣條件下,在這樣的數(shù)據(jù)集上訓(xùn)練的模型,當(dāng)將其用于黑夜,風(fēng)雪等場景時(shí),很有可能會(huì)無法正常工作,從而使得模型的實(shí)用性能非常受限。因此,必須考慮模型從源域到目標(biāo)域的遷移能力。
(2)?受限的數(shù)據(jù)規(guī)模。數(shù)據(jù)的標(biāo)注成本是非常高的,導(dǎo)致很多任務(wù)只能用少量的標(biāo)注進(jìn)行模型的訓(xùn)練。以醫(yī)學(xué)領(lǐng)域?yàn)榈湫痛?,?shù)據(jù)集的規(guī)模并不大,因此在真正專用的模型訓(xùn)練之前往往需要先在通用任務(wù)上進(jìn)行預(yù)訓(xùn)練。
(3)?通用與垂直領(lǐng)域。雖然我們可以訓(xùn)練許多通用的模型,但是真實(shí)需求是非常垂直或者說個(gè)性化的,比如ImageNet存在1000類,但是我們可能只需要用到其中若干類。此時(shí)就可以基于1000類ImageNet模型進(jìn)行知識(shí)遷移,而不需要完全從頭開始訓(xùn)練。文章來源:http://www.zghlxwxcb.cn/news/detail-818284.html
因此,在工業(yè)界對(duì)知識(shí)蒸餾和遷移學(xué)習(xí)也有著非常強(qiáng)烈的需求。文章來源地址http://www.zghlxwxcb.cn/news/detail-818284.html
到了這里,關(guān)于【深度學(xué)習(xí)之模型優(yōu)化】模型剪枝、模型量化、知識(shí)蒸餾概述的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!