1. 程式人生 > 實用技巧 >常見深度學習模型總結

常見深度學習模型總結

lenet

Lenet 是最早的卷積神經網路之一,並且推動了深度學習領域的發展,最初是為手寫數字識別建立的網路。

LeNet分為卷積層塊和全連線層塊兩個部分。

卷積層塊裡的基本單位是卷積層後接最大池化層,卷積層用來識別影象裡的空間模式,如線條。

最大池化層則用來降低卷積層對位置的敏感性。有最大池化和平均池化兩種。卷積層塊由兩個這樣的基本單位重複堆疊構成。由於池化視窗與步幅形狀相同,池化視窗在輸入上每次滑動所覆蓋的區域互不重疊。卷積層塊的輸出形狀為(批量大小, 通道, 高, 寬)。當卷積層塊的輸出傳入全連線層塊時,全連線層塊會將小批量中每個樣本變平(flatten)。圖片中相鄰列之間的結構關係會被改變。

Alexnet

在Alexnet最重要的意義在於,通過8層卷積神經網路證明了機器自主學習的特徵可以優於人工選擇的特徵,這進一步降低了機器學習的難度。

(1) AlexNet包含8層變換,其中有5層卷積和2層全連線隱藏層,以及1個全連線輸出層。

(2)AlexNet將sigmoid啟用函式改成了ReLU。ReLU啟用函式在正區間的梯度恆為1,計算簡單,且不會出現梯度無限接近0 的情況。

(3)AlexNet通過丟棄法來控制全連線層的模型複雜度。隨機丟棄一部分神經元,降低複雜度,減少過擬合的可能。

VGG

VGG提出了可以通過重複使用簡單的基礎塊來構建深度模型的思路。VGG由卷積層+池化層組成。

VGG塊的組成規律是:連續使用數個相同的填充為1、視窗形狀為3×33\times 33×3的卷積層後接上一個步幅為2、視窗形狀為2×22\times 22×2的最大池化層。卷積層保持輸入的高和寬不變,而池化層則對其減半。VGG網路由卷積層模組後接全連線層模組構成。卷積層模組串聯數個vgg塊。

NIN

NIN提出了另外一個思路,即串聯多個由卷積層和“全連線”層構成的小網路來構建一個深層網路。這裡使用1*1卷積層代替全連線層。

除使用NiN塊以外,NiN還有一個設計與AlexNet顯著不同:NiN去掉了AlexNet最後的3個全連線層,取而代之地,NiN使用了輸出通道數等於標籤類別數的NiN塊,然後使用全域性平均池化層對每個通道中所有元素求平均並直接用於分類。這裡的全域性平均池化層即視窗形狀等於輸入空間維形狀的平均池化層。NiN的這個設計的好處是可以顯著減小模型引數尺寸,從而緩解過擬合。然而,該設計有時會造成獲得有效模型的訓練時間的增加。

NIN特別之處:

  • NiN重複使用由卷積層和代替全連線層的1×11\times 11×1卷積層構成的NiN塊來構建深層網路。
  • NiN去除了容易造成過擬合的全連線輸出層,而是將其替換成輸出通道數等於標籤類別數的NiN塊和全域性平均池化層。

Googlenet

GoogLeNet v1繼承了NIN的思想,將多個Inception塊和其他層串聯起來。其中Inception塊的通道數分配之比是在ImageNet資料集上通過大量的實驗得來的。Inception塊相當於一個有4條線路的子網路。它通過不同視窗形狀的卷積層和最大池化層來並行抽取資訊,並使用1×11\times 11×1卷積層減少通道數從而降低模型複雜度。

inception塊的結構

Inception塊相當於一個有4條線路的子網路。它通過不同視窗形狀的卷積層和最大池化層來並行抽取資訊,並使用11×1卷積層減少通道數從而降低模型複雜度。GoogLeNet在主體卷積部分中使用5個模組,每個模組之間使用步幅為2的3 3×3最大池化層來減小輸出高寬。

(1)第一模組使用一個64通道的7×7卷積層。

(2)第二模組使用2個卷積層:首先是64通道的1×1卷積層,然後是將通道增大3倍的3×3卷積層。

(3)第三模組串聯2個完整的Inception塊。

(4)第四個模組中線路的通道數分配和第三模組中的類似,首先含3×3卷積層的第二條線路輸出最多通道,其次是僅含1×1卷積層的第一條線路,之後是含5×5卷積層的第三條線路和含3×3最大池化層的第四條線路。

(5)第五模組有兩個Inception塊。其中每條線路的通道數的分配思路和第三、第四模組中的一致,只是在具體數值上有所不同。第五模組連線輸出層,因此模組使用全域性平均池化層以便全連線。

Resnet

解決了深度神經網路誤差較大的弊端。

在殘差塊中,輸入可通過跨層的資料線路更快地向前傳播。神經網路所需要的擬合的f(x)-x 更容易被擬合優化。因此resnet更有效。

模型結構:卷積+批量歸一化+啟用+池化+4個殘差塊(卷積+池化+啟用+卷積+池化+啟用)+全域性平均池化+全連線輸出

Densenet

DenseNet裡模組B的輸出不是像ResNet那樣和模組A的輸出相加,而是在通道維上連結。這樣模組A的輸出可以直接傳入模組B後面的層。在這個設計裡,模組A直接跟模組BBB後面的所有層連線在了一起。這也是它被稱為“稠密連線”的原因。DenseNet的主要構建模組是稠密塊(dense block)和過渡層(transition layer)。前者定義了輸入和輸出是如何連結的,後者則用來控制通道數,使之不過大。

Densenet結構:卷積+批量歸一化+啟用+池化+多個【稠密塊+過渡層】+批量歸一化+啟用+全域性歸一化+全連線層

稠密塊(多個層cov_block【歸一化+啟用+卷積】順次連線),過渡層(批量歸一化+啟用+卷積+池化)