深度學(xué)習(xí)在廣泛應(yīng)用于目標(biāo)檢測、分類等計(jì)算機(jī)視覺任務(wù)中。但這些應(yīng)用往往需要很大的計(jì)算量和能耗。例如處理一張圖片分類,VGG-16需要做 150億次計(jì)算,而YOLOv3需要執(zhí)行390億次計(jì)算。
這就帶來一個問題,如何在低功耗的嵌入式系統(tǒng)或移動設(shè)備中部署深度學(xué)習(xí)呢?一種解決辦法是將計(jì)算任務(wù)轉(zhuǎn)移到云側(cè),但這并不能最終解決問題,因?yàn)樵S多深度學(xué)習(xí)應(yīng)用程序需要在端側(cè)進(jìn)行計(jì)算,例如部署在無人機(jī)(通常會在斷網(wǎng)情況下工作)或衛(wèi)星上的應(yīng)用。
從2016年起,業(yè)界便開始探索模型加速和小型化的研究,也提出了大量小型化方案。這些技術(shù)可以消除 DNNs 中的冗余,可將計(jì)算量減少75%以上,推理時(shí)間減少50%以上,而同時(shí)能夠保證精度無損。但要想大規(guī)模地在端側(cè)部署DNNs模型,仍然還需要繼續(xù)優(yōu)化。
欲砥礪前行,還需要看下當(dāng)前情況下低功耗計(jì)算機(jī)視覺的研究進(jìn)展如何。普渡大學(xué)的Abhinav Goel 等人近日針對這一領(lǐng)域的研究進(jìn)展做了值得參照的綜述。
在這篇文章中,Goel等人將低功耗推理方法分為四類,分別為:
1、參數(shù)量化和剪枝:通過減少用于存儲DNN模型參數(shù)的比特?cái)?shù)來降低內(nèi)存和計(jì)算成本。
2、壓縮卷積濾波器和矩陣分解:將大的DNN層分解成更小的層,以減少內(nèi)存需求和冗余矩陣運(yùn)算的數(shù)量。
3、網(wǎng)絡(luò)架構(gòu)搜索:自動構(gòu)建具有不同層次組合的DNN,從而找到期望性能的DNN架構(gòu)。
4、知識遷移與蒸餾:訓(xùn)練一個緊湊的DNN,來模仿一個計(jì)算量更大的DNN的輸出、特征和激活。
這四種方法的介紹和優(yōu)缺點(diǎn)如下圖總結(jié):
Goel等人的這篇綜述除了對這些方法進(jìn)行優(yōu)缺點(diǎn)總結(jié)外,更提出了一些可能的改進(jìn)措施,同事還提出了一套評估指標(biāo)以便指導(dǎo)未來的研究。
一、參數(shù)量化和剪枝
內(nèi)存訪問對DNNs的能量消耗有重要影響。為了構(gòu)建低功耗的DNNs,一個策略便是在性能和內(nèi)存訪問次數(shù)之間進(jìn)行權(quán)衡。針對這一策略,目前有兩種方法,一種是進(jìn)行參數(shù)量化,即降低DNN參數(shù)的大小;另一種則是剪枝,從DNNs中刪除不重要的參數(shù)和連接。
1、參數(shù)量化
有研究表明(Courbariaux et. al.)以不同位寬定點(diǎn)格式存儲的參數(shù)進(jìn)行訓(xùn)練,歲參數(shù)位寬減小,盡管測試誤差有些微的增大(這種誤差的變化幾乎可以忽略不計(jì)),但能耗卻能夠大幅降低。如下圖所示:
基于這種奠定性的研究,于是出現(xiàn)大量工作(例如LightNN、CompactNet、FLightNN等),它們在給定精度約束的情況下,嘗試為DNN的參數(shù)尋找最佳位寬。甚至Courbariaux、Rastegari等人提出了二值化的神經(jīng)網(wǎng)絡(luò)。
為了進(jìn)一步降低DNNs的內(nèi)存需求,目前常采用的是參數(shù)量化和模型壓縮結(jié)合的方法。例如Han等人首先將參數(shù)量化到離散的bin中,然后使用Huffman編碼來壓縮這些bin,從而使模型大小減少89%,而精度卻基本不受影響。類似的,HashedNet會將DNN的連接量化到散列 bucket 中,這樣散列到同一個bucket的連接就會共享同一個參數(shù)。不過這種方法需要很高的訓(xùn)練成本,因此它們的應(yīng)用是有局限的。
優(yōu)點(diǎn):當(dāng)參數(shù)的位寬減小時(shí),DNNs的性能基本保持不變。這主要是因?yàn)榧s束參數(shù)在訓(xùn)練過程中具有正則化的效果。
缺點(diǎn)及改進(jìn)方向:1)使用量化技術(shù)的DNNs,往往需要進(jìn)行多次再訓(xùn)練,這使得訓(xùn)練耗能非常大,因此如何降低訓(xùn)練成本是這種技術(shù)必須要考慮的;2)DNNs中不同層對特征的敏感性是不同的,如果所有層的位寬都一樣,就會導(dǎo)致性能變差,因此如何為每個連接層選擇不同精度的參數(shù)是提升性能的關(guān)鍵一步,這可以在訓(xùn)練過程中進(jìn)行學(xué)習(xí)。
2、剪枝
從DNNs中刪除不重要的參數(shù)和連接可以減少內(nèi)存訪問次數(shù)。
Hessian加權(quán)變形測量法(Hessian-weighted distortion measure)可以對DNN中參數(shù)的重要性進(jìn)行評估,從而來去掉那些冗余參數(shù),減小DNN模型大小,但這種基于測量的剪枝方法僅適用于全連接層。
為了將剪枝擴(kuò)展到卷積層,許多學(xué)者各顯神通。Anwar等人提出了粒子濾波的方法;Polyak等人將樣本輸入數(shù)據(jù),并剪掉哪些稀疏激活的連接;Han等人使用一種新的損失函數(shù)來學(xué)習(xí)DNN中的參數(shù)和連接;Yu等人使用一種傳播重要性分?jǐn)?shù)的算法來測量每個參數(shù)相對于輸出的重要性。
也有人試圖將剪枝、量化和壓縮同時(shí)應(yīng)用到模型當(dāng)中,將模型大小減小了95%。
圖示:不同DNN的模型壓縮率。其中P: Pruning, Q: Quantization, C: Compression.
優(yōu)點(diǎn):如上表所示,剪枝可以和量化、編碼相結(jié)合,從而能夠獲得更加顯著的性能收益。例如當(dāng)三者一同使用時(shí),VGG-16的大小能夠降低到原來大小的2%。此外,剪枝能夠減少DNN模型的復(fù)雜性,從而減少了過度擬合的情況。
缺點(diǎn)及改進(jìn)方向:同樣,剪枝也會帶來訓(xùn)練時(shí)間的增加。如上表,同時(shí)使用剪枝和量化,訓(xùn)練時(shí)間增加了600%;如果使用稀疏約束對DNN進(jìn)行剪枝時(shí),這個問題會更加嚴(yán)重。此外,剪枝的優(yōu)點(diǎn),只有當(dāng)使用自定義硬件或用于稀疏矩陣的特殊數(shù)據(jù)結(jié)構(gòu)時(shí)才會顯現(xiàn)出來。因此相比于現(xiàn)在的連接剪枝技術(shù),Channel級的剪枝可能是一個改進(jìn)方向,因?yàn)樗恍枰魏翁厥獾臄?shù)據(jù)結(jié)構(gòu),也不會產(chǎn)生矩陣稀疏。
二、壓縮卷積濾波器和矩陣分解
在DNNs中卷積操作占了很大一部分,以AlexNet為例,其中的全連接層占了近89%的參數(shù)。因此若想降低DNNs的功耗,應(yīng)當(dāng)減少卷積層的計(jì)算量和全連接層的參數(shù)量。這也有兩個技術(shù)方向,分別為:1)采用更小的卷積濾波器;2)將矩陣分解為參數(shù)量更小的矩陣。
1、壓縮卷積濾波器
與較大的濾波器相比,較小的卷積濾波器具有更少的參數(shù),計(jì)算成本也較低。
但如果將所有大的卷積層都替換掉,會影響DNN的平移不變形,這將降低DNN模型的精度。因此有人嘗試去識別那些冗余的濾波器,并用較小的濾波器將它們替換掉。SqueezeNet正是這樣一種技術(shù),它使用了三種策略來將 3×3 的卷積轉(zhuǎn)換成 1 × 1 卷積。
如上圖所示,相比于AlexNet,SqueezeNet減少了98%的參數(shù)(當(dāng)然操作數(shù)稍微變多了一些),而性能卻并沒有受到影響。
MobileNets 在瓶頸層(bottleneck layers )使用深度可分離卷積,來減少計(jì)算、延遲和參數(shù)量。在使用深度可分離卷積(epthwise separable convolutions)時(shí),通過保持較小的特征尺寸,并只擴(kuò)展到較大的特征空間,從而實(shí)現(xiàn)了較高的精度。
優(yōu)點(diǎn):瓶頸卷積濾波器大大降低了DNNs的內(nèi)存和延遲需求。對于大多數(shù)計(jì)算機(jī)視覺任務(wù),這些方法能夠獲得SOTA性能。濾波壓縮與剪枝和量化技術(shù)正交(互不影響),因此這三種技術(shù)可以一起使用,從而進(jìn)一步降低能耗。
缺點(diǎn)及改進(jìn)方向:已經(jīng)證明 1×1卷積在小型DNN中計(jì)算開銷很大,導(dǎo)致精度較差,這主要是因?yàn)檫\(yùn)算強(qiáng)度太低,無法有效利用硬件。通過對內(nèi)存的有效管理,可以提高深度可分離卷積的運(yùn)算強(qiáng)度;通過優(yōu)化緩存中參數(shù)的空間和時(shí)間局域性,可以減少內(nèi)存訪問次數(shù)。
2、矩陣分解
通過將張量或矩陣分解為合積形式(sum-product form),將多維張量分解為更小的矩陣,從而可以消除冗余計(jì)算。一些因子分解方法可以將DNN模型加速4 倍以上,因?yàn)樗鼈兡軌驅(qū)⒕仃嚪纸鉃楦芗膮?shù)矩陣,且能夠避免非結(jié)構(gòu)化稀疏乘法的局部性問題。
為了最小化精度損失,可以按層進(jìn)行矩陣分解:首先對一層的參數(shù)進(jìn)行因子分解,然后根據(jù)重構(gòu)誤差對后續(xù)的層再進(jìn)行因子分解。但逐層優(yōu)化的方法使得難以將這些方法應(yīng)用到大型的DNN模型中,因?yàn)榉纸獬瑓⒌臄?shù)量會隨著模型深度成指數(shù)增長。Wen等人使用了緊湊的核形狀和深度結(jié)構(gòu)來減少因子分解超參的數(shù)量。
關(guān)于矩陣分解,有多種技術(shù)。Kolda等人證明,大多數(shù)因子分解技術(shù)都可以用來做DNN模型的加速,但這些技術(shù)在精度和計(jì)算復(fù)雜度之間不一定能夠取得最佳的平衡。例如,CPD(典型聚并分解)和BMD(批量歸一化分解)在精度上能夠做的非常好,但Tucker-2分解和奇異值分解的精度就不怎么樣。CPD在壓縮上要比BMD好,但CPD相關(guān)的優(yōu)化問題有時(shí)卻并不可解,這就會導(dǎo)致沒法分解,而BMD的因子分解卻始終存在。
優(yōu)點(diǎn):矩陣分解可以降低DNN的計(jì)算成本,無論在卷積層還是全連接層都可以使用相同的因子分解。
缺點(diǎn)及改進(jìn)方向:由于缺乏理論解釋,因此很難解釋為什么一些分解(例如CPD、BMD)能夠獲得較高的精度,而其他分解卻不能;另外,與矩陣分解相關(guān)的計(jì)算常常與模型獲得的性能增益相當(dāng),造成收益與損耗抵消。此外,矩陣分解很難在大型DNN模型中實(shí)現(xiàn),因?yàn)殡S著深度增加分解超參會呈指數(shù)增長,訓(xùn)練時(shí)間主要耗費(fèi)在尋找正確的分解超參;事實(shí)上,超參不需要從整個空間中進(jìn)行搜索,因此可以在訓(xùn)練時(shí)學(xué)習(xí)如何找到更優(yōu)的搜索空間,從而來加速對大型DNN模型的訓(xùn)練。
三、網(wǎng)絡(luò)架構(gòu)搜索
在設(shè)計(jì)低功耗計(jì)算機(jī)視覺程序時(shí),針對不同的任務(wù)可能需要不同的DNN模型架構(gòu)。但由于存在許多這種結(jié)構(gòu)上的可能性,通過手工去設(shè)計(jì)一個最佳DNN模型往往是困難的。最好的辦法就是將這個過程自動化,即網(wǎng)絡(luò)架構(gòu)搜索技術(shù)(Network Architecture Search)。
NAS使用一個遞歸神經(jīng)網(wǎng)絡(luò)(RNN)作為控制器,并使用增強(qiáng)學(xué)習(xí)來構(gòu)建候選的DNN架構(gòu)。對這些候選DNN架構(gòu)進(jìn)行訓(xùn)練,然后使用驗(yàn)證集進(jìn)行測試,測試結(jié)果作為獎勵函數(shù),用于優(yōu)化控制器的下一個候選架構(gòu)。
NASNet 和AmoebaNet 證明了NAS的有效性,它們通過架構(gòu)搜索獲得DNN模型能夠獲得SOTA性能。
為了獲得針對移動設(shè)備有效的DNN模型,Tan等人提出了MNasNet,這個模型在控制器中使用了一個多目標(biāo)獎勵函數(shù)。在實(shí)驗(yàn)中,MNasNet 要比NASNet快2.3倍,參數(shù)減少4.8倍,操作減少10倍。此外,MNasNet也比NASNet更準(zhǔn)確。
不過,盡管NAS方法的效果顯著,但大多數(shù)NAS算法的計(jì)算量都非常大。例如,MNasNet需要50,000個GPU 時(shí)才能在ImageNet數(shù)據(jù)集上找到一個高效的DNN架構(gòu)。
為了減少與NAS相關(guān)的計(jì)算成本,一些研究人員建議基于代理任務(wù)和獎勵來搜索候選架構(gòu)。例如在上面的例子中,我們不選用ImageNet,而用更小的數(shù)據(jù)集CIFAR-10。FBNet正是這樣來處理的,其速度是MNasNet的420倍。
但Cai等人表明,在代理任務(wù)上優(yōu)化的DNN架構(gòu)并不能保證在目標(biāo)任務(wù)上是最優(yōu)的,為了克服基于代理的NAS解決方案所帶來的局限性,他們提出了Proxyless-NAS,這種方法會使用路徑級剪枝來減少候選架構(gòu)的數(shù)量,并使用基于梯度的方法來處理延遲等目標(biāo)。他們在300個GPU時(shí)內(nèi)便找到了一個有效的架構(gòu)。此外,一種稱為單路徑NAS(Single-Path NAS)的方法可以將架構(gòu)搜索時(shí)間壓縮到 4 個GPU時(shí)內(nèi),不過這種加速是以降低精度為代價(jià)的。
優(yōu)點(diǎn):NAS通過在所有可能的架構(gòu)空間中進(jìn)行搜索,而不需要任何人工干預(yù),自動平衡準(zhǔn)確性、內(nèi)存和延遲之間的權(quán)衡。NAS能夠在許多移動設(shè)備上實(shí)現(xiàn)準(zhǔn)確性、能耗的最佳性能。
缺點(diǎn)及改進(jìn)方向:計(jì)算量太大,導(dǎo)致很難去搜索大型數(shù)據(jù)集上任務(wù)的架構(gòu)。另外,要想找到滿足性能需求的架構(gòu),必須對每個候選架構(gòu)進(jìn)行訓(xùn)練,并在目標(biāo)設(shè)備上運(yùn)行來生成獎勵函數(shù),這會導(dǎo)致較高的計(jì)算成本。其實(shí),可以將候選DNN在數(shù)據(jù)的不同子集上進(jìn)行并行訓(xùn)練,從而減少訓(xùn)練時(shí)間;從不同數(shù)據(jù)子集得到的梯度可以合并成一個經(jīng)過訓(xùn)練的DNN。不過這種并行訓(xùn)練方法可能會導(dǎo)致較低的準(zhǔn)確性。另一方面,在保持高收斂率的同時(shí),利用自適應(yīng)學(xué)習(xí)率可以提高準(zhǔn)確性。
四、知識遷移和蒸餾
大模型比小模型更準(zhǔn)確,因?yàn)閰?shù)越多,允許學(xué)習(xí)的函數(shù)就可以越復(fù)雜。那么能否用小的模型也學(xué)習(xí)到這樣復(fù)雜的函數(shù)呢?
一種方式便是知識遷移(Knowledge Transfer),通過將大的DNN模型獲得的知識遷移到小的DNN模型上。為了學(xué)習(xí)復(fù)雜函數(shù),小的DNN模型會在大的DNN模型標(biāo)記處的數(shù)據(jù)上進(jìn)行訓(xùn)練。其背后的思想是,大的DNN標(biāo)記的數(shù)據(jù)會包含大量對小的DNN有用的信息。例如大的DNN模型對一個輸入圖像在一些類標(biāo)簽上輸出中高概率,那么這可能意味著這些類共享一些共同的視覺特征;對于小的DNN模型,如果去模擬這些概率,相比于直接從數(shù)據(jù)中學(xué)習(xí),要能夠?qū)W到更多。
另一種技術(shù)是Hinton老爺子在2014年提出的知識蒸餾(Knowledge Distillation),這種方法的訓(xùn)練過程相比于知識遷移要簡單得多。在知識蒸餾中,小的DNN模型使用學(xué)生-教師模式進(jìn)行訓(xùn)練,其中小的DNN模型是學(xué)生,一組專門的DNN模型是教師;通過訓(xùn)練學(xué)生,讓它模仿教師的輸出,小的DNN模型可以完成整體的任務(wù)。但在Hinton的工作中,小的DNN模型的準(zhǔn)確度卻相應(yīng)有些下降。Li等人利用最小化教師與學(xué)生之間特征向量的歐氏距離,進(jìn)一步提高的小的DNN模型的精度。類似的,F(xiàn)itNet讓學(xué)生模型中的每一層都來模仿教師的特征圖。但以上兩種方法都要求對學(xué)生模型的結(jié)構(gòu)做出嚴(yán)格的假設(shè),其泛化性較差。為了解決這一問題,Peng等人使用了指標(biāo)間的相關(guān)性作為優(yōu)化問題。
優(yōu)點(diǎn):基于知識遷移和知識蒸餾的技術(shù)可以顯著降低大型預(yù)訓(xùn)練模型的計(jì)算成本。有研究表明,知識蒸餾的方法不僅可以在計(jì)算機(jī)視覺中應(yīng)用,還能用到許多例如半監(jiān)督學(xué)習(xí)、域自適應(yīng)等任務(wù)中。
缺點(diǎn)及改進(jìn)方向:知識蒸餾通常對學(xué)生和教師的結(jié)構(gòu)和規(guī)模有嚴(yán)格的假設(shè),因此很難推廣到所有的應(yīng)用中。此外目前的知識蒸餾技術(shù)嚴(yán)重依賴于softmax輸出,不能與不同的輸出層協(xié)同工作。作為改進(jìn)方向,學(xué)生可以學(xué)習(xí)教師模型的神經(jīng)元激活序列,而不是僅僅模仿教師的神經(jīng)元/層輸出,這能夠消除對學(xué)生和教師結(jié)構(gòu)的限制(提高泛化能力),并減少對softmax輸出層的依賴。
五、討論
事實(shí)上,沒有任何一種技術(shù)能夠構(gòu)建出最有效的DNN模型,以上提到的大多數(shù)技術(shù)是互補(bǔ)的,可以同時(shí)來使用,從而降低能耗、減小模型,并提高精度。基于對上述內(nèi)容的分析,作者在文章最后提煉出5個結(jié)論:
1)量化和降低參數(shù)精度可以顯著降低模型的大小和算術(shù)運(yùn)算的復(fù)雜度,但大多數(shù)機(jī)器學(xué)習(xí)庫很難手工實(shí)現(xiàn)量化。英偉達(dá)的TensorRT庫為這種優(yōu)化提供了一個接口。
2)在優(yōu)化大型預(yù)訓(xùn)練DNN時(shí),剪枝和模型壓縮是有效的選擇。
3)當(dāng)從零開始訓(xùn)練一個新的DNN模型時(shí),應(yīng)該使用壓縮卷積濾波器和矩陣分解來減少模型的大小和計(jì)算量。
4)NAS可以用來尋找針對單個設(shè)備的最優(yōu)DNN模型。具有多個分支的DNN(如Proxyless-NAS, MNasNet等)常需要昂貴的內(nèi)核啟動以及 GPU、CPU同步。
5)知識蒸餾能夠應(yīng)用到中小型數(shù)據(jù)集,因?yàn)檫@對學(xué)生和教師的DNN架構(gòu)要求的假設(shè)較少,能夠有更高的準(zhǔn)確性。
責(zé)任編輯:gt
-
嵌入式
+關(guān)注
關(guān)注
5094文章
19183瀏覽量
307803 -
計(jì)算機(jī)
+關(guān)注
關(guān)注
19文章
7544瀏覽量
88669 -
低功耗
+關(guān)注
關(guān)注
10文章
2419瀏覽量
103902
發(fā)布評論請先 登錄
相關(guān)推薦
計(jì)算機(jī)視覺有哪些優(yōu)缺點(diǎn)
計(jì)算機(jī)視覺技術(shù)的AI算法模型
機(jī)器視覺和計(jì)算機(jī)視覺有什么區(qū)別
計(jì)算機(jī)視覺的工作原理和應(yīng)用
機(jī)器人視覺與計(jì)算機(jī)視覺的區(qū)別與聯(lián)系
計(jì)算機(jī)視覺與人工智能的關(guān)系是什么
計(jì)算機(jī)視覺與智能感知是干嘛的
計(jì)算機(jī)視覺和機(jī)器視覺區(qū)別在哪
計(jì)算機(jī)視覺和圖像處理的區(qū)別和聯(lián)系
計(jì)算機(jī)視覺屬于人工智能嗎
機(jī)器視覺控制的優(yōu)缺點(diǎn)有哪些
人臉檢測的五種方法各有什么特征和優(yōu)缺點(diǎn)
深度學(xué)習(xí)在計(jì)算機(jī)視覺領(lǐng)域的應(yīng)用
計(jì)算機(jī)視覺的主要研究方向
計(jì)算機(jī)視覺的十大算法
![<b class='flag-5'>計(jì)算機(jī)</b><b class='flag-5'>視覺</b>的十大算法](https://file.elecfans.com/web2/M00/4E/DC/poYBAGLCjeiALm_WAAAYmfR7Qec474.png)
評論