1. 程式人生 > >吳恩達-深度學習-卷積神經網路-Stride 筆記

吳恩達-深度學習-卷積神經網路-Stride 筆記

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

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

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

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

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

所以在這個例子中,我們用3×3的矩陣卷積一個7×7的矩陣,得到一個3×3的輸出。輸入和輸出的維度是由下面的公式決定的。如果你用一個的過濾器卷積一個的影象,你的padding為,步幅為,在這個例子中,你會得到一個輸出,因為現在你不是一次移動一個步子,而是一次移動個步子,輸出於是變為

在我們的這個例子裡,,,,,,即3×3的輸出。

現在只剩下最後的一個細節了,如果商不是一個整數怎麼辦?在這種情況下,我們向下取整。這是向下取整的符號,這也叫做對進行地板除(floor),這意味著向下取整到最近的整數。這個原則實現的方式是,你只在藍框完全包括在影象或填充完的影象內部時,才對它進行運算。如果有任意一個藍框移動到了外面,那你就不要進行相乘操作,這是一個慣例。你的3×3的過濾器必須完全處於影象中或者填充之後的影象區域內才輸出相應結果,這就是慣例。因此正確計算輸出維度的方法是向下取整,以免不是整數。

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

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

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

變為,這相當於將3×3的過濾器做了個映象,在水平和垂直軸上(此處應該是先順時針旋轉90得到,再水平翻轉得到)。然後你再把這個翻轉後的矩陣複製到這裡(左邊的影象矩陣),你要把這個翻轉矩陣的元素相乘來計算輸出的4×4矩陣左上角的元素,如圖所示。然後取這9個數字,把它們平移一個位置,再平移一格,以此類推。

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

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

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

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

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