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【歸一化+激活+卷積】順次連接),過渡層(批量歸一化+激活+卷積+池化)