1. 程式人生 > >深度學習卷積的直觀理解

深度學習卷積的直觀理解

轉自 | AI研習社

註明一下出處。

單通道卷積過程:

       從卷積核(圖中3×3的陰影矩陣)開始,它一個小的權值矩陣。這個卷積核在 2 維輸入資料上「滑動」,對當前輸入的部分元素進行矩陣乘法,然後將結果匯為單個輸出畫素。

卷積核重複這個過程知道遍歷了整張圖片,將一個二維矩陣轉換為另一個二維矩陣。輸出特徵實質上是在輸入資料相同位置上的加權和(權值是卷積核本身的值)。

輸入資料是否落入這個「大致相似區域」,直接決定了資料經過卷積核後的輸出。這意味著卷積核的尺寸直接決定了生成新的特徵時匯合了多少(或幾個)輸入特徵。

這與全連線層完全相反。在上面的例子中,我們的輸入特徵為 5*5=25,輸出資料為 3*3=9. 如果我們使用標準的全連線層,就會產生一個 25*9=225 個引數的權值矩陣,每個輸出都是所有輸入資料的加權求和。卷積操作允許我們只用 9 個引數來實現這個變換,每個輸出特性不用「檢視」每個輸入特徵,而是隻是「檢視」來自大致相同位置的輸入特徵。

介紹兩種卷積層中常用的技術:Zero Padding 和 Strides

  • Zero Padding:如果你看到上面的動畫,那麼會注意到在卷積核滑動的過程中,邊緣基本會被「裁剪」掉,將 5*5 特徵矩陣轉換為 3*3 的特徵矩陣。邊緣上的畫素永遠不在卷積核的中心,因為核心沒有任何東西可以擴充套件到邊緣之外。這並不理想,因為我們經常希望輸出的尺寸等於輸入。

                              zero padding

       Padding 做了一些非常機智的辦法來解決這個問題:用額外的「假」畫素(通常值為 0,因此經常使用的術語「零填充」)填充邊緣。這樣,在滑動時的卷積核可以允許原始邊緣畫素位於其中心,同時延伸到邊緣之外的假畫素,從而產生與輸入相同大小的輸出。

  • Striding:運行卷積層時,我們通常希望輸出的尺寸是比輸入更低。這在卷積神經網路中是常見的,在增加通道數量的同時空間尺寸減小。其中一種方法是使用池化層(例如,取每 2×2 網格的平均值/最大值將空間維度減半)。還有一種方法是使用 Striding:

      Stride 的想法是改變卷積核的移動步長跳過一些畫素。Stride 是 1 表示卷積核滑過每一個相距是 1 的畫素,是最基本的單步滑動,作為標準卷積模式。Stride 是 2 表示卷積核的移動步長是 2,跳過相鄰畫素,影象縮小為原來的 1/2。Stride 是 3 表示卷積核的移動步長是 3,跳過 2 個相鄰畫素,影象縮小為原來的 1/3

多通道卷積:

       上面一節描述了具有單個輸入通道的影象。實際上,大多數輸入影象都是 3 通道的,通道數只會增加你的網路深度。通常我們會將影象的通道視作一個整體,強調其整體的一面而不關注各自的差異。

                                                              RBG 的三通道影象 

                                                 濾波器:卷積核的集合(多通道情況)

       濾波器和卷積核這兩個術語之間有著本質的區別:僅在 1 通道的情況下,濾波器和核心這兩個術語等價,但在一般情況下,它們是不同的。每個濾波器實際上是多個卷積核的集合,圖層的每個輸入通道都對應有一個卷積核,並且是唯一的。

但是在多通道情況下,卷積層中的每個濾波器都只會輸出一個通道,他們是這樣實現的:

       濾波器的每個卷積核在各自的輸入通道上「滑動」,產生各自的計算結果。一些核心可能比其他核心具有更大的權重,以便比某些核心更強調某些輸入通道(例如,濾波器的紅色通道卷積核可能比其他通道的卷積核有更大的權重,因此,對紅色通道特徵的反應要強於其他通道)。

640

然後將每個通道處理的結果匯在一起形成一個通道。濾波器的卷積核各自產生一個對應通道的輸出,最後整個濾波器產生一個總的輸出通道。

再加上一個偏置項。偏置在這裡的作用是對每個輸出濾波器增加偏置項以便產生最終輸出通道。

多個濾波器的生成都和單濾波器相同:每個濾波器使用不同的卷積核集合和具有上述過程的標量偏差項來處理輸入資料,最終產生一個輸出通道。然後將它們連線在一起以產生總輸出,其中輸出通道的數量是過濾器的數量(輸出feature Map的個數跟過濾器的個數一致)。在輸出資料送入另一個卷積層之前,通常還要應用非線性啟用函式(sigmod/ReLU/tanh等)。重複上述操作即可完成網路的搭建。

參考文獻: