1. 程式人生 > >深入理解卷積層

深入理解卷積層

增強 當我 pattern 完整 最終 進行 關系 全連接 con

https://blog.csdn.net/m0_37407756/article/details/80904580

有部分內容是轉載的知乎的,如有侵權,請告知,刪除便是,但由於是總結的,所以不一一列出原作者是who。

再次感謝,也希望給其他小白受益。

首先說明:可以不用全連接層的。

理解1:

卷積取的是局部特征,全連接就是把以前的局部特征重新通過權值矩陣組裝成完整的圖。

因為用到了所有的局部特征,所以叫全連接。

理解2:

從卷積網絡談起,卷積網絡在形式上有一點點像咱們正在召開的“人民代表大會制度”。卷積核的個數相當於候選人,圖像中不同的特征會激活不同的“候選人”(卷積核)。

池化層(僅指最大池化)起著類似於“合票”的作用,不同特征在對不同的“候選人”有著各自的喜好。

全連接相當於是“代表普選”。所有被各個區域選出的代表,對最終結果進行“投票”,全連接保證了receiptive field 是整個圖像,既圖像中各個部分(所謂所有代表),都有對最終結果影響的權利。

理解3:

假設你是一只小螞蟻,你的任務是找小面包。你的視野還比較窄,只能看到很小一片區域。當你找到一片小面包之後,你不知道你找到的是不是全部的小面包,所以你們全部的螞蟻開了個會,把所有的小面包都拿出來分享了。全連接層就是這個螞蟻大會~

理解4:

例如經過卷積,relu後得到3x3x5的輸出。

那它是怎麽樣把3x3x5的輸出,轉換成1x4096的形式?

很簡單,可以理解為在中間做了一個卷積。

從上圖我們可以看出,我們用一個3x3x5的filter 去卷積激活函數的輸出,得到的結果就是一個fully connected layer 的一個神經元的輸出,這個輸出就是一個值。因為我們有4096個神經元。我們實際就是用一個3x3x5x4096的卷積層去卷積激活函數的輸出。

以VGG-16再舉個例子吧,

對224x224x3的輸入,最後一層卷積可得輸出為7x7x512,如後層是一層含4096個神經元的FC,則可用卷積核為7x7x512x4096的全局卷積來實現這一全連接運算過程。

它把特征representation整合到一起,輸出為一個值。


這樣做,有一個什麽好處?就是大大減少特征位置對分類帶來的影響。

舉個簡單的例子:


從上圖我們可以看出,貓在不同的位置,輸出的feature值相同,但是位置不同。

對於電腦來說,特征值相同,但是特征值位置不同,那分類結果也可能不一樣。

這時全連接層filter的作用就相當於

喵在哪我不管,我只要喵,於是我讓filter去把這個喵找到,

實際就是把feature map 整合成一個值,這個值大,有喵,這個值小,那就可能沒喵

和這個喵在哪關系不大了,魯棒性有大大增強。

因為空間結構特性被忽略了,所以全連接層不適合用於在方位上找Pattern的任務,比如segmentation。
全連接層中一層的一個神經元就可以看成一個多項式,

我們用許多神經元去擬合數據分布

但是只用一層fully connected layer 有時候沒法解決非線性問題,

而如果有兩層或以上fully connected layer就可以很好地解決非線性問題了

我們都知道,全連接層之前的作用是提取特征

全理解層的作用是分類

我們現在的任務是去區別一圖片是不是貓


假設這個神經網絡模型已經訓練完了

全連接層已經知道


當我們得到以上特征,我就可以判斷這個東東是貓了。

因為全連接層的作用主要就是實現分類(Classification)

從下圖,我們可以看出

紅色的神經元表示這個特征被找到了(激活了)

同一層的其他神經元,要麽貓的特征不明顯,要麽沒找到

當我們把這些找到的特征組合在一起,發現最符合要求的是貓

ok,我認為這是貓了

當我們把這些找到的特征組合在一起,發現最符合要求的是貓

ok,我認為這是貓了


貓頭有這麽些個特征,於是我們下一步的任務

就是把貓頭的這麽些子特征找到,比如眼睛啊,耳朵啊


道理和區別貓一樣

當我們找到這些特征,神經元就被激活了(上圖紅色圓圈)

這細節特征又是怎麽來的?

就是從前面的卷積層,下采樣層來的

全連接層參數特多(可占整個網絡參數80%左右)

那麽全連接層對模型影響參數就是三個:

1,全接解層的總層數(長度)
2,單個全連接層的神經元數(寬度)
3,激活函數
首先我們要明白激活函數的作用是:

增加模型的非線性表達能力

深入理解卷積層