論文:Structured Pruning for Deep Neural Networks with Adaptive Pruning Rate Derivation Based on Connection Sensitivity and Loss Function 基于連接配接敏感性和損失函數的能夠自适應推導剪枝率的深度神經網絡結構化剪枝
論文位址:DOI: 10.12720/JAIT.13.3.295-300
發表時間:2022/6, Journal of Advances in Information Technology(比較新,含金量不确定,題目說得不錯)
注:大部分是原文,但不全是,帶色的是自己的了解
摘要
結構化剪枝是深度神經網絡壓縮的一種方式。早期的結構化剪枝手動設定剪枝率(類似于作為超參數存在),是以找到一個合适的能夠盡量減少精度損失的剪枝率是很困難的。本文提出了一種基于梯度和損失函數自适應推導各層剪枝率的結構化剪枝方法。該方法首先利用每一層的損失函數和梯度計算出每層修剪權重的一個L1範數門檻值,這一門檻值能夠確定在所剪掉的權重的L1範數小于該門檻值時,剪枝不會使損失函數退化。之後,在改變剪枝率時,通過比較所剪掉的權重的L1範數和該門檻值,我們能夠得到每一層的不使損失函數退化的剪枝率(?這是個什麼方法)。在每一層使用我們計算得到的剪枝率,能夠抑制剪枝後的模型的精度損失。我們用VGG-16和ResNet在CIFAR-10任務上疊代剪枝評估了所提出的方法。本文方法将ResNet-56的模型參數降低了66.3%,精度為93.71%。(聽起來還不錯)
I 引言
深度神經網絡(DNNs)在分類任務和語義分割等各種任務上都有出色的表現。然而,随着網絡性能的提高,DNN模型變得更深更複雜,這一趨勢限制了DNN在資源受限裝置(如嵌入式系統和行動電話)上的部署。
為了減小DNN模型的大小和計算複雜度而提出了網絡剪枝方法。早期方法在給定剪枝率的條件下,删除權重張量中基于某一門檻值(這一門檻值即由給定的剪枝率決定)下的小權重值。由于這些方法引入了稀疏連接配接,是以被稱為非結構化剪枝。為了降低計算成本,提出了比非結構化剪枝粒度更粗(如通道和神經元,對比于非結構化剪枝中的權重)的結構化剪枝。一些研究中基于每個濾波器的L1範數的值排序來去除通道,或基于group LASSO(不知道是啥),或剪掉那些使輸出特征圖誤差最小化的濾波器(大意是這樣,可能目的是讓輸出特征圖和沒剪枝時差距最小的意思),或使用剪枝矩陣的梯度作為度量以考慮每一層對整個模型精度的修剪影響。現有的方法都是根據權重值等評估準則和給定的剪枝率來剪枝權重張量。然而,當給定的剪枝率不合适時,剪枝後的模型精度會大大降低。實際應用中使用的網絡結構也是多種多樣的,是以想要手動确定一個對所有應用都适用的抑制精度降低的剪枝率是非常低效的(一堆廢話)。
本文提出了一種基于梯度和損失函數自适應推導各層剪枝率的結構化剪枝方法(如圖1)。該方法首先使用損失函數和每層的梯度計算每層修剪權重的l1範數門檻值(即修剪誤差)。當修剪誤差小于該門檻值時,保證剪枝不會使損失函數退化。在改變剪枝率時,通過比較所剪掉的權重的L1範數和該門檻值,我們能夠得到每一層的不使損失函數退化的剪枝率。使用我們計算得到的剪枝率,能夠抑制剪枝後的模型的精度損失。(哈哈,還是廢話)我們在CIFAR-10上用含bn層的VGG-16和ResNet疊代剪枝評估了該方法。該方法使VGG-16模型參數降低了94.4%,精度為93.43%。此外,我們修剪的ResNet-32、ResNet-56和ResNet-100參數分别減少了66.9%、66.3%和84.4%,準确率分别為92.93%、93.71%和93.60%。(原始精度呢?)
本文在結構化剪枝方面的貢獻如下:
• 提出了一種結構化的剪枝方法,自适應地推導出每層的剪枝率,通過去除整個模型通道和神經元來壓縮網絡(雖然不是直接設定剪枝率了,但是是需要一個門檻值的,和直接手動設定門檻值的差别大概就是每一層的門檻值都是由梯度+損失函數算出來的?具體怎麼算出來的到現在還沒說)
•證明了我們提出的方法可以減少VGG-16, ResNet-32, ResNet-56和ResNet-110在CIFAR-10上的模型參數和浮點運算(FLOPs)的數量,并且沒有明顯的精度下降。
II 相關工作
A.重要程度評估準則(以下簡稱重要程度)(科普廢話部分)
結構化剪枝通常以通道等更粗粒度的機關計算重要程度,然後在剪枝率确定的門檻值以下對較不重要的通道進行剪枝。權重值廣泛用于計算重要程度。特征圖映射誤差和批量歸一化層的比例因子也常用于表示重要程度。然而,這些方法沒有考慮網絡精度的影響(?何以見得)。雖然[6]使用損失函數的靈敏度如梯度來表示重要程度,但使用靈敏度進行剪枝的表現比使用權重值差。
B.局部剪枝和全局剪枝
重要程度和剪枝率的設定有兩種方法。局部剪枝設定重要程度排序和每層剪枝率。由于局部剪枝中剪枝率的組合非常多,是以很難找到抑制精度退化的組合。全局剪枝僅為整個模型設定一個剪枝率,并計算整個模型的重要程度排序。是以在全局剪枝中,每層剪枝率一般是不同的。
C.Pruning Scheduling(不知道咋翻譯)
為了抑制剪枝導緻的精度下降,通常對剪枝後的模型微調。One-shot 剪枝隻對模型進行一次高剪枝率的剪枝,然後微調剪枝後的模型。疊代剪枝以較低的剪枝率疊代執行對模型的剪枝過程并微調。早期研究已經說明疊代剪枝的精度退化小于One-shot剪枝。我們提出的方法得到了每一層的剪枝率(類似于局部剪枝),而每層的最終剪枝率與全局剪枝相似(其實就是每層設定不一樣的剪枝率的局部剪枝吧)。這是因為所提出的方法根據每一層的梯度自适應地推導出每層的剪枝率。該方法使用梯度來推導剪枝率,以考慮剪枝對損失函數的影響。為了抑制剪枝對精度的影響,該方法采用疊代剪枝,使用權重值作為重要程度。
III 方法
我們提出的剪枝方法流程如Alorithm 1所示,該方法對預訓練模型進行剪枝。首先推導出剪枝率(你還是沒說咋推導的),并利用得到的剪枝率對模型進行剪枝。在對剪枝後模型進行微調後,通過比較微調模型和預訓練模型的精度來決定是否采用所得到的剪枝率(?為啥還需要決定是否采用)。疊代執行剪枝率推導、模型剪枝、微調和精度比較過程,直到所有層的剪枝率都選擇為0%。
A.剪枝率推導
理想剪枝率可以防止剪枝導緻的精度下降(真理想啊)。如果得到理想剪枝率,則期望由理想剪枝率剪枝的模型的損失函數也沒有退化。我們從這個理想情況出發設定了以下限制條件。由剪枝後模型導出的損失函數小于或等于由剪枝前模型導出的損失函數。當隻去除一個包含剪枝目标張量的元素時,上述限制如(1)所示。
其中𝑤𝑖是修剪目标張量的第i個元素。i= 1,2,……,n為元素的索引。N是這個張量的元素個數。∆𝑤𝑖=−𝑤𝑖為剪枝誤差,即第i個元素剪枝前後權值的內插補點。L(𝑤1 +∆𝑤1,𝑤2,⋯,𝑤𝑛)為修剪後模型的損失函數,Lb為修剪前模型的損失函數。将一階泰勒展開應用于修剪模型的損失函數,我們可以得到(2)
式中,
。由于L(W)的值與Lb的值相同,(2)不能滿足。為了滿足(2),我們通過引入邊際損失函數(這是啥)來放松限制。由剪枝後模型導出的損失函數小于或等于“帶邊緣”的由剪枝前模型導出的損失函數。我們根據松弛限制對(2)進行了修改。
式中Lb⋅Lm是松弛限制引入的損失函數的裕度,Lm是損失函數裕度的控制參數。雖然Lm是超參數,但由于本文方法最終得到的剪枝率是通過精度比較确定的,是以最終得到的剪枝率相對于Lm具有魯棒性。我們在實驗中看到了對Lm的魯棒性(第4節)。(3)式得到了剪枝誤差的上界∆𝑤1,滿足以下限制條件:
利用(4)式,我們可以根據損失函數的退化來決定𝑤1是否可以被修剪。我們将(4)擴充到(5)以進行更粗粒度的剪枝,如通道剪枝。
(5)式左側ΔW為按元素數量歸一化的修剪權重的l1範數,即ΔW為粗粒度計算的修剪誤差。在修剪一個張量時,由于被剪枝的權重的個數由剪枝率決定,是以被剪枝的權重l1範數的值取決于剪枝率。(5)右側為剪枝誤差的上界,即門檻值Th,與剪枝率無關。此外,由于梯度是每層獨立推導的,門檻值Th也是每層獨立推導的。是以,利用(5)式可以通過以下方法為每一層獨立找到抑制損失函數退化的剪枝率:設定候選剪枝率Ratecand(最終剪枝率還是人為設定的,提供一系列值然後由算法找到其中最适合的),并從候選剪枝率中找到一個剪枝率,使得修剪誤差ΔW小于或等于門檻值Th。
疊代剪枝是抑制剪枝導緻的精度下降的一種方法。該方法利用(5)得到的剪枝率對模型進行疊代剪枝,并對剪枝後的模型進行微調。式(6)給出了疊代剪枝k次的門檻值:Th,k。
其中Wk是搜尋剪枝率k次後的修剪後模型的權重張量。當k=0時,由于尚未求出剪枝率,W0與剪枝前模型的權值張量相同。在Algorithm 2所示的剪枝率推導方法中,可以通過計算濾波器和神經元層面上的剪枝誤差和門檻值來推導結構化剪枝的剪枝率。此外,該方法還可以在單個權重層面計算非結構化剪枝的剪枝率。
由于門檻值Th,k包含由泰勒展開得到的近似誤差,存在由(6)得到的修剪速率不正确的可能性。為了減少近似誤差的影響,我們引入了信賴域法(暫時不知道是啥),這是一種利用包含誤差的參數進行優化的方法。在使用信任域方法時,為了避免由于誤差而導緻的不正确優化,設定了一個上界,稱為信任半徑,它限制了包含誤差的參數的值。在我們提出的方法中,所有層的門檻值由(7)所示的Ub限制。
其中Th,k,all = [Th,k,1, Th,k,2,…Th,k,m]是門檻值的向量,m表示剪枝目标張量的個數。Th,k,i (i=1,2,…,m)是每個修剪目标張量的門檻值。
B.模型剪枝與微調
在得到剪枝率後,根據所得到的剪枝率修剪模型。修剪重要程度為權值的l1範數。在給定剪枝率确定的門檻值以下的權重将被删除。在微調中,剪枝後模型使用最新微調模型的權重。在第一次搜尋的情況下,剪枝後模型使用預訓練模型的權重。
C.精度比較
為了抑制剪枝模型的精度退化,達到預期的精度,對修剪模型進行微調,直到剪枝模型精度Accp加上精度控制參數Accctrl超過預訓練模型的精度Accb。當Accp+Accctrl超過Accb時,采用推導出的剪枝率。當Accp+Accctrl不超過Accb時,導出的剪枝率被丢棄(相當于回到了剪枝前的上一步?)。疊代執行信賴域方法時,由于上界影響優化的收斂性,每次疊代都會根據優化結果更新上界,上界限制包含誤差的參數值。在該方法中,當Accp+Accctrl超過Accb時,Ub上限增大,而當Accp+Accctrl不超過Accb時,Ub上限減小。
D.剪枝搜尋終止條件
該方法疊代執行剪枝率推導、模型剪枝、微調和精度比較,直到所有層的剪枝率選擇為0%。
E.設定門檻值上界(比較有用)
當
的上界初始值較小時,門檻值在第一次搜尋也會被設定為較小值,此時存在所有層的剪枝為0%的可能性,使剪枝率搜尋在第一次搜尋時終止。為避免第一次搜尋時終止,将
的初始值設為剪枝率候選Ratecand的最大剪枝率下各層修剪誤差的l2範數。由式(7)可知,當
設為l2範數時,保證了各層修剪率選擇的自由度。
本文方法根據精度比較結果,将
的上限更新為較大的值。但是,當Ub值極大時,優化的收斂時間較長。我們将
的初始值設為
上限的上限。(好吧)
F.修剪shortcut connection
帶有concatenate block的shortcut connection通常用于ResNet等深度神經網絡。對于一個concatenate block,多個輸入特征映射的數量必須相等。為了對齊輸入特征映射的數量,我們隻修剪那些在所有層上修剪了相同索引的濾波器,如圖2所示。(即對于被concatenate的層隻修剪在這幾個層裡都被認為該修剪的濾波器,即取交集)
IV 實驗
我們使用帶bn層的VGG-16、ResNet-32、ResNet-56和ResNet-110在CIFAR10上評估了所提出的方法。我們使用Kim的VGG-16預訓練模型[15],Idelbayev的ResNet預訓練模型[16]。候選剪枝率分别為10%和0%(隻需要兩個就可以嗎?是怕多了搜尋不過來嗎)。采用L2權值衰減的動量SGD對評價模型進行再訓練。mini-batch大小為128。動量系數為0.9。重量衰減系數為10-4。重訓練時間為300個epoch。初始學習率為0.1。學習率在第100、150和200代乘以0.1。我們在Pytorch上實作了所提出的方法。代碼見https://github.com/FujitsuLaboratories/CAC/tree/main/cac/pruning.
A.超參數性能
圖3(a)顯示了VGG16剪枝後模型性能與損失邊際控制參數Lm的關系。當Lm為0時,壓縮比變為0%。每一層的初始門檻值也變為0。是以,在第一次搜尋時,所有搜尋的剪枝率變為0%。當Lm大于0時,Lm的選擇對壓縮比影響不大,說明了Lm選擇的魯棒性。以下實驗中選取Lm = 0.1。
B.剪枝率搜尋的性能
圖3(b)顯示了VGG16剪枝後模型性能與精度控制參數Accctrl的關系。由于對于所有Accctrl值,剪枝後模型精度均大于預訓練模型精度減去Accctrl的值,是以該方法可以通過Accctrl控制修剪模型精度。結果是,壓縮比随着精度的降低而增加,這與直覺和早期研究[12],[14]一緻。
C.性能對比
Table 1列出了與以往工作的比較。結果表明,該方法對所有評估模型在相似的修剪模型精度下都能獲得最佳的參數壓縮率和FLOPs。此外,我們修剪的ResNet-56和ResNet-110在相似的參數壓縮比下達到了顯著的修剪模型精度,分别為94.03%和94.60%。
V 結論
本文提出了一種具有自适應剪枝率推導的結構化剪枝方法。為了抑制剪枝對精度的影響,根據每一層的梯度和整個模型損失函數,推導出每一層的剪枝率。通過将所提出的剪枝方法應用于VGG-16、ResNet-32、ResNet-56和ResNet110,剪枝模型的參數和flop可以顯著降低,且精度沒有明顯下降。在未來的工作中,我們将把提出的方法應用于其他任務和模型,如ImageNet[17]、transformer[18]和BERT[19]。