卷積神經網路(Convolutional Neural Networks,CNN)
1、原理
1.1、基本結構
卷積神經網路(Convolutional Neural Networks,CNN)是深度學習中的一種網路,它和其他神經網路最大的區別在於其獨特的卷積層。通常情況下它是由多層網路組合而成,每層又包含由特徵圖組成的多個平面,而這些平面都是由多個獨立神經元組成。
通常情況下,因為包含卷積操作,C層被稱為特徵提取層。上一層的區域性感受野(即與濾波器進行卷積操作的畫素範圍)連線著特徵提取層的每個神經元輸入,和濾波器進行卷積後的值作為該區域性特徵。提取到該區域性特徵後,它與其他區域性特徵間的相對位置關係也就確定了。因為只涉及對特徵提取層的區域性運算,所以S層被稱為特徵對映層
以上圖為例介紹常用的二維卷積,輸入影象經過3個濾波器的卷積運算後,再和偏置量進行累加,得到3個特徵對映層組成的C1層。C1層之後通常會緊接著池化操作,以最大池化來說明,C1中的3個特徵對映圖內分別取N*N畫素內的最大值作為最終值(即最大池化)形成3個池化後的特徵對映圖S2。如果後續仍有卷積操作,那麼再和濾波器進行卷積形成新的C3層,再經過池化操作生成池化層S4。後續如果沒有卷積操作的話,這個池化層內的所有值會經過攤平操作形成一個一維向量。這個向量再作為傳統神經網路
另外,卷積神經網路對輸入樣本具有較高的畸變容忍能力。通常情況下,二維卷積神經網路中的特徵提取層(C層)都緊跟著一個用來求區域性最大或區域性平均的池化層(S層),這樣就進行了兩次特徵操作,好處在於對樣本有較高的容錯率。
1.2、卷積層
介紹完基本結構和網路的執行過程後,接著介紹每個層的功能,首先是卷積層。
卷積是卷積神經網路的核心,用一個K*K大小的卷積核(Filter),對大小為I*I的影象(Input)進行卷積操作時,假設每次卷積操作的步長(Stride)為S,如果卷積操作超出了影象邊界,填充(Padding)畫素數為P。那麼經過此類卷積後輸出(Output)
以上為卷積的基本概念。
對一幅影象的一個完整的卷積計算過程為:卷積核以一定間隔滑動,並對所覆蓋的區域進行卷積運算得到值,直至遍歷完整幅影象,如下圖所示:
1.3、BN層
批量標準化(Batch Normalization,BN)層與卷積層,以及下文將要提到的池化層同屬網路的一層。通常情況下,為了更好地訓練深度學習神經網路,防止像Sigmoid類似的非線性啟用函式過早飽和,我們會對輸入的資料進行標準化、規範化,使其資料分佈類似於正態分佈。但在網路的訓練過程中,因為每一層都必須學會適應每一個訓練步驟的新分佈,導致隱含層間的分佈是不斷變化的,因此會減慢訓練過程,這被稱為內部協變數轉移問題。這也是深層網路通常更耗時的一個原因。
BN層就是規範化網路各層權重分佈、解決內部協變轉移問題的一種方法,強迫每一層的輸入在每一個訓練步驟中有大致相同的分佈。使用BN層帶來的效果是減少超引數,如引數初始化方式、學習率初始值、權重衰減係數、正則方式、Dropout率等的調優時間。因為超引數的設定會嚴重影響訓練結果,不使用BN的網路通常在超引數的調優上回浪費很多時間。另外,使用BN會快速收斂,並且會提高網路泛化能力。BN演算法的大致步驟如下:
- 計算各層輸入的均值和方差;
- 使用先前計算的批次統計資料對圖層輸入進行歸一化;
- 縮放並移動以獲得圖層的輸出。
1.4、池化層
通過卷積運算獲得特徵圖(Features Map)之後,後續網路如何利用這些特徵圖是需要解釋的,本節的重點則是特徵圖後的下一層——池化層。
理論上可以用卷積層提取到的所有特徵圖去訓練分類器,但是這樣做會明顯在網路中形成巨大的計算量。另外如果使用了所有的特徵圖,會使網路對輸入資料的擬合效果非常好,而缺乏對未知資料的擬合能力,也就是常說的過擬合(Over-Fitting)現象。
針對計算量大和過擬合的問題,可以對不同位置的特徵先進行聚類,例如一塊區域內的平均值,這樣可以在得到較低維度的特徵時不丟失影象的位置資訊。這種得到較低維度特徵以及改善過擬合現象的聚類操作就叫做池化(Pooling)。
使用最多的是最大池化,但是除了最大值池化(Max Pooling)外,還有平均值池化(Average Pooling)。前者取出目標區域內的最大值,後者則是計算目標區域內的平均值。下圖給出了Max池化的運算過程,Average池化以此類推:
池化有4個重要特性:
- 不同於卷積,池化沒有需要學習的引數;
- 池化後圖像的大小被壓縮,但通道數不變;
- 降低了資料特徵,擴大了卷積核的感受野;
- 對於微小的位置變化具有魯棒性,在輸入資料發生微小偏差時,池化仍會返回相同的結果。這一點如下圖所示,輸入資料在寬度方向上只偏離1個元素時,輸出仍未為相同的結果(根據資料不同,有時結果也不相同)。
1.5、啟用函式
啟用函式是非線性神經網路的關鍵之一。如果不使用啟用函式,那麼每層節點的輸入和上層節點的輸出都將會是線性關係。這種網路結構就是原始感知機(Perceptron),其網路的擬合逼近能力十分有限。因此,神經網路特別是深度神經網路只有具有非線效能力才會具有強大的擬合表達能力。而要使網路具有非線效能力,只需要在網路層之間使用非線性函式就可以實現。這就是啟用函式的作用和能力。
理論上完美的啟用函式應該具有以下特徵:
- 非線性。網路上下層間只有線性變換無法使網路具有無限擬合逼近的能力。
- 連續可微。這是使用梯度下降法的前提。
- 在原點處近似線性。這樣當權值初始化為接近0的隨機值時,網路可以學習的較快,不用可以調節網路的初始值。
- 範圍最好不飽和。當有飽和的區間段時,如果網路權重優化進入到該區間內,梯度近似為0,網路的學習就會停止。
- 單調性。具有單調性的啟用哈數會使單層網路的誤差是凸函式,能夠使用其他演算法優化。
雖然當前啟用函式比較多,但是目前還沒有可以同時滿足以上這些性質的啟用函式。本文從實際角度出發,在輸出層,分類問題我們需要考慮兩個問題:
- 每個輸出訊號值在0~1之間;
- 所有輸出訊號的和為1。
1.5.1、輸出層的啟用函式
基於這兩個要求,本文的模型輸出分類中,輸出層的啟用函式用Softmax函式:
其中是輸出層中的第k個輸入訊號,分母表示輸出層共有n個輸出訊號(神經元)
,計算所有輸出層中的輸入訊號的指數和。 則是第k個神經元的輸出。
1.5.2、卷積層的啟用函式
本文在卷積層使用的啟用函式為修正線性單元(Rectified Linear Unit,ReLU),其函式解析式為:
ReLU函式影象如下:
這個函式其實就是一個取最大值函式,注意到該函式並不是全區間可導,但是我們可以取sub-gradient。ReLU雖然簡單,但卻是近幾年的重要成果,具有以下優點:
- 解決了梯度消失的問題(在正區間);
- 計算速度快,只需要判斷輸入是否大於0;
- 收斂速度遠快於Sigmoid和Tanh。
1.6、全連線層與輸出層
在池化層得到特徵對映圖之後,需要使用傳統網路結構進行分類輸出。在傳統網路結構中,上一層的所有節點與下一層的所有節點全部連線起來,形成交叉計算權重的網路稱為全連線層(Fully Connected Layers,FC)。在整個卷積神經網路中全連線的作用在於分類。前文所提到的卷積層、BN層、池化層、啟用函式等操作都是將輸入資料提取特徵並對映到隱層特徵空間,而全連線層則利用交叉計算的分散式特徵表示能力將隱層特徵空間對映到樣本標記空間。
輸出層是網路中的最後一層。根據具體問題可以在分類問題中輸出類別或者在迴歸問題中輸出某個數值。通常,在分類問題的輸出層之前會有Softmax啟用函式將概率轉化為類別。
2、卷積神經網路的主要特點
由於同一特徵對映面上的神經元權值相同,所以網路可以並行學習,這也是卷積網路相較於全連線神經網路的一大優勢。
2.1、權值共享
也可以理解為平移不變性,卷積神經網路在影象的某一區域學到某個模式之後,就可以在影象的任何地方識別這個模式。
如果使用某一個特徵過濾器(檢測器)提取手寫“3”的特徵,因為內容可能出現在圖片任何一個有N*N形成的區域,所以每個特徵檢測器都可以在圖片的不同N*N的畫素區域中使用同樣的引數,都有可能提取到“3”的特徵。而對於全連線神經網路,則必須重新學習“3”出現在新的位置的特徵。因此權值共享使得卷積神經網路可以高效利用不同位置出現的同種特徵來減少網路引數,只需要很少的訓練樣本就能學到具有泛化能力的資料表示。
2.2、分層提取
卷積神經網路可以學到模式的空間層次結構(Spatial Hierarchies of Patterns)。
- 第一個卷積層可以只學習影象較小的區域性特徵(比如稜角、邊緣);
- 第二個卷積層將學習由第一層卷積後形成的特徵圖組成的更大的特徵;
- 第三個卷積層再學習第二層卷積後形成的特徵圖組成的更大的特徵;
- ...
層數越高,學到的特徵就越全域性化。因為視覺世界從根本上具有空間層次結構,所以說卷積神經網路可以有效地學習複雜、抽象的視覺概念。
2.3、區域性感知
通常而言,人類是從區域性到全域性漸近認識外部的世界。在網路學習中,神經元之間不需要對全域性影象進行感知,只需要對區域性影象進行感知,然後在更高層網路中將區域性的特徵進行綜合便可以得到全域性特徵。因為影象具有空間相關性——距離較近的區域性畫素關係在空間位置中同樣較為緊密,距離越遠的畫素之間相關性越弱。事實上,視覺皮層的神經元就是區域性接受資訊的,網路部分連通的思想便是受生物學中的視覺系統結構啟發的。
在全連線神經網路中,相鄰層的神經元全部連線在一起,由於其輸入資料是一維結構,因此影象需要先轉換為一維向量,在這個過程中,影象會完全丟失“形狀”,即畫素間的空間資訊,從理論上說,神經網路幾乎可以解決全部深度學習問題,但是在處理複雜問題時,往往難以達到理想的效果。
該類網路不僅引數量巨大,而且學習速度很慢,即使是一個簡單的問題,一般也需要幾百次甚至上千次的學習才可以收斂,而且容易產生過擬合問題,泛化能力較弱。而卷積層則可以保持形狀不變,當輸入影象時,卷積層會以3維資料的形式接收輸入資料,並且同樣以3維資料的形式輸出至下一層。因此在CNN中,可以正確理解影象等具有形狀的資料,而且由於區域性連線,大大降低了引數量,節省了記憶體。