More is Less 卷積網路加速

2021-07-30 13:33:09 字數 1748 閱讀 2462

一篇講網路加速的**,來自2017cvpr。

目前做神經網路加速的主要有這幾個方面:低秩分解,定點運算、向量量化、稀疏表示、特殊的輕量級網路結構

再介紹本文方法之前,需要了解一下常見的卷積是怎樣實現的。以caffe中的卷積為例,首先通過im2col將輸入展開重排成乙個大矩陣,然後執行矩陣乘法。具體可參考知乎上的乙個高票回答,圖示很清楚,

下面用公式說明一下:

假設輸入 \(x\in r^\), 一共有 \(t\)個 \(k\times k \times c\)大小的卷積核,再假設卷積stride=1且存在padding,即保證輸出 \(v\) 的大小與輸入一致。

首先,通過im2col將輸入展開重排成乙個大矩陣 \(\hat x\in r^\), 卷積核也被整理成了乙個矩陣 \(w \in r^\), 於是輸出 \(v\in r^\) 直接通過矩陣乘法計算:\(v = \hat x \times w\).

另一方面,我們通常使用relu來對進行啟用處理: \(\hat v_ = max(v_,0)\). 結合上面的卷積實現原理,我們可以看出如果啟用後某個點的所有通道都為0,就相當於在矩陣乘法時可以直接省略 \(\hat x\)的相應行。遺憾的是,這有一點馬後炮的感覺,因為我們計算完之後才知道是不是會得到0.

整體的實現如下圖:

如上圖,還是先假設輸入 \(x\in r^\), 一共有 \(t\)個 \(k\times k \times c\)大小的卷積核,再假設卷積stride=1且存在padding,即保證輸出 \(v\) 的大小與輸入一致。

黑色部分表示原始結構的卷積,橘黃色部分表示新增的乙個輔助層,該輔助層的卷積引數有兩種選擇,第一種是 \(1\times1 \times c\times t\),第二種是 \(k\times k\times c\times 1\),以第二種為例,其卷積輸出為 \(v^ \in r^\)。

\(v^\)由於經過relu和一些稀疏約束,因此只有一部分值不為0。因此,根據\(v^\)我們可以控制計算原始卷積 \(v\)時,省略掉展開矩陣 \(\hat x\) 的對應行,從而完成加速

文章解釋了為什麼不使用第一種\(1\times1 \times c\times t\)來產生\(v^\),主要是因為這會導致沒辦法一次完成所有矩陣乘法。

從上面的解釋來看,\(v^\)的稀疏度決定了加速比。

為了讓 \(v^\) 更稀疏,文章一方面使用了relu啟用,同時也嘗試對 \(v^\)進行平滑的稀疏正則化\(l_1l_2(x) = \mu||x||+\rho |x|\), 但是發現很難優化。

後來作者發現bn+relu可以使得輸出更稀疏:

文章將該方法稱為low-cost collaborative layer (lccl)。 idea很讚,但是考慮到帶來的訓練難度,其產生的加速效果就不是很令人滿意了。

下圖是在imagenet上的實驗結果:

卷積網路future 卷積神經網路Debug隨記

瀉藥,人在家中,剛下被窩。2020真是多災多難的一年,又是蝗災,又是冠狀病毒,加上登革熱 埃博拉 禽流感,還有森林大火 火山噴發,搞得大家人心惶惶。而我在2020年崩潰過的程式,有望趕超人生中前幾年之和。上海是境外輸入非常嚴重的地區,這學期開學無望了,可以在家持續躺屍。放假 霧 五個月,調了五個月的...

卷積網路計算

一 示例 輸入 227 227 3 這個影象被96個大小規格為11 11 3 同樣也是三通道了 的卷積核,進行特徵提取。1 針對乙個卷積核 乙個卷積核有多少個神經元?乙個感受野 11乘11乘3 即卷積核的大小,對應乙個神經元,即乙個卷積核包含的神經元的個數等於經過該卷積核後生成的特徵圖的大小 55乘...

卷積神經網路 卷積層

1 2 該部落格主要是對網上知識點的學習和整理,方便日後複習。侵刪。卷積神經網路 cnn 一般由輸入層 卷積層 啟用函式 池化層 全連線層組成,即input 輸入層 conv 卷積層 relu 啟用函式 pool 池化層 fc 全連線層 當我們給定乙個 x 的圖案,計算機怎麼識別這個圖案就是 x 呢...