卷積神經網絡(CNN)

卷積神經網絡(Convolutional Neural Network,CNN)的提出最初是爲解決圖像識別問題,但是隨着技術的發展,現在CNN的應用也不僅侷限於圖像和視頻,也可以用於音頻和文本等時間序列數據。CNN作爲一個深度學習架構被提出的最初目的是爲了降低對圖像數據預處理的要求,避免複雜的特徵工程。CNN的最大特點在於卷積的權值共享結構,可以減少神經網絡的參數量,防止過擬合的同時也減少了神經網絡模型的複雜度。

CNN的結構

1、輸入層

卷積神經網絡的輸入層可以處理多維數據,常見地,一維卷積神經網絡的輸入層接收一維或二維數組,其中一維數組通常爲時間或頻譜採樣;二維數組可能包含多個通道;二維卷積神經網絡的輸入層接收二維或三維數組;三維卷積神經網絡的輸入層接收四維數組 。由於卷積神經網絡在計算機視覺領域有廣泛應用,因此許多研究在介紹其結構時預先假設了三維輸入數據,即平面上的二維像素點和RGB通道。

2、隱含層

卷積神經網絡的隱含層包含卷積層、池化層和全連接層3類常見構築,在一些更爲現代的算法中可能有Inception模塊、殘差塊(residual block)等複雜構築。在常見構築中,卷積層和池化層爲卷積神經網絡特有。卷積層中的卷積核包含權重係數,而池化層不包含權重係數,因此在文獻中,池化層可能不被認爲是獨立的層。以LeNet-5爲例,3類常見構築在隱含層中的順序通常爲:輸入-卷積層-池化層-卷積層-池化層-全連接層-輸出。

2.1、卷積層

2.1.1、卷積核

一個卷積層中可以有多個不同的卷積核,而每個卷積核都對應一個濾波後映射出新的圖像。

2.1.2、卷積層參數

卷積層參數包括卷積核大小、步長和填充,三者共同決定了卷積層輸出特徵圖的尺寸,是卷積神經網絡的超參數 。其中卷積核大小可以指定爲小於輸入圖像尺寸的任意值,卷積核越大,可提取的輸入特徵越複雜 。卷積步長定義了卷積核相鄰兩次掃過特徵圖時位置的距離,卷積步長爲1時,卷積核會逐個掃過特徵圖的元素,步長爲n時會在下一次掃描跳過n-1個像素。由卷積核的交叉相關計算可知,隨着卷積層的堆疊,特徵圖的尺寸會逐步減小,例如16×16的輸入圖像在經過單位步長、無填充的5×5的卷積核後,會輸出12×12的特徵圖。爲此,填充是在特徵圖通過卷積核之前人爲增大其尺寸以抵消計算中尺寸收縮影響的方法。常見的填充方法爲按0填充和重複邊界值填充(replication padding)。填充依據其層數和目的可分爲兩類:

  • 有效填充(valid padding):即完全不使用填充,卷積核只允許訪問特徵圖中包含完整感受野的位置。輸出的所有像素都是輸入中相同數量像素的函數。使用有效填充的卷積被稱爲“窄卷積(narrow convolution)”,窄卷積輸出的特徵圖尺寸爲(L-f)/s+1。
  • 相同填充/半填充(same padding):只進行足夠的填充來保持輸出和輸入的特徵圖尺寸相同。相同填充下特徵圖的尺寸不會縮減但輸入像素中靠近邊界的部分相比於中間部分對於特徵圖的影響更小,即存在邊界像素的欠表達。使用相同填充的卷積被稱爲“等長卷積(equal-width convolution)”。

2.1.3、激活函數

激活函數f是非線性的,它的作用是將非線性引入到神經元的輸出中,以此達到神經元學習非線性表達的目的。常見的激活函數有relu、sigmoid函數、tanh函數。
在這裏插入圖片描述
左邊的是原始圖,大小爲5x5

中間的是卷積核,大小爲3x3

右邊的是特徵圖,大小爲3x3

原始圖像nxn,用f*f的卷積核進行卷積,填充層數爲p=0,步長s=1,卷積後得到的特徵圖大小爲[(n+2xp-f)/s+1]x[(n+2xp-f)/s+1](向下取整)。

上述卷積操作後,圖像大小會減小,邊緣信息可能會丟失,爲了解決這些問題,就引入padding填充操作,在卷積之前,沿着邊緣填充0,填充層數p=(f-1)/2,padding後可以保證卷積後得到的特徵圖和原始圖像的大小相同。在這裏插入圖片描述
左上的是原始圖,大小爲4x4,padding後,大小爲6x6

右上的是卷積核,大小爲3x3

右下的是特徵圖,大小爲4x4

原始圖像nxn,用fxf的卷積核進行卷積,填充層數爲p=1,步長s=1,卷積後得到的特徵圖大小爲[(n+2xp-f)/s+1]x[(n+2xp-f)/s+1](向下取整)。

2.2、池化層

2.2.1、最大池化層
在這裏插入圖片描述

2.2.2、平均池化層

在這裏插入圖片描述
2.3、全連接層

積神經網絡中的全連接層等價於傳統前饋神經網絡中的隱含層。全連接層通常搭建在卷積神經網絡隱含層的最後部分,並只向其它全連接層傳遞信號。特徵圖在全連接層中會失去3維結構,被展開爲向量並通過激勵函數傳遞至下一層。
在這裏插入圖片描述
3、輸出層

卷積神經網絡中輸出層的上游通常是全連接層,因此其結構和工作原理與傳統前饋神經網絡中的輸出層相同。對於圖像分類問題,輸出層使用邏輯函數或歸一化指數函數(softmax function)輸出分類標籤 。在物體識別(object detection)問題中,輸出層可設計爲輸出物體的中心座標、大小和分類 。在圖像語義分割中,輸出層直接輸出每個像素的分類結果 。
在這裏插入圖片描述
總結一些問題

(1)傳統的神經網絡存在什麼問題?

權值參數太多,計算量大,模型越複雜,調參越困難,模型越容易過擬合。神經網絡在反向傳播過程中,梯度越來越小,可能會出現梯度消失問題,梯度一旦趨於0,權值無法更新,這個神經元就不起作用。

(2)爲什麼使用卷積神經網絡?它有什麼優缺點?

優點:權值共享,可以減少神經網絡的參數數量,防止過擬合的同時,也降低了模型的複雜度。不需要進行復雜的特徵工程,卷積神經網絡可以自動進行特徵提取。

缺點:需要調參,需要大量的訓練樣本(可能需要用到GPU),可解釋性差(神經網絡的共同“特點”)。

(3)卷積核的尺寸必須是正方形嗎?

卷積核的尺寸不一定是正方形的。長方形也可以,不過在通常情況下設置爲正方形。如果設置爲長方形,那麼首先得保證這層的輸出形狀是整數,不能是小數。

(4)卷積核的個數如何確定?每一層的卷積核的個數都是相同的嗎?

卷積核的個數一般根據經驗來設置,一般離輸入層越近的卷積層的卷積核個數稍微少些,比如32個,離輸出層越近的卷積層的卷積核個數稍微多一些,比如64個。

(5)步長的向右和向下移動的幅度必須是一樣的嗎?

不一定,參數都可以自己設置。

(6)padding操作有什麼作用?

padding操作可以使得卷積後得到的特徵圖和卷積之前的圖像大小相同,可以保留更多的邊緣信息。

(7)爲什麼使用池化層?

池化層主要用於特徵降維,壓縮數據和參數的數量,減小過擬合,同時提高模型的容錯性。

最後,用CNN來實現手寫數字的識別,準確率爲99.2%。
數據來源:https://www.kaggle.com/c/digit-recognizer/data
代碼:https://github.com/LeungFe/Convolutional-Neural-Network

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