在瞭解了深度卷積神經網路的基本架構之後,本章主要介紹卷積神經網路中的 一些重要部件(或模組),正是這些部件的層層堆疊使得卷積神經網路可以直接 從原始資料(raw data)中學習其特徵表示並完成最終任務。
一、“端到端”思想
深度學習的一個重要思想即“端到端”的學習方式(end-to-end manner),屬表示學習(representation learning)的一種。這是深度學習區別於其他機器學習演算法的最重要的一個方面。其他機器學習演算法,如特徵選擇演算法(feature selection)、分類器(classifier)演算法、整合學習(ensemble learning)演算法等,均假設樣本特徵表示是給定的,並在此基礎上設計具體的機器學習演算法。在深度學習時代之前,樣本表示基本都使用人工特徵(hand-crafted feature),但“巧婦難為無米之炊”,實際上人工特徵的優劣往往很大程度決定了最終的任務精度。這樣便催生了一種特殊的機器學習分支——特徵工程(feature engineering)。特徵工程在資料探勘的工業界應用以及計算機視覺應用中都是深度學習時代之前非常重要和關鍵的環節。
特別是計算機視覺領域,在深度學習之前,針對影像、視訊等物件的表 示可謂“百花齊放、百家爭鳴”。僅拿影像表示(image representation)舉例,從表示範圍可將其分為全域性特徵描述子(global )和區域性特徵
(local representation),而單說區域性特徵描述子就有數十種之多,如SIFT、PCA-SIFT、SURF、HOG、steerable filter⋯⋯同時,不同區域性描述子擅長的任務又不盡相同,一些適用於邊緣檢測、一些適用於紋理識別,這便使得實際應用中挑選合適的特徵描述子成為一件令人頭疼的麻煩事。對此,甚至有研究者於年在相關領域國際頂級期刊TPAMI上發表實驗性綜述“A Performance Evaluation of Local Descript” 來系統性的理解不同區域性特徵描述子的作用,至今已獲得近8000次引用。而在深度學習普及之後,人工特徵已逐漸被表示學習根據任務自動需求“學到”的特徵表示所取代。
更重要的是,過去解決一個人工智慧問題(以影像識別為例)往往通過分治法將其分解為預處理、特徵提取與選擇、分類器設計等若干步驟。分治法的動機是將影像識別的母問題分解為簡單、可控且清晰的若干小的子問題。不過分步解決子問題時,儘管可在子問題上得到最優解,但子問題上的最優並不意味著就能得到全域性問題的最後解。對此,深度學習則為我們提供了另一種正規化(paradigm)即“端到端”學習方式,整個學習流程並不進行人為的子問題劃分,而是完全交給深度學習模型直接學習從原始輸入到期望輸出的對映。相比分治策略,“端到端”的學習方式具有協同增效的優勢,有更大可能獲得全域性最優解。
對深度模型而言,其輸入資料是未經任何人為加工的原始樣本形式,後續則是堆疊在輸入層上的眾多操作層。這些操作層整體可看作一個 複雜的函式f cnn,最終損失函式由資料損失(data loss)和模型引數的正則化損失(regularization loss)共同組成,深度模型的訓練則在最終損失驅動下對模型進行引數更新並將誤差反向傳播至網路各層。模型的訓練過程可以簡單抽象為從原始資料向最終目標的直接“擬合”,而中間的這些部件正起到了將原始資料對映為特徵(特徵學習)隨後再對映為樣本標記(即目標任務,如分類)的作用。下面我們就來看看組成f cnn 的各個基本組成部件。
如圖2.1所示:
二、網路符號定義
同上一章類似,在此用三維張量 xl ∈ RHl×Wl×Dl
表示卷積神經網路第 l 層的輸入,用三元組(il,jl,dl)
來指示該張量對應第 il 行,第 jl 列,第 dl 通道(channel)位置的元素,其中 0 ≤ il < Hl,0 ≤ jl < Wl,0 ≤ dl < Dl。不過,一般在工程實踐中,由於採用了mini-batch訓練策略,網路第 l 層輸入通常是一個四維張量,即xl ∈ RHl×Wl×Dl×N,其中 N 為mini-batch每一批的樣本數。
以 N = 1 為例,xl 經過第 l 層操作處理後可得 xl+1,為了後面章節書寫方便, 特將此簡寫為 y 以作為第 l 層對應的輸出,即 y = xl+1 ∈ RHl+1×Wl+1×Dl+1
。如圖2.2所示
三、卷積層
卷積層(convolution layer)是卷積神經網路中的基礎操作,甚至在網路最後起分類作用的全連線層在工程實現時也是由卷積操作替代的。
1、什麼是卷積?
卷積運算實際是分析數學中的一種運算方式,在卷積神經網路中通常是僅涉及 離散卷積的情形。下面以 Dl = 1 的情形為例介紹二維場景的卷積操作。假設輸入影像(輸入資料)為如圖2.3中右側的 5 × 5 矩陣,其對應的卷積核(亦稱卷積引數,convolution或convolution)為一個 3 × 3 的矩陣。同時,假定卷積操作時每做一次卷積,卷積核移動一個畫素位置,即卷積步長 (stride)為1。
第一次卷積操作從影像 (0, 0)畫素開始,由卷積核中引數與對應位置影像像 素逐位相乘後累加作為一次卷積操作結果,即 1×1+2×0+3×1+6×0+ 7 × 1 + 8 × 0 + 9 × 1 + 8 × 0 + 7 × 1 = 1 + 3 + 7 + 9 + 7 = 27,如圖2.4a所示。 類似地,在步長為1時,如圖2.4b至圖2.4d所示,卷積核按照步長大小在輸入 影像上從左至右自上而下依次將卷積操作進行下去,最終輸出 3 × 3 大小的卷積特徵,同時該結果將作為下一層操作的輸入。
與之類似,若三維情形下的卷積層 l 的輸入張量為 xl ∈ RHl×Wl×Dl,該層 卷積核為 fl ∈ RH×W×Dl。三維輸入時卷積操作實際只是將二維卷積擴充套件到了 對應位置的所有通道上(即Dl),最終將一次卷積處理的所有 HWDl 個元素
求和作為該位置卷積結果。如圖2.5所示。
進一步地,若類似 fl 這樣的卷積核有 D 個,則在同一個位置上可得到
1×1×1×D維度的卷積輸出,而D即為第l+1層特徵xl+1 的通道數Dl+1。 形式化的卷積操作可表示為如下公式2.1:
其中,(il+1, jl+1) 為卷積結果的位置座標,滿足下式:
需指出的是,式2.1中的 fi,j,dl,d 可視作學習到的權重(weight),可以發現該項權重對不同位置的所有輸入都是相同的,這便是卷積層“權值共享”(weight sharing)特性。除此之外,通常還會在yil+1,jl+1,d 上加入偏置項(bias term) bd。在誤差反向傳播時可針對該層權重和偏置項分別設定隨機梯度下降的學習率。當然根據實際問題需要,也可以將某層偏置項設定為全 ,或將學習率設定為0,以起到固定該層偏置或權重的作用。此外,卷積操作中有兩個重要的超引數(hyper parameters):卷積核大小(filter size)和卷積步長(stride)。合適的超引數設定會對最終模型帶來理想的效能提升。
2、卷積操作的作用
可以看出卷積是一種區域性操作,通過一定大小的卷積核作用於區域性影像區域獲 得影像的區域性資訊。本節以三種邊緣卷積核(亦可稱為濾波器)來說明卷積神 經網路中卷積操作的作用。如圖2.6,我們在原圖上分別作用整體邊緣濾波器、 橫向邊緣濾波器和縱向邊緣濾波器,這三種濾波器(卷積核)分別為式 中的 3×3大小卷積核Ke,Kh和Kv:
試想,若原影像素 (x, y) 處可能存在物體邊緣,則其四周 (x−1, y),(x+1, y), (x, y − 1),(x, y + 1) 處畫素值應與 (x, y) 處有顯著差異。此時,如作用以整體 邊緣濾波器 Ke ,可消除四周畫素值差異小的影像區域而保留顯著差異區域,以此可檢測出物體邊緣資訊。同理,類似 Kh和 Kv3 的橫向、縱向邊緣濾波器可 分別保留橫向、縱向的邊緣資訊。
事實上,卷積網路中的卷積核引數是通過網路訓練學出的,除了可以學到類 似的橫向、縱向邊緣濾波器,還可以學到任意角度的邊緣濾波器。當然,不僅 如此,檢測顏色、形狀、紋理等等眾多基本模式(pattern)的濾波器(卷積核) 都可以包含在一個足夠複雜的深層卷積神經網路中。通過“組合” 這些濾波器(卷積核)以及隨著網路後續操作的進行,基本而一般的模式會逐漸被抽象為具有高層語義的“概念”表示,並以此對應到具體的樣本類別。頗有“盲人摸象” 後,將各自結果集大成之意。
四、匯合層
本節討論第 l 層操作為匯合(pooling)時的情況。通常使用的匯合操作為平均值匯合(average-pooling)和最大值匯合(max-pooling),需要指出的是,同卷積層操作不同,匯合層不包含需要學習的引數。使用時僅需指定匯合型別(average或max等)、匯合操作的核大小(kernel size)和匯合操作的步長(stride)等超引數即可。
1、什麼是匯合?
遵循上一節的記號,第 l 層匯合核可表示為 pl ∈ RH×Wl×Dl。平均值(最大值) 匯合在每次操作時,將匯合核覆蓋區域中所有值的平均值(最大值)作為匯合結果,即:
其中,0 ≤ il+1 < Hl+1,0 ≤ jl+1 < Wl+1,0 ≤ d < Dl+1 = Dl。
除了最常用的上述兩種匯合操作外,隨機匯合(stochastic-pooling)則介於二者之間。隨機匯合操作非常簡單,只需對輸入資料中的元素按照一定概率值大小隨機選擇,並不像最大值匯合那樣永遠只取那個最大值元素。對隨機匯合而言,元素值大的響應(activation)被選中的概率也大,反之易然。可以說,在全域性意義上,隨機匯合與平均值匯合近似;在區域性意義上,則服從最大值匯合的準則。
圖2.7 為 2 × 2 大小、步長為1的最大值匯合操作示例。
2、匯合操作的作用
在上圖的例子中可以發現,匯合操作後的結果相比其輸入降小了,其實匯合操 作實際上就是一種“降取樣”(down-sampling)操作。另一方面,匯合也看成 是一個用 p-範數(p-norm)作為非線性對映的“卷積”操作,特別的,當 p 趨近正無窮時就是最常見的最大值匯合。
匯合層的引入是仿照人的視覺系統對視覺輸入物件進行降維(降取樣)和抽
象。在卷積神經網路過去的工作中,研究者普遍認為匯合層有如下三種功效:
-
特徵不變性(feature invariant)。匯合操作使模型更關注是否存在某些特徵而不是特徵具體的位置。可看作是一種很強的先驗,使特徵學習包含某種程度自由度,能容忍一些特徵微小的位移。
-
特徵降維。由於匯合操作的降取樣作用,匯合結果中的一個元素對應於原 輸入資料的一個子區域(sub-region),因此匯合相當於在空間範圍內做了維度約減(spatially dimension reduction),從而使模型可以抽取更廣範圍的特徵。同時減小了下一層輸入大小,進而減小計算量和引數個數。
-
在一定程度防止過擬合(overfitting),更方便優化。
不過,匯合操作並不是卷積神經網路必須的元件或操作。近期,德國著名高校弗賴堡大學(University of Freiburg)的研究者提出用一種特殊的卷積操作(即,stride convolutional layer)來代替匯合層實現降取樣,進而構建一個只含卷積操作的網路(all convolution nets),其實驗結果顯示這種改造的網路可以達到、甚至超過傳統卷積神經網路(卷積層匯合層交替)的分類精度。
五、啟用函式
啟用函式(activation function)層又稱非線性對映(non-linearity mapping)層, 顧名思義,啟用函式的引入為的是增加整個網路的表達能力(即非線性)。否則, 若干線性操作層的堆疊仍然只能起到線性對映的作用,無法形成複雜的函式。 在實際使用中,有多達十幾種啟用函式可供選擇。本節以Sigmoid型啟用函式和ReLU函式為例,介紹涉及啟用函式的若干基本概念和問題。
直觀上,啟用函式模擬了生物神經元特性:接受一組輸入訊號併產生輸出。 在神經科學中,生物神經元通常有一個閾值,當神經元所獲得的輸入訊號累積效果超過了該閾值,神經元就被啟用而處於興奮狀態;否則處於抑制狀態。在人工神經網路中,因Sigmoid型函式可以模擬這一生物過程,從而在神經網路 發展歷史程式中曾處於相當重要的地位。
Sigmoid型函式也稱Logistic函式:
其函式形狀如圖2.8a所示。很明顯能看出,經過sigmoid型函式作用後,輸出 響應的值域被壓縮到 [0, 1] 之間,而0對應了生物神經元的“抑制狀態”, 則 恰好對應了“興奮狀態”。不過再深入的觀察還能發現在sigmoid函式兩端,對 於大於 (或小於 −5)的值無論多大(或多小)都會壓縮到 (或0)。如此便 帶來一個嚴重問題,即梯度的“飽和效應”(saturation effect)。對照Sigmoid型函式的梯度圖(圖2.8b),大於5(或小於 −5)部分的梯度接近0,這會導致在誤差反向傳播過程中導數處於該區域的誤差將很難甚至根本無法傳遞至前層,進而導致整個網路無法訓練(導數為0將無法更新網路引數)。此外,在引數初始化的時候還需特別注意,要避免初始化引數直接將輸出值域帶入這一區域:一種可能的情形是當初始化引數過大時,將直接引發梯度飽和效應而無法訓練。
為了避免梯度飽和效應的發生,Nair和Hinton於2010年將修正線性單元 (Rectified Linear Unit,簡稱ReLU)引入神經網路。ReLU函式是目前深 度卷積神經網路中最為常用的啟用函式之一。另外,根據ReLU函式改進的其他啟用函式也展示出更好的效能。
函式實際上是一個分段函式,其定義為:
由圖2.9可見,ReLU函式的梯度在 x ≥ 0 時為 ,反之為0。對 x ≥ 0 部 分完全消除了sigmoid型函式的梯度飽和效應。同時,在實驗中還發現相比sigmoid型函式,ReLU函式有助於隨機梯度下降方法收斂,收斂速度約快 倍左右。正是由於ReLU函式的這些優質特性,ReLU函式已成為目前卷 積神經網路及其他深度學習模型(如遞迴神經網路RNN等)啟用函式的首選之一。
六、全連線層
全連線層(fully connected layers)在整個卷積神經網路中起到“分類器”的作 用。如果說卷積層、匯合層和啟用函式層等操作是將原始資料對映到隱層特徵 空間的話,全連線層則起到將學到的特徵表示對映到樣本的標記空間的作用。 在實際使用中,全連線層可由卷積操作實現:對前層是全連線的全連線層可以 轉化為卷積核為 1 × 1 的卷積;而前層是卷積層的全連線層可以轉化為卷積核 為 h × w 的全域性卷積,h 和 w 分別為前層卷積輸出結果的高和寬。以經典的VGG-16網路模型 為例,對於 224 × 224 × 3 的影像輸入,最後一層卷積 層(指VGG-16中的pool)可得輸出為 7 × 7 × 512 的特徵張量,若後層是一 層含4096個神經元的全連線層時,則可用卷積核為 7 × 7 × 512 × 4096 的全域性 卷積來實現這一全連線運算過程,其中該卷積核具體引數如下:
經過此卷積操作後可得1 × 1 × 4096的輸出。如需再次疊加一個含2048個神 經元的全連線層,可設定以下引數的卷積層操作。
七、目標函式
剛才提到全連線層是將網路特徵對映到樣本的標記空間做出預測,目標函式的 作用則用來衡量該預測值與真實樣本標記之間的誤差。在當下的卷積神經網路 中,交叉熵損失函式和 l2損失函式分別是分類問題和迴歸問題中最為常用的目 標函式。同時,越來越多針對不同問題特性的目標函式被提出供選擇。