卷積神經網路中用1*1 卷積有什麼作用或者好處呢?
卷積神經網路中用1*1 卷積有什麼作用或者好處呢? 為什麼非要加個1*1 呢,那不就是簡單的線性變換嗎??
謝謝
1*1卷積過濾器 和正常的過濾器一樣,唯一不同的是它的大小是1*1,沒有考慮在前一層局部信息之間的關係。最早出現在 Network In Network的論文中 ,使用1*1卷積是想加深加寬網路結構 ,在Inception網路( Going Deeper with Convolutions )中用來降維,如下圖:
由於3*3卷積或者5*5卷積在幾百個filter的卷積層上做卷積操作時相當耗時,所以1*1卷積在3*3卷積或者5*5卷積計算之前先降低維度。
那麼,1*1卷積的主要作用有以下幾點:
1、降維( dimension reductionality )。比如,一張500 * 500且厚度depth為100 的圖片在20個filter上做1*1的卷積,那麼結果的大小為500*500*20。
2、加入非線性。卷積層之後經過激勵層,1*1的卷積在前一層的學習表示上添加了非線性激勵( non-linear activation ),提升網路的表達能力;
Inception
下圖是Inception的結構,儘管也有不同的版本,但是其動機都是一樣的:消除尺寸對於識別結果的影響,一次性使用多個不同filter size來抓取多個範圍不同的概念,並讓網路自己選擇需要的特徵。
你也一定注意到了藍色的1x1卷積,撇開它,先看左邊的這個結構。
輸入(可以是被卷積完的長方體輸出作為該層的輸入)進來後,通常我們可以選擇直接使用像素信息(1x1卷積)傳遞到下一層,可以選擇3x3卷積,可以選擇5x5卷積,還可以選擇max pooling的方式downsample剛被卷積後的feature maps。 但在實際的網路設計中,究竟該如何選擇需要大量的實驗和經驗的。 Inception就不用我們來選擇,而是將4個選項給神經網路,讓網路自己去選擇最合適的解決方案。
接下來我們再看右邊的這個結構,多了很多藍色的1x1卷積。 這些1x1卷積的作用是為了讓網路根據需要能夠更靈活的控制數據的depth的。
1x1卷積核
如果卷積的輸出輸入都只是一個平面,那麼1x1卷積核並沒有什麼意義,它是完全不考慮像素與周邊其他像素關係。 但卷積的輸出輸入是長方體,所以1x1卷積實際上是對每個像素點,在不同的channels上進行線性組合(信息整合),且保留了圖片的原有平面結構,調控depth,從而完成升維或降維的功能。
如下圖所示,如果選擇2個filters的1x1卷積層,那麼數據就從原本的depth 3 降到了2。若用4個filters,則起到了升維的作用。
這就是為什麼上面Inception的4個選擇中都混合一個1x1卷積,如右側所展示的那樣。 其中,綠色的1x1卷積本身就1x1卷積,所以不需要再用另一個1x1卷積。 而max pooling用來去掉卷積得到的Feature Map中的冗餘信息,所以出現在1x1卷積之前,緊隨剛被卷積後的feature maps。(由於沒做過實驗,不清楚調換順序會有什麼影響。)
來自YJango的卷積神經網路--介紹 - 知乎專欄
前面的回答講了許多1*1卷積核好處之類的,但是我認為沒有切中題主想問的。題主想問的其實是,1*1的卷積不就是多個feature channels之間的線性疊加嗎,為什要說成是什麼1*1的卷積這種貌似有特殊牛逼功能的概念?
題主你想的是對的,1*1的卷積就是多個feature channels線性疊加,nothing more!只不過這個組合係數恰好可以看成是一個1*1的卷積。這種表示的好處是,完全可以回到模型中其他常見N*N的框架下,不用定義新的層。可以參考:CNN中,1X1卷積核到底有什麼作用呢? | 1X1卷積核到底有什麼作用呢? - Caffe中國用戶社區 | One by One [ 1 x 1 ] Convolution - counter-intuitively useful
1*1卷積核最開始是在顏水成論文 [1312.4400] Network In Network 中提出的,後來被[GoogLeNet 1409.4842] Going Deeper with Convolutions的Inception結構繼續應用了。
可以實現:
1. 實現跨通道的交互和信息整合
1×1的卷積層(可能)引起人們的重視是在NIN的結構中,論文中林敏師兄的想法是利用MLP代替傳統的線性卷積核,從而提高網路的表達能力。文中同時利用了跨通道pooling的角度解釋,認為文中提出的MLP其實等價於在傳統卷積核後面接cccp層,從而實現多個feature map的線性組合,實現跨通道的信息整合。而cccp層是等價於1×1卷積的,因此細看NIN的caffe實現,就是在每個傳統卷積層後面接了兩個cccp層(其實就是接了兩個1×1的卷積層)。
2. 進行卷積核通道數的降維和升維,減少網路參數
進行降維和升維引起人們重視的(可能)是在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)
1,增加模型深度,一定程度上提升模型的表徵能力;
2,1*1channel數減少,減少模型中層的weight的稀疏的可能性;
相關可以參考Network in Network和GoogLeNet的paper,很詳細描述了使用1*1的conv的原因
可以在很低的複雜度情況下升維,也可以降維,很靈活
如果是單通道單個卷積核的話,那麼1*1的卷積的確等價於一個線性變換。
但是,當輸入是多通道(多個feature map)時,1*1的卷積就相當於多個feature map的線性組合,如果再加上激活層,那麼這個就是一個mini的多層(多個卷積下)感知機了。
network in network應該不是最早提出1*1的卷積核的文章吧?但可以肯定的是,它是第一篇很好地解釋了1*1卷積原理的文章,即:普通卷積層+多個1*1卷積(followed by 激活層)等價於類patch級別的MLP而單獨的1*1卷積,實際上是多個通道的參數化pooling(線性組合)。可以降低特徵圖的維數,防止參數過多,有利於增加深層網路的寬度
前幾天在一個fcn的分享會上談到了1x1卷積核的問題,劉總回憶他曾在某會上問顏老師「您覺得您發的論文中,您覺得最驕傲的有哪些?」,顏老師答子空間和1x1卷積核。後來劉總談了自己的看法,這樣做可以理解為一根筷子插了3本書,相比較於傳統全連接層,1x1卷積保留了空間信息。
對上一層的多個channel做加權平均。
最早是https://arxiv.org/pdf/1312.4400v3.pdf 提出的
主要用於降維,減少參數個數,做特徵變換,以及增加寬度。
可以參考:One by One [ 1 x 1 ] Convolution - counter-intuitively useful
總體來說就是多個feature map 線性疊加和輸出維度升維或者降維。
這篇文章也許能幫到你,結合Inception Net:
#Inception深度網路家族盤點 | Inception v4 和Inception-ResNet未來走向何方 ?
改變厚度,本層的filter個數決定下一層厚度,步長決定長和寬。用1*1和3*3都能實現,但後者需要學習的參數更多。
相當於多個線性線段擬合函數作用,提高網路擬合能力
可以升維可以降維結合非線性單元引入非線性
我感覺就是像素級的全鏈接網路
降維減少參數可以理解,升維是什麼原因?為什麼要升維?
補充一個其他答主沒提到的:
促進不同通道之間的信息交換
之前試過連續多次 bilinear upsample 之間各插一個 1 * 1 全卷積層,直覺理解就是加了層緩衝
推薦閱讀:
※如何看待指出 神經網路的訓練罪魁禍首是退化一文?
※在神經網路中weight decay起到的做用是什麼?momentum呢?normalization呢?
※如何通俗的理解spike and slab prior?
※機器AI學習需要什麼數學基礎,學習這些數學需要會哪些基礎數學?
※有誰能講解下《Going deeper with convolutions》這篇論文?
TAG:機器學習 | 計算機視覺 | 神經網路 | 深度學習DeepLearning | 卷積神經網路CNN |