1. 程式人生 > >《Recent Advances in Convolutional Neural Networks》(一)

《Recent Advances in Convolutional Neural Networks》(一)

摘要——在過去的一些年裡,深度學習在許多類問題上都取得了很好的表現,例如視覺識別,語音識別和自然語言處理。在眾多不同型別的深度神經網路中,CNN是被最深入研究的網路。早些年,因為缺少訓練資料和電腦計算能力較差,很難在不過擬合的情況下訓練一個高效能的CNN。在註釋資料大量增長和GPUs快速發展的今天,湧現了許多關於CNN的研究,並在眾多工中取得了state-of-the-art的結果。本文,我們將提供一個廣泛的關於CNN最新進展的調查結果。
關鍵詞——CNN,深度學習

I.引言

CNN是一種常見的深度學習架構,受生物的自然視覺感知機制啟發而來。在1959年,Hubel & Wiesel 發現,動物視覺皮層細胞負責檢測光學訊號。受此啟發,在1980年,Kunihiko Fukushima提出了CNN的前身——neocognitron。在1990年,LeCun等人發表了一篇有重大影響力的文章,確立了CNN的現代結構,並在稍後的工作中對其進行了改進。他們提出了一種名為LeNet-5的多層人工神經網路,該網路可以分類手寫的數字。和其他的神經網路一樣,LeNet-5擁有許多層,且可以通過後向backpropagation演算法進行訓練。CNN能夠得出原始影象的有效表徵,這使得CNN能夠直接從原始畫素中,經過極少的預處理,識別視覺上面的規律。然而,由於當時缺乏大規模訓練資料,計算機的計算能力也跟不上,LeNet-5 對於複雜問題的處理結果並不理想。

2006年起,人們設計了很多方法,想要克服難以訓練深度CNN的困難。其中,最著名的是 Krizhevsky等人提出了一個經典的CNN 結構,並在影象識別任務上取得了重大突破。其方法的整體框架叫做AlexNet,與LeNet-5類似,但要更加深一些。AlexNet取得成功後,研究人員又提出了其他的完善方法,其中最著名的要數ZFNet,VGGNet,GoogleNet和ResNet這四種。從結構看,CNN 發展的一個方向就是層數變得更多,LSVRC 2015冠軍ResNet是AlexNet的20多倍,是VGGNet的8倍多。通過增加深度,網路便能夠利用增加的非線性得出目標函式的近似結構,同時得出更好的特性表徵。但是,這樣做同時也增加了網路的整體複雜程度,使網路變得難以優化,很容易過擬合。研究員提出了很多方法來解決這一問題。本文,我們將試著對最近的進展給一個全面的回顧且進行一些詳細的討論。

在下面的章節中,我們會介紹一些與CNN相關的研究工作。我們在第二節會先列出CNN的組成部分,然後在第三節介紹CNN不同方面的最近進展,包括卷積層、pooling層、啟用函式、損失函式、正則化和優化。接著在第四節引入快速計算技巧,並在第五節探討CNN在影象分類、物體檢測、物體跟蹤、姿態估計、文字檢測和識別、視覺顯著性檢測、運動識別和場景標記物體識別等不同方面的典型應用。最後,在第六節歸納總結。

II.CNN基礎組成部分

文獻裡有眾多不同的CNN架構。然而,他們的基本組成結構都非常相似。以著名的LeNet-5為例(見圖1),它由三種類型的層組成,分別為卷積、pooling和全連線層。

這裡寫圖片描述
圖1:LeNet-5網路的架構,適用於手寫數字分類

卷積層的目的是學習輸入資料的特徵表達形式。正如圖1所示,卷積層由多個卷積核組成,卷積核是用來計算不同的特徵圖的。特別是,一張特徵圖的每一個神經元與前一層一個區域的神經元相連線。這裡的區域指的是該神經元在前一層的感受野。新的特徵圖可以通過一個學習到的卷積核在輸入影象上第一次卷積得到,然後在卷積結果上使用元素級的非線性啟用函式。通過使用一些不同的卷積核,就可以獲得完整的新特徵圖。數學上,第l層卷積層的第k張特徵圖的區域(i,j)特徵值zli,j,k,可以通過下面公式計算得到:

zli,j,k=wlkTxli,j+blk(1)

wlkblk是第l層卷積層第k個濾波器的權重向量和偏置,x(i,j)l是第l層輸入區域(i,j)的中心。請注意,產生特徵圖zl:,:,k的核wlk是共享的。這樣的權值共享機制可以減少模型的複雜度,也使得網路更加容易訓練。啟用函式給CNN引入了非線性因素,使得多層網路可以更容易的檢測非線性特徵。讓a(∙)表示非線性啟用函式。卷積特徵zli,j,k的啟用值ali,j,k計算公式如下:

ali,j,k=a(zli,j,k)(2)

sigmoid、tanh和ReLU是典型的啟用函式。Pooling層的目的是通過降低特徵圖的解析度來實現平移不變性。它通常放在兩個卷積層之間。Pooling層的每一張特徵圖都和它對應的前一層卷積層的特徵圖連線。用pool(∙)來表示pooling函式,對於每一張特徵圖al:,:,k,我們有:

yli,j,k=pool(am,n,kl),(m,n)Rij(3)

Rij是區域(i,j)的區域性鄰域。典型的pooling操作為average pooling和max pooling。通過一些卷積層和pooling層的堆疊,我們可以提取更多的抽象特徵表現形式。

經過一些卷積層和pooling層後,會接著一或多層全連線層,它們是用來進行高層推理的。它們將前一層的全部神經元和當前層的全部神經元進行連線,產生全域性語義資訊。最後一層全連線層的輸出是輸出層的輸入。對於分類任務,softmax操作是最常用的。另一個常用的方法是SVM,它可以和CNN特徵結合來解決不同的分類任務。讓θ表示一個CNN的全部引數(例如:權重向量和偏置)。通過最小化特定任務的損失函式可以獲得該任務的最佳引數。假設我們有N個想要的input-output的關係{(xn,yn);n[i,...,N]}x(n)為第n個輸入資料,y(n)是它的對應目標標籤,o(n)是CNN的輸出。CNN的損失函式計算公式如下:

L=1Nn=1N(θ;y(n),o(n))(4)
這裡寫圖片描述
圖2:線性卷積層和mlpconv卷積層的對比

訓練一個CNN是一個全域性優化的問題。通過最小化損失函式,我們可以找到最適合的一組引數。隨機梯度下降法是優化CNN網路的最常用解決方法。