深度學習之卷積神經網路
縱觀過去兩年,「深度學習」領域已經呈現出巨大發展勢頭。在計算機視覺領域,深度學習已經有了較大進展,其中卷積神經網路是運用最早和最廣泛的深度學習模型,所以今天就和大家分享下卷積神經網路的工作原理。
首先來聊聊什麼是深度學習?
什麼是深度學習
「Deep learningis abranch of machine learning based on a set of algorithms thatattempt to model highlevel abstractions in databy using a deep graph with multiple processing layers,composed of multiple linear and non-linear transformations.」這是維基百科對深度學習的一段描述,從這段描述中可知深度學習是機器學習的一個分支,主要目的是讓演算法能夠自主地從數據上學習到有用特徵的。
深度學習與傳統機器學習的區別
數據建模的一般通用流程主要包含四個主要步驟(對原始數據進行預加工,特徵抽取、特徵選取、特徵建模),如下圖所示:
數據建模流程
傳統機器學習當中的數據預處理、特徵抽取、特徵選擇是需要人工來確定的,而深度學習這些步驟全部交由演算法來自主選擇。這是深度學習與傳統機器學習的主要區別,也是深度學習的主要特性。
傳統機器學習
深度學習
神經網路
在介紹卷積神經網路之前,我們先來了解下神經網路的結構和訓練過程。
神經網路結構
神經網路,也稱人工神經網路(Artificial Neural Networks),它是一種模仿動物神經網路行為特徵,進行分散式並行信息處理的演算法數學模型。一個神經網路模型通常由一個輸入層、一個或多個隱藏層以及一個輸出層組成,如下圖所示:
其中輸入層用來接收數據輸入,隱藏層和輸出層的神經元(上圖中圓圈表示)是其上一層的神經元的輸出數據進行處理。單個神經元(不包括輸入層)的工作原理如下圖所示:
圖中所標字母w代表浮點數,稱為權重。進入神經元的每一個輸入(X)都與一個權重w相聯繫,正是這些權重將決定神經網路的整體活躍性。你現在暫時可以設想所有這些權重都被設置到了-1和1之間的一個隨機小數。因為權重可正可負,故能對與它關聯的輸入施加不同的影響,如果權重為正,就會有激發(excitory)作用,權重為負,則會有抑制(inhibitory)作用。
當輸入信號X進入神經元時,它們的值x將與它們對應的權重w相乘加上一個偏置b,作為圖中神經元的輸入I,其中大圓的『核』是一個函數,叫激勵函數f,它把I經過f重新映射產生函數的輸出也即神經元的輸出O,其計算公式如下:
如何訓練神經網路
當我們定義好一個神經網路的結構,神經元的激活函數f,已知訓練樣本數據以及訓練樣本的期望輸出,如何訓練這個神經網路呢?神經網路的訓練目標是使其網路輸出與我們的期望輸出儘可能保持一致(如我們給神經網路輸入一張貓的圖片時,我們希望神經網路的輸出能夠告訴我們這隻貓,而不是一隻狗)。其訓練過程如下圖所示:
首先隨機初始化連接權重和網路偏置(w,b),由訓練樣本輸入經過隱藏層和輸出層向後計算出網路的實際輸出,然後通過誤差計算公式計算出實際輸出與期望輸出之間的差距E。最後反向傳播誤差E,逐層調整連接權重和偏置的大小。
梯度下降
訓練過程中如何反向傳播誤差E來調整權重和偏置呢?方法就是梯度下降(Gradient Descent),其思想是隨機初始化一組參數(w,b),然後尋找一個能讓誤差函數E減小最多的參數組合(w,b),持續此過程直到誤差函數到達一個最小值。
當所有訓練樣本訓練結束後,最終可以得到一組訓練參數(w,b)。最後,當我們用測試數據來輸入到該神經網路模型中,就可以得到神經網路的預測輸出了。
卷積神經網路
在介紹完神經網路的結構和訓練流程後,我們來探討下什麼是卷積神經網路。卷積神經網路的基本結構如下圖所示:
從上圖可知,卷積神經網路與神經網路相比在結構上多了卷積層和子抽樣層。然而我們不禁要問,為什麼要加入這兩種層次結構?
局部模式+參數共享
試想下,如果我們把一幅圖片長寬分別為1000像素的圖片輸入到神經網路結構中,該神經網路第一層隱藏單元有100萬個神經元,如下圖所示
那麼從輸入層到第一層隱藏層的連接權重就多達1012個。如此龐大的參數導致 神經網路基本沒辦法訓練。所以圖像處理要想練成神經網路大法,必先減少參數加快速度。
一般認為人對外界的認知是從局部到全局的,而圖像的空間聯繫也是局部的像素聯繫較為緊密,而距離較遠的像素相關性則較弱。因而,每個神經元其實沒有必要對全局圖像進行感知,只需要對局部進行感知,然後在更高層將局部的信息綜合起來就得到了全局的信息。網路部分連通的思想,也是受啟發於生物學裡面的視覺系統結構。視覺皮層的神經元就是局部接受信息的(即這些神經元只響應某些特定區域的刺激)。所以卷積神經網路引入了圖像處理中的局部模式。試想下如果我們使上面的神經網路中的每個神經元只與圖像中的一個小區域(如10x10像素)相連,那麼連接權重就從1012個減少到108個。但其實這樣的話參數仍然過多,那麼就啟動第二級神器,即參數共享。如何再使每100個神經元的連接權重相等,即這100個神經元所提取的都是相同模式的特徵,那麼連接權重就從108個減少到10000個了。以上就是卷積神經網路的兩大特點:局部模型和參數共享,這樣就避免了神經網路的參數膨脹所帶來的困擾。
卷積層
圖像卷積操作是指對圖像區域(下圖中紅色框區域)和卷積核矩陣進行逐個元素相乘再求和的操作。如下圖所示:
一個3x3的卷積核在5x5的圖像上做滑動步長為1的卷積操作,最終會得到一個3x3的卷積特徵圖。如下圖所示:
卷積神經網路的卷積層的對輸入源圖像input根據不同的卷積核進行卷積操作,再加上偏置,經過激活函數進行通重新映射,得到一系列的卷積特徵圖C1,如下所示:
子抽樣層
由卷積操作過程可知,對一幅圖像進行卷積操作所提取的特徵圖是有信息冗餘的,故為了進一步對特徵進行降維和抽象,在卷積神經網路中結構中引入了子抽樣層。子抽樣即用圖像區域上的某個特定特徵的平均值 (或最大值)來替代該區域,如下圖所示:
每個相同顏色的區域用其區域的最大值來表示,故一個4x4圖像進行以2x2大小的區域進行子抽樣,最後得到一個2x2大小的子抽樣圖。
卷積神經網路的子抽樣層的操作即對卷積層的輸出特徵圖進行子抽樣,最終會得到一系列的子抽樣特徵圖,如下圖所示:
卷積神經網路的訓練過程
由卷積神經網路的結構可知,卷積神經網路是由一系列的卷積層和子抽樣層連接上神經網路的隱藏層和輸出層組成的。同樣,當我們定義好一個卷積神經網路的結構,神經元的激活函數,已知訓練樣本數據以及訓練樣本的期望輸出,如何訓練該卷積神經網路呢?
同樣地,我們初始化卷積層的卷積核、隱藏層輸出層當中的連接權重、網路當中的偏置值。對結定的訓練樣本,從前向後計算各層輸出,再根據誤差計算函數得到期望輸出與網路實際輸出之間的誤差E,然後誤差反向逐層傳播,調整輸出層隱藏層當中的連接權重、網路當中的偏置值以及卷積層的卷積核大小,直至所有訓練樣本訓練完畢。
輸出層->隱藏層->子抽樣層的誤差反向傳播過程
下圖中紅色框中的誤差反向傳播過程與神經網路訓練過程中的誤差傳播過程一致。輸出層->隱藏層->子抽樣層誤差反向傳播,更新層間連接權重與偏置。
子抽樣層->卷積層的誤差反向傳播過程
當前層為子抽樣層,上一層為卷積層,局部誤差如何從子抽樣層反向傳播回到卷積層?假設2x2下採樣層的局部誤差圖如下圖所示,
其中子抽樣規則為平均採樣方法,則卷積層的局部誤差就是子抽樣層各局部誤差的平均值(若為極大值採樣規則,前向計算時需要保存各個子抽樣層的採樣矩陣才能在誤差後向傳播時知道誤差怎麼反向傳播),如下圖所示:
卷積層->子抽樣層的誤差反向傳播過程
當前層為卷積層,上一層為子抽樣層,假設卷積層mapB是經過3*3的卷積核對子抽樣層mapA進行卷積後得到的,如下圖所示:
局部誤差如何從卷積層反射傳到子抽樣層?假設卷積層的對應的局部誤差圖如下圖所示:
卷積核矩陣為K=[k1,k2,k3,k4,k5,k6,k7,k8,k9]=[1,0,1,0,1,0,1,0,1],卷積層局部誤差矩陣D=[d1,d2,d3,d4,d5,d6,d7,d8,d9]=[0.2,0.1,0.1,0.1,0.2, 0.2, 0.2, 0.1, 0.2],結合梯度下降的求導的鏈式法則,則k1的調整步驟如下:
其中?為參數學習率,即每次參數沿梯度下降的方向調整的幅度大小。
至此,就全部介紹完了卷積神經網路的訓練過程,根據誤差反向傳播調整卷積核、連接權重、偏置。當訓練樣本庫訓練結束後,一個卷積神經網路模型就訓練完畢了。
總結
卷積神經網路在訓練過程中可不斷調整卷積核的大小,即深度學習當中自主選擇特徵的過程。由圖像卷積操作可知,不同的卷積核對提取不同種類圖像的特徵,這也反過來驗證了深度學習可以自主選擇數據特徵的特性。
其結構中卷積層和子抽樣層是實現卷積神經網路特徵提取功能的核心模塊。卷積神經網路模型通過採用梯度下降法最小化損失函數對網路中的權重參數逐層反向調節,通過大量的輸入和頻繁的迭代訓練提高網路的精度,從而得到輸入到輸出的映射。
在」深度學習搞一切視覺問題「的趨勢下,手寫數字的識別、圖像分類、圖像分割甚至連谷歌圍棋AlphaGo都中都看到了卷積神經網路的身影,就讓我們共同期待其在物體識別、語音識別、無人駕駛等AI領域的更cool的」變身「吧。


TAG:AI講堂 |