卷積神經網絡CNN基礎知識(卷積神經網絡結構,卷積,池化,全連接層)

1、引入卷積神經網絡

卷積神經網絡主要用於圖像上的深度學習,那麼爲什麼一定要使用CNN來處理圖像呢?爲什麼不用普通的神經網絡?

下面舉例說明:

如圖所示,處理一張1000*1000大小的圖片,下一層神經元個數爲10的6次方,則最後全連接參數爲10的12次方,因此得知:

普通的神經網絡在處理圖片時,由於參數量過大,導致模型的表達能力過強,如果訓練集比較小的話,會記住每一個樣本。在測試集上表現差,即泛化能力差。參數較多,數據少,容易收斂到較差的局部極值。

由於對於一個圖像數據來說,具有非常強的區域性(眼睛,頭髮),基於這樣的圖像性質,做篩減,將全連接變成局部連接,從而降低參數量。由此引入了卷積神經網絡。

採用局部連接的方法,可以將參數量降爲10的8次方,如下:

但是10的8次方仍然很大,因此採用了降低參數量的其他方法,進一步降低參數量:參數共享(不同的局部連接之間的參數是相同的)。可以採用參數共享方法的原因是:圖像的區域性:圖像問題有很多的信息冗餘,同一個區域上的像素點承載的信息很接近。所以做了局部連接之後,仍然能保持信息的提取能力。

圖像的性質:它的特徵(這個東西是什麼)是和它的位置(可以在圖像的任何一個位置)無關的。如果用每個神經元去學習一個固定的位置的話,那麼這個神經元它提取的特徵它也不知道是什麼,因爲這個特徵的位置是變化的。所以無法解釋這個神經元到底學到了什麼東西,因此圖像特徵與位置無關(臉在邊上還是中間都可以檢測到),可以使用共享參數方法。

至此參數量減爲:100(10的2次方)

2、卷積神經網絡結構

N>=1, M>=0,即:可以沒有全連接層

卷積層的輸入和輸出都是矩陣,全連接層的輸入輸出都是向量。連接的方式爲:在最後一層卷積的輸出上做展平,將一個矩陣展平成一個一維向量。

因爲卷積神經網絡最後的輸出是全連接層,所以它的輸出可以是一個值也可以是一組向量。因此,這樣的輸出可以應用在兩個任務上,1:分類任務(多個值)(圖像分類)2:迴歸任務(一個值)。

反捲積層:卷積或池化層有可能使輸入的size大於輸出的size,即:數據的尺寸在減小。而反捲積層是卷積層的一個逆操作,它可以使數據的尺寸增大。則這樣的神經網絡就有可能使輸入和輸出的size是一樣大的,這可以應用於:物體分割。

3、卷積神經網絡計算

卷積:

對普通的神經網絡做局部連接和參數共享後,就得到了一個卷積操作。卷積操作的參數叫:卷積核(之前講的局部連接的參數,是由反向傳播計算、學習得到的)。

       卷積操作是怎樣進行的?:卷積操作相當於是卷積核在輸入圖像上從左到右,從上到下的進行滑動。卷積核與對應輸入圖像的局部位置做內積運算,得到的值放到輸出對應位置。相當於:輸出位置上對應的神經元和輸入圖像的局部位置做全連接運算。

卷積操作存在問題:卷積後輸出的圖像會變小padding可使輸出的size不變。

Padding應加多大?一個padding?兩個padding?,應該取決於卷積核。

根據公式:輸出size = 輸入size – 卷積核size + 1

例如:卷積核爲3*3.則卷積核size=3,輸出size = 輸入size -2,則輸入圖像需要+2,均攤到圖像兩邊,則加1個padding,同理,若卷積核size=5,輸出size = 輸入size -4,則輸入圖像需要+4,則加2個padding。

輸入圖像可能爲多通道:最普通RGB三通道

相應的卷積核也變成3通道的。

一個卷積核提取一種特徵,多個卷積核提取多種特徵。同時生成多個通道。

多個卷積核可輸出多通道。

參數計算:

輸入三通道,代表這個圖有可能是RGB的圖。

輸出192通道:代表有192個卷積核,去提取192種特徵。

三通道時,卷積核中的參數是不共享的,輸出192通道,對應的192個卷積核,這192個卷積核的參數也是不共享的。

假設:輸入圖片(Input)大小爲I*I,卷積核(Filter)大小爲K*K,步長(stride)爲S,填充(Padding)的像素數爲P,那捲積層輸出(Output)的特徵圖大小爲多少呢?

可以得出推導公式:

O=(I-K+2P)/S+1

激活函數:

卷積神經網絡中常用的激活函數是RELU,它計算起來非常高效。

激活函數的性質:具有單調性,且都是非線性函數。

爲什麼要用非線性函數作爲激活函數呢?,在普通神經網絡中,神經網絡的結構都是層次的,高級的層次與低級的層次是通過全連接聯繫在一起的。如果不用非線性的激活函數,多個神經網絡的層次,相當於是每個層次之間都是做了一個矩陣的操作。矩陣的操作具有合併性。因此如果不使用非線性函數,而是使用線性函數時,造成的後果就是:即便是很深層次的神經網絡,也只相當於是一個單層的神經網絡。

池化:

池化分兩種,如下所示:最大值池化與平均值池化

最大值池化--最常用的池化操作

池化操作沒有用於訓練的參數,只有兩個超參數Stride和kernel_size,過程與卷積操作類似,也是在輸入圖像上從左到右從上到下滑動,在滑動過程中,當核覆蓋在一個區域的時候,用這個區域的最大值作爲結果,Stride和kernel_size一般來說相等。

池化操作特點:

在卷積神經網絡中,一旦加了全連接層,之後還可以加全連接層,但是不能再加捲積層和池化層了,而且在加全連接層時,因爲之前的卷積的輸出和輸入都是二維多通道的圖像的形式,所以神經元也是這樣排列的,所以需要展平成一維向量。

去掉全連接層之後,可以利用卷積層和池化層做一個圖像到圖像的輸出操作。

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