問(wèn)安全的關(guān)鍵.png)
使用這些基本 REST API 最佳實(shí)踐構(gòu)建出色的 API
深度神經(jīng)網(wǎng)絡(luò)剪枝是其中一種神經(jīng)網(wǎng)絡(luò)壓縮技術(shù),深度學(xué)習(xí)模型中一般存在著大量冗余的參數(shù),通過(guò)將權(quán)重矩陣中相對(duì)“不重要”的權(quán)值剔除,以減少神經(jīng)網(wǎng)絡(luò)中的冗余參數(shù)和結(jié)構(gòu),從而減小模型的大小和計(jì)算量,提高模型的推理速度和存儲(chǔ)效率。
本文主要圍繞深度神經(jīng)網(wǎng)絡(luò)剪枝的三個(gè)關(guān)鍵問(wèn)題展開(kāi)敘述:
加速是否取決于特定的硬件/軟件。它通常分為三類(lèi):非結(jié)構(gòu)化,半結(jié)構(gòu)化(也稱(chēng)為基于模式的)和結(jié)構(gòu)化。只有結(jié)構(gòu)化剪枝才能實(shí)現(xiàn)通用的神經(jīng)網(wǎng)絡(luò)加速和壓縮,而無(wú)需特殊硬件或軟件的支持。相反,非結(jié)構(gòu)化和半結(jié)構(gòu)化剪枝都需要特殊硬件或軟件的支持。
非結(jié)構(gòu)化剪枝是一種特定的加速技術(shù),可以用于減小神經(jīng)網(wǎng)絡(luò)的大小,也稱(chēng)為非結(jié)構(gòu)化剪枝或權(quán)重剪枝,如圖1所示。它涉及根據(jù)權(quán)重的大小或重要性來(lái)移除神經(jīng)網(wǎng)絡(luò)中的單個(gè)權(quán)重。這種方法可以實(shí)現(xiàn)高剪枝率,對(duì)精度影響較小,但可能會(huì)導(dǎo)致不規(guī)則的稀疏模式,這對(duì)硬件加速來(lái)說(shuō)是挑戰(zhàn)。總的來(lái)說(shuō),非結(jié)構(gòu)化剪枝是一種精細(xì)的剪枝方法,可以用于神經(jīng)網(wǎng)絡(luò)中特定的加速。
圖1 非結(jié)構(gòu)化剪枝的可視化。淺橙色圓圈表示神經(jīng)元。
結(jié)構(gòu)化剪枝是一種從神經(jīng)網(wǎng)絡(luò)中刪除整塊濾波器、通道、神經(jīng)元甚至整個(gè)層級(jí)(如圖2(b)所示)的剪枝方法,也被稱(chēng)為組剪枝或塊剪枝,它能對(duì)剪枝后的模型重新構(gòu)造具有規(guī)律結(jié)構(gòu)的緊湊模型,并不需要使用稀疏卷積庫(kù)等專(zhuān)門(mén)的硬件和軟件。而且結(jié)構(gòu)化剪枝可以間接的加速神經(jīng)網(wǎng)絡(luò)的運(yùn)算,減少網(wǎng)絡(luò)參數(shù)量。此外,濾波器和通道剪枝等效,因?yàn)樵诘趇層剪枝濾波器等效于在第i+1層剪枝相應(yīng)的通道(如圖2(a)所示)
圖2 結(jié)構(gòu)化和半結(jié)構(gòu)化剪枝的可視化圖示,其中每個(gè)Conv由特定數(shù)量的小立方體組成,每個(gè)小立方體表示一個(gè)權(quán)重。淺橙色的立方體表示被剪枝的權(quán)重。
半結(jié)構(gòu)化剪枝是一種介于結(jié)構(gòu)化剪枝和非結(jié)構(gòu)化剪枝之間的剪枝方法,可以同時(shí)實(shí)現(xiàn)高精度和結(jié)構(gòu)正則化,如圖2(c)。半結(jié)構(gòu)化剪枝通?;谔囟ǖ哪J竭M(jìn)行剪枝,這些模式可以是任意的,但需要經(jīng)過(guò)精心設(shè)計(jì)以減輕性能下降并實(shí)現(xiàn)特定的加速效果。半結(jié)構(gòu)化剪枝可以被視為一種細(xì)粒度的結(jié)構(gòu)化剪枝方法,因?yàn)樗鼉H僅移除了一部分的權(quán)重,而不是整個(gè)通道、濾波器或神經(jīng)元。半結(jié)構(gòu)化剪枝的一些例子包括基于模式的剪枝和條紋剪枝。半結(jié)構(gòu)化剪枝可以與其他剪枝方法結(jié)合使用,以進(jìn)一步減小神經(jīng)網(wǎng)絡(luò)的大小和復(fù)雜度。
具體來(lái)說(shuō),是在訓(xùn)練網(wǎng)絡(luò)之前、期間還是之后進(jìn)行靜態(tài)剪枝還是動(dòng)態(tài)(即運(yùn)行時(shí))剪枝?
這個(gè)問(wèn)題涉及了神經(jīng)網(wǎng)絡(luò)中剪枝權(quán)重和訓(xùn)練權(quán)重的排列安排,以便進(jìn)行靜態(tài)剪枝。根據(jù)剪枝是在訓(xùn)練前、訓(xùn)練期間還是訓(xùn)練后進(jìn)行,可以將靜態(tài)剪枝安排分為三類(lèi):訓(xùn)練前剪枝(PBT)、訓(xùn)練中剪枝(PDT)和訓(xùn)練后剪枝(PAT),三種靜態(tài)剪枝流程的示例如圖3所示。在動(dòng)態(tài)剪枝中,針對(duì)每個(gè)輸入數(shù)據(jù)點(diǎn)在運(yùn)行時(shí)生成子網(wǎng)絡(luò)。
圖3 PBT、PDT和PAT的典型稀疏性變化示意圖(請(qǐng)以彩色和放大最佳查看)。PBT通常最便宜,PAT最昂貴。
在訓(xùn)練神經(jīng)網(wǎng)絡(luò)之前,可以通過(guò)對(duì)初始權(quán)重進(jìn)行剪枝來(lái)減少網(wǎng)絡(luò)的計(jì)算量和存儲(chǔ)需求。這種方法稱(chēng)為訓(xùn)練前剪枝(Pruning Before Training,PBT),是一種靜態(tài)剪枝方法,也稱(chēng)為預(yù)先剪枝或初始化剪枝??梢栽诓挥绊懢W(wǎng)絡(luò)性能的情況下減少訓(xùn)練時(shí)間和資源消耗。
PBT通常遵循兩步階段:先根據(jù)特定準(zhǔn)則直接剪枝未訓(xùn)練的密集網(wǎng)絡(luò),再訓(xùn)練稀疏網(wǎng)絡(luò)至收斂以實(shí)現(xiàn)高性能,如圖4(a)所示;第二階段涉及靜態(tài)稀疏訓(xùn)練,旨在訓(xùn)練固定稀疏模式的稀疏網(wǎng)絡(luò)。PBT 方法在訓(xùn)練和推理時(shí)間上帶來(lái)了相同的收益。
在訓(xùn)練過(guò)程中,可以通過(guò)定期剪枝來(lái)減少網(wǎng)絡(luò)的計(jì)算量和存儲(chǔ)需求,可以在訓(xùn)練過(guò)程中逐步減少網(wǎng)絡(luò)的大小,從而減少訓(xùn)練時(shí)間和資源消耗。這種方法稱(chēng)為訓(xùn)練中剪枝(Pruning During Training ,PDT),經(jīng)典流程如圖4(b)所示,其中虛線(xiàn)箭頭表示的過(guò)程是可選的。常見(jiàn)的PDT方法有(1)基于稀疏正則化;(2)基于動(dòng)態(tài)稀疏訓(xùn)練;(3)基于得分。與(1)或(3)相關(guān)的方法采用從密集到稀疏的訓(xùn)練,而與(2)相關(guān)的方法則采用從稀疏到稀疏的訓(xùn)練。基于稀疏正則化的方法:通常在訓(xùn)練期間對(duì)損失函數(shù)應(yīng)用稀疏約束,并且通常涉及在訓(xùn)練期間將某些權(quán)重或其掩碼設(shè)置為零。主要挑戰(zhàn)是設(shè)計(jì)一個(gè)有效的目標(biāo)損失函數(shù) L,具有先進(jìn)的懲罰方案和高效的優(yōu)化算法。包括結(jié)構(gòu)化稀疏學(xué)習(xí)(SSL)和MorphNet。基于動(dòng)態(tài)稀疏訓(xùn)練的方法:以隨機(jī)初始化的稀疏網(wǎng)絡(luò)而不是密集網(wǎng)絡(luò)作為輸入模型,并在訓(xùn)練過(guò)程中反復(fù)剪枝和重新增長(zhǎng)權(quán)重以搜索更好的稀疏架構(gòu)。包括 ThiNet、軟過(guò)濾剪枝和動(dòng)態(tài)網(wǎng)絡(luò)手術(shù)。
基于評(píng)分的方法:這些方法利用評(píng)分標(biāo)準(zhǔn)在訓(xùn)練期間進(jìn)行剪枝。包括軟濾波器剪枝(SFP),使用每個(gè)濾波器的l2范數(shù)作為其重要性得分,并直接將剪枝后的濾波器權(quán)重設(shè)置為零。
訓(xùn)練后剪枝(Pruning After Training,PAT)通過(guò)移除對(duì)模型性能影響較小的權(quán)重和神經(jīng)元,以減小模型大小和計(jì)算復(fù)雜度,從而提高推理速度和降低內(nèi)存占用。這種方法可以在保持模型性能的同時(shí),顯著降低模型部署和運(yùn)行成本。這類(lèi)剪枝方法通常遵循預(yù)剪枝過(guò)程,如圖4(c)所示。在剪枝過(guò)程中,稀疏度逐漸增加,直至達(dá)到目標(biāo)。
彩票假設(shè)(LTH):是神經(jīng)網(wǎng)絡(luò)剪枝領(lǐng)域中具有影響力的假設(shè)之一。它給定預(yù)訓(xùn)練神經(jīng)網(wǎng)絡(luò),基于權(quán)重幅度,迭代移除一定比例的權(quán)重,剪枝后剩余權(quán)重用原始初始化參數(shù)重新訓(xùn)練,以保持原始網(wǎng)絡(luò)準(zhǔn)確性。該假設(shè)挑戰(zhàn)預(yù)先訓(xùn)練的權(quán)重必須用于重新訓(xùn)練的觀(guān)念,推測(cè)稠密網(wǎng)絡(luò)中存在可獨(dú)立訓(xùn)練的稀疏子網(wǎng)絡(luò)。
其他基于分?jǐn)?shù)的方法:選取剪枝候選的最直接方法是基于它們的范數(shù)進(jìn)行評(píng)估。例如,權(quán)重絕對(duì)值的和被用于評(píng)估每個(gè)濾波器的重要性。除了基于范數(shù)的標(biāo)準(zhǔn),評(píng)估有/無(wú)權(quán)重時(shí)的損失變化也很流行。歧視感知通道剪枝(DCP)通過(guò)聯(lián)合損失來(lái)選擇最具鑒別力的通道。許多作品在每個(gè)層內(nèi)對(duì)權(quán)重的重要性進(jìn)行局部評(píng)估,但局部排名難以決定整體最佳稀疏性。全局學(xué)習(xí)排名(LeGR)和組Fisher剪枝(GFP)是解決這個(gè)問(wèn)題的兩種方法。
基于稀疏正則化的方法:He等人提出了一種兩階段算法,通過(guò)LASSO回歸選擇冗余通道,用未剪枝通道的線(xiàn)性最小二乘法重構(gòu)輸出。ECC通過(guò)雙線(xiàn)性回歸函數(shù)建立能量消耗模型,NPPM訓(xùn)練性能預(yù)測(cè)網(wǎng)絡(luò)以指導(dǎo)子網(wǎng)絡(luò)搜索。Fang等人開(kāi)發(fā)了一種名為DepGraph的方法,用于分析各種網(wǎng)絡(luò)結(jié)構(gòu)的依賴(lài)關(guān)系,并基于稀疏正則化提出結(jié)構(gòu)化剪枝。其他方法結(jié)合基于范數(shù)的準(zhǔn)則和稀疏正則化選擇重要權(quán)重。
早期訓(xùn)練剪枝:此類(lèi)方法不是對(duì)整個(gè)網(wǎng)絡(luò)進(jìn)行完全訓(xùn)練,而是通過(guò)訓(xùn)練一個(gè)網(wǎng)絡(luò)進(jìn)行少量迭代或周期,即f(x; wt),其中t << T來(lái)探索網(wǎng)絡(luò)架構(gòu)。You等人提出早期鳥(niǎo)票(EB)概念,可以在早期訓(xùn)練階段通過(guò)廉價(jià)的訓(xùn)練方案來(lái)識(shí)別獲勝票據(jù),并實(shí)現(xiàn)與密集網(wǎng)絡(luò)類(lèi)似的性能。Chen等人提出早期BERT,該方法在BERT訓(xùn)練的早期階段確定結(jié)構(gòu)化的獲勝票據(jù)。Frankle等人發(fā)現(xiàn),表現(xiàn)出對(duì)SGD噪聲穩(wěn)定的子網(wǎng)絡(luò)能夠在訓(xùn)練早期達(dá)到完全準(zhǔn)確度。
訓(xùn)練后剪枝:最近提出的后訓(xùn)練剪枝方法簡(jiǎn)化了預(yù)訓(xùn)練-剪枝-再訓(xùn)練三步驟,僅需預(yù)訓(xùn)練-剪枝兩步。該方法對(duì)預(yù)訓(xùn)練好的模型進(jìn)行剪枝,無(wú)需重新訓(xùn)練,且精度損失幾乎無(wú)。對(duì)于十億參數(shù)模型,后訓(xùn)練剪枝方法更具吸引力,因?yàn)榧糁笾匦掠?xùn)練成本高昂。Frantar和Alistarh提出了一種非結(jié)構(gòu)化的后訓(xùn)練剪枝方法SparseGPT,可實(shí)現(xiàn)GPT系列模型剪枝至少50%的稀疏性。Kwon等提出一個(gè)針對(duì)Transformer的結(jié)構(gòu)化后訓(xùn)練剪枝框架,包含三個(gè)步驟,可在3分鐘內(nèi)使用GPU對(duì)Transformer進(jìn)行剪枝。
圖4 靜態(tài)剪枝的典型剪枝流程。虛線(xiàn)框表示模型,實(shí)線(xiàn)框表示操作。
標(biāo)準(zhǔn)依賴(lài)于啟發(fā)式公式來(lái)衡量每個(gè)權(quán)重的(或?yàn)V波器、通道等)重要性。常用的剪枝標(biāo)準(zhǔn)包括幅度、范數(shù)、損失變化等。此外,還可以通過(guò)學(xué)習(xí)對(duì)神經(jīng)網(wǎng)絡(luò)進(jìn)行剪枝,例如通過(guò)稀疏性正則化訓(xùn)練或動(dòng)態(tài)稀疏訓(xùn)練等進(jìn)行剪枝等等。無(wú)論是通過(guò)標(biāo)準(zhǔn)還是學(xué)習(xí),剪枝的目標(biāo)都是確定應(yīng)該剪枝的網(wǎng)絡(luò)權(quán)重。
基于幅度的剪枝,是基于幅度剪枝是最早且最流行的用于減少神經(jīng)網(wǎng)絡(luò)隱藏單元數(shù)量的剪枝方法之一。它的核心思想是去除具有最小絕對(duì)值的權(quán)重,這些權(quán)重對(duì)網(wǎng)絡(luò)輸出的影響最小。該標(biāo)準(zhǔn)可以應(yīng)用于非結(jié)構(gòu)化剪枝或結(jié)構(gòu)化剪枝,并且可以與全局/局部、一次/迭代計(jì)劃相結(jié)合。
lp范數(shù),是根據(jù)lp范數(shù)評(píng)估權(quán)重的重要性,lp范數(shù)是權(quán)重在p維空間中大小的度量。它的核心思想是刪除具有最小 lp 范數(shù)的權(quán)重,假設(shè)這些權(quán)重對(duì)網(wǎng)絡(luò)輸出的影響較小。該標(biāo)準(zhǔn)可用于評(píng)估神經(jīng)網(wǎng)絡(luò)的濾波器、通道和其他組件的重要性。
敏感性和/或顯著性,是根據(jù)權(quán)重對(duì)網(wǎng)絡(luò)輸入或輸出的敏感性或顯著性來(lái)評(píng)估權(quán)重的重要性。它的核心思想是刪除不太敏感或不顯著的權(quán)重,這些權(quán)重被認(rèn)為對(duì)網(wǎng)絡(luò)輸出的影響較小。該標(biāo)準(zhǔn)比幅度和范數(shù)標(biāo)準(zhǔn)更復(fù)雜,但對(duì)于某些類(lèi)型的網(wǎng)絡(luò)可能更有效。
損失變化,是通過(guò)測(cè)量移除權(quán)重時(shí)網(wǎng)絡(luò)損失函數(shù)的變化來(lái)評(píng)估權(quán)重的重要性。它的核心思想是刪除對(duì)損失函數(shù)影響最小的權(quán)重,假設(shè)這些權(quán)重對(duì)網(wǎng)絡(luò)輸出的影響較小。該標(biāo)準(zhǔn)可用于評(píng)估神經(jīng)網(wǎng)絡(luò)的濾波器、通道和其他組件的重要性。
基于稀疏性正則化的剪枝,是一種通過(guò)為權(quán)重(或通道、濾波器等)引入縮放因子向量來(lái)學(xué)習(xí)剪枝神經(jīng)網(wǎng)絡(luò)的方法,并且將稀疏性正則化施加于后者,同時(shí)訓(xùn)練網(wǎng)絡(luò)權(quán)重和縮放因子??s放因子的幅度被視為重要分?jǐn)?shù),通過(guò)解決最小化問(wèn)題來(lái)學(xué)習(xí)權(quán)重及其掩碼。這種方法常用于神經(jīng)網(wǎng)絡(luò)剪枝,已被應(yīng)用于各種剪枝技術(shù)中。
基于元學(xué)習(xí)的剪枝,是一種利用元學(xué)習(xí)技術(shù)學(xué)習(xí)剪枝神經(jīng)網(wǎng)絡(luò)的方法。該方法包括訓(xùn)練一個(gè)元網(wǎng)絡(luò)(例如PruningNet)來(lái)預(yù)測(cè)不同剪枝網(wǎng)絡(luò)的權(quán)重。PruningNet接受一個(gè)網(wǎng)絡(luò)編碼向量作為輸入,并輸出剪枝網(wǎng)絡(luò)的權(quán)重。通過(guò)將網(wǎng)絡(luò)編碼輸入到完全訓(xùn)練的PruningNet中,獲得每個(gè)剪枝網(wǎng)絡(luò)的權(quán)重和相應(yīng)的精度。在約束條件下,通過(guò)進(jìn)化搜索找到剪枝網(wǎng)絡(luò)。這種方法已應(yīng)用于各種剪枝技術(shù)中,可以將所學(xué)的剪枝策略應(yīng)用于更大的網(wǎng)絡(luò)。
基于圖神經(jīng)網(wǎng)絡(luò)的剪枝,是一種首次將圖卷積應(yīng)用于模型壓縮的方法。任何網(wǎng)絡(luò)都可以視為圖,GraphPruning設(shè)計(jì)了一個(gè)帶有權(quán)重的圖聚合器,并結(jié)合全連接(FC)層來(lái)生成權(quán)重。該方法在模型壓縮方面已經(jīng)達(dá)到了最先進(jìn)的結(jié)果,并且可以將所學(xué)的剪枝策略轉(zhuǎn)移到更大的網(wǎng)絡(luò)上。
基于強(qiáng)化學(xué)習(xí)的剪枝,是一種利用強(qiáng)化學(xué)習(xí)(RL)自動(dòng)壓縮模型的方法。一些AutoML的剪枝方法采用RL來(lái)搜索剪枝網(wǎng)絡(luò)的最佳配置。例如,He等人提出的用于模型壓縮的AutoML方法(AMC)是基于Q-learning,一種RL,來(lái)確定智能體如何采取行動(dòng)以最大化累積獎(jiǎng)勵(lì)。該方法使用深度確定性策略梯度(DDPG)智能體從環(huán)境中接收層的嵌入狀態(tài),并輸出稀疏性比率作為動(dòng)作。然后,使用特定的壓縮方法,例如通道剪枝方法,對(duì)層進(jìn)行壓縮。之后,智能體移動(dòng)到下一層并重復(fù)該過(guò)程,直到最后一層。這種方法在模型壓縮方面已經(jīng)達(dá)到了最先進(jìn)的結(jié)果。
《A Survey on Deep Neural Network Pruning :?Taxonomy, Comparison, Analysis, and?Recommendations》
文章轉(zhuǎn)自微信公眾號(hào)@算法進(jìn)階
對(duì)比大模型API的內(nèi)容創(chuàng)意新穎性、情感共鳴力、商業(yè)轉(zhuǎn)化潛力
一鍵對(duì)比試用API 限時(shí)免費(fèi)