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