2017-04-13 73 views
3

我正在閱讀Szegedy等人的Inception論文:https://arxiv.org/abs/1512.00567 我很難理解如何通過用2層3x3濾波器替換單個5x5濾波器來減少計算量第3.1節)。減少卷積神經網絡中的濾波器大小

enter image description here

尤其是這樣一段話:

如果我們將naivly不重用相鄰網格磚之間的計算 滑動的網絡,我們會增加計算 成本。滑動該網絡可以由兩個3x3卷積 層表示,其重複使用相鄰瓦片之間的激活。

我不明白我們如何重用這些激活。

回答

1

所以首先,筆者指出這:

這樣,我們 結束了淨(9 + 9)/ 25×還原計算,在一個相對增益導致 28%通過這種分解。

他是對的:對於5x5過濾器,您必須使用25個(5*5)個體權重。對於兩個3x3濾鏡,您必須使用9 + 9(3*3 + 3*3)個別權重。 因此使用兩個3x3過濾器需要較少的參數。然而,你說得對,這並不意味着它需要更少的計算:乍一看,使用兩個3x3過濾器需要更多的操作。

我們來比較給定n*n輸入的兩個選項的操作量。漫遊:對給定的輸入((n - filtersize + 1)^2)5×5濾波器的

  1. 計算輸出尺寸,並且其相應的操作
  2. 計算第一3×3濾波器的輸出尺寸(相同的公式如上),及其相應的操作
  3. 計算第二3×3濾波器的輸出尺寸,一個第二其相應的操作

讓我們先從一個5x5輸入:

1. (5 - 5 + 1)^2 = 1x1. So 1*1*25 operations = 25 operations 
2. (5 - 3 + 1)^2 = 3x3. So 3*3*9 operations = 81 operations 
3. (3 - 3 + 1)^2 = 1x1. So 1*1*9 operations = 9 operations 
So 25 vs 90 operations. Using a single 5x5 filter is best for a 5x5 input. 

接下來,6x6輸入:

1. (6 - 5 + 1)^2 = 2x2. So 2*2*25 operations = 100 operations 
2. (6 - 3 + 1)^2 = 4x4. So 4*4*9 operations = 144 operations 
3. (4 - 3 + 1)^2 = 2x2. So 2*2*9 operations = 36 operations 
So 100 vs 180 operations. Using a single 5x5 filter is best for a 6x6 input. 

讓我們跳一個未來,8x8輸入:

1. (8 - 5 + 1)^2 = 4x4. So 4*4*25 operations = 400 operations 
2. (8 - 3 + 1)^2 = 6x6. So 6*6*9 operations = 324 operations 
3. (4 - 3 + 1)^2 = 4x4. So 4*4*9 operations = 144 operations 
So 400 vs 468 operations. Using a single 5x5 filter is best for a 8x8 input. 

通知的格局?鑑於n*n輸入尺寸,對於5x5過濾器的操作有以下公式:

(n - 4)*(n - 4) * 25 

而對於3x3的過濾器:

(n - 2)*(n - 2) * 9 + (n - 4) * (n - 4) * 9 

所以我們繪製這些:

enter image description here

他們似乎相交!從上圖可以看出,從n=10開始的兩個3x3濾波器的操作次數似乎更少!

結論:看起來在n=10之後使用兩個3x3濾波器似乎是有效的。此外,不管n,與單個5x5濾波器比較,需要調整兩個3x3濾波器的參數較少。


文章是一種奇怪的是,它使得它感覺像使用兩個3×3濾波器在一個5×5濾波器「明顯的」出於某種原因:

此設置明確減少了參數個數通過共享 相鄰瓷磚之間的權重。

似乎天生 再次利用平移不變性和兩層卷積架構

更換完全 連接組件。如果我們將naivly幻燈片

+0

謝謝你的回答,我對延遲迴復表示歉意。實際上,我發現他們在論文中的意思是:他們對填充的輸入進行卷積運算,因此輸出映射的大小保持不變(輸入和輸出都是N×N)。如果考慮到這一點,那麼計算結果就會減少25/18。請用這些信息更新您的答案,我會接受它。 – MichaelSB