從AlexNet到殘差網路,理解卷積神經網路的不同架構

路雪發表於2017-12-18

卷積神經網路對視覺識別任務很有幫助。優秀的卷積神經網路具有數百萬個引數和大量隱藏層。事實上,一個錯誤的經驗法則是:「隱藏層的數量越多,卷積神經網路越好」。流行的卷積神經網路有 AlexNet、VGG、Inception、ResNet。這些網路為什麼效能如此好?它們是如何設計的呢?為什麼它們的結構是現在這樣?本文給出了一個簡單而全面的概述。

這些問題的答案並不簡單,無法全部涵蓋在一篇部落格中。在本文中,我將討論這些問題。網路架構設計是一個複雜的過程,需要時間學習,需要更多時間去實驗。但是,首先我們需要全面地瞭解它:


卷積神經網路為什麼能夠打敗傳統的計算機視覺網路?


從AlexNet到殘差網路,理解卷積神經網路的不同架構

影象分類任務需要把給定影象分類成一種預定義類別。傳統的影象分類流程包括兩個模組:特徵提取和分類。

特徵提取包括從原始畫素值中提取出高階別的資訊,以捕捉涉及類別之間區別的資訊。特徵提取通過無監督的方式完成,影象的類別與從畫素中提取出的資訊無關。GIST、HOG、SIFT、LBP 是其中一些傳統和廣泛使用的特徵。特徵提取完成之後,則需要利用影象及其標籤訓練分類模組。分類模組包括 SVM、Logistic 迴歸、隨機森林、決策樹等。

這一流程的問題在於特徵提取無法根據類和影象進行調整。因此如果選擇的特徵缺少識別類別的表徵,則分類模型的準確率會下降,不管使用的是何種分類策略。使用傳統流程的頂尖方法通常採用的方法是使用多個特徵提取器,先集合它們獲取更好的特徵。但是這種方法需要大量啟發式和手動工作來根據領域調整引數,以達到良好的準確率。「良好」在這裡的意思是接近人類水平。這就是構建優秀的計算機視覺系統(如 OCR、人臉校驗、影象分類器、目標檢測器等)需要數年的原因,這些系統可以使用傳統的計算機視覺網路處理實際應用中遇到的各種資料。我們曾經僅花費 6 周時間就用 ConvNet 為一家公司輸出了更好的結果,而如果使用傳統的計算機視覺網路則需要將近一年。

這種方法的另一個問題是它與人類學習識別物體的方式完全不同。嬰兒剛出生時無法感知周圍環境,但是隨著他不斷進步和處理資料,他學會了識別物體。這是深度學習背後的哲學,不存在內建硬編碼特徵提取器。它將提取和分類模組整合進一個系統,它通過辨別不同影象的表徵進行提取,根據監督資料進行分類。

這樣的系統包括多層感知機,即多層神經元互相緊密相連的神經網路。深度 vanilla 神經網路就具備大量引數,因為缺乏充分的訓練樣本,它訓練出的系統會發生模型過擬合的情況。但是如果使用卷積神經網路,從頭訓練網路的任務可以使用 ImageNet 等大型資料集。其背後的原因是神經元之間的引數共享和卷積層中的稀疏連線。在卷積操作中,一層的神經元僅與輸入神經元存在區域性連線,2-D 特徵圖共享引數集。

從AlexNet到殘差網路,理解卷積神經網路的不同架構

為了理解 ConvNet 的設計哲學,我們需要先了解:ConvNet 的目標是什麼?

A. 準確率


如果你在構建一個智慧機器,那麼儘可能高的準確率絕對是關鍵。這裡需要說明:準確率不僅依賴於網路,還依賴於訓練資料量。因此,這些網路需要在標準資料集 ImageNet 上進行對比。

ImageNet 專案仍在進行中,目前有來自 21841 個不同類別的 14,197,122 張影象。自 2010 年以來,ImageNet 舉辦了視覺識別領域的年度競賽賽事,為參賽者提供來自 1000 個不同類別的 120 萬張影象。因此,每個網路架構的準確率建立在這 1200 萬張影象之上。

B. 計算


大多數 ConvNet 對記憶體和計算的要求很高,尤其是訓練。這是個很大的問題。類似地,如果你想部署一個移動端本地執行的模型,那麼最終訓練模型的規模也是你必須重點考慮的問題。和大家想的一樣,要實現更好的準確率,網路需要的計算量更大。因此,在準確率和計算量之間通常有一個權衡。

此外,還有很多其他因素,如易訓練性、網路的泛化能力等。下面介紹的網路都是最常用的,這些網路以先後釋出的順序排列,它們的準確率也是越來越好。

AlexNet


該架構是第一批採用比傳統方法更大的步幅來提升 ImageNet 分類準確率的深層網路之一。它包括 5 個卷積層、3 個全連線層,如下圖所示。

從AlexNet到殘差網路,理解卷積神經網路的不同架構

AlexNet 由 Alex Krizhevsky 提出,使用 ReLu 處理非線性的部分,而非傳統神經網路早期的標準——Tanh 或 Sigmoid 函式。ReLu 的公式為:f(x) = max(0,x)。

ReLu 與 Sigmoid 相比,其優勢在於訓練速度更快,因為 Sigmoid 的導數在飽和區變得很小,導致權重幾乎沒有得到更新(見下圖)。這種情況就是梯度消失問題。

在該網路中,ReLu 層在每個卷積和全連線層的後面。

從AlexNet到殘差網路,理解卷積神經網路的不同架構

該架構解決的另一個問題是在每個全連線層後面使用一個 Dropout 層,從而減少過擬合。Dropout 層設定的概率為 (p),表示每個神經元連線到後層神經元的概率為 1-p。該架構以概率 p 隨機關閉啟用函式,如下圖所示。

從AlexNet到殘差網路,理解卷積神經網路的不同架構


Dropout 為什麼奏效?


Dropout 背後的原理與模型整合類似。由於 Dropout 層的作用,關閉的不同神經元集呈現一種不同的架構,並行訓練所有這些不同架構,賦予每個子集權重,權重的總和為 1。如果 Dropout 連線了 n 個神經元,則子集架構的數量是 2^n。因此,預測是對所有這些模型的整合取平均。Dropout 有用的另一個原因是:由於神經元是隨機選擇的,因此它們更有可能避免產生共適應(co-adaptation),從而產生獨立於其他神經元的有意義的特徵。

VGG16


該架構由牛津大學的 VGG group 提出。它通過相繼使用多個 3x3 卷積核大小的濾波器取代大尺寸卷積核濾波器(第一個和第二個卷積層分別有 11 個和 5 個濾波器)實現了優於 AlexNet 的效能。給定感受野(輸出所依賴的輸入影象有效區域大小),利用多個堆疊的更小尺寸的卷積核取得的效果優於使用更大尺寸的卷積核,因為多個非線性層會增加網路的深度,從而允許其學習更復雜的特徵,並且計算成本更低。

例如,三個相繼的 3x3 卷積核濾波器,步幅為 1,其感受野大小為 7,但其包含的引數數量為 3*(9C^2),而卷積核大小為 7 的濾波器引數數量為 49C^2。這裡,我們假設層的輸入和輸出通道數量都為 C。此外,3X3 卷積核可以保留影象更精細的特徵。下表展示了該網路的架構。

從AlexNet到殘差網路,理解卷積神經網路的不同架構

你可以看到,VGG-D 中存在將相同大小的濾波器應用多次產生的 block,用於提取更復雜、更具代表性的特徵。自 VGG 之後,block/模組(module)的概念逐漸變得普及。

VGG 卷積層後面是 3 個全連線層。該網路的寬度開始的值很小,只有 64,每經過一次子取樣/池化層就增加 1 倍。VGG 在 ImageNet 上達到了 92.3 % 的 top-5 準確率。

GoogLeNet/Inception


雖然 VGG 在 ImageNet 資料集上取得了很高的準確率,但它的計算開銷太大(無論是記憶體佔用還是計算時間)。由於卷積層的寬度太大,VGG 的效率被降低。

例如,在 VGG 中一個具備 3x3 卷積核的卷積層擁有 512 個輸入通道和 512 個輸出通道,計算量級為 9x512x512。

對於一個位置的一次卷積運算,如果每個輸出通道都和所有的輸入通道相連線,我們稱之為密集連線架構。建立 GoogLeNet 的基本思想是,深層網路中的大部分啟用函式運算要麼是不必要的(值為零),要麼是冗餘的(由於相互作用)。因此最高效的深度網路架構的啟用函式之間的連線應該是稀疏的,這意味著上述例子中不應該令所有的 512 個輸出通道和所有的 512 個輸入通道相連。目前已經開發出了剪枝技術可以將網路修剪成稀疏權重/連線。但 BLAS 或 CuBlas(基於 GPU 的 CUDA)包中用於稀疏矩陣相乘的核並不是最優的,這使得其運算速度甚至比對應的密集網路更加緩慢。因此 GoogLeNet 設計了一個 inception 模組,使用普通的密集結構逼近一個稀疏 CNN(如下圖所示)。如前所述,卷積層中僅有少數神經元是有效的,因此特定卷積核大小的卷積濾波器數或者寬度將保持小值。並且,它還使用了不同大小的卷積核來捕捉不同規模的細節特徵(5x5、3x3、1x1)。

該模組的另一個重要特點是它擁有一個所謂的瓶頸層(圖中的 1x1 卷積),它可以大幅減少計算開銷。

以 GoogLeNet 的第一個 inception 模組為例,它有 192 個輸入通道、128 個 3x3 卷積核濾波器、32 個 5x5 卷積核濾波器。5x5 卷積核濾波器的計算量級為 25x32x192,而當繼續深入網路時,隨著網路的深度和 5x5 卷積核濾波器數量的增加,計算量的增加是爆炸性的。為了避免這種情況,inception 模組在應用更大的卷積核之前使用 1x1 卷積以降低輸入通道的維度。因此在第一個 inception 模組中,模組的輸入首先饋送至具備 16 個濾波器的 1x1 卷積,然後再饋送至 5x5 卷積。從而,inception 模組將計算量減少為 16x192+25x32x16。所有這些變化使得網路可以擁有很大的寬度和深度,同時計算開銷大大降低。

GoogLeNet 做出的另一個改變是,使用一個簡單的全域性平均池化層(global average pooling,對 2D 特徵圖的通道值取平均)取代網路末端的全連線層(在最後的卷積層之後)。這大大地減少了引數的總數。以 AlexNet 為例,它的全連線層包含了大約 90% 的引數。由於 GoogLeNet 網路的寬度和深度都很大,因此即使移去全連線層也不影響準確率。它在 ImageNet 上取得了 93.3% 的 top-5 準確率,並且執行速度比 VGG 快得多。

從AlexNet到殘差網路,理解卷積神經網路的不同架構

殘差網路


按我們目前所看到的,增加深度應該能夠提升網路的準確率,同時也會導致過擬合。但增加深度的問題在於,在網路末端通過預測值和真值比較得到的權重修改訊號,到了之前的層會變得很微弱。這基本上意味著網路之前的層幾乎沒有進行學習。這被稱為梯度消失現象。而另一個問題在於,需要在巨大的引數空間中執行優化,隨意增加層數會導致更大的訓練誤差。殘差網路通過使用殘差模型模組構建網路,從而訓練此類深層網路(如下圖所示)。這稱為退化(degradation)問題。對於其工作原理可做如下解釋:

從AlexNet到殘差網路,理解卷積神經網路的不同架構

假設一個網路 A,訓練誤差為 x。在 A 的頂部新增幾個層構建網路 B,這些層的引數對於 A 的輸出沒有影響,我們稱這些層為 C。這意味著新網路 B 的訓練誤差也是 x。網路 B 的訓練誤差不應高於 A,如果出現 B 的訓練誤差高於 A 的情況,則使用新增的層 C 學習恆等對映(對輸入沒有影響)並不是一個平凡問題。為了解決這個問題,上圖中的模組在輸入和輸出之間新增了一個直連路徑,以直接執行對映。這時,C 只需要學習已有的輸入特徵就可以了。由於 C 只學習殘差,該模組叫作殘差模組。

此外,和 GoogLeNet 類似,它也在分類層之後連線了一個全域性平均池化層。通過這些變化,ResNet 可以學習 152 個層的深層網路。它可以獲得比 VGGNet 和 GoogLeNet 更高的準確率,同時計算效率比 VGGNet 更高。ResNet-152 可以取得 95.51% 的 top-5 準確率。

該網路的架構和 VGGNet 類似,主要包括 3x3 的卷積核。因此可以在 VGGNet 的基礎上在層之間新增捷徑連線以構建一個殘差網路。下圖展示了從 VGG-19 的部分早期層合成殘差網路的過程。

論文 4 中的實驗展示了殘差網路的威力。普通的 34 層網路相比普通的 18 層網路有更高的驗證誤差。而同樣的 34 層網路轉換為殘差網路之後,相比 18 層的殘差網路,訓練誤差要小得多。

從AlexNet到殘差網路,理解卷積神經網路的不同架構

希望這篇文章能為你提供設計神經網路架構的一個好的視角。

原文連結:http://cv-tricks.com/cnn/understand-resnet-alexnet-vgg-inception/

相關文章