吳恩達深度學習筆記(86)-1×1 卷積講解

網絡中的網絡以及 1×1 卷積(Network in Network and 1×1 convolutions)

在架構內容設計方面,其中一個比較有幫助的想法是使用1×1卷積。

也許你會好奇,1×1的卷積能做什麼呢?不就是乘以數字麼?聽上去挺好笑的,結果並非如此,我們來具體看看。

過濾器為1×1,這裡是數字2,輸入一張6×6×1的圖片,然後對它做卷積,起過濾器大小為1×1×1,結果相當於把這個圖片乘以數字2,所以前三個單元格分別是2、4、6等等。用1×1的過濾器進行卷積,似乎用處不大,只是對輸入矩陣乘以某個數字。但這僅僅是對於6×6×1的一個通道圖片來說,1×1卷積效果不佳。

吳恩達深度學習筆記(86)-1×1 卷積講解

如果是一張6×6×32的圖片,那麼使用1×1過濾器進行卷積效果更好。具體來說,1×1卷積所實現的功能是遍歷這36個單元格,計算左圖中32個數字和過濾器中32個數字的元素積之和,然後應用ReLU非線性函數。

吳恩達深度學習筆記(86)-1×1 卷積講解

我們以其中一個單元為例,它是這個輸入層上的某個切片,用這36個數字乘以這個輸入層上1×1切片,得到一個實數,像這樣把它畫在輸出中。

這個1×1×32過濾器中的32個數字可以這樣理解,一個神經元的輸入是32個數字(輸入圖片中左下角位置32個通道中的數字),即相同高度和寬度上某一切片上的32個數字,這32個數字具有不同通道,乘以32個權重(將過濾器中的32個數理解為權重),然後應用ReLU非線性函數,在這裡輸出相應的結果。

吳恩達深度學習筆記(86)-1×1 卷積講解

一般來說,如果過濾器不止一個,而是多個,就好像有多個輸入單元,其輸入內容為一個切片上所有數字,輸出結果是6×6過濾器數量。

吳恩達深度學習筆記(86)-1×1 卷積講解

所以1×1卷積可以從根本上理解為對這32個不同的位置都應用一個全連接層,全連接層的作用是輸入32個數字(過濾器數量標記為n_C^[l+1] ,在這36個單元上重複此過程),輸出結果是6×6×#filters(過濾器數量),以便在輸入層上實施一個非平凡(non-trivial)計算。

吳恩達深度學習筆記(86)-1×1 卷積講解

這種方法通常稱為1×1卷積,有時也被稱為Network in Network,在林敏、陳強和顏水成的論文中有詳細描述。

雖然論文中關於架構的詳細內容並沒有得到廣泛應用,但是1×1卷積或Network in Network這種理念卻很有影響力,很多神經網絡架構都受到它的影響,包括下節課要講的Inception網絡。

舉個1×1卷積的例子,相信對大家有所幫助,這是它的一個應用。

假設這是一個28×28×192的輸入層,你可以使用池化層壓縮它的高度和寬度,這個過程我們很清楚。但如果通道數量很大,該如何把它壓縮為28×28×32維度的層呢?你可以用32個大小為1×1的過濾器,嚴格來講每個過濾器大小都是1×1×192維,因為過濾器中通道數量必須與輸入層中通道的數量保持一致。但是你使用了32個過濾器,輸出層為28×28×32,這就是壓縮通道數(n_c)的方法,對於池化層我只是壓縮了這些層的高度和寬度。

吳恩達深度學習筆記(86)-1×1 卷積講解

在之後我們看到在某些網絡中1×1卷積是如何壓縮通道數量並減少計算的。

當然如果你想保持通道數192不變,這也是可行的,1×1卷積只是添加了非線性函數,當然也可以讓網絡學習更復雜的函數,比如,我們再添加一層,其輸入為28×28×192,輸出為28×28×192。

吳恩達深度學習筆記(86)-1×1 卷積講解

1×1卷積層就是這樣實現了一些重要功能的(doing something pretty non-trivial),它給神經網絡添加了一個非線性函數,從而減少或保持輸入層中的通道數量不變,當然如果你願意,也可以增加通道數量。後面你會發現這對構建Inception網絡很有幫助,我們放在下節課講。

這節課我們演示瞭如何根據自己的意願通過1×1卷積的簡單操作來壓縮或保持輸入層中的通道數量,甚至是增加通道數量。下節課,我們再講講1×1卷積是如何幫助我們構建Inception網絡的,下節課見


分享到:


相關文章: