1. 程式人生 > >【卷積神經網路的加速】Speeding up Convolutional Neural Networks with Low Rank Expansions

【卷積神經網路的加速】Speeding up Convolutional Neural Networks with Low Rank Expansions

主題:【深度卷積神經網路的加速】

Speeding up Convolutional Neural Networks with Low Rank Expansions

附上論文連結:上一篇中提到的低秩方法的參考文獻

http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.748.118&rep=rep1&type=pdf

摘要:

1.卷積層的重複性計算消耗了大部分時間,論文提出了兩種方法來加速這些計算過程。

通過cross-channel 和 filter redundancy 的方法來構建秩為1的低秩filter。

2. 方法與架構無關所以可以輕鬆應用於現有的CPU以及GPU的卷積加速。

  • Introduction
  1. 對已經訓練好的CNN,進行少量的修改已達到加速的效果。效能會有少量的損失,但是可以調整到所需要的級別。
  2. 主要是利用了不同特徵通道(channel)和 濾波器(filter)之間的冗餘。
  3. 論文提供了兩種近似方案,併為每種方案提供兩種優化方法,每一種優化方案都能夠應用於當今的GPU和CPU
  • Related Work
  1.  演算法部分

     2.硬體部分

     cuda-convnet 和Caffe 表明高度優化的CPU和GPU程式碼可以為CNN提供卓越的計算效能。

     通過在GPU上的批量影象上有效計算的FFT,在傅立葉域中執行卷積。

     方法表明,可以利用特定的CPU架構,例如,通過使用SSSE3和SSSE4定點指令以及記憶體中資料的適當對齊。

     Farabet表明,使用CNN的定製FPGA實現可以大大提高處理速度。

     3.特定架構

     選擇性搜尋的搜尋空間縮減技術通過廉價地識別影象中的少量候選物件位置,大大減少了必須計算CNN的完全前向通過的次數。

     PS:這篇論文中提出的優化方法不依託於任意架構,可與上述所提的方法進行融合。

三.Filter Approximations

利用不同通道與filter之間的存在冗餘這一事實,對已訓練好的神經網路進行加速。

第一種方法

單通道輸入影象與d*d*N的filter進行卷積,複雜度為O(d*d*N*h’*w’)h’,w’為輸出的尺寸

通過M個濾波器的較小基組的線性組合來近似濾波器組

得到的新的複雜度

時,複雜度得到有效的壓縮。

另一種方法:

將(d*d)filter分解為一列(d*1)乘以一行(1*d)的序列的乘積,這樣一來秩為1.,且卷積關係相互獨立。複雜度可以減少為O(2dH’W’)。

論文使用的方法:

利用冗餘在通道維度中執行低秩分解,可以實現大幅加速。

PS:::FFT的方法可以與該方法結合,對單一卷積過程進行加速,但是由於計算FFT時產生的開銷,FFT加速往往對大型濾波器更好)

2.1Approximating Convolutional Neural Network Filter Banks

1.用自己的話介紹了CNN的過程,他說卷積層是最expensive的,不大理解

2.3D的filter與輸入的channel數量相同,舉了RGB影象作為輸入的例子。

N為卷積核的數量,若channel數位C的話,上面模型的複雜度位O(CNd*dH‘W’)

提出兩種優化方法:

  1. M<N,使用M個filter進行線性組合來近似原filter.從下圖右半部分就可以準確理解a={a1…..aN}為係數,優化之後,複雜度為O(CMd*dH‘W’+cMNH’W’)。若再進一步考慮到將近似過後的filter進行分解,分解成秩為1的filter(一行乘以一列,數量為M,下圖左半部份),複雜度進一步減少為O(MC(d + N)H‘W‘),所以當M<<d*min{d,N}時,該方法可有效降低複雜度。PS:上圖以單一通道為例。
  2. 根據1中所提到的方法,對於每個通道中的filter都可以進行2D的可分解filter來近似。方法1之利用了輸出時的通道間的冗餘,方法2將會結合輸入域輸出時的通道間的冗餘

 

假定W>>d,那麼上圖複雜度可以被簡化為O(K(N +C)dH0W 0)

當K(N +C)<<NCd時,該方法有顯著提高。

    1. optimization

針對上文提到的兩種scheme,提出兩種具體的優化方法來得到最優的可分解的fiter:

  1. 最小化filter重建誤差直接重建原始濾波器。
  1. 針對Scheme1

函式雙凸,在給定Sm的情況下,{an}的值可以唯一確定

左半部分為L2重建誤差,右半部分核範數||Sm||*,詳細推理過程在論文

  1. 針對Scheme2

通過用兩個變數對可分性進行建模來避免核範數約束,這種優化更簡單。

在優化水平和垂直濾波器組之間交替執行共軛梯度下降,得到最優解。

  1. 最小化輸出誤差,間接地近似卷積層filter。

直接對權值引數進行估計得到的最佳結果的結果不一定會是預測結果最好的。

作為替代方案,可以通過在給定訓練資料的情況下重建原始卷積層的輸出來對filter進行估計優化。

L是卷積層的層數,是的l層卷積層的輸出,X={xi}為輸入的訓練資料

通過原始卷積層的輸出和優化後的輸出的L2誤差來反向傳播訓練近似層。*(如上圖所示),然後一層一層的向下進行。

兩個優點:1.和輸入資料相關,原始濾波器中和資料相關性較小的維度將會被忽略。2.近似層的優化可以通過學習來一步一步疊加。例:當地一層被估計好了之後,接下來的輸入資料將會走向估計層而不是原始層。

PS:若直接根據分類的acc結果對整個網路進行優化估計,則會由於過擬合而加入懲罰項。

  • 實驗過程與結

1.使用預訓練的CNN對場景文字執行不區分大小寫的字元分類。給出基本模型細節以及加速優化的效果。

2.原始:四層CNN,輸出層softmax進行分類,輸入是24*24的灰度影象,輸出為26個不區分大小寫的字母和10個數字(共36類)

Maxout groups :

3.訓練集樣本數量為163222,測試集數量5379(在ICDAR2003的訓練資料集中移除非字元和數字的樣本)CNN的訓練使用SGD完成, 除了第一層卷積層之外,其餘所有層dropout=0.5防止過擬合,並且在訓練過程中自適應地降低學習率。

4.在第二和第三層卷積層應用之前提到的優化方法。(第四層核為1*1,第一層會對輸入造成影響)網路加速效果顯著,因為Conv2和Conv3佔整個網路處理時間的90%,如表所示。

重建誤差隨著加速的倍速增加而逐漸惡化,與濾波器重建相比,資料重建優化方案對於相同的加速比給出較低的誤差。(第二種優化方案效果更佳)

在不同的解決方案下,加速倍速的提升對acc造成的影響。