CNN網絡層詳解

  常見的CNN網絡主要包含下面幾個網絡結構:卷積層、激活函數、池化層和全連接層。下面對這幾個結構在卷積神經網絡中的作用進行介紹。
一、卷積層
1.1 卷積操作和卷積層的作用
  在介紹卷積層的作用之前,自己先介紹一下卷積操作的概念。以下圖爲例,較大網格表示一幅圖片,有顏色填充的網格表示一個卷積核,卷積核的大小爲3*3。假設我們做步長爲1的卷積操作,表示卷積核每次向右移動一個像素(當移動到邊界時回到最左端並向下移動一個單位)。卷積核每個單元內有權重,下圖的卷積核內有9個權重。在卷積核移動的過程中將圖片上的像素和卷積核的對應權重相乘,最後將所有乘積相加得到一個輸出。下圖經過卷積後形成一個6*4的圖。

這裏寫圖片描述

  卷積層的每一個卷積濾波器作用於整個感受野中,對輸入圖像進行卷積,卷積的結果構成了輸入圖像的特徵圖,從而經過卷積層後就提取出了圖像的局部特徵。所以卷積層的主要作用就是可以利用不同的卷積核(也叫濾波器)來提取圖像不同的特徵。它是識別圖像最核心的部分。
1.2 卷積層的特點
  在這裏既然講到了卷積層,就順便簡單提一下CNN網絡在卷積層所做的工作,這也就是CNN的優勢所在,想詳細瞭解這一塊的話可以看我之前的博客哈。
  第一個特點和優勢就是:局部感知
  在傳統神經網絡中每個神經元都要與圖片上每個像素相連接,這樣的話就會造成權重的數量巨大造成網絡難以訓練。而在含有卷積層的神經網絡中每個神經元的權重個數都時卷積核的大小,這樣就相當於神經元只與對應圖片部分的像素相連接。這樣就極大的減少了權重的數量。同時我們可以設置卷積操作的步長,假設將上圖卷積操作的步長設置爲3時每次卷積都不會有重疊區域(在超出邊界的部分補自定義的值)。局部感知的直觀感受圖常如下圖:

這裏寫圖片描述

  注意:使用局部感知的原因是一般人們認爲圖片中距離相近的部分相關性較大,而距離比較遠的部分相關性較小。在卷積操作中步長的設置就對應着距離的遠近。但是步長的設置並無定值需要使用者自己嘗試。
  第二個特點和優勢就是:參數共享
  卷積核的權重是經過學習得到的,並且在卷積過程中卷積核的權重是不會改變的,這就是參數共享的思想。還以上面的那張圖爲例,通過參數共享後,可以發現原來需要學習100M個參數現在只需要學習100個參數(卷積核是10*10的大小),假設用100個卷積核來進行卷積,也僅僅只需要學習100*100=104個參數,遠遠低於100M=106
  可以發現我們通過一個卷積核的操作提取了原圖的不同位置的同樣特徵。簡單來說就是在一幅圖片中的不同位置的相同目標,它們的特徵是基本相同的。其過程如下圖所示:

這裏寫圖片描述

  第三個特點是:多卷積核
  我們用一個卷積核操作只能得到一部分特徵可能獲取不到全部特徵,所以爲了能夠得到圖像更多的特徵信息我們引入了多核卷積。用多個卷積核來學習圖像更多的不同的特徵(每個卷積核學習到不同的權重)。主要注意的是在多核卷積的過程中每一層的多個卷積核的大小應該是相同的。

二、激活函數
  這裏主要解釋一下在神經網絡中爲什麼要使用激活函數以及它的作用是什麼?
  使用激活函數的原因在於,以兩類數據的分類爲例,這些數據真正能線性可分的情況還是比較少的,此時如果數據不是線性可分的我們又該如何分類呢?這個時候我們就無法再簡單利用一條直線來對數據進行很好的劃分,這時我們需要加入非線性的因素來對數據進行分類。所以可以判斷出激活函數的作用是給神經網絡加入一些非線性因素,由於線性模型的表達能力不夠,故激活函數的加入可以使得神經網絡更好地解決較爲複雜的問題,從而使得模型的表達能力更強。
  如今常見的激活函數有sigmoid()、tanh()、relu()等。

三、池化層
3.1 池化層操作
  池化操作的具體過程如下:

這裏寫圖片描述

  池化層的具體操作與卷基層的操作基本相同,只不過池化層的卷積核爲只取對應位置的最大值或平均值(最大池化、平均池化),並且不會隨着反向傳播發生變化。一般池化層的filter取2*2,最大取3*3,stride取2,特徵信息壓縮爲原來的1/4。
3.2 池化層的作用
  池化層可對提取到的特徵信息進行降維,一方面使特徵圖變小,簡化網絡計算複雜度並在一定程度上避免過擬合的出現;一方面進行特徵壓縮,提取主要特徵。
  最大池採樣在計算機視覺中的價值體現在兩個方面:(1)、它減小了來自上層隱藏層的計算複雜度;(2)、這些池化單元具有平移不變性,即使圖像有小的位移,提取到的特徵依然會保持不變。由於增強了對位移的魯棒性,這樣可以忽略目標的傾斜、旋轉之類的相對位置的變化,以此提高精度,最大池採樣方法是一個高效的降低數據維度的採樣方法。
  需要注意的是:這裏的pooling操作是特徵圖縮小,有可能影響網絡的準確度,因此可以通過增加特徵圖的深度來彌補(這裏的深度變爲原來的2倍)。

三、全連接層
  全連接層(fully connected layers,FC)在整個卷積神經網絡中起到“分類器”的作用。如果說卷積層、池化層和激活函數層等操作是將原始數據映射到隱層特徵空間的話,全連接層則起到將學到的“分佈式特徵表示”映射到樣本標記空間的作用。但是FC層參數個數非常多,容易引起過擬合。
  目前由於全連接層參數冗餘(僅全連接層參數就可佔整個網絡參數80%左右),近期一些性能優異的網絡模型如ResNet和GoogLeNet等均用全局平均池化(global average pooling,GAP)取代FC來融合學到的深度特徵,最後仍用softmax等損失函數作爲網絡目標函數來指導學習過程。實驗發現,用GAP替代FC的網絡通常有較好的預測性能。
  全局平均池化(GAP)的思想就是:用 feature map 直接表示屬於某個類的 confidence map,比如有10個類,就在最後輸出10個 feature map,每個feature map中的值加起來求平均值,然後把得到的這些平均值直接作爲屬於某個類別的 confidence value,再輸入softmax中分類, 更重要的是實驗效果並不比用 FC 差。
  GAP的優勢是:1.因爲FC的參數衆多,這麼做就減少了參數的數量(在最近比較火的模型壓縮中,這個優勢可以很好的壓縮模型的大小)。2.因爲減少了參數的數量,可以很好的減輕過擬合的發生。
  這種直接用 feature map 表示屬於某個類的 confidence map 的做法很符合CNN的思想。比如最後要分10個類,假設在有 FC 的 network 中,FC 前面一層的feature map 用 A 表示,A 經過 FC 的作用得到了一個 10 維的向量(假設用 C 表示),然後輸入softmax 等分類器中分類。既然CNN的學習能力很強,那爲什麼不直接讓 CNN 學習輸出 C(而不是 A)呢?可以看到這種思想和CNN結合的很好。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章