目前在深度學(xué)習(xí)領(lǐng)域分類兩個(gè)派別,一派為學(xué)院派,研究強(qiáng)大、復(fù)雜的模型網(wǎng)絡(luò)和實(shí)驗(yàn)方法,為了追求更高的性能;另一派為工程派,旨在將算法更穩(wěn)定、高效的落地在硬件平臺(tái)上,效率是其追求的目標(biāo)。復(fù)雜的模型固然具有更好的性能,但是高額的存儲(chǔ)空間、計(jì)算資源消耗是使其難以有效的應(yīng)用在各硬件平臺(tái)上的重要原因。所以,卷積神經(jīng)網(wǎng)絡(luò)日益增長的深度和尺寸為深度學(xué)習(xí)在移動(dòng)端的部署帶來了巨大的挑戰(zhàn),深度學(xué)習(xí)模型壓縮與加速成為了學(xué)術(shù)界和工業(yè)界都重點(diǎn)關(guān)注的研究領(lǐng)域之一。本文主要介紹深度學(xué)習(xí)模型壓縮和加速算法的三個(gè)方向,分別為加速網(wǎng)絡(luò)結(jié)構(gòu)設(shè)計(jì)、模型裁剪與稀疏化、量化加速。
I. 加速網(wǎng)絡(luò)設(shè)計(jì)
分組卷積
分組卷積即將輸入的feature maps分成不同的組(沿channel維度進(jìn)行分組),然后對不同的組分別進(jìn)行卷積操作,即每一個(gè)卷積核至于輸入的feature maps的其中一組進(jìn)行連接,而普通的卷積操作是與所有的feature maps進(jìn)行連接計(jì)算。分組數(shù)k越多,卷積操作的總參數(shù)量和總計(jì)算量就越少(減少k倍)。然而分組卷積有一個(gè)致命的缺點(diǎn)就是不同分組的通道間減少了信息流通,即輸出的feature maps只考慮了輸入特征的部分信息,因此在實(shí)際應(yīng)用的時(shí)候會(huì)在分組卷積之后進(jìn)行信息融合操作,接下來主要講兩個(gè)比較經(jīng)典的結(jié)構(gòu),ShuffleNet[1]和MobileNet[2]結(jié)構(gòu)。
1) ShuffleNet結(jié)構(gòu):
如上圖所示,圖a是一般的group convolution的實(shí)現(xiàn)效果,其造成的問題是,輸出通道只和輸入的某些通道有關(guān),導(dǎo)致全局信息 流通不暢,網(wǎng)絡(luò)表達(dá)能力不足。圖b就是shufflenet結(jié)構(gòu),即通過均勻排列,把group convolution后的feature map按通道進(jìn)行均勻混合,這樣就可以更好的獲取全局信息了。圖c是操作后的等價(jià)效果圖。在分組卷積的時(shí)候,每一個(gè)卷積核操作的通道數(shù)減少,所以可以大量減少計(jì)算量。
2)MobileNet結(jié)構(gòu):
如上圖所示,mobilenet采用了depthwise separable convolutions的思想,采用depthwise (或叫channelwise)和1x1 pointwise的方法進(jìn)行分解卷積。其中depthwise separable convolutions即對每一個(gè)通道進(jìn)行卷積操作,可以看成是每組只有一個(gè)通道的分組卷積,最后使用開銷較小的1x1卷積進(jìn)行通道融合,可以大大減少計(jì)算量。
分解卷積
分解卷積,即將普通的kxk卷積分解為kx1和1xk卷積,通過這種方式可以在感受野相同的時(shí)候大量減少計(jì)算量,同時(shí)也減少了參數(shù)量,在某種程度上可以看成是使用2k個(gè)參數(shù)模擬k*k個(gè)參數(shù)的卷積效果,從而造成網(wǎng)絡(luò)的容量減小,但是可以在較少損失精度的前提下,達(dá)到網(wǎng)絡(luò)加速的效果。
右圖是在圖像語義分割任務(wù)上取得非常好的效果的ERFNet[3]的主要模塊,稱為NonBottleNeck結(jié)構(gòu)借鑒自ResNet[4]中的Non-Bottleneck結(jié)構(gòu),相應(yīng)改進(jìn)為使用分解卷積替換標(biāo)準(zhǔn)卷積,這樣可以減少一定的參數(shù)和計(jì)算量,使網(wǎng)絡(luò)更趨近于efficiency。
Bottleneck結(jié)構(gòu)
右圖為ENet[5]中的Bottleneck結(jié)構(gòu),借鑒自ResNet中的Bottleneck結(jié)構(gòu),主要是通過1x1卷積進(jìn)行降維和升維,能在一定程度上能夠減少計(jì)算量和參數(shù)量。其中1x1卷積操作的參數(shù)量和計(jì)算量少,使用其進(jìn)行網(wǎng)絡(luò)的降維和升維操作(減少或者增加通道數(shù))的開銷比較小,從而能夠達(dá)到網(wǎng)絡(luò)加速的目的。
C.ReLU[7]結(jié)構(gòu)
C.ReLU來源于CNNs中間激活模式引發(fā)的。輸出節(jié)點(diǎn)傾向于是"配對的",一個(gè)節(jié)點(diǎn)激活是另一個(gè)節(jié)點(diǎn)的相反面,即其中一半通道的特征是可以通過另外一半通道的特征生成的。根據(jù)這個(gè)觀察,C.ReLU減少一半輸出通道(output channels)的數(shù)量,然后通過其中一半通道的特征生成另一半特征,這里使用 negation使其變成雙倍,最后通過scale操作使得每個(gè)channel(通道)的斜率和激活閾值與其相反的channel不同。
SqueezeNet[8]結(jié)構(gòu)
SqueezeNet思想非常簡單,就是將原來簡單的一層conv層變成兩層:squeeze層+expand層,各自帶上Relu激活層。在squeeze層里面全是1x1的卷積kernel,數(shù)量記為S11;在expand層里面有1x1和3x3的卷積kernel,數(shù)量分別記為E11和E33,要求S11 < input map number。expand層之后將 1x1和3x3的卷積output feature maps在channel維度拼接起來。
神經(jīng)網(wǎng)絡(luò)搜索[18]
神經(jīng)結(jié)構(gòu)搜索(Neural Architecture Search,簡稱NAS)是一種自動(dòng)設(shè)計(jì)神經(jīng)網(wǎng)絡(luò)的技術(shù),可以通過算法根據(jù)樣本集自動(dòng)設(shè)計(jì)出高性能的網(wǎng)絡(luò)結(jié)構(gòu),在某些任務(wù)上甚至可以媲美人類專家的水準(zhǔn),甚至發(fā)現(xiàn)某些人類之前未曾提出的網(wǎng)絡(luò)結(jié)構(gòu),這可以有效的降低神經(jīng)網(wǎng)絡(luò)的使用和實(shí)現(xiàn)成本。
NAS的原理是給定一個(gè)稱為搜索空間的候選神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)集合,用某種策略從中搜索出最優(yōu)網(wǎng)絡(luò)結(jié)構(gòu)。神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)的優(yōu)劣即性能用某些指標(biāo)如精度、速度來度量,稱為性能評估,可以通過NAS自動(dòng)搜索出高效率的網(wǎng)絡(luò)結(jié)構(gòu)。
本節(jié)主要介紹了模型模型設(shè)計(jì)的思路,同時(shí)對模型的加速設(shè)計(jì)以及相關(guān)缺陷進(jìn)行分析??偟膩碚f,加速網(wǎng)絡(luò)模型設(shè)計(jì)主要是探索最優(yōu)的網(wǎng)絡(luò)結(jié)構(gòu),使得較少的參數(shù)量和計(jì)算量就能達(dá)到類似的效果。
-
模型
+關(guān)注
關(guān)注
1文章
3521瀏覽量
50425 -
深度學(xué)習(xí)
+關(guān)注
關(guān)注
73文章
5561瀏覽量
122794
原文標(biāo)題:深度學(xué)習(xí)模型壓縮與加速綜述
文章出處:【微信號(hào):Imgtec,微信公眾號(hào):Imagination Tech】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
大模型推理顯存和計(jì)算量估計(jì)方法研究
大模型時(shí)代的深度學(xué)習(xí)框架

在OpenVINO?工具套件的深度學(xué)習(xí)工作臺(tái)中無法導(dǎo)出INT8模型怎么解決?
Flexus X 實(shí)例 ultralytics 模型 yolov10 深度學(xué)習(xí) AI 部署與應(yīng)用

高效大模型的推理綜述

評論