【AI不惑境】模型剪枝技术原理及其发展现状和展望
大家好,這是專欄《AI不惑境》的第九篇文章,講述模型剪枝相關的內容。
進入到不惑境界,就是向高手邁進的開始了,在這個境界需要自己獨立思考。如果說學習是一個從模仿,到追隨,到創造的過程,那么到這個階段,應該躍過了模仿和追隨的階段,進入了創造的階段。從這個境界開始,講述的問題可能不再有答案,更多的是激發大家一起來思考。
作者&編輯 | 言有三
模型剪枝作為一項歷史悠久的模型壓縮技術,當前已經有了比較大的進步和發展,本文給大家梳理模型剪枝的核心技術,發展現狀,未來展望以及學習資源推薦。
?
1 模型剪枝基礎
1.1 什么是模型剪枝
深度學習網絡模型從卷積層到全連接層存在著大量冗余的參數,大量神經元激活值趨近于0,將這些神經元去除后可以表現出同樣的模型表達能力,這種情況被稱為過參數化,而對應的技術則被稱為模型剪枝。
模型剪枝是一個新概念嗎?并不是,其實我們從學習深度學習的第一天起就接觸過,Dropout和DropConnect代表著非常經典的模型剪枝技術,看下圖。
Dropout中隨機的將一些神經元的輸出置零,這就是神經元剪枝。DropConnect則隨機的將一些神經元之間的連接置零,使得權重連接矩陣變得稀疏,這便是權重連接剪枝。它們就是最細粒度的剪枝技術,只是這個操作僅僅發生在訓練中,對最終的模型不產生影響,因此沒有被稱為模型剪枝技術。
當然,模型剪枝不僅僅只有對神經元的剪枝和對權重連接的剪枝,根據粒度的不同,至少可以粗分為4個粒度。
細粒度剪枝(fine-grained):即對連接或者神經元進行剪枝,它是粒度最小的剪枝。
向量剪枝(vector-level):它相對于細粒度剪枝粒度更大,屬于對卷積核內部(intra-kernel)的剪枝。
核剪枝(kernel-level):即去除某個卷積核,它將丟棄對輸入通道中對應計算通道的響應。
濾波器剪枝(Filter-level):對整個卷積核組進行剪枝,會造成推理過程中輸出特征通道數的改變。
細粒度剪枝(fine-grained),向量剪枝(vector-level),核剪枝(kernel-level)方法在參數量與模型性能之間取得了一定的平衡,但是網絡的拓撲結構本身發生了變化,需要專門的算法設計來支持這種稀疏的運算,被稱之為非結構化剪枝。
而濾波器剪枝(Filter-level)只改變了網絡中的濾波器組和特征通道數目,所獲得的模型不需要專門的算法設計就能夠運行,被稱為結構化剪枝。除此之外還有對整個網絡層的剪枝,它可以被看作是濾波器剪枝(Filter-level)的變種,即所有的濾波器都丟棄。
1.2 模型剪枝的必要性
既然冗余性是存在的,那么剪枝自然有它的必要性,下面以Google的研究來說明這個問題。
Google在《To prune, or not to prune: exploring the efficacy of pruning for model compression》[1]中探討了具有同等參數量的稀疏大模型和稠密小模型的性能對比,在圖像和語音任務上表明稀疏大模型普遍有更好的性能。
它們對Inception V3模型進行了實驗,在參數的稀疏性分別為0%,50%,75%,87.5%時,模型中非零參數分別是原始模型的1,0.5,0.25,0.128倍進行了實驗。實驗結果表明在稀疏性為50%時,Inception V3模型的性能幾乎不變。稀疏性為87.5%時,在ImageNet上的分類指標下降為2%。
除了在大模型上的實驗結果,還對小模型MobileNet也進行了實驗,分別在同樣大小參數量的情況下,比較了更窄的MobileNet和更加稀疏的MobileNet的分類指標,發現稀疏的MobileNet模型性能明顯優于非稀疏的MobileNet模型。
具體來說,稀疏率為75%的模型比寬度為原始MobileNet的0.5倍的模型在ImageNet分類任務的top-1指標上高出了4%,而且模型的體積更小。稀疏率為90%的模型比寬度為原始MobileNet的0.25倍的模型在ImageNet分類任務的top-1指標上高出了10%,而兩者的模型大小相當。
因此,我們完全可以相信,模型剪枝是有效的而且是必要的,剩下的問題就是怎么去找到冗余的參數進行剪枝。
?
2 模型剪枝算法
模型剪枝算法根據剪枝的處理策略來說,可以分為對模型進行稀疏約束然后進行訓練后的剪枝,在模型的訓練過程中進行剪枝,以及在模型訓練之前就進行剪枝。而根據粒度的不同,流行的剪枝算法是細粒度的權重連接剪枝和粗粒度的通道/濾波器剪枝。
這些方法各自有交叉,無法完全分開,下面我們就基于兩大不同的粒度來介紹一些訓練中剪枝的代表性方法,而不再單獨介紹稀疏約束以及訓練前剪枝方法,相關內容感興趣的讀者可以去有三AI知識星球中閱讀。
2.1 細粒度剪枝核心技術(連接剪枝)
對權重連接和神經元進行剪枝是最簡單,也是最早期的剪枝技術,下圖展示的就是一個剪枝前后對比,剪枝內容包括了連接和神經元。
這一類技術的整體步驟如下:
其中重點在于兩個,一個是如何評估一個連接的重要性,另一個是如何在剪枝后恢復模型的性能。
對于評估連接的重要性,這里我們介紹兩個最典型的方法代表,其一是基于連接幅度的方法[2],其二是基于損失函數的方法[3]。
由于特征的輸出是由輸入與權重相乘后進行加權,權重的幅度越小,對輸出的貢獻越小,因此一種最直觀的連接剪枝方法就是基于權重的幅度,如L1/L2范數的大小。這樣的方法只需要三個步驟就能完成剪枝:
第一步:訓練一個基準模型。
第二步:對權重值的幅度進行排序,去掉低于一個預設閾值的連接,得到剪枝后的網絡。
第三步:對剪枝后網絡進行微調以恢復損失的性能,然后繼續進行第二步,依次交替,直到滿足終止條件,比如精度下降在一定范圍內。
這一類方法原理簡單,前述提到的Google的方法也屬于這一類。當然這類框架還有可以改進之處,比如Dynamic network surgery框架[4]觀察到一些在當前輪迭代中雖然作用很小,但是在其他輪迭代中又可能重要,便在剪枝的基礎上增加了一餓spliciing操作,即對一些被剪掉的權重進行恢復,如下:
基于權重幅度的方法原理簡單,但這是比較主觀的經驗,即認為權重大就重要性高,事實上未必如此。而另一種經典的連接剪枝方法就是基于優化目標,根據剪枝對優化目標的影響來對其重要性進行判斷,以最優腦損傷(Optimal Brain Damage, OBD)[3]方法為代表,這已經是上世紀90年代的技術了。
Optimal Brain Damage首先建立了一個誤差函數的局部模型來預測擾動參數向量對優化目標造成的影響。具體來說用泰勒級數來近似目標函數E,參數向量U的擾動對目標函數的改變使用泰勒展開后如下:
其中gi是優化目標對參數u的梯度,而h是優化目標對參數u的海森矩陣。對模型剪枝的過程是希望找到一個參數集合,使得刪除掉這個參數集合之后損失函數E的增加最小,由于上面的式子需要求解損失函數的海森矩陣H,這是一個維度為參數量平方的矩陣,幾乎無法進行求解,為此需要對問題進行簡化,這建立在幾個基本假設的前提上:
(1) 參數獨立。即刪除多個參數所引起的損失的改變,等于單獨刪除每個參數所引起的損失改變的和,因此上式第三項可以去除。
(2) 局部極值。即剪枝是發生在模型已經收斂的情況下,因此第一項可以去除,并且hii都是正數,即剪枝一定會帶來優化目標函數的增加,或者說帶來性能的損失。
(3) 二次近似假定。即上式關系為二次項,最后一項可以去除。
經過簡化后只剩下了第二項,只需要計算H矩陣的對角項。它可以基于優化目標對連接權重的導數進行計算,復雜度就與梯度計算相同了,如下:
計算完之后就可以得到連接對優化目標改變的貢獻,這就是它的重要性,因此可以進行剪枝,整個流程如下:
基于優化目標的權重剪枝方法還有很多,感興趣的可以移步有三AI知識星球中的模型壓縮板塊。
2.2 粗粒度剪枝核心技術(通道剪枝)
相對于連接權重剪枝,粗粒度剪枝其實更加有用,它可以得到不需要專門的算法支持的精簡小模型。對濾波器進行剪枝和對特征通道進行剪枝最終的結果是相同的,篇幅有限我們這里僅介紹特征通道的剪枝算法代表。
通道剪枝算法有三個經典思路。第一個是基于重要性因子,即評估一個通道的有效性,再配合約束一些通道使得模型結構本身具有稀疏性,從而基于此進行剪枝。第二個是利用重建誤差來指導剪枝,間接衡量一個通道對輸出的影響。第三個是基于優化目標的變化來衡量通道的敏感性。下面我們重點介紹前兩種。
Network Trimming[5]通過激活的稀疏性來判斷一個通道的重要性,認為擁有更高稀疏性的通道更應該被去除。它使用batch normalization中的縮放因子γ來對不重要的通道進行裁剪,如下圖:
具體實現起來,就是在目標方程中增加一個關于γ的正則項,從而約束某些通道的重要性。
類似的框架還有《Rethinking the smaller-norm-less-informative assumption in channel pruning of convolution layers》[6],《Data-Driven Sparse Structure Selection》[7],讀者感興趣可以自己學習或者移步有三AI知識星球。
與基于權重幅度的方法來進行連接剪枝一樣,基于重要性因子的方法主觀性太強,而另一種思路就是基于輸出重建誤差的通道剪枝算法[8],它們根據輸入特征圖的各個通道對輸出特征圖的貢獻大小來完成剪枝過程,可以直接反映剪枝前后特征的損失情況。
如上圖,基于重建誤差的剪枝算法,就是在剪掉當前層B的若干通道后,重建其輸出特征圖C使得損失信息最小。假如我們要將B的通道從c剪枝到c',要求解的就是下面的問題,第一項是重建誤差,第二項是正則項。
該問題可以分兩步進行求解。
第一步:選擇候選的裁剪通道。
我們可以對輸入特征圖按照卷積核的感受野進行多次隨機采樣,獲得輸入矩陣X,權重矩陣W,輸出Y。然后將W用訓練好的模型初始化,逐漸增大正則因子,每一次改變都進行若干次迭代,直到beta穩定,這是一個經典的LASSO回歸問題求解。
第二步:固定beta求解W,完成最小化重建誤差,需要更新使得下式最小。
以上兩個步驟交替進行優化,最后迭代完剪枝后,就可以得到新的權重。類似的框架還有ThiNet[9]等,更多就移步有三AI知識星球吧。
以上就是粗粒度剪枝和細粒度剪枝中最主流的方法的一些介紹,當然這還只是一小部分。
?
3 剪枝算法的展望
上一節我們對一些代表性的方法的核心思想進行了總結,它們只能代表模型剪枝算法的一小部分,而模型剪枝仍然是當前學術界和工業界的研究熱點,至少還有幾個方向值得關注。
3.1 重要性因子選擇
不管是連接剪枝還是通道剪枝,前面都提到了重要性因子,即我們通過某種準則來判斷一個連接或者通道是否重要,比如范數。這是非常直觀的思想,因為它們影響了輸出的大小。但這類方法的假設前提條件太強,需要權重和激活值本身滿足一定的分布。
Geometric Median[10]方法就利用了幾何中位數對范數進行替換,那是否有更多更好的指標呢?這非常值得關注。
3.2 剪枝流程優化
當前大部分框架都是逐層進行剪枝,而沒有讓各層之間進行聯動,這其實是有問題的。因為在當前階段冗余的模塊,并不意味著對其他階段也是冗余的。以NISP[11]為代表的方法就通過反向傳播來直接對整個網絡神經元的重要性進行打分,一次性完成整個模型的剪枝。
3.3 個性化剪枝
通常來說,模型在剪枝完后進行推理時不會發生變化,即對于所有的輸入圖片來說都是一樣的計算量,但是有的樣本簡單,有的樣本復雜,以前我們給大家介紹過動態推理框架,它們可以對不同的輸入樣本圖配置不同的計算量,剪枝框架也可以采用這樣的思路,以Runtime Neural Pruning [12]為代表。
3.4 自動化剪枝
剪枝中我們通常遵循一些基本策略:比如在提取低級特征的參數較少的第一層中剪掉更少的參數,對冗余性更高的FC層剪掉更多的參數。然而,由于深度神經網絡中的層不是孤立的,這些基于規則的剪枝策略并不是最優的,也不能從一個模型遷移到另一個模型,因此AutoML方法的應用也是非常自然的,AutoML for Model Compression(AMC)是其中的代表[13],我們以前也做過介紹。
除此之外,還有訓練前剪枝,注意力機制增強等等許多方向,我們不再一一介紹,對模型剪枝感興趣的同學,歡迎到有三AI知識星球的網絡結構1000變-模型壓縮-模型剪枝板塊進行學習,數十期內容定能滿足你的求知欲。
掃碼即可加入,了解有三AI知識星球詳情請閱讀以下文章。
【雜談】萬萬沒想到,有三還有個保密的‘朋友圈’,那里面都在弄啥!
【雜談】有三AI知識星球一周年了!為什么公眾號+星球才是完整的?
參考文獻
?
[1] Zhu M, Gupta S. To prune, or not to prune: exploring the efficacy of pruning for model compression[J]. arXiv: Machine Learning, 2017.
[2] Han S, Pool J, Tran J, et al. Learning both weights and connections for efficient neural network[C]//Advances in neural information processing systems. 2015: 1135-1143.
[3] LeCun Y, Denker J S, Solla S A. Optimal brain damage[C]//Advances in neural information processing systems. 1990: 598-605.
[4] Guo Y, Yao A, Chen Y. Dynamic network surgery for efficient dnns[C]//Advances In Neural Information Processing Systems. 2016: 1379-1387.
[5] Liu Z, Li J, Shen Z, et al. Learning efficient convolutional networks through network slimming[C]//Proceedings of the IEEE International Conference on Computer Vision. 2017: 2736-2744.
[6] Ye J, Lu X, Lin Z, et al. Rethinking the smaller-norm-less-informative assumption in channel pruning of convolution layers[J]. arXiv preprint arXiv:1802.00124, 2018.
[7] Huang Z, Wang N. Data-driven sparse structure selection for deep neural networks[C]//Proceedings of the European Conference on Computer Vision (ECCV). 2018: 304-320.
[8] He Y, Zhang X, Sun J. Channel pruning for accelerating very deep neural networks[C]//Proceedings of the IEEE International Conference on Computer Vision. 2017: 1389-1397.
[9] Luo J H, Zhang H, Zhou H Y, et al. Thinet: pruning cnn filters for a thinner net[J]. IEEE transactions on pattern analysis and machine intelligence, 2018.
[10] He Y , Liu P , Wang Z , et al. Filter Pruning via Geometric Median for Deep Convolutional Neural Networks Acceleration[J]. 2018.
[11] Yu R, Li A, Chen C F, et al. Nisp: Pruning networks using neuron importance score propagation[C]//Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2018: 9194-9203.
[12] Lin J, Rao Y, Lu J, et al. Runtime Neural Pruning[C]. neural information processing systems, 2017: 2181-2191.
[13] He Y, Lin J, Liu Z, et al. AMC: AutoML for Model Compression and Acceleration on Mobile Devices[C]. european conference on computer vision, 2018: 815-832.
總結
本次我們總結了模型剪枝的核心技術,并對其重要方向進行了展望,推薦了相關的學習資源,下一期我們將介紹量化相關內容。
有三AI秋季劃-模型優化組
如果你想系統性地學習模型優化相關的理論和實踐,并獲得持續的指導,歡迎加入有三AI秋季劃-模型優化組,系統性地學習數據使用,模型使用和調參,模型性能分析,緊湊模型設計,模型剪枝,模型量化,模型部署,NAS等內容。
模型優化組介紹和往期的一些學習內容總結請參考閱讀以下文章:
有三AI秋季劃出爐,模型優化,人臉算法,圖像質量等24個項目等你來拿
【總結】有三AI秋季劃模型優化組3月直播講了哪些內容,為什么每一個從事深度學習的同學都應該掌握模型優化的內容
轉載文章請后臺聯系
侵權必究
往期精選
-
【完結】深度學習CV算法工程師從入門到初級面試有多遠,大概是25篇文章的距離
-
【完結】優秀的深度學習從業者都有哪些優秀的習慣
-
【完結】給新手的12大深度學習開源框架快速入門項目
-
【完結】總結12大CNN主流模型架構設計思想
-
【知乎直播】千奇百怪的CNN網絡架構等你來
-
【AI不惑境】數據壓榨有多狠,人工智能就有多成功
-
【AI不惑境】網絡深度對深度學習模型性能有什么影響?
-
【AI不惑境】網絡的寬度如何影響深度學習模型的性能?
-
【AI不惑境】學習率和batchsize如何影響模型的性能?
-
【AI不惑境】殘差網絡的前世今生與原理
-
【AI不惑境】移動端高效網絡,卷積拆分和分組的精髓
-
【AI不惑境】深度學習中的多尺度模型設計
-
【AI不惑境】計算機視覺中注意力機制原理及其模型發展和應用
總結
以上是生活随笔為你收集整理的【AI不惑境】模型剪枝技术原理及其发展现状和展望的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【总结】有三AI秋季划图像质量组3月直播
- 下一篇: 【星球知识卡片】残差网络家族10多个变种