天天看點

全連接配接層的了解

1.全連接配接層和卷積層的差別

卷積神經網絡(CNN)由輸入層、卷積層、激活函數、池化層、全連接配接層組成,即INPUT-CONV-RELU-POOL-FC。

卷積層:用它來進行特征提取。例如,輸入圖像是32*32*3,3是它的深度(即R、G、B),卷積層是一個5*5*3的filter(感受野),這裡注意:感受野的深度必須和輸入圖像的深度相同。通過一個filter與輸入圖像的卷積可以得到一個28*28*1的特征圖。

全連接配接層:全連接配接層的每一個結點都與上一層的所有結點相連,用來把前邊提取到的特征綜合起來。由于其全相連的特性,一般全連接配接層的參數也是最多的。全連接配接層的權重矩陣是固定的,即每一次feature map的輸入過來必須都得是一定的大小(即與權重矩陣正好可以相乘的大小),是以網絡最開始的輸入圖像尺寸必須固定,才能保證傳送到全連接配接層的feature map的大小跟全連接配接層的權重矩陣比對。

全連接配接層的前向計算

全連接配接層的了解

下圖中連線最密集的2個地方就是全連接配接層,這很明顯的可以看出全連接配接層的參數的确很多。在前向計算過程,也就是一個線性的權重求和的過程,全連接配接層的每一個輸出都可以看成前一層的每一個結點乘以一個權重系數W,最後加上一個偏置值b得到,即 。如下圖中第一個全連接配接層,輸入有50*4*4個神經元結點,輸出有500個結點,則一共需要50*4*4*500=400000個權值參數W和500個偏置參數b。

下面用一個簡單的網絡具體介紹一下推導過程

全連接配接層的了解

其中,x1、x2、x3為全連接配接層的輸入,a1、a2、a3為輸出,根據我前邊在筆記1中的推導,有

全連接配接層的了解

可以寫成如下矩陣形式:

全連接配接層的了解

全連接配接層的反向傳播

以我們的第一個全連接配接層為例,該層有50*4*4=800個輸入結點和500個輸出結點。

全連接配接層的了解

由于需要對W和b進行更新,還要向前傳遞梯度,是以我們需要計算如下三個偏導數。

1、對上一層的輸出(即目前層的輸入)求導

若我們已知轉遞到該層的梯度

全連接配接層的了解

,則我們可以通過鍊式法則求得loss對x的偏導數。

首先需要求得該層的輸出ai對輸入xj的偏導數:

全連接配接層的了解

再通過鍊式法則求得loss對x的偏導數:

全連接配接層的了解

上邊求導的結果也印證了我前邊那句話:在反向傳播過程中,若第x層的a節點通過權值W對x+1層的b節點有貢獻,則在反向傳播過程中,梯度通過權值W從b節點傳播回a節點。

若我們的一次訓練16張圖檔,即batch_size=16,則我們可以把計算轉化為如下矩陣形式。

全連接配接層的了解

2、對權重系數W求導

我們前向計算的公式如下圖,

全連接配接層的了解

由圖可知

全連接配接層的了解

,是以:

全連接配接層的了解

當batch_size=16時,寫成矩陣形式:

全連接配接層的了解

3、對偏置系數b求導

由上面前向推導公式可知,

即loss對偏置系數的偏導數等于對上一層輸出的偏導數。

當batch_size=16時,将不同batch對應的相同b的偏導相加即可,寫成矩陣形式即為乘以一個全1的矩陣:

全連接配接層的了解

-----------------------------------------------------------------------------------------------------------------------------------

接下來再主要談談全連接配接層的意義

連接配接層實際就是卷積核大小為上層特征大小的卷積運算,卷積後的結果為一個節點,就對應全連接配接層的一個點。

假設最後一個卷積層的輸出為7×7×512,連接配接此卷積層的全連接配接層為1×1×4096。

連接配接層實際就是卷積核大小為上層特征大小的卷積運算,卷積後的結果為一個節點,就對應全連接配接層的一個點。如果将這個全連接配接層轉化為卷積層:

1.共有4096組濾波器

2.每組濾波器含有512個卷積核

3.每個卷積核的大小為7×7

4.則輸出為1×1×4096

------------------------------------------

若後面再連接配接一個1×1×4096全連接配接層。則其對應的轉換後的卷積層的參數為:

1.共有4096組濾波器

2.每組濾波器含有4096個卷積核

3.每個卷積核的大小為1×1

4.輸出為1X1X4096

相當于就是将特征組合起來進行4096個分類分數的計算,得分最高的就是劃到的正确的類别。而全連接配接層的壞處就在于其會破壞圖像的空間結構,

是以人們便開始用卷積層來“代替”全連接配接層,

通常采用1×1的卷積核,這種不包含全連接配接的CNN成為全卷積神經網絡(FCN),

FCN最初是用于圖像分割任務,

之後開始在計算機視覺領域的各種問題上得到應用,

事實上,Faster R-CNN中用來生成候選視窗的CNN就是一個FCN。

FCN的特點就在于輸入和輸出都是二維的圖像,并且輸入和輸出具有相對應的空間結構,

在這種情況下,我們可以将FCN的輸出看作是一張熱度圖,用熱度來訓示待檢測的目标的位置和覆寫的區域。

在目标所處的區域内顯示較高的熱度,

而在背景區域顯示較低的熱度,

這也可以看成是對圖像上的每一個像素點都進行了分類,

這個點是否位于待檢測的目标上。

輸入的feature map是2X2,那麼就需要把這個feature map 拉成4X1的列向量,如果你的feature map 的channels是3,也就是你的輸入是3X2X2,也就是相當于有了12個像素點,你就需要把feature map 拉成12X1的列向量,這時候,再乘一個權重,這個權重要把12個像素點都包含進去,是以這個權重的矩陣形式應該是1X12,是以經過一個全連接配接層後的輸出就是1X12X12X1=1X1,這時候需要看你的需要多少個1X1的神經元了,如果是3個的話,那麼輸出就是3X(1X12X12X1)=3X(1X1).這個3在權重矩陣中代表3行,即每一行與輸入相乘,得到一個輸出。