DenseNet算法詳解
算法背景
論文名稱:Densely Connected Convolutional Networks
論文鏈接:ttps://arxiv.org/abs/1608.06993
論文日期:2018.01.28
代碼:https://github.com/liuzhuang13/DenseNet
若在輸入層與輸出層之間包含更短的連接,那麼更深的神經網絡結構會訓練地更準確、更有效。因此在本文中,設計了DenseNet神經網絡結構,其中的每一層都以前饋方式連接到其他每一層。
之前的神經網絡有L層,就有L個連接,DenseNet網絡含有L(L+1)/2個連接。對於每一層,所有前面的預測層的feature map都作爲輸入。然後輸出的feature map作爲後面所有層的輸入。
優勢:
- 解決了梯度消失(vanishing-gradient)問題;
- 增強了特徵傳播;
- 增強了特徵複用;
- 大大地減少了參數量。
本文在CIFAR-10, CIFAR-100, SVHN與 ImageNet等數據集上進行了對比實驗,DenseNets的準確率有了很大的提升。
算法簡介
算法提出背景:
由於計算機硬件的進步,允許神經網絡結構變得更深。原始的LeNet5由5層組成,VGG由19層組成,去年的Highway Networks與ResNet超過了100層。
隨着CNN神經網絡結構變得更深,一個新的問題被提出:由於輸入或梯度的信息通過了許多層,當到達神經網絡的輸出時可能會造成梯度消失。
其他算法解決方案:
ResNets和Highway Networks通過恆等連接從一層繞過信號到下一層,隨機深度通過在訓練過程中隨機丟棄層來縮短ResNet,以便提供更好的信息和梯度流。
FractalNets重複將幾個平行層序列與不同數目的卷積塊組合,得到一個大的標稱深度,同時保持網絡中的多條短路徑。
這些方法都是爲了創造了從靠近輸入層的網絡層到靠近輸出層的網絡層的短路徑。
DenseNets算法:
本文提出了DenseNets,爲了確保網絡層之間最多的信息流,本文將所有的網絡層與其它前面的層相連,爲了保留前饋特性,每個層從前面的所有層獲得額外的輸入,並將自己的特徵映射傳遞到後續的所有層。
與ResNets相反,在特徵傳到網絡層之前,從不通過求和來組合它們;而是通過將它們連接起來組合它們。
兩大優勢:
-
DenseNet一個最大的優勢就是比傳統卷積神經網絡需要更少的參數,由於它不需要重複學習多餘的feature-maps。
傳統的前饋結構是從一層傳遞到另一層,每一層從前一層神經網絡讀到狀態,並且寫入下一層。會改變狀態,但是仍然傳遞需要保存的信息。ResNets通過加性恆等變換使這種信息保存顯式化。ResNets最近的變化表明,許多層的貢獻很小,實際上可以在訓練中隨機丟棄這些層。但是ResNets的參數量是非常大的,因爲每一層都有自己的權重。
DenseNet體系結構明確區分了添加到網絡的信息和保留的信息。
DenseNet層非常窄,每層只有12個filters, 只向網絡的“集體知識”添加一小部分特徵映射,並保持其餘特徵圖不變,最後的分類器根據網絡中的所有特徵映射進行決策。 -
除了更好的參數有效性,另一個優勢是它們改善了整個網絡的信息流和梯度, 會使訓練更簡單,每個網絡層都可以直接從損耗函數和原始輸入信號中訪問梯度,從而進行隱式深度監督。這有助於對更深層次的網絡體系結構進行訓練。密集的連接具有正則化效果,從而減少了對訓練集規模較小的任務的過擬合。
本文在四個數據集上進行對比實驗(CIFAR-10, CIFAR-100, SVHN與ImageNet),本模型比現有的算法有更少的參數,並且準確性優異。
相關工作
- 全連接層級聯結構。 一個級聯機構在二十世紀八十代被研究。但開創性工作是集中在以分層方式訓練的全連接層的多層感知器上。最近的基於全連接層的級聯結構被提出,在小樣本數據集上表現優秀,但是隻適用於幾百個參數的網絡層。
- 跳躍連接。 通過跳躍結構使用CNN結構中的多級特徵。導出了具有類似於本文中的的跨層連接的網絡的純理論框架。
- 使用旁路和門單元,例如Highway Networks。可端到端地訓練100多層。
- 隨機深度。ResNet使用隨機深度方法訓練1202層結構,隨機深度就是隨機丟棄任意深度的網絡結構。
- Inception module。GoogLeNet用不同尺寸的過濾器製作的級聯特徵圖。
DenseNets詳解
神經網絡結構:
DenseNet有三個dense blocks,中間使用convs與池化層進行連接,用於改變特徵映射的尺寸。
growth rate:k = 32, “conv” layer包含BN-ReLU-Conv。
Dense connectivity
第l層的輸出爲:
xl = Hl([x0, x1, . . . , xl-1])
Hl(·)代表非線性方程。
將l層之間的所有輸出進行矩陣拼接,作爲輸入進行計算。
Composite function
Hl(·)是符合方程,由三個連續的操作組成:
- batch normalization;
- ReLU;
- 3 × 3 convolution。
Pooling layers
用於改變feature map的尺寸。卷積神經網絡的一個改變feature map的重要部分就是下采樣,在本文中,爲了使用下采樣,將整個神經網絡分爲3個模塊。而模塊之間的卷積層與池化層被稱爲 transition layers。
transition layers:
- batch normalization layer;
- 1×1 convolutional layer;
- 2×2 average pooling layer
Growth ratel
若每一層都輸出k個feature map,那麼第l層有k0 +k ×(l−1)個feature map輸入。k0代表通道數。通常k = 12。k就growth rate。
DenseNet與傳統神經網絡最大的不同就是,DenseNet可以只有很窄的網絡層。
Bottleneck layers
由於每一層都輸出k個feature map,因此輸入的feature map就會非常多,因此需要用到Bottleneck layers。在每一個3×3 convolution之間加上1×1 convolution,用於減少feature map的輸入。
dense blocks結構變成 BN-ReLU-Conv(1×1)-BN-ReLU-Conv(3×3),也被稱爲 DenseNet-B,在本實驗中,1×1 convolution輸出4k feature-maps。
Compression
在transition layers進一步壓縮feature map的數量。將數量壓縮θ倍,0 <θ ≤1。也被稱爲DenseNet-C。在本實驗中,設置θ = 0.5 。
若bottleneck and transition layers均被使用,則被稱爲DenseNet-BC。
實驗
在CIFAR、SVHN、ImageNet三個數據集上進行對比實驗:
圖中代表錯誤率。
所有沒使用數據增強的DenseNets都使用dropout獲得。
當L = 190,k = 40時,在CIFAR數據集上的表現超出現有算法。
當L = 100,k = 24時,在SVHN數據集上的表現超出現有算法。
當DenseNet-BC網絡層數超出250時,表現不會有很大增長。甚至會造成過擬合。
DenseNets對比實驗:
通常當L與k增大時,算法的表現更優。當DenseNet-BC網絡層數超出250時,表現不會有很大增長。甚至會造成過擬合。
DenseNets 與 ResNets top-1 error rates的對比實驗:
DenseNets的參數比ResNets更少,DenseNets在transition layers使用到了 bottleneck structure與dimension reduction,從而參數更有效。
250-layer model 僅僅含有15.3M個參數。
像素(s,l)的顏色編碼dense block內連接卷積層s到l的加權平均l1範數(歸一化輸入特徵映射的數量)。
結論
DenseNets有更少的參數以及更少的計算。
Densenet集成了恆等映射、深度監督和多樣化深度的特性。由於其緊湊的內部表示和減少的特徵冗餘,Densenet可能是一個很好的特徵提取器。