1. 程式人生 > >第一問:1×1卷積層的作用?

第一問:1×1卷積層的作用?

  1. 1×1卷積層在實現全卷積神經網路中經常用到,即使用1*1的卷積層替換到全連線層,這樣可以不限制輸入圖片大小的尺寸,使網路更靈活。
  2. 實現跨通道的互動和資訊整合。 1×1 的卷積層(可能)引起人們的重視是在 NIN 的結構中,論文中林敏師兄的想法是利用 MLP 代替傳統的線性卷積核,從而提高網路的表達能力。文中同時利用了跨通道 pooling的角度解釋,認為文中提出的 MLP 其實等價於在傳統卷積核後面接 cccp 層,從而實現多個feature map 的線性組合,實現跨通道的資訊整合。而 cccp 層是等價於 1×1 卷積的,因此細看NIN 的 caffe 實現,就是在每個傳統卷積層後面接了兩個 cccp 層(其實就是接了兩個 1×1 的卷積層)。
  3. 進行卷積核通道數的降維和升維。 進行降維和升維引起人們重視的(可能)是在 GoogLeNet 裡。對於每一個 Inception 模組(如下圖),原始模組是左圖,右圖中是加入了 1×1 卷積進行降維的。雖然左圖的卷積核都比較小,但是當輸入和輸出的通道數很大時,乘起來也會使得卷積核引數變的很大,而右圖加入 1×1 卷積後可以降低輸入的通道數,卷積核引數、運算複雜度也就跟著降下來了。以GoogLeNet 的 3a 模組為例,輸入的 feature map 是 28×28×192,3a 模組中 1×1 卷積通道為 64,3×3 卷 積 通 道 為128, 5×5 卷 積 通 道 為 32 , 如 果 是 左 圖 結 構 , 那 麼 卷 積 核 參 數 為1×1×192×64+3×3×192×128+5×5×192×32,而右圖對 3×3 和 5×5 卷積層前分別加入了通道數為96 和 16 的 1×1 卷積層,這樣卷積核引數就變成了1×1×192×64+(1×1×192×96+3×3×96×128)+(1×1×192×16+5×5×16×32),引數大約減少到原來的三分之一。同時在並行 pooling 層後面加入 1×1 卷積層後也可以降低輸出的 feature map 數量,左圖 pooling 後 feature map 是不變的,再加捲積層得到的 feature map,會使輸出的 feature map 擴大到 416,如果每個模組都這樣,網路的輸出會越來越大。而右圖在 pooling 後面加了通道為 32 的 1×1 卷積,使得輸出的 feature map數降到了 256。GoogLeNet 利用 1×1 的卷積降維後,得到了更為緊湊的網路結構,雖然總共有22 層,但是引數數量卻只是 8 層的 AlexNet 的十二分之一(當然也有很大一部分原因是去掉了全連線層)。
    在這裡插入圖片描述

    最近大熱的 MSRA 的 ResNet 同樣也利用了 1×1 卷積,並且是在 3×3 卷積層的前後都使用了,不僅進行了降維,還進行了升維,使得卷積層的輸入和輸出的通道數都減小,引數數量進一步減少,如下圖的結構。(不然真不敢想象 152 層的網路要怎麼跑起來 TAT)

在這裡插入圖片描述