卷積神經網絡(CNN)是一種具有局部連接、權重共享等特性的深層前饋神經網絡。
卷積神經網絡最早主要是用來處理圖像信息。在用全連接前饋網絡來處理圖像時,會存在以下兩個問題:
(1)參數太多:隨着隱藏層神經元數量的增多,參數的規模也會急劇增加。這會導致整個神經網絡的訓練效率非常低,也很容易出現過擬合。
(2)局部不變形特征:自然圖像中的物體都具有局部不變性特征,比如尺度縮放、平移、旋轉等操作不影響其語義信息。而全連接前饋網絡很難提取這些局部不變性特征,一般需要進行數據增強來提高性能。
目前的卷積神經網絡一般是由卷積層、匯聚層和全連接層交叉堆疊而成的前饋神經網絡,使用反向傳播算法進行訓練。
卷積神經網絡主要使用在圖像和視頻分析的各種任務(比如圖像分類、人臉識別、物體識別、圖像分割等)上,其准確率一般也遠遠超出了其他的神經網絡模型。近年來卷積神經網絡也廣泛地應用到自然語言處理、推薦系統等領域。
5.1 卷積
一維卷積:一維卷積經常用在信號處理中,用於計算信號的延遲累積。假設一個信號發生器每個時刻t產生一個信號xt,其信息的衰減率為wk,即在k-1個時間步長后,信息為原來的wk倍。假設w1 = 1,w2 = 1/2,w3 = 1/4,那么在時刻t收到的信號yt為當前時刻產生的信息和以前時刻延遲信息的增加。
我們把w1,w2,...稱為濾波器或卷積核。假設濾波器長度為K,它和一個信號序列x1,x2,...的卷積為
信號序列x和濾波器w的卷積定義為 y = w * x
下圖給出了一維卷積示例。濾波器為[-1,0,1],連接邊上的數字為濾波器中的權重。
二維卷積 卷積也經常用在圖像處理中,因為圖像為一個二維結構,所以需要將一維卷積進行擴展。給定一個圖像X ∈ RM×N和濾波器W ∈ RU×V,其卷積為
一個輸入信息X和濾波器W的二維卷積定義為:
Y = W * X
下圖給出了二維卷積示例。
5.1.1 互相關
互相關是一個衡量兩個序列相關性的函數,通常是用滑動窗口的點積計算來實現。給定一個圖像X∈RM×N和卷積核W∈RU×V,它們的互相關為
互相關和卷積的區別僅僅在於卷積核是否進行翻轉。因此互相關也可以稱為不翻轉卷積。
5.1.2 卷積的變種
在卷積的標准定義基礎上,還可以引入濾波器的滑動步長和零填充來增加卷積的多樣性,可以更靈活地進行特征抽取。
濾波器的步長是指濾波器在滑動時的時間間隔。下圖給出了步長為2的卷積示例。
零填充是在輸入向量兩端進行補零。下圖給出了輸入的兩端各補一個零后的卷積示例。
假設卷積層的輸入神經元個數為M,卷積大小為K,步長為S,在輸入兩端各填補P個0,那么該卷積層的神經元數量為(M - K + 2P)/S +1
一般常用的卷積有以下三類:
(1) 窄卷積:步長S = 1,兩端不補零 P = 0,卷積后輸出長度為M - K + 1
(2) 寬卷積:步長S = 1,兩端補零 P = M - 1,卷積后輸出長度M + K -1
(3) 等寬卷積:步長 S = 1,兩端補零 P = (K-1) / 2,卷積后輸出長度M。
下圖是一個等寬卷積示例。
5.1.3 卷積的數學性質
卷積有很多很好的數學性質。
5.1.3.1 交換性
如果不限制兩個卷積信號的長度,真正的翻轉卷積是具有交換性的,即 x * y = y * x。對於互相關的“卷積”,也同樣具有一定的“交換性”。
5.1.3.2 導數
5.2 卷積神經網絡
卷積神經網絡一般由卷積層、匯聚層和全連接層構成。
5.2.1 用卷積來代替全連接
采用卷積來代替全連接,第l層的凈輸入 z(l) 為第l-1層活性值 a(l-1) 和濾波器 w(l) ∈ RK的卷積,即
根據卷積的定義,卷積層有兩個很重要的性質:
(1)局部連接 在卷積層中的每一個神經元都只和下一層中某個局部窗口內的神經元相連,構成一個局部連接網絡。如下圖所示,卷積層和下一層之間的連接數大大減少,由原來的
Ml × Ml-1個連接變為 Ml × K個連接,K為濾波器大小。
(2)權重共享:在上圖中,所有的同顏色連接上的權重是相同的。權重共享可以理解為一個濾波器只捕捉輸入數據中的一種特定的局部特征。因此,如果要提取多種特征就需要使用多個不同的濾波器。
5.2.2 卷積層
卷積層的作用是提取一個局部區域的特征,不同的卷積核相當於不同的特征提取器。由於卷積網絡主要應用在圖像處理上,而圖像為二維結構,因此為了更充分地利用圖像的局部信息,通常將神經元組織為三維結構的神經層,其大小為高度M×寬度N×深度D,由D個M×N大小的特征映射構成。
特征映射為一幅圖像(或其他特征映射)在經過卷積提取到的特征,每個特征映射可以作為一類抽取的圖像特征。
不失一般性,假設一個卷積層的結構如下:
(1) 輸入特征映射組:X ∈ RM×N×D為三維張量,其中每個切片矩陣Xd∈RM×N為一個輸入特征映射,1 <= d <= D
(2) 輸出特征映射組:Y ∈ RM’×N‘×P為三維張量,其中每個切片矩陣 YP∈ RM’×N‘為一個輸出特征映射,1 <= p <= P
(3) 卷積核:W∈RU×V×D×P為四維張量,其中每個切片矩陣Wp,d∈RU×V為一個二維卷積核,1 <= d <=D,1 <= p <= P
下圖給出卷積層的三維結構表示:
為了計算輸出特征映射Yp,用卷積核Wp,1,Wp,2,...,Wp,D分別對輸入特征映射X1,X2,...,XD進行卷積,然后將卷積結果相加,並加上一個標量偏置b得到卷積層的凈輸入Zp,再經過非線性激活函數后得到輸出特征映射Yp
整個計算過程如下圖所示。
5.2.3 匯聚層
匯聚層也叫子采樣層,其作用是進行特征選擇,降低特征數量,從而減少參數數量,卷積層之后加上一個匯聚層,從而降低特征維數,避免過擬合。
匯聚是指對每個區域進行下采樣得到一個值,作為這個區域的概括。
常用的匯聚函數有兩種:
1.最大匯聚:對於一個區域,選擇這個區域內所有神經元的最大活性值作為這個區域的表示。
2.平均匯聚:一般是取區域內所有神經元活性值的平均值。
下圖給出了采樣最大匯聚進行子采樣操作的示例。可以看出,匯聚層不但可以有效地減少神經元的數量,還可以使得網絡對一些小的局部形態改變保持不變性,並擁有更大的感受野。
5.2.4 典型的卷積網絡結構
一個典型的卷積網絡是由卷積層、匯聚層、全連接層交叉堆疊而成。目前常用的卷積網絡結構如下圖所示。一個卷積塊為連續M個卷積層和b個匯聚層(M通常設置為2~5,b為0或1)。一個卷積網絡中可以堆疊N個連續的卷積塊,然后在后面接着K個全連接層。
目前,整個網絡結構趨向於使用更小的卷積核(比如1×1和3×3)以及更深的結構(比如層數大於50)。此外,由於卷積的操作性越來越靈活(比如不同的步長),匯聚層的作用也變得越來越小,因此目前比較流行的卷積網絡中,匯聚層的比例正在逐漸降低,趨向於全卷積網絡。
5.3 參數學習
和全連接前饋網絡類似,卷積網絡也可以通過誤差反向傳播算法來進行參數學習。在卷積神經網絡中,主要有兩種不同功能的神經層:卷積層和匯聚層。而參數為卷積核以及偏置,因此只需要計算卷積層中參數的梯度。
不失一般性,對第l層為卷積層,第l-1層的輸入特征映射為X(l-1) ∈ RM×N×D,通過卷積計算得到第l層的特征映射凈輸入Z(l) ∈ RM’×N‘×P。第l層的第p個特征映射凈輸入
損失函數L關於第l層的卷積核W(l,p,d)的偏導數為
損失函數關於第l層的第p個偏置b(l,p)的偏導數為
5.3.1 誤差項的計算
卷積層和匯聚層中誤差項的計算有所不同,因此我們分別計算其誤差項。
匯聚層:當第l+1層為匯聚層時,因為匯聚層是下采樣操作,l+1層的每個神經元的誤差項δ對應於第l層的相應特征映射的一個區域。第l層的第p個特征映射的誤差項δ(l,p)的具體推導過程如下:
卷積層:當l+1層為卷積層時,假設特征映射凈輸入Z(l+1) ∈ RM'×N’×P,其中第p個特征映射凈輸入
其中W(l+1,p,d)和b(l+1,p) 為第l+1層的卷積核以及偏置。第l+1層中共有P×D個卷積核和P個偏置。
第l層的第d個特征映射的誤差項δ(l,d)的具體推導過程如下:
5.4 幾種典型的卷積神經網絡
本節介紹幾種廣泛使用的典型深層卷積神經網絡
5.4.1 LeNet-5
LeNet-5的網絡結構如下所示:
LeNet-5共有7層,接受輸入圖像大小為32×32 = 1024,輸出對應10個類別的得分。
5.4.2 AlexNet
AlexNet是第一個現代深度卷積網絡模型,其首次使用了很多現代深度卷積網絡的技術方法,比如使用GPU進行並行訓練,采用了ReLU作為非線性激活函數,使用Dropout防止過擬合,使用數據增強來提高模型准確率等。
AlexNet的結構如下圖所示,包括5個卷積層、3個匯聚層和3個全連接層。
5.4.3 Inception網絡
下圖給出了v1版本的Inception模塊結構,采用了4組平行的特征抽取方式,分別為1×1、3×3、5×5的卷積核3×3的最大匯聚。
Inception網絡有多個版本,其中最早的Inception v1版本就是非常著名的GoogLeNet。
GoogLeNet由9個Inception v1模塊和5個匯聚層以及其他一些卷積層和全連接層構成,總共為22層網絡,如下圖所示。
5.4.4 殘差網絡
殘差網絡通過給非線性的卷積層增加直連邊的方式來提高信息的傳播效率。
假設在一個深度網絡中,我們期望一個非線性單元(可以為一層或多層的卷積層)f(x;θ)去逼近一個目標函數為h(x).如果將目標函數拆分為兩部分:恆等函數x和殘差函數h(x) - x。
下圖給出了一個典型的殘差單元示例。殘差單元由多個級聯的(等寬)卷積層和一個跨層的直連邊組成,再經過ReLU激活后得到輸出。
5.5 其他卷積方式
5.5.1 轉置卷積
在一些任務中,我們需要將低維特征映射到高維特征,並且依然希望通過卷積操作來實現。
假設有一個高維向量為x ∈ Rd和一個低維向量為z∈Rp, p < d.如果用仿射變換來實現高維到低維的映射。
z = Wx
其中W ∈ Rp×d為轉換矩陣,我們可以很容易地通過轉置W來實現低維到高維的反向映射,即
x = WTz
卷積操作也可以寫為仿射變換的形式。假設一個5維向量x,經過大小為3的卷積核w = [w1,w2,w3]T進行卷積,得到3維向量z。卷積操作可以寫為
如果要實現3維向量z到5維向量x的映射,可以通過仿射矩陣的轉置來實現,即
5.5.2 空洞卷積
空洞卷積是一種不增加參數數量,同時增加輸出單元感受野的一種方法,也稱為膨脹卷積。空洞卷積通過給卷積核插入“空洞”來變相地增加其大小。如果在卷積核的每兩個元素之間插入D-1個空洞,卷積核的有效大小為
5.6 總結和深入閱讀