李 屹,魏建國,劉貫偉
(1.恒銀金融科技股份有限公司,天津 300308; 2.天津大學智能與計算學部,天津 300350)
自2012年Alexnet在圖像識別領域性能大幅度超越傳統(tǒng)方法以來,深度學習領域迅速發(fā)展,已經(jīng)成為機器學習中最主流的分支之一。近年來,隨著各種新的深度卷積神經(jīng)網(wǎng)絡架構的不斷提出,深度學習使得很多計算機視覺任務的性能不斷提升,達到了一個前所未有的高度。但深度卷積神經(jīng)網(wǎng)絡的缺點在于計算量與存儲量過大。性能越好的模型往往更深更寬,計算量與存儲量也隨之增大。復雜的模型固然具有更好的性能,但是高額的存儲空間、計算資源消耗是其有效的應用在各硬件平臺上的重要障礙。尤其是一些算力較弱的設備,如手機、平板電腦、無人駕駛汽車、智能家居等,如果將模型直接部署在上述設備中則功耗、時延都會成為問題。為了解決這些問題,近些年來研究人員從不同的方向進行了嘗試。從硬件角度,各種針對于神經(jīng)網(wǎng)絡計算的芯片被設計出來。從算法角度,許多業(yè)界研究人員研究模型壓縮方法以最大限度的減小模型對于計算空間和時間的消耗,例如,文獻[1]中研究人員將剪枝、模型量化與霍夫曼編碼結合將AlexNet模型參數(shù)壓縮至原模型的2.8%,將VGG-16參數(shù)壓縮至原模型的2.0%。
本文主要介紹針對于模型剪枝方面的算法。模型壓縮算法主要分為剪枝、量化、低秩分解與知識蒸餾4個方面。剪枝的過程如圖1所示。在文獻[2]中提出在深度神經(jīng)網(wǎng)絡中權重參數(shù)存在顯著冗余,僅僅使用一小部分權重就可以預測出其余的權重。因此,網(wǎng)絡中的大多數(shù)權重并不需要學習。訓練網(wǎng)絡中小部分權重參數(shù)就可能達到和原網(wǎng)絡相近甚至超越原網(wǎng)絡的性能?;谝陨系募僭O,學者從不同角度研究了如何對網(wǎng)絡模型進行剪枝。
圖1 剪枝過程示意圖
模型剪枝方面的研究最早始于上世紀90年代初期,文獻[3]提出Optimal Brain Damage的方法對神經(jīng)網(wǎng)絡中權重進行裁剪,即利用損失函數(shù)對權重的二階導數(shù)對權重進行重要性判斷。之后文獻[4]提出Optimal Brain Surgeon方法對Optimal Brain Damage方法進行了改進。由于當時神經(jīng)網(wǎng)絡與深度學習并未成為主流領域,模型剪枝算法并未被廣泛研究。在12年之后深度學習領域迅速發(fā)展,大而深的模型往往在各種任務上取得更好的效果,因此近年來關于模型剪枝方面的研究也迅速增加。Han等人[1,5]可稱為近年來關于此領域的開創(chuàng)性研究者。之后關于模型剪枝算法的研究先聚焦于如何衡量權重的重要性、如何確定剪枝的稀疏度以及剪枝的流程。接著有學者提出結構化剪枝中關于權重重要性的評判不影響剪枝結果[6-8],剪枝的稀疏度成為唯一重要因素。自動化確定剪枝稀疏度的研究成為新的熱點[9-16]。之后研究人員嘗試將剪枝算法與其他模型壓縮算法相結合而獲得更大的模型壓縮率[17-19]。又有學者將剪枝算法應用于除物體分類外的任務之中[20-21]。本文將對上述方面的代表性算法進行總結與描述。
主流的剪枝流程主要包括衡量神經(jīng)元的重要性和去除不重要的神經(jīng)元2個步驟,對網(wǎng)絡進行微調后返回第1步進行下一輪剪枝。終止標準為剪枝后模型的準確度與原始網(wǎng)絡準確度差值高于一定閾值或是剪枝后所得模型減小的運算量達到一定數(shù)值。對于現(xiàn)有剪枝算法的研究主要歸納為以下3個方面:1)確定關于剪枝的粒度,即剪權重、剪通道、剪卷積核;2)關于剪枝的方法,包括如何評價神經(jīng)元的重要性以及如何確定神經(jīng)網(wǎng)絡每層的裁減比例;3)關于剪枝的時機,即剪枝與訓練交替進行或是剪枝與訓練同時進行。另一方面研究是關于模型剪枝的理論基礎,即通過剪枝是否可以尋找到不損失精度的小模型。同時,研究人員試圖將剪枝算法與其他模型算法聯(lián)合使用。在學習任務上,多數(shù)研究人員將算法在物體分類數(shù)據(jù)集上進行評測。近期還有關于剪枝算法在語義分割或多任務方面的研究與評測。
卷積神經(jīng)網(wǎng)絡通常包括卷積層與全連接層,卷積運算在整個神經(jīng)網(wǎng)絡運算中占有最大比例的計算量,因此關于剪枝的研究多數(shù)針對網(wǎng)絡中的卷積層部分。圖2(a)~圖2(c)分別為卷積核中某一通道在空間方向的投影、卷積層中單個卷積核,網(wǎng)絡中某一卷積層。網(wǎng)絡某一層卷積層的維度為N×C×H×W,其中H與W分別表示卷積核在空間上高和寬。C表示卷積核的通道數(shù),即輸入特征的通道數(shù)。N為卷積核的個數(shù),即經(jīng)過卷積操作后輸出特征的通道數(shù)。上述空間維度表示方法在圖2(黑色部分代表此部分權重設置為0)和圖3中均有使用。
(a) 剪單個權重
(b) 剪通道
(c) 剪卷積核圖2 不同粒度的剪枝
圖3 某卷積層中任一卷積核
根據(jù)被裁剪權重空間尺度的大小,剪枝可以分為不同粒度的剪枝。最細粒度的剪枝為剪去卷積核某個單一權重,如圖2(a)所示。粗粒度剪枝為對卷積核中形狀規(guī)則的區(qū)域進行整體裁剪,例如剪去某些通道,剪掉整個卷積核,如圖2(b)和圖2(c)所示。文獻[22]中提出了stripe-wise剪枝概念,即剪掉卷積核中某一條帶。如圖3所示為網(wǎng)絡中某卷積層中任一卷積核,其中黑色部分為剪掉的卷積核中的權重,不同通道同一位置權重被置為0。卷積核中不同通道的同一空間位置權重被裁減掉。
圖2和圖3中所示剪枝方式的作用都是為在保留模型精度的同時壓縮模型的運算與存儲,可以在網(wǎng)絡中任一卷積層進行操作。圖2(a)中所示剪枝方式更容易保留模型精度,但是剪枝后生成的卷積核是稀疏的,中間有很多元素為0的矩陣,由于缺少底層硬件和矩陣算法的支持,不利于運算的加速。因此近些年的研究多集中于結構化剪枝,如剪通道、剪卷積核或是剪層。文獻[23]中詳細概括了剪枝粒度范圍,并驗證了相對于細粒度剪枝,粗粒度剪枝可以實現(xiàn)相同的模型剪枝稀疏度并不使模型精度降低。并且由于粗粒度剪枝可生成結構化模型,在相同剪枝程度下,粗粒度剪枝相對于細粒度剪枝可以節(jié)省大約2倍的存儲空間。
剪枝的方法主要包括如何評價神經(jīng)元的重要性以及網(wǎng)絡中每層裁減比例的確定。對于評價神經(jīng)元的重要性,學者提出了一系列的方法。文獻[24]中提出可以基于卷積核權重的絕對值和大小來評價卷積核的重要性,即:
(1)
(2)
式(1)中kl為單個通道的權重和,式(2)中si為單個卷積核的權重和。文獻[24]中通過sensitivity analysis在神經(jīng)網(wǎng)絡每層確定裁減比例從而確定裁減閾值,將權重絕對值和小于閾值的卷積核裁減掉,同時認為權重范數(shù)越小越不重要。而文獻[25]中則提出利用網(wǎng)絡每層卷積核的幾何中位數(shù)(Geometric Median)信息進行剪枝。幾何中位數(shù)為距離每層卷積核權重范數(shù)的距離和最小的值,文中認為范數(shù)值越接近幾何中位數(shù)的卷積核重要程度越低,從而應被裁剪掉,而并非基于越小越不重要的原則。網(wǎng)絡每層如果訓練出來的權重不稀疏不利于裁減,通常的方法是在訓練過程中加入L1 regularizer解決該問題。文獻[26]中提出了group regularizer概念,即:
(3)
式(3)中E(W)為總損失函數(shù),Rg(Wl)為對于每組(通道,卷積核)權重的懲罰項,λg為相應的懲罰因子,通過引入此項使訓練出的權重結構化稀疏,從而有利于結構化剪枝。此外,由于BN層通常與卷積層相連,文獻[27]中提出通過從BN層輸出的信息進行重要性判斷,如式(4):
(4)
式(4)中通過在BN層中加入對于通道的scaling因子γ并利用懲罰項g(γ)得到稀疏化因子,懲罰項此處選為L1懲罰。確定裁剪比例后scaling factor值小的對應的通道將被裁剪掉。另外,也有學者提出對激活層的輸出進行重要性評估。文獻[28]中提出了Average Percentage of Zeros(APoZ)的概念,如式(5):
(5)
即激活函數(shù)輸出中0值的百分比。APoZ越大說明相對應神經(jīng)元越不重要。因此可通過APoZ值將不重要的神經(jīng)元剪掉。文獻[29]提出使用特征圖的秩進行剪枝,即特征圖的秩越大說明特征圖所含信息量越大,即越重要。文中利用少量輸入圖像計算網(wǎng)絡每層特征圖的秩,排序后將低秩特征圖所對應的卷積核裁減掉。文獻[30]提出利用特征圖的熵值作為剪枝評判標準,即:
(6)
式(6)中Hj代表特征圖中通道j的熵值,b代表將經(jīng)過全局池化的通道取值分為b個區(qū)間,pi代表通道j的值在第i個區(qū)間的概率。熵值越小說明此通道所含信息量越少,因此相應的卷積核應被裁剪。
以上方法均是利用神經(jīng)網(wǎng)絡本層信息的相關度量作為剪枝評判標準,假設相關度量值越小(或越大)則相關參數(shù)越不重要。除去以上一類評價方法外,另外也有研究提出通過計算參數(shù)對于損失函數(shù)變化的靈敏度作為剪枝標準[4],即:
(7)
文獻[4]提出的方法需要計算損失函數(shù)對參數(shù)的二階導數(shù),即海森矩陣(式7)來計算靈敏度。然而由于海森矩陣或其近似計算復雜所以長時間未被人采用。文獻[31]提出利用損失函數(shù)對于激活函數(shù)輸出的一階導數(shù)的絕對值作為剪枝標準,從而避免了計算海森矩陣。文獻[32]提出將二階導數(shù)的計算限制在單層神經(jīng)網(wǎng)絡內,從而減少了計算量。文獻[33]中提出通道重要性因子概念。首先在每個通道前乘一個系數(shù)后計算損失函數(shù),之后計算損失函數(shù)對于此系數(shù)的一階導數(shù)的絕對值作為通道的重要性因子。將重要性因子較低的通道所對應的卷積核裁剪。
此外,研究人員提出將通過剪枝后特征輸出的誤差信息來進行模型剪枝,即通過最小化剪枝前后特征的誤差確定哪些參數(shù)需要剪枝。此類方法利用神經(jīng)網(wǎng)絡下一層的特征信息對本層進行剪枝。文獻[34]使用貪心法將對網(wǎng)絡下一層特征影響小的卷積核剪掉,然后利用最小二乘法重新計算剪枝后的權重,即:
(8)
W=(XTX)-1XTy
(9)
式(8)中i代表樣本序號,下標j代表本層卷積核的序號,S代表本層經(jīng)過裁剪的卷積核的集合。xi,j代表本層特征,yi代表未經(jīng)過卷積核裁剪算得的下一層的特征。通過選擇本層卷積核的子集S從而最小化下一層的特征誤差。將不重要卷積核裁剪后利用最小二乘法再次計算本層權重值。式(9)即為所計算權重。
文獻[35]提出利用Lasso regression的方法進行本層通道選擇,進而將本層不重要的通道裁剪掉,再重新計算參數(shù)權重。式(10)中c為通道總數(shù),β為長度為c的向量,對通道進行篩選。βi取值為0或1。Xi代表輸入特征中通道i的特征,Wi代表本層卷積核中通道i的參數(shù)。Y代表本層輸出特征。通過交替優(yōu)化式(10)中的β與W從而得到裁剪結果。
(10)
β0≤c′, ?iWi,F=1
(11)
然而,另有學者提出對參數(shù)重要性的計算在剪枝過程中不重要。文獻[6]通過對于結構化剪枝的研究發(fā)現(xiàn),訓練隨機初始化的經(jīng)過剪枝的模型所得結果可達到相同甚至要好于在剪枝后的模型做微調所得結果。因此作者提出對于結構化剪枝,學習大型模型的重要權重參數(shù)對于修剪后的小模型并不是必要的,決定最終模型性能的是剪枝后的模型結構而并非從大模型繼承而來的重要權重。因此結構化模型剪枝的過程類似于網(wǎng)絡結構搜索。文獻[7]通過隨機剪枝的方式將25%~50%的卷積核裁減取得了與基于參數(shù)重要性進行剪枝的算法相似的結果。作者認為參數(shù)的重要性對于剪枝結果并不重要,神經(jīng)網(wǎng)絡的可塑性使隨機剪枝亦能達到相似效果。并使用VGG-16、ResNet-50等網(wǎng)絡架構在圖片分類與目標檢測數(shù)據(jù)集對所提假設進行驗證。文獻[8]提出剪枝模型結構不需要通過預訓練后的權重得到,通過隨機初始化權重的剪枝也能得到相似結果,從而可以提升剪枝效率,文中同時提出一種利用通道重要性因子進行剪枝的方法。
模型剪枝的另一個重要方面是關于模型裁減后稀疏度的研究,即神經(jīng)網(wǎng)絡每層應該裁減的比例大小。在文獻[24]中作者將神經(jīng)網(wǎng)絡每層獨立剪枝后在驗證集上對剪枝后的網(wǎng)絡進行評估,發(fā)現(xiàn)不同層對于剪枝的敏感度不一致,因此,網(wǎng)絡每層應該有不同的剪枝率。確定網(wǎng)絡每層剪枝率或剪枝閾值主要可以通過預先設定或通過在訓練中學習。文獻[24]中通過敏感度分析確定每層剪枝率,之后使用確定剪枝率進行剪枝,而敏感度方法忽略了層之間的相關性且計算量較大。另一類方法是在網(wǎng)絡訓練過程中獲得每層剪枝率或剪枝閾值。文獻[9]中提出剪枝函數(shù)使網(wǎng)絡在訓練過程中可以同時優(yōu)化權重與剪枝閾值,即:
vα(x;t)=ReLU(x-t)+t·σ(α(x-t))-ReLU(-x-t)-t·σ(α(-x-t))
(12)
σ(x)=(1+e-x)-1
(13)
ReLU(x)=max(0,x)
(14)
式(12)中vα(x;t)為剪枝函數(shù),剪枝函數(shù)vα(x;t)對于權重參數(shù)x與剪枝閾值t分別一階可微,從而使每層剪枝閾值與網(wǎng)絡權重可以在網(wǎng)絡反向傳播時被同時更新,在訓練結束時可以得到每層最優(yōu)剪枝閾值即剪枝率。文獻[10]通過引入輔助變量將優(yōu)化過程分解為學習與壓縮2步進行,即:
(15)
(16)
式(15)中L代表損失函數(shù),w代表權重參數(shù),θ為含有約束的輔助變量。式(15)為優(yōu)化過程中的學習步驟,此步驟優(yōu)化w而固定θ。式(16)為壓縮步驟,通過優(yōu)化θ從而最終獲得權重在每層的壓縮率。此方法需要預先設定網(wǎng)絡的全局壓縮率做為優(yōu)化過程中的約束條件,訓練結束后即可得到每層壓縮率,即:
C′=(c′1,c′2,…,c′L)
(17)
c′i∈{0.1ci,0.2ci,…,0.9ci,ci}
(18)
文獻[11]中提出了一種搜尋每層最優(yōu)通道數(shù)的剪枝算法。首先隨機初始化一系列經(jīng)過剪枝的網(wǎng)絡結構,式(17)中C′代表剪枝后的網(wǎng)絡結構,即剪枝后每層剩余通道數(shù),式(18)中c′i為每層剩余通道數(shù),文中將其設定為原通道數(shù)10%~100%之間的離散值,間隔為0.1ci,從而大大降低搜索的運算量。之后利用人工蜂群(ABC)[36]算法對初始化的網(wǎng)絡結構進行變換,通過比較新舊網(wǎng)絡結構在測試集上的結果從而通過逐次迭代找出最優(yōu)化的剪枝結構。
文獻[12]利用元學習思想進行通道剪枝。文中將每層保留通道數(shù)作為輸入訓練剪枝網(wǎng)絡。剪枝網(wǎng)絡作為元網(wǎng)絡,可以根據(jù)輸入網(wǎng)絡結構生成權重。通過將不同隨機生成的網(wǎng)絡結構輸入剪枝網(wǎng)絡生成網(wǎng)絡權重后在驗證集上測試可以找出最優(yōu)的剪枝結構。文中的元網(wǎng)絡為含有2個全連接層的神經(jīng)網(wǎng)絡。相關過程如圖4所示。文獻[37]提出可微分的超網(wǎng)絡進行模型剪枝。超網(wǎng)絡的輸入為當前層和上一層的隱向量,隱向量長度為其對應層的輸出通道數(shù)。超網(wǎng)絡的輸出為網(wǎng)絡當前層的權重。通過訓練超網(wǎng)絡參數(shù)和隱向量可得到稀疏的隱向量。由于隱向量長度與輸出通道數(shù)相對應,隱向量中趨于0的元素所對應的通道將被裁剪掉。由于對于隱向量施加稀疏性懲罰,隱向量需通過近端梯度法更新。此方法可歸類為元學習方法,但可通過梯度法求解,從而提升搜索效率,即:
圖4 元學習網(wǎng)絡示意圖
(t,n,c,h,w,stride,k,FLOPs[t],reduced,rest,αt-1)
(19)
文獻[13]中利用強化學習的思想進行自動模型剪枝。首先將網(wǎng)絡某層信息編碼為狀態(tài)。文中利用11個特征對每層網(wǎng)絡狀態(tài)進行描述,式(19)中n×c×k×k為卷積核的維度,c×h×w為輸入特征的維度,stride為卷積核的步長,t為網(wǎng)絡層的序號,F(xiàn)LOPs[t]為每層的FLOPs,at-1為上一層的剪枝率,reduced為上一層剪枝后減少的FLOPs數(shù),rest為剩余層的FLOPs。將狀態(tài)輸入動作函數(shù)后得到本層的剪枝率,將本層剪枝后移到下一層,將所有層剪枝完畢后計算Reward函數(shù)值。該文使用DDPG算法計算剪枝策略函數(shù)。文獻[14]利用對生成對抗網(wǎng)絡的訓練完成模型剪枝。判別模型用來區(qū)分被剪枝與未被剪枝的網(wǎng)絡,而生成模型對網(wǎng)絡進行剪枝,其輸出為經(jīng)過剪枝的網(wǎng)絡。經(jīng)過對判別模型與生成模型的交替優(yōu)化即可完成網(wǎng)絡剪枝。文獻[16]中將模型剪枝建模為馬爾可夫過程,即將在每層中保留的通道數(shù)作為狀態(tài),而剪枝過程即為在不同狀態(tài)之間的轉移,即:
(20)
式(20)中pk代表狀態(tài)轉移概率,即為每層中前k-1個通道在剪枝中保留時保留第k個通道的概率。Cout為每層中總通道數(shù)。而αk則為網(wǎng)絡架構參數(shù),對于損失函數(shù)可微,在每次優(yōu)化過程中被更新。文中將此方法與文獻[12-13]中所述方法結果進行對比,發(fā)現(xiàn)對于利用不同方法得到的相同F(xiàn)LOPs的模型,此方法在ImageNet數(shù)據(jù)集上可以取得更高精確度。文獻[15]中使用式(21)中函數(shù)f(bi,β1,β2)計算某層中通道i被保留的概率,即:
(21)
式(21)中,α為每層通道被保留的比例,而損失函數(shù)對α可微,從而α可在反向傳播中更新。bi則為通道i的重要性因子。β2取值隨訓練輪數(shù)增加而增加。該文中同時將不同網(wǎng)絡層進行分組,并對于每組使用同一通道保留比例。實驗將此方法與文獻[13,17,33,38]中算法對比,發(fā)現(xiàn)對于某些特定深度的ResNet網(wǎng)絡在經(jīng)過此方法壓縮后,模型可以取得更高的FLOPs壓縮率,并在ImageNet、CIFAR-10數(shù)據(jù)集上保持相似精確度。不同于大多數(shù)剪枝方法,文獻[39]利用卷積核的協(xié)方差矩陣的信息對卷積神經(jīng)網(wǎng)絡進行剪枝。剪枝方法的損失函數(shù)即為剪枝前后卷積核的協(xié)方差矩陣之差的范數(shù)。由于卷積神經(jīng)網(wǎng)絡每層中卷積核的平均值趨于0,此方法可利用Frequent Direction方法[40]求得剪枝后卷積核。對于卷積神經(jīng)網(wǎng)絡,此方法只需利用訓練后模型的權重信息即可完成剪枝而不需要利用訓練數(shù)據(jù)進行反復微調。實驗顯示此方法得到了與其他方法相似的精確度。
剪枝的另一個重要方面是剪枝時機。傳統(tǒng)方法是采用訓練權重,利用對于權重重要性方法進行剪枝,剪枝后再次對模型微調直到模型精確度損失超過一定閾值后停止剪枝過程。文獻[5]即采用這種方式,該方法剪枝流程如圖5所示。此類方法需要在剪枝步驟與模型微調步驟之間反復迭代直到達到終止標準。另一種方法是在得到預訓練權重后,在模型微調的過程中進行剪枝,模型微調結束即完成剪枝。文獻[41]提出將剪枝步驟與模型再訓練步驟同步交替進行而非先后進行,即每進行一次權重更新即進行一次剪枝,從而使整個剪枝過程所需權重迭代次數(shù)大大減小,提高了任務效率。此方法的關鍵步驟如式(22)~式(24):
圖5 剪枝流程示意圖
(22)
(23)
(24)
式(22)中k代表網(wǎng)絡某一層,Wk為權重矩陣,Tk矩陣元素由0或1構成,代表權重矩陣某一元素是否被剪枝。式(23)中hk為權重矩陣Wk的重要性函數(shù),ak、bk為每層權重閾值。在每次迭代中重要與不重要的權重同時更新從而可以恢復不合適的裁剪,而剪枝標準Tk則按一定概率來判斷是否更新。當達到最大迭代次數(shù)后終止并得到最終的剪枝模型。文獻[38]提出了軟剪枝概念,在每訓練完一輪后利用卷積核的范數(shù)評價每層卷積核的重要性后將不重要卷積核權重置為0,但置0卷積核仍在下一輪訓練反向傳播中進行更新。在訓練收斂時通過每層稀疏度與重要性評價標準得到最終剪枝模型。文獻[42]確定每層的最終剪枝率。將初始剪枝率設置為0,每訓練一定輪數(shù)后進行一次剪枝,剪枝率通過初始剪枝率與最終剪枝率的插值函數(shù)計算,即隨訓練時間增加而增加,最終達到設定剪枝率。并將算法在視覺任務與語言任務上進行測試。文獻[43]提出利用激活函數(shù)的輸出計算出對于通道的系數(shù)因子。在模型微調中系數(shù)因子逐漸收斂到0~1的值。在模型微調完成時將系數(shù)為0的對應通道(卷積核)進行剪枝。此方法也是將模型微調與剪枝同步進行。
另外,也有學者針對模型剪枝提出重要假設,比如文獻[44]提出了Lottery Ticket Hypothesis,即1個隨機初始化的密集的神經(jīng)網(wǎng)絡包含1個子網(wǎng)絡,此子網(wǎng)絡的權重如果使用原始網(wǎng)絡同樣權重分布方式進行初始化,單獨訓練此子網(wǎng)絡經(jīng)過至多同樣的迭代次數(shù)可以達到與原始網(wǎng)絡同樣的測試精度。此子網(wǎng)絡即為“Winning Ticket”。同時也提出如果子網(wǎng)絡使用不同于原始網(wǎng)絡權重分布的方式進行初始化,經(jīng)過訓練則達不到原網(wǎng)絡的精度。文獻[6,45-46]中對此有進一步討論。文獻[6]則提出了文獻[44]中的假設具有局限性,并通過實驗結果提出對于結構化剪枝,是否使用與原始網(wǎng)絡同樣的權重分布初始化子網(wǎng)絡對訓練結果沒有影響,即隨機初始化的子網(wǎng)絡經(jīng)過訓練也可以達到相同效果。在非結構化剪枝上使用小學習率(0.01)可以觀察到文獻[44]中所述現(xiàn)象。文獻[46]進一步假設1個隨機初始化的足夠過參數(shù)化的神經(jīng)網(wǎng)絡包含1個子網(wǎng)絡,與經(jīng)過訓練的同樣參數(shù)的網(wǎng)絡相比,此子網(wǎng)絡無須訓練即可實現(xiàn)相同的準確度。此假設可被認為是更強的Lottery Ticket Hypothesis。文獻[47]通過將子神經(jīng)網(wǎng)絡分類為weight-subnetwork(通過移除權重獲得的子網(wǎng)絡)與neuron-subnetwork(通過移除神經(jīng)元獲得的子網(wǎng)絡),并分別驗證了此2種情況滿足文獻[46]中所提出的更強的Lottery Ticket Hypothesis。文獻[48]則通過對全連接層和卷積層的分析,從理論上驗證了對于任何權重按某一分布獨立初始化的原始網(wǎng)絡,無論使用基于權重重要性的剪枝模式還是隨機剪枝模式,存在對應剪枝網(wǎng)絡在精確度上的損失小于一給定值。同時定量得出給定每層剪枝率與誤差值,剪枝網(wǎng)絡在精度上損失小于此誤差值的概率。
研究人員將剪枝方法與其他模型壓縮方法聯(lián)合研究。文獻[17]分析了剪枝與低秩分解的聯(lián)系,2種方法從不同方式近似權重張量并保持模型精確度。文中引入稀疏引導矩陣,通過將稀疏引導矩陣的特定列或行置為0而實現(xiàn)剪枝或低秩分解,從而將2種方法整合到同一框架之下。文獻[18]中提出將網(wǎng)絡結構搜索、剪枝、量化聯(lián)合進行優(yōu)化,與這3個步驟分別優(yōu)化相比,作者認為聯(lián)合優(yōu)化更容易尋找到全局最優(yōu)。作者將網(wǎng)絡結構信息、剪枝策略與量化方法編碼后送入accuracy predictor預測所得模型的精確度進而使用進化算法進行模型的迭代,從而找出最優(yōu)網(wǎng)絡結構。與上述3步分別進行優(yōu)化的算法相比,文中算法運算量大大降低,所得模型在ImageNet數(shù)據(jù)集上取得了更高的準確度。文中使用3層前饋神經(jīng)網(wǎng)絡做為accuracy predictor預測所得模型在測試集上的精確度從而避免直接計算模型精確度所帶來的大規(guī)模計算開銷。文獻[19]提出將剪枝與量化與模型微調同步進行。在訓練中將剪枝與量化所得到的權重用于前向傳播計算所預測值,而在反向傳播中更新未經(jīng)過剪枝量化的權重。方法中的剪枝率與量化比特位為超參數(shù),文中利用貝葉斯優(yōu)化計算。文獻[49]提出一種端到端的剪枝加量化的聯(lián)合優(yōu)化算法。剪枝部分損失函數(shù)使用VIBNet[50]方法,即為每一個通道引入服從高斯分布的重要性因子,而高斯分布可通過優(yōu)化VIB損失獲得。之后利用所得高斯分布決定哪些通道將被裁剪。此方法的損失函數(shù)對所需優(yōu)化的參數(shù)可微,從而使參數(shù)可以在反向傳播中更新。作者使用ResNet18與MobileNetV2網(wǎng)絡在ImageNet數(shù)據(jù)集上將提出方法與剪枝與量化分別優(yōu)化的2步算法進行結果對比,發(fā)現(xiàn)可以得到相似的模型精確度和大幅提高的模型壓縮率。
上述算法大多研究剪枝模型在物體分類任務上的效果,而對算法在目標檢測、語義分割等任務上的表現(xiàn)鮮有研究。文獻[20]對包含目標檢測、語義分割與臟污檢測的多任務神經(jīng)網(wǎng)絡進行剪枝優(yōu)化并在自動駕駛數(shù)據(jù)集上進行測試。在達到一定程度壓縮率后,發(fā)現(xiàn)剪枝模型對目標檢測與語義分割任務的結果影響較小,而對臟污檢測任務結果影響較大。文獻[21]提出引入上下文感知引導模塊(CAGM)引導基于通道的稀疏化從而對網(wǎng)絡進行通道剪枝,即在文獻[27]的算法中加入以上下文引導向量為先驗的懲罰項。所得模型在語義分割任務上結果較文獻[27]中的算法有所提升。
模型剪枝算法應在不損失模型精度或較小的損失模型精度的情況下盡可能壓縮模型的參數(shù)量和浮點運算次數(shù)。壓縮率越大則剪枝方法性能越優(yōu)。另外剪枝方法的效率也是一種評價因素,在獲得相同壓縮率的情況下使用越少的運算次數(shù)的方法效率越高。如文獻[41]稱所提出方法壓縮Alexnet網(wǎng)絡在ILSVRC-2012數(shù)據(jù)集上所需訓練輪數(shù)僅為文獻[5]中方法的15%左右。文獻[11]將所述算法與其他幾種算法在訓練輪數(shù)上進行了比較。但多數(shù)剪枝算法在實驗中沒有關于訓練輪數(shù)或訓練運算次數(shù)的信息,且不同方法每輪訓練運算量并不一致,本文認為壓縮率仍是現(xiàn)有大多數(shù)算法進行橫向比較的首要因素。對于不同模型剪枝算法首先應基于剪枝算法對于同一種網(wǎng)絡模型在相同任務上的表現(xiàn)進行評判。本文從論文所述算法的實驗結果中找到不同剪枝算法對于ResNet-50網(wǎng)絡在ILSVRC-2012數(shù)據(jù)集上的結果以及VGG-16網(wǎng)絡在CIFAR-10數(shù)據(jù)集上的結果,分別如表1和表2所示。所選擇網(wǎng)絡結構與任務為文獻之中實驗部分出現(xiàn)次數(shù)較高的網(wǎng)絡與任務。不同模型剪枝方法名稱為相關文獻中所述。本文將文獻實驗結果中所述對于精度損失影響最小的算法列入表1和表2中。在ResNet-50網(wǎng)絡和ILSVRC-2012數(shù)據(jù)集上所選擇方法的精確度損失大多在2%以內。在VGG-16網(wǎng)絡和CIFAR-10數(shù)據(jù)集上所選擇方法的精確度損失大多在1%之內。模型參數(shù)壓縮率與浮點運算次數(shù)壓縮率分別為壓縮后的模型相比于原模型在參數(shù)上與浮點運算次數(shù)上降低的比率。在精度損失相同或相近的情況下,壓縮率越大則說明剪枝模型性能越優(yōu)。
表1 不同算法在ResNet-50網(wǎng)絡和ILSVRC-2012數(shù)據(jù)集上的表現(xiàn) 單位:%
表2 不同算法在VGG-16網(wǎng)絡和CIFAR-10數(shù)據(jù)集上的表現(xiàn) 單位:%
模型剪枝作為重要的模型壓縮手段,近年來新方法層出不窮。發(fā)展新的模型剪枝算法從而更高效地尋找好的剪枝模型結構一直都是此領域的關鍵與熱點。同時,以下方面可能成為未來的研究方向。在有關于模型剪枝的基礎理論層面,網(wǎng)絡整體壓縮率或是網(wǎng)絡每層的壓縮率與模型精度損失之間的定量關系值得深入研究。另外,剪枝與其他模型壓縮方法的聯(lián)系與結合使用可以成為下一研究熱點。如文獻[16,18]中利用聯(lián)合優(yōu)化算法相較單步分別優(yōu)化使模型壓縮率提升。多數(shù)剪枝算法是針對于二維卷積神經(jīng)網(wǎng)絡的,而對于三維卷積網(wǎng)絡的剪枝研究較少。在文獻[51]中首次提出對于三維卷積核,即是含空間-時間維的卷積核進行通道剪枝的方法。對于三維卷積網(wǎng)絡的剪枝方法及在數(shù)據(jù)集上的表現(xiàn)值得進一步探索。在應用層面,多數(shù)模型剪枝算法是針對于物體分類任務進行測試的,而在其他任務上的表現(xiàn)結果較少。因此,研究人員可以對于現(xiàn)有剪枝算法在其他學習任務上的表現(xiàn),如在多任務學習上的表現(xiàn),進行測試與比較,并進行改進。最后,隨著新方法的不斷發(fā)展,對于不同的方法需要發(fā)展較為通用的高質量的評估標準進行橫向比較。好的評價標準對此領域的發(fā)展可以起到促進作用。
神經(jīng)網(wǎng)絡模型剪枝是對于冗余的模型權重進行裁剪從而降低模型存儲并提升模型速度。隨著人工智能技術在社會各個領域應用越來越廣泛以及對模型的速度與存儲方面的性能要求越來越高,模型剪枝技術在相關場景中的應用會越來越廣泛。好的模型剪枝算法成為了深度神經(jīng)網(wǎng)絡模型能夠成功應用的關鍵因素之一。
本文主要對于神經(jīng)網(wǎng)絡模型的發(fā)展與研究現(xiàn)狀進行了簡要的概述。通過將神經(jīng)網(wǎng)絡模型剪枝算法歸納為對于剪枝對象的重要性評判,如何確定神經(jīng)網(wǎng)絡各層剪枝率,如何確定剪枝時機、剪枝的理論基礎等幾個方面。并對各個方向具有代表性算法的關鍵思想進行了描述。尋找適用于不同學習任務的模型剪枝算法仍是未來重要的研究方向。