引言
這篇文章介紹一種不同于針對壓縮單個權(quán)重的方法:多個權(quán)重數(shù)據(jù)組合為向量,將向量視為一個整體,映射到其他向量空間,完成壓縮。作者在resnet-50上做了實驗,將100MB權(quán)重壓縮到了5MB(實現(xiàn)了20倍壓縮比例),同時在imageNet上測試的top-1精度保持的很好(76.1%)。Resnet是一種經(jīng)典的殘差網(wǎng)絡(luò),在2015年的imageNet大賽中獲得第一名,被廣泛應(yīng)用在圖像識別和分類中。向量壓縮方法在resnet上的成功運用,會大大推動resnet在硬件加速中的應(yīng)用。 1
背景介紹
也許是神經(jīng)網(wǎng)絡(luò)較強的泛化能力和較窄的應(yīng)用場景之間的矛盾,造成了網(wǎng)絡(luò)參數(shù)存在很大冗余。因此各種壓縮方法五花八門,層出不窮。
有的是將權(quán)重數(shù)據(jù)低精度化,比如前一篇介紹的二值網(wǎng)絡(luò),還有三值,四值網(wǎng)絡(luò),8bit,16bit定點網(wǎng)絡(luò)等等。這些主要是考慮整體上降低每個權(quán)重的表達精度。但是隨著精度降低越大,網(wǎng)絡(luò)的分類能力就會越低。
另一類方法是向量量化。其主要思想是將原始高維權(quán)重空間分割成低維子空間的乘積,然后對子空間進行重新映射,通過映射到某個新的集合來完成整體數(shù)據(jù)的壓縮。實際上是尋找不同向量之間的共性,用同一個新向量來替代,實現(xiàn)聚類。這樣就減少了不同子向量的個數(shù),實現(xiàn)了數(shù)據(jù)壓縮。
還有一種方法是剪枝。即去除一些不重要的網(wǎng)絡(luò)連接或者參數(shù),比如在LSTM優(yōu)化中使用的structured compression,就是直接去除多個相鄰的不重要的權(quán)重參數(shù)。
利用以上的方法產(chǎn)生了多個壓縮的網(wǎng)絡(luò)結(jié)構(gòu),比如squeezeNet,NASNet,ShuffleNet,MobileNet等。這些網(wǎng)絡(luò)是從網(wǎng)絡(luò)結(jié)構(gòu)的設(shè)計開始,就權(quán)衡數(shù)據(jù)量和分類精度,來實現(xiàn)既有小的權(quán)重數(shù)據(jù),同時又有好的表現(xiàn)力。
2
壓縮方法
這篇論文的創(chuàng)新性在于在采用向量壓縮的基礎(chǔ)上,最小化激活函數(shù)的輸入而不是權(quán)重的均方差。相比于傳統(tǒng)方法,其在測試集中有更好的分類能力,同時不需要任何監(jiān)督過程,只是給出一定數(shù)量的輸入圖片就行了。
圖2.1 綠色的線是論文的方法,在測試集和中有更好的分類能力,而傳統(tǒng)方法會在壓縮過程中引入噪聲,造成分類精度的降低
論文首先從全連接的量化講解,之后推廣到卷積的壓縮。假設(shè)一個全連接層有權(quán)重: 將每列W分割成m個連續(xù)的子向量,然后讓網(wǎng)絡(luò)學(xué)習(xí)一個字典可以表示這mC_out個向量。子向量維度為d=C_in/m。假設(shè)字典有k個數(shù)據(jù){C_1, C_2, …, C_k}。任何一個d維向量都被映射到這個空間中,于是一個W的列向量映射為: 這個字典是通過最小化權(quán)重的均方差來學(xué)習(xí): 從實際來講,我們要減小的并不是權(quán)重之間的差異,而是結(jié)果的差異。所以論文從更直觀的角度來最小化輸出結(jié)果: 其中,
是全連接層的輸出結(jié)果。
具體實現(xiàn)步驟為:
1) 為了匹配W子向量,輸入x也進行相對應(yīng)的分割。由BxC_inàBxmxd;
2) 對每個子W向量進行聚類,分配字典中的向量c:
其中v是W的子向量,c為字典中向量。X^為x的子空間。
2) 更新字典數(shù)據(jù)c:假設(shè)對應(yīng)c向量已經(jīng)分配了一定數(shù)量的v,那么通過以下方法來更新c:
全連接進行的是矩陣運算,而卷積層是由卷積核來實現(xiàn)圖像的卷積。兩者不同,如何將前面的方法用到卷積層呢?其實向量壓縮算法本身不在做什么運算,而是在于對權(quán)重的重新分類。從這點來看,一個卷積層權(quán)重為: 其中KxK為一個卷積核大小,可以作為一個基本的子向量單位。我們可以選擇拆分的W的字向量大小為hxKxK。如果h=1,那么一個卷積核就被當做一個要映射的子向量。而輸出不再是矩陣乘法而是卷積運算: 這樣就能夠應(yīng)用以上方法來對卷積層權(quán)重進行壓縮了。
圖2.2 卷積層權(quán)重數(shù)據(jù)進行KxK子空間分解
3
實驗結(jié)果
論文在resnet-18和resnet-50上進行了實驗。3x3卷積的子空間被設(shè)置為9或者18,而pointwise的權(quán)重子空間設(shè)置為4或者8.字典的大小設(shè)置了四種不同數(shù)量:256,512,1024,2048。在開始量化前,從訓(xùn)練集中隨機取得1024幅圖片作為量化輸入,執(zhí)行2節(jié)中的量化步驟。結(jié)果綜合了存儲減小和分類精度兩方面,如下圖所示: 圖3.1 resnet-18和resnet-50的壓縮比例
從圖中看出,采用小的子空間和大的字典元素數(shù)目有更好的分類精度,但是壓縮率低。在實際應(yīng)用中可以根據(jù)需要來調(diào)節(jié)這些參數(shù)獲得你期望的壓縮率和識別精度。
圖3.1 resnet-18和resnet-50的壓縮比例
從圖中看出,采用小的子空間和大的字典元素數(shù)目有更好的分類精度,但是壓縮率低。在實際應(yīng)用中可以根據(jù)需要來調(diào)節(jié)這些參數(shù)獲得你期望的壓縮率和識別精度。
圖3.2 k=256下,兩個網(wǎng)絡(luò)的壓縮率和top-1精確度
結(jié)論
本文介紹了一種利用向量壓縮來降低復(fù)雜的神經(jīng)網(wǎng)絡(luò)的數(shù)據(jù)量的方法,通過resnet上的實驗,能夠看出這種方法相對于單純的壓縮單個權(quán)重,可以保持良好的精確度,同時能夠獲得一定壓縮比例。
文獻
1 Pierre Stock, A.J., R′emi Gribonval, Benjamin Graham, Herv′e J′egou, And the Bit Goes Down Revisiting the Quantization of Neural Networks. arXiv preprint, 2019.
-
神經(jīng)網(wǎng)絡(luò)
+關(guān)注
關(guān)注
42文章
4777瀏覽量
100989
原文標題:【網(wǎng)絡(luò)壓縮二】向量壓縮方法
文章出處:【微信號:FPGA-EETrend,微信公眾號:FPGA開發(fā)圈】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論