吳恩達深度學習筆記(75)-卷積步長講解(Strided convolutions)

卷積步長(Strided convolutions)

卷積中的步幅是另一個構建卷積神經網絡的基本操作,讓我向你展示一個例子。

吳恩達深度學習筆記(75)-卷積步長講解(Strided convolutions)

如果你想用3×3的過濾器卷積這個7×7的圖像,和之前不同的是,我們把步幅設置成了2。你還和之前一樣取左上方的3×3區域的元素的乘積,再加起來,最後結果為91。

吳恩達深度學習筆記(75)-卷積步長講解(Strided convolutions)

只是之前我們移動藍框的步長是1,現在移動的步長是2,我們讓過濾器跳過2個步長,注意一下左上角,這個點移動到其後兩格的點,跳過了一個位置。然後你還是將每個元素相乘並求和,你將會得到的結果是100。

吳恩達深度學習筆記(75)-卷積步長講解(Strided convolutions)

現在我們繼續,將藍色框移動兩個步長,你將會得到83的結果。當你移動到下一行的時候,你也是使用步長2而不是步長1,所以我們將藍色框移動到這裡:

吳恩達深度學習筆記(75)-卷積步長講解(Strided convolutions)

注意到我們跳過了一個位置,得到69的結果,現在你繼續移動兩個步長,會得到91,127,最後一行分別是44,72,74。

吳恩達深度學習筆記(75)-卷積步長講解(Strided convolutions)

所以在這個例子中,我們用3×3的矩陣卷積一個7×7的矩陣,得到一個3×3的輸出。輸入和輸出的維度是由下面的公式決定的。如果你用一個f×f的過濾器卷積一個n×n的圖像,你的padding為p,步幅為s,在這個例子中s=2,你會得到一個輸出,因為現在你不是一次移動一個步子,而是一次移動s個步子,輸出於是變為((n+2p-f)/s+1)×((n+2p-f)/s+1)

在我們的這個例子裡,n=7,p=0,f=3,s=2, (7+0-3)/2+1=3,即3×3的輸出。

吳恩達深度學習筆記(75)-卷積步長講解(Strided convolutions)

現在只剩下最後的一個細節了,如果商不是一個整數怎麼辦?在這種情況下,我們向下取整(記得哦,這個比較重要)⌊ ⌋這是向下取整的符號這也叫做對z進行地板除(floor),這意味著z向下取整到最近的整數。

這個原則實現的方式是,你只在藍框完全包括在圖像或填充完的圖像內部時,才對它進行運算。如果有任意一個藍框移動到了外面,那你就不要進行相乘操作,這是一個慣例。你的3×3的過濾器必須完全處於圖像中或者填充之後的圖像區域內才輸出相應結果,這就是慣例。因此正確計算輸出維度的方法是向下取整,以免(n+2p-f)/s不是整數。

吳恩達深度學習筆記(75)-卷積步長講解(Strided convolutions)

總結一下維度情況,如果你有一個n×n的矩陣或者n×n的圖像,與一個f×f的矩陣卷積,或者說f×f的過濾器。Padding是p,步幅為s沒輸出尺寸就是這樣:

吳恩達深度學習筆記(75)-卷積步長講解(Strided convolutions)

可以選擇所有的數使結果是整數是挺不錯的,儘管一些時候,你不必這樣做,只要向下取整也就可以了。你也可以自己選擇一些n,f,p和s的值來驗證這個輸出尺寸的公式是對的。

吳恩達深度學習筆記(75)-卷積步長講解(Strided convolutions)

在講下一部分之前,這裡有一個關於互相關和卷積的技術性建議,這不會影響到你構建卷積神經網絡的方式,但取決於你讀的是數學教材還是信號處理教材,在不同的教材裡符號可能不一致。如果你看的是一本典型的數學教科書,那麼卷積的定義是做元素乘積求和,實際上還有一個步驟是你首先要做的,也就是在把這個6×6的矩陣和3×3的過濾器卷積之前,首先你將3×3的過濾器沿水平和垂直軸翻轉,所以

吳恩達深度學習筆記(75)-卷積步長講解(Strided convolutions)

這相當於將3×3的過濾器做了個鏡像,在水平和垂直軸上(整理者注:此處應該是先順時針旋轉90得到

吳恩達深度學習筆記(75)-卷積步長講解(Strided convolutions)

再水平翻轉得到

吳恩達深度學習筆記(75)-卷積步長講解(Strided convolutions)

然後你再把這個翻轉後的矩陣複製到這裡(左邊的圖像矩陣),你要把這個翻轉矩陣的元素相乘來計算輸出的4×4矩陣左上角的元素,如圖所示。然後取這9個數字,把它們平移一個位置,再平移一格,以此類推。

所以我們在這定義卷積運算時,我們跳過了這個鏡像操作。從技術上講,我們實際上做的,我們在前面視頻中使用的操作,有時被稱為互相關(cross-correlation)而不是卷積(convolution)。但在深度學習文獻中,按照慣例,我們將這(不進行翻轉操作)叫做卷積操作。

總結來說,按照機器學習的慣例,我們通常不進行翻轉操作。從技術上說,這個操作可能叫做互相關更好。但在大部分的深度學習文獻中都把它叫做卷積運算,因此我們將在這些視頻中使用這個約定。如果你讀了很多機器學習文獻的話,你會發現許多人都把它叫做卷積運算,不需要用到這些翻轉。

事實證明在信號處理中或某些數學分支中,在卷積的定義包含翻轉,使得卷積運算符擁有這個性質,即(A*B)*C=A*(B*C),這在數學中被稱為結合律。這對於一些信號處理應用來說很好,但對於深度神經網絡來說它真的不重要,因此省略了這個雙重鏡像操作,就簡化了代碼,並使神經網絡也能正常工作。

根據慣例,我們大多數人都叫它卷積,儘管數學家們更喜歡稱之為互相關,但這不會影響到你在編程練習中要實現的任何東西,也不會影響你閱讀和理解深度學習文獻。

現在你已經看到了如何進行卷積,以及如何使用填充,如何在卷積中選擇步幅。但到目前為止,我們所使用的是關於矩陣的卷積,例如6×6的矩陣。在下一個筆記中,你將看到如何對立體進行卷積,這將會使你的卷積變得更加強大,讓我們繼續下一個筆記吧。


分享到:


相關文章: