引言
在CNN網(wǎng)絡(luò)中卷積運(yùn)算占據(jù)了最大的計算量,壓縮卷積參數(shù)可以獲得顯著的硬件加速器的性能提升。在即將介紹的這篇論文中,作者就是通過張量的降維來降低卷積計算量的。作者通過CP分解將一個4D張量分解成多個低維度的張量,并且最后通過微調(diào)參數(shù)來提升網(wǎng)絡(luò)精度。
1 原理
CNN卷積參數(shù)可以看做一個4D的張量。其中兩個維度是對應(yīng)一幅feature map的兩個空間方向。一個方向?qū)?yīng)輸入feature map,另外一個維度為輸出feature map方向。一個全卷積運(yùn)算是對應(yīng)每個輸入feature map卷積求和,如圖所示。通過CP分解,一個全卷積運(yùn)算變成了連續(xù)多步一維卷積運(yùn)算。圖中S維度是多個輸入feature map堆疊成的,dxd是feature map的空間維度。卷積核在feature map兩個空間維度進(jìn)行劃窗運(yùn)動,圖中一個綠色方塊內(nèi)的結(jié)果求和得到一幅輸出feature map中的一個像素點。T是多幅輸出feature map堆疊成的。
那么這樣的分解如何來保證和全卷積結(jié)果的不變呢?其實是要保證kernel不變就行了。然后再通過一些數(shù)學(xué)變化將全卷積變?yōu)檫B續(xù)多步卷積。已知一個二維矩陣可以進(jìn)行如下分解:
其中R是矩陣A的秩。計算量的降低取決于A的秩,秩越小,那么就可以被分解為更小矩陣,計算量降低的就越大。如果A的秩為其維度d,那么如果保持分解后秩不變,那么計算量是不能減小的,所以關(guān)鍵是看矩陣的秩的大小,秩的大小反映了網(wǎng)絡(luò)的信息冗余度。將之推廣到多維張量,有:
假設(shè)A張量維度為n1xn2x…nd,那么通過上述分解,參數(shù)量就大為降低,為(n1+n2+…nd)R個。
對于二維矩陣,可以使用SVD方式來計算分解的矩陣。但是當(dāng)維數(shù)大于2,則無法使用這種方式了。作者選擇了非線性最下平方差(non-linear least squares)方法,其通過降低L2項來獲得分解矩陣。NLS方法計算的1維分解矩陣精度更好。
4D張量分解了,那么如何來將卷積計算分解為多步連續(xù)運(yùn)算呢?一個全卷積運(yùn)算表示為:
K為卷積核,維度為dxdxSxT。經(jīng)過分解后卷積核為:
然后通過重新排序可以得到連續(xù)多步卷積運(yùn)算:
2 實驗
在字符識別上,作者使用4層卷積網(wǎng)絡(luò),在不進(jìn)行CP降維時,識別精度為91.2%。通過CP降維后,精度降低了1%,但是識別速率提升了8.5倍。
在ALEXNET網(wǎng)絡(luò)上,CP降維實現(xiàn)了6.6倍速率提升,但是精度只降低了1%。
結(jié)論
CP分解降低了權(quán)重的秩,進(jìn)而降低了計算量以及參數(shù)總量。多適用于小型的分類網(wǎng)絡(luò)。
-
卷積
+關(guān)注
關(guān)注
0文章
95瀏覽量
18529 -
硬件加速器
+關(guān)注
關(guān)注
0文章
42瀏覽量
12820
原文標(biāo)題:【網(wǎng)絡(luò)壓縮四】CP分解
文章出處:【微信號:FPGA-EETrend,微信公眾號:FPGA開發(fā)圈】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論